Значится так 

Я говорил о том, что в dcl-овском списке сделать множественный выбор проблематично, а не о невозможности создания списка как такового. Хотя Alaspher сделал 
так> #301: Примерный вид окна, как я его вижу (навскидку, без контроля и проверок, и уж тем более без обработки), сделанный в VB - см.картинку.
Возможно (да, скорее всего, так и будет), понадобится более расширенный вариант выбора И/ИЛИ
---
Добавлено: А что там с именами блоков не так?
 
 
 
  Azarko aka VVA
  24.9.2007, 16:19
  
 
  Здрасьте, это 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")))
  
 
 
  Привет 

 Хотя я и понимаю, что мне пора затыкаться, тем не менее мелкий вопрос: а как будут обрабатываться динамические блоки? Просто проверить сейчас нет никакой возможности - дите железку оккупировало 
 
  
 
  Supermax
  24.9.2007, 16:50
  
 
  О-О-О! Ну наконец-то!
Kpblc, я думаю, что тот чел, который озаботится чего-то включить, не должен за один заход включать все, что ему в голову взбредет. Или набор имен блоков, но один только слой, или одно имя, но несколько слоев. Так проще фильтровать, а то прийдется к каждому имени блока, или типу примитива присваивать список слоев. Кучеряво однако.
VVA, я тут уже высказался по поводу дублирования свойства "Длинна" атрибутом "Длинна" ты выскажись на эту тему пожалуйста. Вот и по позиционированию и нумерации тоже свое мнение озвуч. Мое мнение - надо иметь оба атрибута. 
Как у тебя со свойствами дин. блоков - любов, или не?
 
 
 
  Azarko aka VVA
  24.9.2007, 16:53
  
 
  Для блока из той темы, откуда ушел supermax
Цитата
_$ (acad_strlsort(tablelist "BLOCK"))
("*U2" "*U3" "*U4" "*U5" "*U6" "*U7" "Stoyka")
  
 
  Supermax
  24.9.2007, 16:56
  
 
  VVA, а вот с типом примитивов что-то не ку. А так вообще да, попроще кодец-та, попроще.
 
 
 
  Azarko aka VVA
  24.9.2007, 17:00
  
 
  >supermax
Цитата
VVA, я тут уже высказался по поводу дублирования свойства "Длинна" атрибутом "Длинна" ты выскажись на эту тему пожалуйста
Мой пост из темы на dwg.ru
Цитата
Кстати, я согласен с Supermax в том, что для считывания длины незачем свойство Distanse переносить в атрибут Dlina. Из лиспа оно отлично читается и заносится (можно и "подравнять" блоки)
Но уточню: если это (свойства "Длинна" атрибутом "Длинна") не продиктовано иными соображениями.
Цитата
Вот и по позиционированию и нумерации тоже свое мнение озвуч.
Ну так это, напо позиционировать и нумеровать. (читать тему сначала времени нет)
Цитата
Как у тебя со свойствами дин. блоков
Могем причесывать (равнять), могем не равнять. Пока ждал регистрации я тебе письмо черканул. Посмотри
 
 
 
 
  Во, а c точки зрения пользователя - там один динамический блок. Соответственно имя должно быть одно. Или нет?
 
 
 
  Azarko aka VVA
  24.9.2007, 17:07
  
 
  Цитата(Supermax @ 24.9.2007, 13:56) [snapback]169072[/snapback]
VVA, а вот с типом примитивов что-то не ку. А так вообще да, попроще кодец-та, попроще.
Этот код возвращает список символьных таблиц Автокада (см. help по 
tblnext)
По типам примитива - это надо лезть в описание блока (тут надо как у Алексея)
Цитата
Во, а c точки зрения пользователя - там один динамический блок. Соответственно имя должно быть одно. Или нет?
Я исходил из поста supermax № 298
Цитата
*Unnn - оставь
  
 
 
 
  Вот интересно, кто-нибудь сможет определить "навскидку", что вот этот дин.блок - *U123, а воон тот - *U62145 :?
 
 
 
  Supermax
  24.9.2007, 18:40
  
 
  Я могу, у меня спец. кнопень есть. Давишь и видишь имя (и не только). А так можно сделать кнопень "Все *Unnn". Ну как дин. блоки включать, однако? Выключать могем, а включать только через "Включить все"? Не крутовато однако?
 
 
 
  Azarko aka VVA
  24.9.2007, 18:41
  
 
  Цитата(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
  
 
  Ой всего навалилось! Даже вечерами колготят! 
Так, если имя блока *Unn, то надо считывать его оригинальное имя и склеивать с *Unnn. Типа "*U123 - Кирпич кандовый, безразмерный" и в таком виде считывая до первого пробела учитывать.
Так как на счет выбора группы имен и одного для них имени слоя, или группы слоев и одного имени блока или типа примитива? Есть тут логика или нет?
 
 
 
 
  >#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
  
 
  A-a-a! Cлюшай, дарагой, Твой макрос (1-й) все чудесно выключает, а все дин блоки включать совсем не надо. Вот простой пример: (можно сказать свежий, пресвежий) сделал я теплотрассу, а мне захотелось посмотреть где лежат трубы такой-то длинны, или где стоят краны со штоком такой-то длинны. Я ткнул в ближайший такой кран и увидел его *Unnn, выключил все, а затем включил только с эти именем. Бац, и я вижу только эти краны или трубы. Конечно тут я лукавлю немного. Я с начала очень долго буду ползать по модели искать хоть одну трубу с интересующей меня длинной, но если я включу трубы по оригинальному имени, то включаться все трубы всех длин, а это мне как-то никчему. 
Особо отмечу то, что дин. блоки будут даже такие, в которых ничего не меняется, просто свойствами прописаны часть параметров изделия, например наименование, марка бетона и сайт производителя. Атрибуты естественно есть, но вот марку поменял и бац - *Unnn уже другой.
Я тут между делом блок ФБС делаю 3D динамический со всей номенклатурой по ГОСТу. Вот наставил я этих блоков, а заказчик у меня спрашивает, а где ты вот такие-то применил? А я ему - тык и все видно. Блок-то имеет одно оригинальное имя и отличаются ФБС-ки 12-е от 9-ых или 24-ых только *Unnn.
 
 
 
 
  Ну блин. Я пока код писал ты успел пост вбить. Вот второй вариант:
Код
(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
  
 
  Добавлю, самое лучшее, это соединять оригинальное имя с техническим. Тут и понятно все, и легко отделить. 
Боюсь я господа, что это уже будет не макрос по включению\выключению деталей, а система анализа и управления свойствами видимости. 
Да, надо делать на имена блоков два окна. 
Первое - выбор блока (с участием Ctrl и Shift)
Второе - вспомогательное окно возможно появляющееся по нажатию доп. кнопки в котором в одной половине список блоков, но без возможности множественного выбора, а во второй половине - перечень свойсв указанного блока. Атрибуты в каждом блоке разные (номера, позиции) поэтому их не показываем, хотя и можно с указанием типа *VARIES*.
Особенно я заценил твой юмор в плане 
Цитата
(dynblockon2 (car(entsel)) t); показать блоки, аналогичные указанному
Это как же мне его указать, если они все выключены?
 
 
 
 
  А кто сказал, что "все"? Ты мог сначала отключить видимость какой-то области (например, "выключить невыделенное"), а потом понадобилось показать все вхождения блоков, аналогичные тыркнутому в невыключенной области. Так что тут не юмор, а жестокая правда жизни 
 
  
 
  Supermax
  24.9.2007, 20:37
  
 
  Так, "Выключить избранное" это уже пятая кнопка. Ее мы еще не обсуждали. Хотя если написать окна, то они и для "выключить избранное" сгодятся. Убиваем, так сказать, двух зайцев.
Окно с демонстрацией свойсв и атрибутов блока делаем? И атрибуты точно надо, или ну их?
А по поводу "правды жизни" скажу: Я скопировал трубу, второй вариант вытянул и размножил. Получилось два типа блоков. запустил "(dynblockon2 (car(entsel)) nil); скрыть блоки, аналогичные указанному", ткнул в размноженную и у меня осталась на экране одна труба. Я сказал "ГУД" в сысле хорошо, работает и перешел к тестированию третьей команды. Посмотрел на нее, потом на экран, потом опять на нее, потом опять на экран и стал ржать.
 
 
 
 
  Не очень понял вопрос. Имеется в виду для аналога быстрого выбора для выключения? Да бог его знает. Если это делать, окно разрастись может до невероятных размеров и работать с ним будет достаточно трудно. Я не прав?
 
 
 
  Supermax
  24.9.2007, 20:52
  
 
  Kpblc, я гений! Не надо делать окно со свойствами! Надо просто продублировать окно с именами блоков, и тыкая в него выбирать объект в модели (включать select). При открытом окне Properties в нем будут видны свойства указанного блока. Читай хоть до рези в глазах. Дешево и сердито.
 
 
 
 
  Ага, то есть:
а) открыть окно свойств, если оно закрыто (какая системная переменная за это отвечает - навскидку не помню). Дополнительный минус: окно свойств может быть Docked, что может вызывать дополнительные трудности. Чтобы его положение или состояние поменять, надо использовать немодальные диалоги, что сделать на dcl невозможно в принципе.
б) создать временный набор, и передавать (sssetfirst ss ss) в ком.строку (для варианта .NET или VBA-окна), с предварительным снятием выбора;
в) в случае выхода из функции восстановить пользовательский выбор (правда, вопрос - надо ли);
г) выбранный в окне объект (блок) может лежать не в текущем пространстве, а, например, быть вложенным в другой блок или внешнюю ссылку (кстати, коды последние никак это не отслеживают). Ну или в самом элементарном случае - находиться в другом листе. Следовательно, окно свойств на него распространяться не будет;
Я горю желанием не остудить твой творческий пыл, а просто рассмотреть максимум возможных вариантов. И предупредить их появление.
 
 
 
  Supermax
  24.9.2007, 21:23
  
 
  а) - Ну с первым это просто Command: _properties и усе, так сказать.
г) - С блоками входящими внутрь других блоков - а не надо лезть в Blocks, надо в ModelSpace. Там только верхушки айзбергов торчат. 
а) - Не понимаю, о каком положении и состоянии ты печешся?
в) - ясен пень, не надо!
Какого, что-то включать там, где нас нет? Вот если ты сумеешь выключать элементы в редакторе блоков так, чтобы они при этом обратно не включались, то это будет надо. Но что-то я сильно сомневаюсь в этом, поскольку там в сам редактор забита функция "обнуления" этой фишки.
Все. Я пошел домой. Завтра продолжим.
(а как не охота уходить!)
P.S. Твой макрос выключает даже динамические свойства в редакторе, правда они потом опять включенными оказываются как и элементы.
 
 
 
 
  Поскольку я не умею отследить, "внутри блока" или "не внутри блока" выполняется редактирование, могу только посоветовать попробовать выполнить 
Код
(vla-update (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-effectivename (car (entsel "\nтолько что редактировавшийся блок : ")))))
На бОльшее у меня фантазии не хватат 

 Может, VVA поможет?
 
 
 
  Supermax
  25.9.2007, 10:05
  
 
  Новый день - новые бзики.
Во первых, мы должны работать только с элементами на включенных слоях. Это закон. Если слой выключили, это означает, что там выключать уже ничего не надо и наоборот, то есть включать там ничего не надо. Даже если мы там чего-то включим, мы этого все равно не увидим. От сюда вывод, что выбранные элементы  на включенных слоях находящиеся в состоянии "выкл" должны быть включены абсолютно во всех включенных слоях. Если чел. не хочет включать элементы на каком-то слое, он должен этот слой выключить. Таким образом мы используем существующий сервис послойного разбития модели и его инструментарий для локализации наших действий.
 
 
 
 
  Я б оставил... Слои слишком глобальная штука для этой задачи. ИМХО, конечно.
 
 
 
  Supermax
  25.9.2007, 10:18
  
 
  Что оставил?
Добавлю. Если происходит выбор того, что надо включить, то в списке должны быть не все блоки, а только те, которые выключены и находятся на включенных слоях. Если делать выбор того, что надо выключить, то наоборот, показывать надо только включенные блоки и элементы.
 
 
 
 
  Оставил выключение видимости с фильтрацией по слоям. Например, "выключить видимость элементов типа line и lightweightpolyline, лежащих на слоях 0, АР-стены и ОВ-трубы-оси".
 
 
 
  Supermax
  25.9.2007, 10:25
  
 
  Представляешь, купил Демиса Русоса лицензионный диск, с книжкой и весь со стороны записи по кругу исписанный его именем, а он зараза, установил мне 2-ой дисковод (хотя в компе только один) и проигрываться при этом не хочет. Как ни пытаюсь, а снести этот мнимый дисковод не получается.
Так эти слои выключены или включены? Если они выключены, то какого там ковыряться?
 
 
 
 
  Ну вот, как всегда. Обрабатывать то, исключать се... Сформировать списки элементов с различными критериями никогда не поздно.
 
 
 
  Supermax
  25.9.2007, 17:03
  
 
  Вот блин! Сказали в 13-00 привезут назад, я как последний поц быстренько все сделал, а они гады меня взяли и там бросили. Пришлось своим ходом обратно на работу переться.
Для того, чтобы я взялся писать окна, мне надо понять что на них ставить. Я до сих пор этого до конца не понимаю. Ну к примеру первое окно это выбор "блоки" или "типы примитивов" или "слои" или "выбрать все". Выбрали. Нажали к примеру блоки - выпало разбитое на две части окно, в левой половине имена блоков, а в правой имена включенных слоев. Под обеими половинками кнопки "выбрать все". Чтобы снимать выбор достаточно клацнйть без контрола или шифта любую позицию.  Далее ОК/Cancel.  Нажали ОК - в какой форме должны быть предствлены результаты выбора? Несколько слоев и несколько блоков. Я  к примеру создаю три переменных, две из которых всегда равны nil. Та, что не nil, содержит в себе список из двух списков, первый - список слоев, второй - список имен блоков. Годится?
 
 
 
  Supermax
  25.9.2007, 21:47
  
 
  Вот изучайте.
Блок ФБС динамический
Файл изменен.
Опять немного починил (дырку залатал в графике)
 
 
 
 
  Всем привет! Панели пока обождут, не до них, хотя запал не потух.
Kpblc, и VVA, а не вкурсе ли вы случайно, как сделать так, чтобы формула определяла длинну линии? Вставить формулу в текст или атрибут могем, а как ее подвязать на динамические свойства не знаем. Мне надо передать результат в Linear Stretch. Обратный процесс ясен вполне.
Мне надо, чтобы геометрические размеры объекта определялись расчетом.
 
 
 
 
  Еще один каверзный вопрос. Как Dimension выключить точки. Вот я выключил все линии, а там, где они примыкают к объекту остались точки. Мне надо оставить только текст, а эти точки я не заказывал. Я где-то встречал, но не помню где.
 
 
 
 
  > #334 : Если формула (точнее, длина или любой иной параметр объекта) зависит от другого объекта acad'a, прописывай объектный реактор. Подробнее - в книге Н.Н.Полещука по разработке и адаптации.
> #335 : Отключай слой Defpoints.
 
 
 
  Supermax
  27.9.2007, 10:08
  
 
  А я уже подумал, что что-то случилось. Вчера целый день меня тишиной пытали.
Да, про AutoLisp базару нет.  С ним хоть на Марс, хоть на Луну. А вот без него...
Defpoints не помогает. 
Как тогда в объект встроить лисп программу? Чтобы каждый раз, как этот объект обрабатывается она запускалась.
Вот я формулу из текста (в смысле на сером фоне цифирки) через буфер, в значение Linear Stretch вставил, оно там засветилось вполне адекватно, только когда нажимаю Enter - сбрасывает зараза. Может Лиспом ее туда заколотить? Через Лисп и атрибуты с пробелами катят, так может и тут покатит?
Вт бы этот объектный реактор в сам объект встроить...
 
 
 
  Supermax
  27.9.2007, 10:25
  
 
  И вот зараза, точек от размеров почему-то не 4 а 3. Левой со стороны размера всегда нет (или это только у меня?).
 
 
 
  Supermax
  27.9.2007, 10:37
  
 
  Kpblc, вот в свойствах элемента много значений требуют данные в виде строки, а если я дам вместо строки лисп выражение, результатом обработки которого будет строка? Как думаешь сработает?
 
 
 
  Azarko aka VVA
  27.9.2007, 11:05
  
 
  Цитата
а как ее подвязать на динамические свойства не знаем
С параметрами блока нужно быть поосторожнее.
Прочитай пост №8  
http://dwg.ru/forum/viewtopic.php?t=15815Я думаю, единственный выход - объектный реактор, или команда, которая перебирает блоки и что-то там в зависимости от чего-то меняет.
По поводу объетных реакторов из личного опыта:
Реактор повешен на текст, переведен в постоянный режим. При втавке этого чертежа в другой как блок, независимо от того, подгружен реактор или нет, при закрытии чертежа Автокад вываливается с ошибкой. Избавился так: реактор временный, при каждом открытии чертежа активизируется.
Трабл наблюдался в 2004, 2006 каде. 2007, 2008 не пробывал.
 
 
 
 
 
  Цитата(Supermax @ 27.9.2007, 11:37) [snapback]170065[/snapback]
Kpblc, вот в свойствах элемента много значений требуют данные в виде строки, а если я дам вместо строки лисп выражение, результатом обработки которого будет строка? Как думаешь сработает?
Теоретически должно (только texteval проверь). Практически - я бы проводил модификацию программно.
 
 
 
 
  Supermax
  27.9.2007, 13:42
  
 
  А я научился вставлять формулы с сылкой на объекты и прочими данными в Text override Dimensions-ам. Причем ф формулу вставлена ссылка на тот Dimension в котором эта формула стоит в  Text override и в этой формуле участвует значение другого Dimension. Если кому интересно, могу поделится.
Если сработает (пока не могу проверить) это будет революция. Например объект, в котором никогда нельзя включить ручки. Лисп с начала делает свое черное дело (гасит ручки) а затем выдает под занавес строку с нужным текстом.
 
 
 
 
  Вообще-то мог бы и сам сделать 

Код
(defun test (/ adoc attr_number attr_pos _kpblc-conv-vla-to-list)
  (defun _kpblc-conv-vla-to-list (value / res)
                            ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (vlax-safearray->list value)
         );_ end of if
       )
      (t value)
      );_ end of cond
    );_ end of defun
  (vl-load-com)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  (if
    (and
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply
            '(lambda ()
               (setq attr_number (car (nentsel "\nАтрибут номера <Отмена> : ")))
               );_ end of lambda
            );_ end of vl-catch-all-apply
          );_ end of vl-catch-all-error-p
        );_ end of not
      attr_number
      (setq attr_number (vlax-ename->vla-object attr_number))
      (wcmatch (strcase (vla-get-objectname attr_number)) "*ATTR*")
      (not
        (vl-catch-all-error-p
          (vl-catch-all-apply
            '(lambda ()
               (setq attr_pos (car (nentsel "\nАтрибут позиции <Отмена> : ")))
               );_ end of lambda
            );_ end of vl-catch-all-apply
          );_ end of vl-catch-all-error-p
        );_ end of not
      attr_pos
      (setq attr_pos (vlax-ename->vla-object attr_pos))
      (wcmatch (strcase (vla-get-objectname attr_pos)) "*ATTR*")
      (not (equal attr_pos attr_number))
      (/= (strcase (vla-get-tagstring attr_number))
          (strcase (vla-get-tagstring attr_pos))
          );_ end of /=
      (equal (vla-objectidtoobject adoc (vla-get-ownerid attr_pos))
             (vla-objectidtoobject adoc (vla-get-ownerid attr_number))
             );_ end of equal
      );_ end of and
     (progn
       (foreach item
                (vl-remove-if-not
                  '(lambda (x / lst)
                     (setq lst (_kpblc-conv-vla-to-list (vla-getattributes x)))
                     (and (member (strcase (vla-get-tagstring attr_number))
                                  lst
                                  );_ end of member
                          (member (strcase (vla-get-tagstring attr_pos))
                                  lst
                                  );_ end of member
                          );_ end of and
                     );_ end of lambda
                  (mapcar
                    'vlax-ename->vla-object
                    (vl-remove-if
                      'listp
                      (mapcar 'cadr (ssnamex (ssget '((0 . "INSERT") (66 . 1)))))
                      );_ end of vl-remove-if
                    );_ end of mapcar
                  );_ end of vl-remove-if-not
    ;| Ну а здесь уже проставление чего надо и куда надо - сам, батенька, сам :)|;
        );_ end of foreach
       );_ end of progn
     );_ end of if
  );_ end of defun
P.S. Ну вот, пока отвечал, пост уже снесен.. Ну что, код отправлять туда же, куда и #343 ушел?
 
 
 
 
  Е кы лы мы ны! Сейчас поправлю VVA сказал, что ничего не понял, вот я его и снес, а то не удобно как-то.
Работа навалилась. Но я не здаюсь! Я и сегодня немного пошлангую.
 
 
 
 
  Пока ты не начал "шланговать" (подозреваю, что имеется в виду "прикидываться шлангом". Не пытайся - не получится 

). Перед дополнением кода подумай - почему я не стал прописывать заполнение атрибутов? С технической стороны этот вопрос не сложен.
Я знаю, я скотина 
 
  
 
 
  Поправляю ТЗ, и возник спорный вопрос. Вот есть план микрорайона с проложенной теплотрассой. Надо выделить объекты для позиционирования и нумерации. А нужен ли выбор секущей рамкой? Вообще, может ли в принципе быть такая ситуация, когда в модели есть несколько груп элементов (с атрибутами есс-но) где одни надо маркировать и нумеровать, а другие либо не надо, либо они должны быть отмаркированы по новой с нуля? Что-то я никак не могу себе представить такой случай.
 
 
 
 
  Ни фига не понял. "Маркировать" надо для чего? Для составления спецухи, так? Значит эта нумерация должна быть сквозной. Или все не так?
---
Добавлено: во, ща чего нашел:
Цитата
Название программы 
EasySpecВерсия: 2.0.0.29 04.09.2006
Официальный сайт: 
http://orbita.perm.ru/?page=specДемо: 
http://orbita.perm.ru/download-main.php?id=13 (2,2 Мб)
Краткое описание: Программа предназначена для создания спецификаций на основе базы данных по оборудованию и материалам. Полностью исключается и сводится к нулю рутинная работа по вводу текста, автоматически формируется титульный лист для любой организации из списка занесенных в программу.
Программа формирует документы в соответствии с ГОСТ, а также позволяет настроить выходные форматы в соответствии с фирменным стилем, личным предпочтением, вкусом и желанием пользователя. Данная программа является самостоятельным законченным блоком, который планируется включить в программу проектирования систем безопасности. Программа позволяет выполнять спецификации для различных видов строительной деятельности.
Программа формирует титульный лист в формате A4, таблицу спецификации - в двух форматах А3 и А4.
Автоматически заполняется штамп и титульный лист в зависимости от выбранного из справочника конкретного Исполнителя работ.
Включает два справочника: по заказчикам и подрядчикам.
Имеется возможность :
глубокого редактирования и форматирования всех исходных шаблонов.
быстрого ввода готового текста в панель управления из списка заранее подготовленных в редакторе списка.
быстрого ввода информации из базы данных нажатием клавиш цифровой клавиатуры.
быстрого поиска по базе данных с сортировкой базы данных по алфавиту и по номеру записи.
База данных имеет функцию автоматического измерения ширины полей в документах и саморасширяющиеся поля, позволяющие заполнять базу данных в точном соответствии с выбранным форматом листа, видом шрифта и шириной полей (граф) в документах.
Не качал и не проверял.
 
 
 
 
  Kpblc, ты вообще сегодня спать ложился? Что-то ты очень рано сегодня. 
Нумерация - сквозная, но упорядоченная, то есть с начала нумеруются детали одного типа, затем другого и т.д.
Позиционирование (маркировка) производится тоже упорядоченно. С начала группируются детали по эффектив нейму, потом по *Unnn и маркируются. Грубо говоря с начала в кучу собираются все трубы (атрибут "категория материала"), а потом  из этой кучи выбирается первое эффективное имя и все *Unnn ему принадлежащие маркируются и нумеруются. Затем следующее имя и т.д.
Ща ТЗ доделаю и выложу.
Добавлено:
Если учесть тот факт, что атрибут в блоке может быть видимым и заключенныи в кружочек или квадратик, то и на монтажке это дело - самое оно.
 
 
 
 
  А эту прогу я оказывается уже устанавливал. Там ручками надо штампик заполнять. Ничего она не делает акромя выпуску бумажек.
Да, пишу ТЗ и прога получается явно не на 3000р.
Сейчас, VVA проснется и я узнаю, надо ли мне расписывать последовательность этапов обработки массива или не надо.
 
 
 
 
  Вот:
Краткое описание: Программа предназначена для создания спецификаций 
Цитата
на основе базы данных по оборудованию и материалам.
 А где собственно и чем (это я о ручках) эту базу создавать? И они ЭТО продают за деньги!
 
 
 
 
  Цитата(Supermax @ 28.9.2007, 8:41) [snapback]170434[/snapback]
Kpblc, ты вообще сегодня спать ложился? Что-то ты очень рано сегодня. 
Нумерация - сквозная, но упорядоченная, то есть с начала нумеруются детали одного типа, затем другого и т.д.
Позиционирование (маркировка) производится тоже упорядоченно. С начала группируются детали по эффектив нейму, потом по *Unnn и маркируются. Грубо говоря с начала в кучу собираются все трубы (атрибут "категория материала"), а потом  из этой кучи выбирается первое эффективное имя и все *Unnn ему принадлежащие маркируются и нумеруются. Затем следующее имя и т.д.
Ща ТЗ доделаю и выложу.
Добавлено:
Если учесть тот факт, что атрибут в блоке может быть видимым и заключенныи в кружочек или квадратик, то и на монтажке это дело - самое оно.
Ложился, спал аж 4 часа. Работы просто много - TDMS никак не сдается 

Я бы сортировку делал по другому принципу (см.аттач, там dvb-файл, сделан на ACAD2007)
P.S. Жалко, что ToolTip нельзя сделать многострочным, красивше получилось бы...