Значится так

Я говорил о том, что в 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 нельзя сделать многострочным, красивше получилось бы...