|
  |
Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани |
|
|
|
24.9.2007, 15:17
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Значится так  Я говорил о том, что в dcl-овском списке сделать множественный выбор проблематично, а не о невозможности создания списка как такового. Хотя Alaspher сделал так> #301: Примерный вид окна, как я его вижу (навскидку, без контроля и проверок, и уж тем более без обработки), сделанный в VB - см.картинку. Возможно (да, скорее всего, так и будет), понадобится более расширенный вариант выбора И/ИЛИ --- Добавлено: А что там с именами блоков не так?
Сообщение отредактировал kpblc - 24.9.2007, 15:19
|
|
|
|
Гость_Azarko aka VVA_*
|
24.9.2007, 16:19
|
Guest Forum

|
Здрасьте, это VVA. Правда под этим ником кто-то уже есть, поэтому Azarko aka VVA. Не особо читая ветку с самого начала ( это про списки блоков, слоев, типов линий, стилей и пр.) Есть замечательная функция Michael'a Puckett'a Код ;;;============================================ ;;;Written By Michael Puckett. ;;;Список элементов символьных таблиц АвтоКАДа ;;; - s- имя таблицы ;;;Пример - список всех слоев - (setq all_layers (tablelist "LAYER")) ;;;(setq all_layers (tablelist "LAYER")) ;;; ;;;AutoLisp should return something like this : ;;;Start Coding Here (defun tablelist (s / d r) (while (setq d (tblnext s (null d))) (setq r (cons (cdr (assoc 2 d)) r)) ) ;while ) ;defun Соответвсвенно Код ;Список блоков (acad_strlsort(tablelist "BLOCK")) ;Список солев без слоев вн. ссылок (acad_strlsort(vl-remove-if-not 'snvalid (tablelist "layer"))) ;Список типов линий без типов линий вн. ссылок (acad_strlsort(vl-remove-if-not 'snvalid (tablelist "LTYPE")))
|
|
|
|
|
24.9.2007, 16:48
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Привет  Хотя я и понимаю, что мне пора затыкаться, тем не менее мелкий вопрос: а как будут обрабатываться динамические блоки? Просто проверить сейчас нет никакой возможности - дите железку оккупировало
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 16:50
|
Guest Forum

|
О-О-О! Ну наконец-то! Kpblc, я думаю, что тот чел, который озаботится чего-то включить, не должен за один заход включать все, что ему в голову взбредет. Или набор имен блоков, но один только слой, или одно имя, но несколько слоев. Так проще фильтровать, а то прийдется к каждому имени блока, или типу примитива присваивать список слоев. Кучеряво однако.
VVA, я тут уже высказался по поводу дублирования свойства "Длинна" атрибутом "Длинна" ты выскажись на эту тему пожалуйста. Вот и по позиционированию и нумерации тоже свое мнение озвуч. Мое мнение - надо иметь оба атрибута. Как у тебя со свойствами дин. блоков - любов, или не?
|
|
|
|
Гость_Azarko aka VVA_*
|
24.9.2007, 16:53
|
Guest Forum

|
Для блока из той темы, откуда ушел supermax Цитата _$ (acad_strlsort(tablelist "BLOCK")) ("*U2" "*U3" "*U4" "*U5" "*U6" "*U7" "Stoyka")
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 16:56
|
Guest Forum

|
VVA, а вот с типом примитивов что-то не ку. А так вообще да, попроще кодец-та, попроще.
|
|
|
|
Гость_Azarko aka VVA_*
|
24.9.2007, 17:00
|
Guest Forum

|
>supermax Цитата VVA, я тут уже высказался по поводу дублирования свойства "Длинна" атрибутом "Длинна" ты выскажись на эту тему пожалуйста Мой пост из темы на dwg.ru Цитата Кстати, я согласен с Supermax в том, что для считывания длины незачем свойство Distanse переносить в атрибут Dlina. Из лиспа оно отлично читается и заносится (можно и "подравнять" блоки) Но уточню: если это (свойства "Длинна" атрибутом "Длинна") не продиктовано иными соображениями. Цитата Вот и по позиционированию и нумерации тоже свое мнение озвуч. Ну так это, напо позиционировать и нумеровать. (читать тему сначала времени нет) Цитата Как у тебя со свойствами дин. блоков Могем причесывать (равнять), могем не равнять. Пока ждал регистрации я тебе письмо черканул. Посмотри
|
|
|
|
|
24.9.2007, 17:03
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Во, а c точки зрения пользователя - там один динамический блок. Соответственно имя должно быть одно. Или нет?
|
|
|
|
Гость_Azarko aka VVA_*
|
24.9.2007, 17:07
|
Guest Forum

|
Цитата(Supermax @ 24.9.2007, 13:56) [snapback]169072[/snapback] VVA, а вот с типом примитивов что-то не ку. А так вообще да, попроще кодец-та, попроще. Этот код возвращает список символьных таблиц Автокада (см. help по tblnext) По типам примитива - это надо лезть в описание блока (тут надо как у Алексея) Цитата Во, а c точки зрения пользователя - там один динамический блок. Соответственно имя должно быть одно. Или нет? Я исходил из поста supermax № 298 Цитата *Unnn - оставь
|
|
|
|
|
24.9.2007, 17:59
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Вот интересно, кто-нибудь сможет определить "навскидку", что вот этот дин.блок - *U123, а воон тот - *U62145 :?
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 18:40
|
Guest Forum

|
Я могу, у меня спец. кнопень есть. Давишь и видишь имя (и не только). А так можно сделать кнопень "Все *Unnn". Ну как дин. блоки включать, однако? Выключать могем, а включать только через "Включить все"? Не крутовато однако?
|
|
|
|
Гость_Azarko aka VVA_*
|
24.9.2007, 18:41
|
Guest Forum

|
Цитата(kpblc @ 24.9.2007, 14:59) [snapback]169095[/snapback] Вот интересно, кто-нибудь сможет определить "навскидку", что вот этот дин.блок - *U123, а воон тот - *U62145 :? Только создатель (в смысле всего, а не чертежа или блока) Список блоков Код (acad_strlsort(vl-remove-if '(lambda(x)(=(substr x 1 2)"*U"))(tablelist "BLOCK")))
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 19:14
|
Guest Forum

|
Ой всего навалилось! Даже вечерами колготят! Так, если имя блока *Unn, то надо считывать его оригинальное имя и склеивать с *Unnn. Типа "*U123 - Кирпич кандовый, безразмерный" и в таком виде считывая до первого пробела учитывать. Так как на счет выбора группы имен и одного для них имени слоя, или группы слоев и одного имени блока или типа примитива? Есть тут логика или нет?
|
|
|
|
|
24.9.2007, 19:28
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
>#312: Код (defun dynblockon (name on / adoc) ;| * Включает или выключает видимость дин.блоков. * Параметры вызова: name эффективное имя блока. nil -> обрабатывать все on включать (t) или выключать (nil) видимость |; (vl-load-com) (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))) );_ end of vla-startundomark (if (not name) (setq name "*") );_ end of if (vlax-for blk_def (vla-get-blocks adoc) (vlax-for ent blk_def (if (and (vlax-property-available-p ent 'isdynamicblock) (vlax-property-available-p ent 'effectivename) (equal (vla-get-isdynamicblock ent) :vlax-true) (wcmatch (strcase (vla-get-effectivename ent)) (strcase name)) );_ end of and (vla-put-visible ent (if on :vlax-true :vlax-false );_ end of if );_ end of vla-put-visible );_ end of if );_ end of vlax-for );_ end of vlax-for (vla-regen adoc acallviewports) (vla-endundomark adoc) (princ) );_ end of defun
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 20:04
|
Guest Forum

|
A-a-a! Cлюшай, дарагой, Твой макрос (1-й) все чудесно выключает, а все дин блоки включать совсем не надо. Вот простой пример: (можно сказать свежий, пресвежий) сделал я теплотрассу, а мне захотелось посмотреть где лежат трубы такой-то длинны, или где стоят краны со штоком такой-то длинны. Я ткнул в ближайший такой кран и увидел его *Unnn, выключил все, а затем включил только с эти именем. Бац, и я вижу только эти краны или трубы. Конечно тут я лукавлю немного. Я с начала очень долго буду ползать по модели искать хоть одну трубу с интересующей меня длинной, но если я включу трубы по оригинальному имени, то включаться все трубы всех длин, а это мне как-то никчему. Особо отмечу то, что дин. блоки будут даже такие, в которых ничего не меняется, просто свойствами прописаны часть параметров изделия, например наименование, марка бетона и сайт производителя. Атрибуты естественно есть, но вот марку поменял и бац - *Unnn уже другой. Я тут между делом блок ФБС делаю 3D динамический со всей номенклатурой по ГОСТу. Вот наставил я этих блоков, а заказчик у меня спрашивает, а где ты вот такие-то применил? А я ему - тык и все видно. Блок-то имеет одно оригинальное имя и отличаются ФБС-ки 12-е от 9-ых или 24-ых только *Unnn.
|
|
|
|
|
24.9.2007, 20:16
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну блин. Я пока код писал ты успел пост вбить. Вот второй вариант: Код (defun dynblockon2 (name on / adoc) ;| * Включает или выключает видимость дин.блоков. * Параметры вызова: name указатель на вхождение блока. nil -> обрабатывать все on включать (t) или выключать (nil) видимость * Примеры вызова: (dynblockon2 nil t) ; показать все дин.блоки (dynblockon2 (car(entsel)) nil); скрыть блоки, аналогичные указанному (dynblockon2 (car(entsel)) t); показать блоки, аналогичные указанному |; (vl-load-com) (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))) );_ end of vla-startundomark (setq name (cond ((= (type name) 'ename) (cdr (assoc 2 (entget name)))) ((= (type name) 'str) name) ((= (type name) 'vla-object) (vla-get-name name)) (t nil) );_ end of cond );_ end of setq (vlax-for blk_def (vla-get-blocks adoc) (vlax-for ent blk_def (if (and (vlax-property-available-p ent 'isdynamicblock) (vlax-property-available-p ent 'effectivename) (equal (vla-get-isdynamicblock ent) :vlax-true) (if name (equal (vla-get-name ent) name) t );_ end of if );_ end of and (vla-put-visible ent (if on :vlax-true :vlax-false );_ end of if );_ end of vla-put-visible );_ end of if );_ end of vlax-for );_ end of vlax-for (vla-regen adoc acallviewports) (vla-endundomark adoc) (princ) );_ end of defun
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 20:25
|
Guest Forum

|
Добавлю, самое лучшее, это соединять оригинальное имя с техническим. Тут и понятно все, и легко отделить. Боюсь я господа, что это уже будет не макрос по включению\выключению деталей, а система анализа и управления свойствами видимости. Да, надо делать на имена блоков два окна. Первое - выбор блока (с участием Ctrl и Shift) Второе - вспомогательное окно возможно появляющееся по нажатию доп. кнопки в котором в одной половине список блоков, но без возможности множественного выбора, а во второй половине - перечень свойсв указанного блока. Атрибуты в каждом блоке разные (номера, позиции) поэтому их не показываем, хотя и можно с указанием типа *VARIES*. Особенно я заценил твой юмор в плане Цитата (dynblockon2 (car(entsel)) t); показать блоки, аналогичные указанному Это как же мне его указать, если они все выключены?
|
|
|
|
|
24.9.2007, 20:28
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
А кто сказал, что "все"? Ты мог сначала отключить видимость какой-то области (например, "выключить невыделенное"), а потом понадобилось показать все вхождения блоков, аналогичные тыркнутому в невыключенной области. Так что тут не юмор, а жестокая правда жизни
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 20:37
|
Guest Forum

|
Так, "Выключить избранное" это уже пятая кнопка. Ее мы еще не обсуждали. Хотя если написать окна, то они и для "выключить избранное" сгодятся. Убиваем, так сказать, двух зайцев. Окно с демонстрацией свойсв и атрибутов блока делаем? И атрибуты точно надо, или ну их?
А по поводу "правды жизни" скажу: Я скопировал трубу, второй вариант вытянул и размножил. Получилось два типа блоков. запустил "(dynblockon2 (car(entsel)) nil); скрыть блоки, аналогичные указанному", ткнул в размноженную и у меня осталась на экране одна труба. Я сказал "ГУД" в сысле хорошо, работает и перешел к тестированию третьей команды. Посмотрел на нее, потом на экран, потом опять на нее, потом опять на экран и стал ржать.
Сообщение отредактировал Supermax - 24.9.2007, 20:44
|
|
|
|
|
24.9.2007, 20:40
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Не очень понял вопрос. Имеется в виду для аналога быстрого выбора для выключения? Да бог его знает. Если это делать, окно разрастись может до невероятных размеров и работать с ним будет достаточно трудно. Я не прав?
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 20:52
|
Guest Forum

|
Kpblc, я гений! Не надо делать окно со свойствами! Надо просто продублировать окно с именами блоков, и тыкая в него выбирать объект в модели (включать select). При открытом окне Properties в нем будут видны свойства указанного блока. Читай хоть до рези в глазах. Дешево и сердито.
|
|
|
|
|
24.9.2007, 21:02
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ага, то есть: а) открыть окно свойств, если оно закрыто (какая системная переменная за это отвечает - навскидку не помню). Дополнительный минус: окно свойств может быть Docked, что может вызывать дополнительные трудности. Чтобы его положение или состояние поменять, надо использовать немодальные диалоги, что сделать на dcl невозможно в принципе. б) создать временный набор, и передавать (sssetfirst ss ss) в ком.строку (для варианта .NET или VBA-окна), с предварительным снятием выбора; в) в случае выхода из функции восстановить пользовательский выбор (правда, вопрос - надо ли); г) выбранный в окне объект (блок) может лежать не в текущем пространстве, а, например, быть вложенным в другой блок или внешнюю ссылку (кстати, коды последние никак это не отслеживают). Ну или в самом элементарном случае - находиться в другом листе. Следовательно, окно свойств на него распространяться не будет; Я горю желанием не остудить твой творческий пыл, а просто рассмотреть максимум возможных вариантов. И предупредить их появление.
|
|
|
|
Гость_Supermax_*
|
24.9.2007, 21:23
|
Guest Forum

|
а) - Ну с первым это просто Command: _properties и усе, так сказать. г) - С блоками входящими внутрь других блоков - а не надо лезть в Blocks, надо в ModelSpace. Там только верхушки айзбергов торчат. а) - Не понимаю, о каком положении и состоянии ты печешся? в) - ясен пень, не надо! Какого, что-то включать там, где нас нет? Вот если ты сумеешь выключать элементы в редакторе блоков так, чтобы они при этом обратно не включались, то это будет надо. Но что-то я сильно сомневаюсь в этом, поскольку там в сам редактор забита функция "обнуления" этой фишки.
Все. Я пошел домой. Завтра продолжим. (а как не охота уходить!)
P.S. Твой макрос выключает даже динамические свойства в редакторе, правда они потом опять включенными оказываются как и элементы.
Сообщение отредактировал Supermax - 24.9.2007, 21:26
|
|
|
|
|
24.9.2007, 21:28
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Поскольку я не умею отследить, "внутри блока" или "не внутри блока" выполняется редактирование, могу только посоветовать попробовать выполнить Код (vla-update (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-effectivename (car (entsel "\nтолько что редактировавшийся блок : "))))) На бОльшее у меня фантазии не хватат  Может, VVA поможет?
Сообщение отредактировал kpblc - 24.9.2007, 21:29
|
|
|
|
Гость_Supermax_*
|
25.9.2007, 10:05
|
Guest Forum

|
Новый день - новые бзики. Во первых, мы должны работать только с элементами на включенных слоях. Это закон. Если слой выключили, это означает, что там выключать уже ничего не надо и наоборот, то есть включать там ничего не надо. Даже если мы там чего-то включим, мы этого все равно не увидим. От сюда вывод, что выбранные элементы на включенных слоях находящиеся в состоянии "выкл" должны быть включены абсолютно во всех включенных слоях. Если чел. не хочет включать элементы на каком-то слое, он должен этот слой выключить. Таким образом мы используем существующий сервис послойного разбития модели и его инструментарий для локализации наших действий.
|
|
|
|
|
25.9.2007, 10:11
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Я б оставил... Слои слишком глобальная штука для этой задачи. ИМХО, конечно.
|
|
|
|
Гость_Supermax_*
|
25.9.2007, 10:18
|
Guest Forum

|
Что оставил?
Добавлю. Если происходит выбор того, что надо включить, то в списке должны быть не все блоки, а только те, которые выключены и находятся на включенных слоях. Если делать выбор того, что надо выключить, то наоборот, показывать надо только включенные блоки и элементы.
Сообщение отредактировал Supermax - 25.9.2007, 10:20
|
|
|
|
|
25.9.2007, 10:21
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Оставил выключение видимости с фильтрацией по слоям. Например, "выключить видимость элементов типа line и lightweightpolyline, лежащих на слоях 0, АР-стены и ОВ-трубы-оси".
|
|
|
|
Гость_Supermax_*
|
25.9.2007, 10:25
|
Guest Forum

|
Представляешь, купил Демиса Русоса лицензионный диск, с книжкой и весь со стороны записи по кругу исписанный его именем, а он зараза, установил мне 2-ой дисковод (хотя в компе только один) и проигрываться при этом не хочет. Как ни пытаюсь, а снести этот мнимый дисковод не получается.
Так эти слои выключены или включены? Если они выключены, то какого там ковыряться?
|
|
|
|
|
25.9.2007, 10:36
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну вот, как всегда. Обрабатывать то, исключать се... Сформировать списки элементов с различными критериями никогда не поздно.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqvybpdW
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума
|