Создание спецификации автоматически (Дубль2), Рассматриваются технология и ее реализация по автоматическому создани |
|
|
|
Гость_Supermax_*
|
14.3.2007, 12:19
|
Guest Forum

|
Внимание! Все сообщения в данной теме должны строго соответствовать предмету обсуждения. Вопросы справочного харрактера, не влияющие на ход рассуждений по данной проблеме и ответы на такие вопросы, существуют только на последней странице! Сообщения эмоционального харрактера, разговорного обмена репликами, и т.п, также существуют только на последней странице. Очень прошу отозваться того модератора, который готов взять шефство над данной темой. Чтобы не обременять модератора частыми профилактическими мероприятиями по зачистке темы, готов взять на себя обязанность по сообщению ему через функцию "Доложить" о сообщениях, не представляющих по моему мнению никакого интереса. НО! не настаиваю на выполнении действия по их удалению. В случае появления существенных разногласий между мною (инициатором темы) и модераторм, оставляю за собой право прекратить участие в обсуждении и если мне на этот момент будет доступна функция удаления своих сообщений, предварительно уведомив модератора - удалять их. Мои сообщения, что бы они не содержали, разрешаю удалять по любому поводу. И так. На данный момент мною создается программный продукт (макрос к программе AutoCAD), позволяющий при определенных условиях, обрабатывать чертежи, или модели в DWG формате с последующим автоматическим созданием листов спецификаций и заполнением листа ресурсов программы Microsoft Project. Данный продукт, после его написания будет подарен всем доступным мне представителям производителей оборудования и материалов для строительства. Также, данный продукт, будет выложен на данный сайт. В процессе создания данного продукта, в данной теме будут выкладываться отдельные части будущего продукта, для их обсуждения или применения участниками и гостями форума по своему усмотрению. Предшествующая версия макроса, позволяющая производить подсчет блоков по их имени, а также подсчет общего колличества длин, площадей и объемов с переводом в метры, метры2 и метры3 представлена ниже. Результаты данного подсчета транслируются автоматически в Word или Excel. Размер файла 151 КБ
Сообщение отредактировал Supermax - 2.7.2007, 11:07
Прикрепленные файлы
Prop.rar ( 38,86 килобайт )
Кол-во скачиваний: 1128
|
|
|
|
|
|
20 страниц
1 2 3 > »
|
 |
Ответов
(1 - 99)
|
|
14.3.2007, 13:22
|
ИнженерищЕ
Группа: Участники форума
Сообщений: 1074
Регистрация: 20.5.2005
Из: Астрахань
Пользователь №: 795

|
с учётом персонального интереса к данной теме, готов помогать по мере возможностей и в соответствии с правилами данного форума
|
|
|
|
|
|
|
Гость_Supermax_*
|
14.3.2007, 18:27
|
Guest Forum

|
Общая концепция: Модель содержит: – слои, простые примитивы (линии, плоскости, солиды), отдельные атрибуты, сложные примитивы (блоки, группы атрибутов). Требования к модели: - наименование слоев не имеет значения, - наименование блоков тоже не имеет значения (хотя лучше, чтобы совпадало с наименованием изделия). Назначение слоев: - содержать примитивы, по которым считаются длины, площади и объемы Назначение блоков: - скомпонованные изделия или материалы. Единица измерения указана в свойствах блока, метод расчета в атрибутах блока. Содержат графическое представление формы изделия или символ материала, свойства изделия или материала и атрибуты блока. Тип блоков - всегда динамический. Не динамические блоки считаются технологическим группированием элементов чертежа. изменено 5.10.2007г. Назначение атрибутов блока: - Определять принадлежность данной единицы изделия или материала к проекту и описывать параметры этой принадлежности. По выбранному методу расчета, (содержащимся в одном из атрибутов группы), по данным параметров примитивов, находящихся в одном слое с этой группой, образуют метод определения параметров и количества материала данного типа. Например: В слое, в котором трасса трубопровода представлена линиями (полилиниями, 3Dполилиниями, сплайнами, дугами) лежит динамический блок, где из графики есть только условное обозначения трубопровода. В свойствах этого блока (назовем его "виртуальный материал") указаны все свойства материала, в том числе и единица измерения. В атрибутах этого блока атрибут с именем (строка "Tag") "метод_расчета" и значением (строка "Value") содержит запись, выраженную в условных величинах (см. ниже) – (сумма всех длин 3Dполилиний деленная на 1000), в другом динамическом блоке – ( сумма объемов всех солидов данного слоя деленная на 9156,24 (сечение 108 трубы в мм2) деленная на 1000 и все это умноженное на удельный вес 1-го погонного метра утеплителя.), в третьей – (вычисленная длинна в метрах деленная на 2, и результат штуки). Таким образом, опираясь на данные свойств и атрибутов динамического блока отвечающего за материал по данным элементов принадлежащего этим атрибутам слоя вычисляем параметры «виртуальных изделий и материалов» Уже написан (далее в теме) макрос, который создает и редактирует сразу целую группу атрибутов (чтобы с привязками и комплектностью не мучаться). В AutoCAD-е все делается по одной штуке. Хотя он слегка устарел, но в кодах можно изменить назначение атрибутов. Я его отредактирую, когда разберусь с полным комплектом этих атрибутов.Единицы измерения длин и объемов значения не имеют, поскольку формулы составляются теми, кто их использует. Например Англичане в модели насторенной на футы и дюймы будут получать длины в этих дюймах и по формуле делить их или умножать на те числа, которые им нужны. Назначение блоков: - Штучные, видимые на чертеже и мониторе объекты, являющиеся изделиями или материалами. Изделия - могут лежать где угодно. Материалы в тех слоях, в которых лежат примитивы по которым считается расход данного материала. Назначение отдельных атрибутов: Отдельно стоящие атрибуты системой не обрабатываются. Значение символов ".txt" в атрибуте "МЕТОД_РАСЧЕТА": - Атрибут, если у него в значении "Prompt" есть сочетание символов ".txt" то есть расширение со ссылкой на текстовый файл, это так называемый "сложный атрибут". Если такого в данной строке не найдено и запись не соответствует формату формулы, то такой блок выбраковывается. Например - кирпичная кладка. В атрибуте "МЕТОД_РАСЧЕТА", может содержать только расчет объема кирпичной кладки из такого-то кирпича, таким-то раствором, с такой-то степенью армирования. Если атрибут связан ссылкой на текстовый файл, то в файле, на который есть ссылка в атрибуте указаны все составляющие данный материал суббматериалы. Арматура сечением таким-то (расход на данный вид кладки), Арматура других сечений, Проволка вязальная, раствор марки такой-то (расход на такой тип кладки - зависит от выбранного типа кирпича), Кирпич тако-то (расход на данный вид кладки) и т.п. При составлении спецификации субматериалы прописываются сразу за позицией генерального материала. Таких файлов можно настрогать уйму, простым блокнотом и держать как коллекцию различных типов кладки. Программа сама их читает и вписывает результаты расчетов в спецификацию. Набор требуемых файлов: Файлы сложных атрибутов *.txt - Содержат сведения о составе и методе расчета материалов из которых состоит генеральный материал. Например: "Кирпичная кладка" gostb_pg.shx – Шрифт, используемый при черчении таблицы и штампов. Макрос3.lsp - Блок макроса прочерчивающий требуемый бланк. Может быть заменен другим файлом, чертящим другого типа бланк. (может работать самостоятельно). Макрос2.lsp – Блок конвертации результатов расчета для передачи данных в другую программу (в частности Project). Также может быть заменен на что-нибудь другое. Макрос1.lsp – Основное рабочее тело программы. Таблица очередности.xls – Файл Excel в которм определены все параметры, как сортировки, так и вывода данных. Редактируется пользователем по своему усмотрению. Даю на рассмотрение и обсуждение файл с таблицей очередности сортировки и параметрами заполнения таблицы. Возможно будет добавлен третий лист, для определения компоновки даных в MS-Project. Отредактировано полностью 11 октября 2007 года. Размер файла 17,5 КБ.
Сообщение отредактировал Supermax - 11.10.2007, 17:17
|
|
|
|
|
|
|
Гость_OVKT_*
|
15.3.2007, 7:18
|
Guest Forum

|
Весьма советую перенести сюда ФАЙЛЫ с бывшей ветки.
Моё мнение (которое можно удалить, что сейчас модно, особенно в этой теме), состоит в том, что мы ломимся в открытую дверь. Как посчитать количество кранов, фитингов или данфоссов? Надо сделать такие блоки с правильными ИМЕНАМИ, на каждый диаметр свой. Составить чертёж строго из правильно наименованных блоков. Далее волшебная команда BCOUNT. Там предложат обвести окно или посчитать на всём чертеже. Результат: список блоков, тождественный списку применённых элементов. И всё. Далее заполняем вручную Word'овский шаблон. См. мой сайт. Зачем мне (лже) автоматизация? Чужой почерк неприемлем для другого кадра. Всё равно что взять у коллеги чужую спецификацию, вырезать без проверки и вставить себе. Тем более: как же Ваша спецификация будет работать у "всех производителей", если у меня не заработало ничего правильно? Предлагаю сделать так: если к июлю-2007 ничего не получится, работу по глобальной автоматизации спецификации свернуть. Примечание: ранее была свёрнута разработка "стандарта запретов" на черчение в Автокаде, с 2005 года работа на возобновлена. Эту тему ждёт та же участь. То, что интересно активистам, окажется совершенно неинтересно инженерам на местах. Я же советовал: сделать макросы для Excel, которыми набираются строки 1-м щелчком на отдельном листе. Вот это инженеры оценят, а всеобщую спецификацию по шаблону "свыше" - НИКОГДА!
|
|
|
|
|
|
|
Гость_Supermax_*
|
15.3.2007, 10:35
|
Guest Forum

|
Про файлы: Если кому-то нужны файлы или сообщения из старой темы Говорите какие и алле – они тут.
Только одного имени уже, к сожалению, не хватает. Началось все с того, что сметный отдел потребовал вес изделий. Второй раз я этот кошмар не переживу! Потом начался второй кошмар – поиски в смете-ру эквивалентных позиций оборудования. Оказалось, что 70% просто не с чем сравнивать. Применили опцию «По счету». Ко мне заявились и стали требовать эти самые счета на, аж 150 позиций. Я раскидал спецификацию по 5 крупным фирмам комплектующим строительство (Сантехкомплект в частности и несколько специфичных). Там оказалось есть далеко не все, а на многие позиции только заказ, да и цен пока не знают. Всю инфу отдал начальству и в сметный отдел, там она благополучно скончалась, а через месяц вдруг срочно опять понадобилась! Хорошо, что я в проджекте все набил и ссылки оставил. А сколько мне понадобилось времени, чтобы все это найти и набить? – НЕДЕЛЯ! Пошли согласовывать ИТП, а мне дают замечание – заменить спаренные насосы на два отдельных! Добавить и там и сям краников, манометров. А один, очень продвинутый представитель эксплуатирующей организации даже захотел поставить параллельно основному теплообменнику отопления, второй, запасной! (еле отбились!). Монтажка слава богу в 3D. Вставил, добавил маркировки и опять распечатал. Листов спецификаций – 4. Все позиции сдвинулись. Кроме того, что в штуках, очень много того, что в метрах и кубометрах. Когда делаешь трассировку трубопровода по зданию, и утеплитель, и крепления, и краска (если трубы красить надо), и строительный раствор (штроба замазывать) и строительный мусор (от штробления стен). Все это никто не рисует и в 3D не ваяет! Провел линии, или 3Dполилинии и умножил на рассчитанный коэффициент. А сколько таких коэффициентов ты знаешь? Их что, каждый раз сидеть и вычислять? А трубы между сантехнической арматурой, что тоже блоками оформлять? Их все время, то удлинять, то укорачивать приходиться, и сколько у тебя труб заданного диаметра только по их объему и можно определить! (Правда в 2007 каде у солида, вытянутого по пути появилась длинна!).
|
|
|
|
|
|
|
Гость_Supermax_*
|
15.3.2007, 11:12
|
Guest Forum

|
В Excel-евском файле умерли позиции ограничения по X и Y Добавлены позиции Х заголовков разделов Переведены названия имен атрибутов в верхний регистр Отредактированы значения центровки по Х текста столбцов Отредактированы 16.03.2007 положения стратегии по сложным атрибутам
В lisp-е отчерчивающем штамп в конце добавляются строки, определяющие как верхнюю и нижнию границы поля заполнения, так и параметры линии раздела строк, линий раздела столбцов (по Х). Тот, кто эту таблицу создает, тот и задает эти данные. А вот центровка текста оставляется на усмотрение пользователя, так как иногда приходится жертвовать отдельными столбцами и разворачивать текст на несколько ячеек. В файле экселя центровка сейчас указана по центру, что будет в некоторых ячейках заменено на левостороннюю.
Отредоктирована концепция построения чертежа. В ней появились "Сложные атрибуты"
Изменено 16.03.2007
|
|
|
|
|
|
|
Гость_Supermax_*
|
15.3.2007, 20:00
|
Guest Forum

|
Сюда (вот на это самое место, постоянно его редактируя) я буду вставлять тело программы. Я пишу на AutoLISP-е. Если среди аудитории есть те, кто тоже на лиспе работает - отзовитесь. Очень нужны, как критики, так и помощники. Сейчас бьюсь над сортировкой атрибутов.
Дополнение: Пока я не выясню, юридическую сторону вопроса (см. ниже), я повременю сюда что либо выкладывать. НО! тем, кто мне помогает, буду отсылать по почте.
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.3.2007, 10:03
|
Guest Forum

|
Даю на обсуждение правила заполнения атрибута "МЕТОД_РАСЧЕТА" Файл отреставрирован в соответствии с изменившейся концепцией. 30.5 КБ
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.3.2007, 10:05
|
Guest Forum

|
Даю на обсуждение пример атрибутов виртуальных материалов и изделий Файл 43 КБ
|
|
|
|
|
|
|
|
16.3.2007, 11:10
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Позвольте и мне уж высказаться ( Bers указал на тему). Несколько сначала замечаний (предложения будут позже  ) 0. Макросом тут не обойдешься. 1. Подсчет блоков по имени сам по себе малодостаточен. Кроме того (сейчас не имею возможности проверить dvb-файл, но не думаю, чтобы там была эта проверка введена), штатные средства (тип bcount) не позволяют считать количество динамических блоков (не ведется обработка свойства EffectiveName, а дин.блоки выглядят для стандартного лиспа как анонимные и исключаются из обработки). 2. Не рекомендовал бы завязываться на MS Office - он может быть попросту не установлен на клиентской машине. Вместо него может быть поставлен OpenOffice. Я б рекомендовал брать за основу xml либо txt формат. Учитывая, что xml допускает самое различное написание, можно сделать xml, который распознается и Excel'ем, и OO Calc'ом вполне адекватно. 3. Рисование может выполняться в неметрической системе единиц; либо в метрах. Поэтому вариант деления полученной длины на 1000 может выдать некорректный результат. Рекомендовал бы использовать БД (оформленную как угодно - как xml, как mdb, как sql - все едино, небольшая разница будет только при разработке механизма запросов). 4. "Кошмар" был предсказуем теоретически. ИМХО: не надо за сметчиков - планировщиков - экономистов выполнять их работу. Та же цена может меняться по сотне раз за месяц. И что, каждый раз переделывать? В спецификации должно быть только количество, имя, может быть, уникальный ID, и все - минимум информации. Результат выводить в тот же txt определенного формата, который и импортировать уже Сметой.ru или каким-либо иным софтом. Это вопрос десятый. 5. И, наконец, последнее. Если автору интересно, через неделю - две я по новой открою тему у себя на блоге с софтом CADWare (он посвящен аналогичным вопросам, там проблем сейчас очень много, в процессе решения они). Теперь предложения. Вся проблема на самом деле не в том, чтобы посчитать или прочитать данные, а в том, чтобы их записать в примитивы либо файл. При этом добиться безупречной работы. Одно дело оформить прямоугольник и на выноске написать что это вент.отверстие, другое - сделать его блоком и положить на определенный слой, и третье - это засунуть "внутрь" этого блока дополнительные данные (я не спец, поэтому пример может быть не очень ярким). Обработать "неоткрытые" файлы из какого-то каталога, добившись "неслетения" ни AutoCAD'a, ни лиспа (а то можно получить странные глюки). Поддерживать все версии своего ПО, добиваясь полной совместимости. Оформить результаты выполнения таблицей прописанного формата (который, кстати, может быть и изменен) с фиксацией высоты строк и таблицы. Вставлять таблицу в форматку. Автоматически разбивать таблицу на куски с максимальной высотой, например, в 20 строк (кстати, atable вроде как собирается автор добивать на эту тему). Автору также порекомендовал бы прочитать "САПР на базе AutoCAD - как это делается" за авторством Зуева С.А., Полещука Н.Н. при участии Лоскутова П.В. Вроде бы на ozon.ru еще была. Система ruCAD ориентирована, насколько я понял, именно для подобных задач. Так что и ее поглядеть не помешает. Даже в "книжной" версии очень многое сделано. То, что там были найдены баги и глюки самими разработчиками, нисколько не умаляет ее ценности. То, что ShaggyDoc более здесь не появляется, конечно, огромный минус  Я не он, но чем смогу - тем помогу  Работаю на vlisp, VB. Цитата А трубы между сантехнической арматурой, что тоже блоками оформлять? Можно и блоками. А можно и отрезками / полилиниями, засунув внутрь этих примитивов специальным образом сформированные данные. Которые тот же лисп прочитает на ура. P.S. В течение ближайшей недели меня не будет, так что пишите в e-mail либо ПМ, когда вернусь обратно - постараюсь ответить всем. P.P.S. Я бы рекомендовал по максимуму не завязываться на какую-то конкретную версию AutoCAD'a. Начать, например, с 2002 и просто отключать работу в более ранних версиях (выполняется элементарной проверкой (atof (getvar "acadver"))).
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.3.2007, 12:38
|
Guest Forum

|
Отвечаю по пунктам: 1. Не понял, о какой проверке идет речь. В выложенной старой версии макроса считаются любые блоки. Подсчитывается количество блоков с одинаковым именем и это имя и его количество прописываются в таблицу. Да, если у вас в поле выборки попали динамические блоки, которые вы «пошевелили», то появляется вместо имени *U1….N Но не надо забывать, что динамический блок типа «окно». Которое можно шевелить, после шевеления уже перестает быть тем начальным окном, имя которого несло все, что об этом окне можно было сказать. Поэтому такие блоки надо после «шевеления» заключать в простой блок с новым именем «окна»! При обработке новой версией написанной на Лиспе, имя блока вообще не имеет значения, только для идентификации совпадений и подсчета количества. Поскольку параметры атрибутов на каждый блок можно менять, то и имя там тоже будет как параметр. 2. MS Office в старой версии макроса – постольку, поскольку. В новой версии результат будет выводится только в Layout в том виде, в котором будет запрограммирован в дополнительной подпрограмме Лиспа, в нашем конкретном случае - ПО ГОСТУ. Файл с ориентировками последовательности и компоновки расчета, скорее всего будет не *.xls, а два или три *.csv их легче обрабатывать, хотя я до конца еще не решил. 3. Методу расчета наплевать на единицы измерения. Если вы чертите в дюймах, то будьте добры и метод расчета корректировать. А если вам надо начерченное в мм перевести в футы, то и в методе расчета ставьте соответствующе число. Деление на 1000 всего лишь перевод миллиметров, в которых нарисован чертеж в метры. Нужны сантиметры? – делите на 100. И база данных чего? 4. При разработке проекта (я имею в виду не бумагу), все, кто в нем участвуют являются лишь исполнителями предписанных им функций. Все должны стремится к одной цели и писать программу только для облегчения работы, например расчетчика, поплевывая на все, что после меня, не дальновидно и не красиво. Цена на материал в программу и не входит, но ссылка на позицию в каталоге (если таковой имеется) – обязательна. После чего и до прайса добраться будет не трудно. Экспорт данных – отдельная лиспина Макрос2 именуемая. Их разновидностей могет быть (а скорее всего и будет) много. 5. И ниже по тексту. С таблицами CAD-а при заполнении бланка пока не связываюсь. Все книжки у меня есть, и их наработки я видел (краем глаза). Принцип построения чертежа завязан на СУБД программы. Вляпались, одним словом. Файл отчерчивания таблицы спецификации со всеми штампами 5,63 КБ (если кому надо могу сказать как сделать кнопкой с автоматическим созданием Layout-а)
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.3.2007, 19:13
|
Guest Forum

|
Обращаюсь к организаторам форума. Вот здесь в этот самый момент (если все пойдет удачно) рождается некий программный продукт, который затем должен приобрести статус «Free Download Software». Чтобы подарить кому-нибудь, что-нибудь, надо этим обладать. Хорошо, если я сам сижу, пишу, и никому ничего не показываю. Написал, пошел, оформил авторство и потом иди и дари права, поскольку ты ими обладаешь. Но если ты еще ничего не написал, а только пишешь, то никаких прав ты пока и не оформишь. А тот, кто стоит у тебя за спиной, которого ты не видишь, ждет, пока ты все это напишешь. Как только тебе остается пару очевидных пассов руками, он, быстренько хватает текст проги и бежит регистрировать. После этого все, что тут написано, юридически будет считаться нарушением авторских прав. Я в состоянии все сделать втихаря, но результат будет кривой и одноглазый. А делать открыто, как я и вознамерился, используя интеллектуальный потенциал «окружающей среды», чревато тем, что мы с вами окажемся в дураках. Как решить эту проблему? Очень нужна консультация юриста. У вас есть форум, содержание которого, юридически, есть база данных. Базы данных охраняются законом. У вас открытая база данных, которую читают все. Как сделать так, чтобы никто не мог оформить авторские права на то, что опубликовано здесь ДО ТОГО! Даты создания файлов не рассматриваются, поскольку легко меняются. Если бы это была публикация – все просто. Нотариально заверяется дата ее выпуска. Но поскольку текст в теме все время девиирует, нотариально заверить можно только дату создания темы. Если прийти в нотариальную контору с таким делом, там все сойдут с ума. Необходим нотариальный надзор. Когда речь идет о процессе создания чего либо и есть опасение, что во время этого процесса кто либо может воспользоваться элементами этого процесса не законно, нотариус, как представитель государства, может удостоверить по окончании процесса или при возникновении инцидента, что материал находящийся в данной теме, на данном сайте является первоисточником.
В соответствии со ст. 35 Основ законодательства Российской Федерации о нотариате нотариусы совершают следующие нотариальные действия: 1. Удостоверяют сделки, в том числе с недвижимостью; 2. Выдают свидетельства о праве на наследство и праве собственности на долю в общем имуществе супругов. 3. Налагают и снимают запрещения отчуждения имущества. 4. Свидетельствуют верность копий документов и выписок из них. 5. Свидетельствуют подлинность подписи на документах. 6. Свидетельствуют верность перевода документов с одного языка на другой. 7. Удостоверяют факт нахождения гражданина в живых. 8. Удостоверяют факт нахождения гражданина в определенном месте. 9. Удостоверяют тождественность гражданина с лицом, изображенным на фотографии. 10. Удостоверяют время предъявления документов. 11. Передают заявления физических и юридических лиц другим физическим и юридическим лицам. 12. Принимают в депозит денежные суммы и ценные бумаги. 13. Совершают исполнительные надписи. 14. Совершают протесты векселей. 15. Предъявляют чеки к платежу и удостоверяют неоплату чеков. 16. Принимают на хранение документы. 17. Совершают морские протесты. 18. Обеспечивают доказательства.
Обращаю внимание на пункты 10 и 18.
После реакции, данное сообщение будет удалено.
Интересно, среди читателей данного форума случайно нотариусов нет?
|
|
|
|
|
|
|
Гость_Supermax_*
|
19.3.2007, 9:56
|
Guest Forum

|
Произошли изменения в правилах заполнения атрибута «МЕТОД_РАСЧЕТА» Я отказался от обычного представления математических выражений и разрешил вписывать в строку выражения AutoLISP-а. например сложение (+ А1 3.5 17 21) означает сумма значений переменной А1 и чисел 3.5, 17, 21. Макрос не будет проверять на корректность то, что написано в этой строке и будет пытаться ее выполнить, даже если вы ею запускаете внешнюю программу. НО! Прежде, чем совершить попытку выполнить данное выражение, будет проверено наличие таких атрибутов как «НАИМЕНОВАНИЕ» и «ЕДИНИЦА_ИЗМ». Далее на экран будет выводится менюшка, в которой будет записано, какая группа, в каком слое и полное содержание строки значения атрибута «МЕТОД_РАСЧЕТА». Если программа при выполнении этой задачи зависнит, или выдаст ошибку и прекратит функционирование, на экране останется «след» по которому можно легко найти виновника этой трагедии. Решен вопрос с определением "основного" набора атрибутов. В листе Excel-я, те наименования атрибутов, что требуют обязательного присутствия в группе должны выделяться цветом шрифта (любым, кроме черного). Три позиции - Наименование, Единица измерения и Метод рачета, являются обязательными всегда. По просьбе общественности шрифт 4,7 КБ
|
|
|
|
|
|
|
|
20.3.2007, 11:50
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Сразу по лиспу несколько замечаний. 1. Что делать тем несчастным, у которых не AutoCAD 2006, либо установлен он по другому пути? 2. Что делать пользователям русских версий (это к вопросу о подчеркивании) 3. Что делать, если пользователь нажал Esc? (Это к вопросу об обработчике ошибок)? 4. Что делать, если фонт установлен не по указанному пути либо его нет? В общем и целом я бы лисп полностью переписал. На несколько функций его разбить - отдельно создание текстового стиля, отдельно - таблицу. Оформить все в отдельную команду со своим обработчиком ошибок. <Код снесен за ненадобностью. kpblc> --- Удалось немного посмотреть dvb файл, но что-то я его логику не очень понял. В качестве совета - менять имена контролов по умолчанию на что-то более информативное. Например, CommanButton26 - на btnExportToWord. Кроме того, там не проверяется - может быть, Excel / Word уже запущены. Какой смысл тогда создавать еще один экземпляр приложения? Не отслеживается ошибка создания объекта Word'a (он может быть не создан; версия может быть "не та" ну и так далее). DVB сам по себе интересен, но я бы на него не завязывался (вроде бы уже говорил почему). --- Насчет последнего поста. Если завязываться на БД (а она сюда так и просится), то весь вопрос фактически сводится к тому, чтобы сформировать нормальный запрос. Если БД нет, то мне остается только посочувствовать...
Сообщение отредактировал kpblc - 17.4.2007, 7:41
|
|
|
|
|
|
|
Гость_Supermax_*
|
20.3.2007, 13:11
|
Guest Forum

|
Е-кылы-мыны! Нельзя-ж так людей пугать! Я чуть со стула не упал. Критика справедливая. НО! фонтик идет в комплекте со всеми файлами, вот проверку его наличия организовать не мешает. Отрисовку таблицы можно заменить DWT файлом, но только таким,, имя которого намертво забито в макрос. И проверочку на его наличие. ОПЯТЬ БАЗА!!! Что за база??? Сколько можно меня этими базами мучать??? База чего??? Текстовых стилей, или вы хотите собрать коллекцию бирочек от всяких разных изделий? Некоторые вот фантики коллекционируют, да все жалуются, что такие конфеты перестали выпускать, а новые уже даже видеть не могут. Короче. Если и нужна база, то только не изделий и тем более не их параметров. Я это как тот, кто ЕЛ! эти самые устрицы, говорю. Я создал такую базу. Очень много деталей по отдельности храню НО! - увы не пользуюсь. И не потому, что туда влом лезть, просто я беру уже ранее созданный проект и копирую от туда не только какой-то вшивый теплообменник, а всю его обвязку, с кранами, болтами, фланцами, рамами (руки жалко дальше перечислять). ПОНЯЛ? Для одного дома, я даже умудрился целую стену с узлом учета скопировать. А мне упорно предлагают по одной детальке, по тихоньку, не спеша, каждый раз, а... У мня этих проектов скопилось - уйма. Мне даже не жалко их в Интернет выставлять, что я и делаю на DWG.RU, Чертежи-ру, и здесь. Набирать атрибуты нужного тебе элемента - пока реальность. Но в будущем, я намерен (а предварительное согласие уже есть) возложить на самих производителей этих изделий. Солиды они уже выложили. Могу ссылку дать, и винчестер у тебя лопнет от их количества. Ты себе не представляешь ощущения радиолюбителя, попавшего на склад радиодеталей, где он может взять, что угодно. Или сладкоежки, устроившегося на шеколадную фабрику. Вот сделать макрос, или прогу, которая позволит быстро и легко. какой ни будь девушке сидеть и набивать данные каталога в атрибуты - дело стоящее. Если речь идет про подчеркивание в названии атрибутов, то это для того, чтобы было только одно слово. Не я это придумал, Автокад так устроен. Не хочет в названии атрибута видеть пробелы. А вот в строке привязки, я с этими пробелами уже намучался. Не видны они нихрена. Особенно в конце. А из за этого, макрос расценивает эти надписи, как принадлежащие к разным группам. Вот я и рекомендую их не допускать. Точки ставьте, крючечки, ТОЛЬКО НЕ ПРОБЕЛЫ. В строке с данными атрибута тоже желательно не своевольничать. Например атрибут "НАИМЕНОВАНИЕ", что лежит в блоке "U1" в данных содержит название изделия "Болт М-8 L=80" таких болтов на плане не счесть. У этого блока своя точка вставки и все остальное, что в нутри. НО! Вот приходит момент и надо в чертеж вставить целый массив блоков из другого чертежа, а там тоже есть блок "U1" только его кто-то подредактировал (точку вставки например заменил). Вставляем и БАЦ! все болты старые заменились на новые и убёгли в даль не виданную. Чтобы таких эксцессов не происходило, имена блоков надо при копировании проверять на схожесть и если чё переименовывать. А вот атрибут "НАИМЕНОВАНИЕ" - чтобы наоборот совпадал у всех. Устал я однако. попозже еще пословоблудю. Отдохнул. Отвечаю по пунктам: 1. Установить AutoCAD-2008 (шутю). Вообще-то я пишу макрос к AutoCAD-у на AutoLISP-е может быть в процессе понадобится запускать еще и VBA, пока не уверен. Но, что делать тем, у кого вообще и компьютера нет? Даже не знаю что сморозить. а про путь, так надо как в п.4 я написал сделать. 2. Учть Английский (шутю). Ну с подчеркиванием мы вроде разобрались? 3. Ну почему Esc? Люди обычно на клаву кофе проливают, или особенно часто у нас в офисе, где системники на полу стоят, любят ножкой в кнопку ресет попадать. Я вот попытался проанализировать, во что может вытечь обработка строки формул атрибута "МЕТОД_РАСЧЕТА" и даже немного начал писать и  В общем, где-то, что-то и не помешает, а в целом можно ограничится всплывающей панелью с надписью огромными буквами "НЕ ДЫШИ!" 4. Фонт гостовский, но не это главное, главное, что под него размеры шрифта установлены. В разных клеточках они разные. Особенно ширина. Взять и сделать для всех надписей один стиль - труба получится. А делать несколько, так не проще просто указать на параметр. Адрес я забил не подумавши, торопился. Надо было с начала вызвать командой этот адрес. Есть такая. Сама говорит где лежит указанный файл.
|
|
|
|
|
|
|
Гость_Supermax_*
|
20.3.2007, 14:41
|
Guest Forum

|
Не могу не пожаловаться. Потом сотру. Язык программирования - вещь не такая уж и универсальная, не сравнить с обычным, человеческим языком. Создание функций, одно из основных возможностей языка и к сожалению в некоторых случаях единственная возможность реализовать поставленную задачу. Я понимаю работу, где целая страница текста программы, но когда три слова и будь добр к тексту свой программы добавляй шапочку с каким-то гадом - зла не хватает. Такую функцию по другому может и не создать. Нам что надо всех разработчиков AutoLISP-а поименно с должностями перечислять? Программа болше на хелп смахивает чем на программу. иной раз на одну единственную строку проги приходится 15 строк хелпа. А эти гады. Книжку написали, в ней и на диске к ней лиспы развернули, у нотариуса зарегистрировали, и теперь что ни напиши - под суд. За нарушение авторских прав.
|
|
|
|
|
|
|
Гость_Supermax_*
|
20.3.2007, 17:18
|
Guest Forum

|
О необходимости запуска Excel повторно. Как показала практика, когда имеешь дело с запуском "со стороны" приложения, то бывает всякое. Даже кад слетает. Если уже открыто приложение, то в нем может быть открыт файл, который пока не сохранен и игры с этим приложением чреваты летальным исходом этому файлу. Потом, у меня два монитора и работа с двумя приложениями очень удобна. К сожалению ни эксель, ни автокад не позволяют выносить на второй монитор свои окна. Но слава богу, эксель можно открывать дважды. а вот с кадом сложнее. приходится устанавливать на машине два разных када, чтобы работать с двумя чертежами на двух мониторах. Из практики скажу сразу. Посчитал я один файл и вывел все в эксель, потом посчитал второй файл и вывел все на другой эксель и сравнил два результата только не на одном мониторе, а на двух - удобно до жути. Я теперь без второго монитора работать просто не могу. А также не могу работать на трехкнопочной мышке. У меня логитех 510 с 8 кнопками.
|
|
|
|
|
|
|
Гость_Supermax_*
|
20.3.2007, 17:59
|
Guest Forum

|
Уважаемый kpblc полазил я по вашему сайту - красиво. Не скажете ли мне, имеется ли у вас опыт извлечения из таблицы Excel не только содержимого текста ячеек (это я и сам могу), а еще и стиль шрифта, цвет заливки, и пр? Очень надо. Я хотел бы как нибудь выделить ячейку, в которой стоит обязательный параметр для проверки наличия данного атрибута в группе. Нельзя же допускать, чтобы в группе атрибутов не было например атрибутов "НАИМЕНОВАНИЕ" или "ЕДИНИЦА_ИЗМ".
Если я не преодолею этот Рубикон, придется либо в текст вставлять знак и его потом искать, либо отказываться от Excel и делать специальную программу для составления этих двух (а то и трех) листов настроек. Правда есть еще предложение проверять наличие всего комплекта, но что-то это мне не нравится. В принципе, при простых работах, имени, единицы измерения и метода расчета (который создает данные в колонку количества) вполне достаточно. Кому и сколько достаточно, можно спорить до хрипоты. Проще сделать такую возможность. Там где много атрибутов, то есть есть такие атрибуты, которые участвуют в МС-Проджект-е и которые в спецификацию не входят, но нужны обязательно, надо же их где-то отмечать?
|
|
|
|
|
|
|
Гость_Supermax_*
|
21.3.2007, 17:23
|
Guest Forum

|
Все! С цветом, стилем шрифта разобрался. Если шрифт в таблице будет не черный тобишь 0.0 то этот атрибут будет искаться в наборе, а если черный (что по умолчанию всегда, то только те атрибуты, что выделены в таблице жирной рамкой. Ну у вас еще не выделены разумеется. Атрибуты в ячейках D10, H10, I10 ищутся обязательно, а все остальные только если буквы в них "покрасили".
Только быстро не читайте, а то ничего не поймете!
А также я могу тип шрифта ставить такой, какой установлен в экселе в данную конкретную ячейку. Но думаю, что гостовский лучше. Хотя для других иностранных нужностей, может так и надо. Каким шрифтом заполнил ячейки в таблице определения очередности, таким шрифтом эти позиции и будут заполнены в спецификации.
|
|
|
|
|
|
|
Гость_Supermax_*
|
23.3.2007, 13:31
|
Guest Forum

|
В нашем полку прибыло. Макрос, который делает сразу группу атрибутов по трем вариантам ГОСТов Перед загрузкой, переписать библиотечный файл AcFocusCtrl16.dll в корень AutoCAD-a Старый с начала сохранить под другим именем, а потом, когда все заработает - убить. www.dll-files.ru/dll/a_7.html По умолчанию, в значениях атрибутов вставлены названия атрибутов. Пустых строк не приемлет. Ставьте прочерк. Если вы вставляете атрибуты в уже созданный блок, после вставки наберите комманду ATTSYNC (по умолчанию Select), нажмите Enter и укажите на блок, или блоки. Опять нажмите Ener. Атрибуты будут видны в Properties.
|
|
|
|
|
|
|
Гость_Supermax_*
|
23.3.2007, 13:35
|
Guest Forum

|
|
|
|
|
|
|
|
|
26.3.2007, 9:55
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> Supermax : К сожалению, я не имею качественного опыта работы с Excel'ем через lsp. На dwg.ru Евгений Елпанов показывал код, которым мои пользователи иногда работают, но объяснить логику кода я не могу. Если хотите - могу поискать тему. Я б не связывался с Excel'eм по причинам, которые я уже озвучил. Тут же есть еще несколько проблем - в частности, запрашиваемые (и, соответственно, сводимые в таблицу) данные могут быть самыми разными; их состав может меняться. В БД подобные дела решаются вводом дополнительных полей в таблицу и организацией запросов. А эта тема уж столько раз решалась теми же Флемингами, что там остается только пользоваться отлаженным кодом и не мучаться  И вот еще, хотелось бы высказаться по поводу цветов, шрифтов и проч. Не думаю, что ограничивать эту свободу правильно. Рано или поздно найдется любитель, который такую систему порушит не задумываясь. Если использовать vlax-ldata-* функции, в любой примитив можно засунуть свои данные. Которые потом и прочитать и обработать. У меня так много решено - и пользователю не видно, и от дурных действий предохраняет. Разбил блок? Сам виноват. Поменял цвет / тип / вес линии / слой - ну и ладно, программные данные подобным образом пользователь не затронет. Следовательно, читаться будет как и раньше. И запросы составляться тоже
|
|
|
|
|
|
|
Гость_Supermax_*
|
26.3.2007, 14:41
|
Guest Forum

|
Да я уже разобрался с Excel-ем. Намертво! Есть такая замечательная команда как vlax-dump-object позволяющая получить полную распечатку свойств и по запросу, перечня применяемых к объекту методов. Файл Excel - это как матрешка, где в одной вложена другая, а то и несколько. Так же устроены и остальные файлы Оффиса. Все очень легко вскрывается и читается. А что касается отрицания применения, то сэр, не выскажете ли вы свои предложения, как альтернативу. Только поточнее. Меня интерисует как пользователя, как я смогу менять по своему усмотрению последовательность компановки листа спецификации? А точнее, что и зачем должно следовать и состав, того, что должно быть в спецификации указано. А как разработчик, я... тут меня прервали. Так о чем это я. А, ну да, так вот, как разработчик, я очень не хочу заморачиваться решением таких задач, как определение названия шрифта, состав обязательных атрибутов, расположение результатов расчета на листе. Даже отрисовку рамки в составе основного тела проги, упаси бог меня, вставить. Я понимаю, что легче стать в позу и сказать всем: 1. Пограмма только для Русских! 2. Только для инженеров - проектировщиков! 3. Только для инженеров проектировщиков ОВ и ВК! 4. Только для спецификаций по ГОСТ 21.110! 5. Считает программа только те детали, которые вы внесли в базу! 6. Распечатывает только в составе таком-то и порядке таком-то! N. И еще пару десятков ограничений и циркулярных предписаний.
На сколько все стало бы проще! Но я такую бы прогу не купил и даже даром не взял.
|
|
|
|
|
|
|
Гость_Supermax_*
|
26.3.2007, 15:22
|
Guest Forum

|
Что касается расширенных данных:
Да можно. У атрибутов уже есть строка привязки. Которая доступна прямо в автокаде. Привязать данные к примитиву (выражаясь научно), можно только написав маленький макрос для этих целей. НО! Кроме проблемы группирования атрибутов в "свободном плавании" я никаких не вижу задач, которые нужно решать с помощью привязки. Может вы поделитесь своими мыслями?
|
|
|
|
|
|
|
|
27.3.2007, 9:01
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Честно говоря, я хотел бы попробовать посмотреть на готовое и собранное решение. Чтобы по нему уже высказываться. Поскольку сейчас понять общую логику приложения я не в силах. Заодно предложение определиться с терминологией: "Группирование" для меня это объединение нескольких примитивов (возможно, сложных) в объект "GROUP" (фактически команда _group). Атрибуты - это примитивы типа ATTDEF (если они лежат не внутри блока) либо ATTRIB (для варианта доступа к ним изнутри блока). "Привязка" - это режим объектной привязки (системная переменная osmode). "Строка привязки" - :?: --- Добавлю. dll-ки менять не могу в силу разных причин. Использую ADT 3.3, ADT 2005 Eng, ADT 2006 Rus, ACAD 2007 Eng, ADT 2007 Rus, сейчас подумывю об установке ACAD2008 (а частично мои пользователи вообще сидят на ACAD 2005 LT). И что мене прикажете делать? Я не знаю что и как там было поменяно в этой dll-ке, что, как мне кажется, вызывает достаточно опасений - достаточно вспомнить русификаторы, менявшие штатные кадовские dll. Задача о показе собственных свойств примитива не так проста, насколько мне известно, и требует достаточно качественного arx. --- про (vlax-dump-object) я в курсе. Вопрос: а насколько информативным будет сообщение типа: Код (vlax-dump-Object svr t) ; _cIni: nil ; Property values: ; Methods supported: ; GetIniString (2) ; WriteIniString (3) При условии, что документации нет? Логически можно попытаться догадаться о последовательности аргументов, но кто гарантирует правильность (за исключением разработчика)? Тут-то еще достаточно просто, всего 2-3 аргумента, достаточно очевидных. Но это разовая ситуация... --- Теперь насчет "отрицания применения"  Мои предложения сводятся фактически к некоторым постулатам, которые я для себя вывел (бОльшая часть подчерпнута из "САПР на базе") и по которым пишу свои приложения: 1. Приложение должно работать всегда и везде. Не выбивая систему в непонятное состояние. 2. По максимуму учитывать варианты нескольких версий. 3. Данные, используемые программно, должны быть скрыты от пользователя по максимуму. Любая привязка к "человеческому фактору" чревата. Остальные не настолько важны для данной задачи. Цитата как разработчик, я очень не хочу заморачиваться решением таких задач, как определение названия шрифта, состав обязательных атрибутов, расположение результатов расчета на листе. Даже отрисовку рамки в составе основного тела проги, упаси бог меня, вставить. А придется. Особенно учитывая вариант падения веса файла раз этак в 10 после снесения десятка-другого текстовых и размерных стилей. Учитывая вариант задачи типа "в фоновом режиме открыть все файлы из указанного каталога, относящиеся к данному проекту; посчитать общее количество труб, тройников, переходов и болтов для крепежа арматуры; вывести результат в таблицу или многострочный текст" почти всеми этими задачами заниматься все равно придется. Наверное, я "встал в позу", не буду спорить, но моим клиентам пока хватает того, что они получают. Цитата 1. Пограмма только для Русских! Ага, поскольку остальным она ехало-болело. Цитата 2. Только для инженеров - проектировщиков! Не-а, не только. Также для СДО, ПТО, фин.отдела... Цитата 3. Только для инженеров проектировщиков ОВ и ВК! Опять-таки мимо - АР, АС, ОВ, ВК, ЭО, ТП... Цитата 4. Только для спецификаций по ГОСТ 21.110! Понадобится - сделаю все что хотите, только расскажите чего надобно  Цитата 5. Считает программа только те детали, которые вы внесли в базу! Не внесли в базу, а вставили используя написанный софт. Все же разница есть. Цитата 6. Распечатывает только в составе таком-то и порядке таком-то! И не подумаю регламентировать. Клиенту надо - значит надо. Делается, тестируется и отдается на откуп. Цитата N. И еще пару десятков ограничений и циркулярных предписаний. Нафиг предписания! Программно соблюдаются настройки, программно же засовываются (невидимо для пользователя) все необходимые данные и т.п. Проще использовать написанный софт, чем работать руками. Цитата Привязать данные к примитиву (выражаясь научно), можно только написав маленький макрос для этих целей. Я б не стал так категорично утверждать. Ниже - 2 функции по записи ldata в примитив и чтению этих данных. Они настолько просты? Не сказал бы. Используются глобальные переменные, несколько библиотечных функций ну и так далее. Зато в любой момент я с любого примитива могу получить программно забитые в него данные. И работа с другими файлами в этом смысле меня не пугает совершенно  Код (defun _kpblc-ent-ldata-add (ent data-list append-data / exist_data res) ;| * Функция внесения дополнительных данных в примитив либо словарь. * Параметры вызова: * ent примитив, в который вносятся данные. Если примитив - * пространство модели, то создается глобальный словарь * с именем *kpblc-regname* и данные вносятся в него * data-list вносимые данные * append-data t - заменять полностью * nil -> только указанные пары (заменить либо добавить) * Возвращаемое значение: * полный список доп.данных или nil, если невозможно записать. * Примеры вызова: (_kpblc-ent-ldata-add (vlax-ename->vla-object (car (entsel))) '(("block" . "data1")) t) =============================================================================|; (if (or (eq ent *kpblc-model*) (and (= (type ent) 'str) (= (strcase ent) (strcase *kpblc-regname*)) );_ end of and );_ end of or (setq ent *kpblc-regname*) (setq ent (_kpblc-conv-ent-to-vla ent)) );_ end of if
(if (and (not append-data) (setq exist_data (_kpblc-ent-ldata-get ent)) );_ end of and (setq data-list (append data-list exist_data)) );_ end of if (vl-catch-all-apply '(lambda () (vlax-ldata-delete ent *kpblc-appname*))) (foreach item (_kpblc-list-dublicates-remove data-list) (if (not (member (car item) (mapcar 'car res))) (setq res (append res (list item))) );_ end of if );_ end of foreach (vlax-ldata-put ent *kpblc-appname* res) );_ end of defun
(defun _kpblc-ent-ldata-get (ent) ;| * Функция возвращает дополнительные данные, записанные в примитив (либо nil, * если их нет) * Параметры вызова: * ent указатель на примитив * Примеры вызова: (_kpblc-ent-ldata-get (vlax-ename->vla-object (car (entsel)))) =============================================================================|; (if (or (eq ent *kpblc-model*) (and (= (type ent) 'str) (= (strcase ent) (strcase *kpblc-regname*)) );_ end of and );_ end of or (setq ent *kpblc-regname*) (setq ent (_kpblc-conv-ent-to-vla ent)) );_ end of if (if (vlax-ldata-get ent *kpblc-appname*) (_kpblc-conv-list-to-lowcase (_kpblc-conv-list-to-pointlist (vlax-ldata-get ent *kpblc-appname*) );_ end of _kpblc-conv-list-to-pointlist );_ end of _kpblc-conv-list-to-lowcase );_ end of if );_ end of defun P.S. Пробовал приаттачить rar или zip, чего-то не срослось. Разбираться сейчас некогда
|
|
|
|
|
|
|
|
27.3.2007, 11:17
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Да, вот еще. Процитирую кусочек темы http://www.autocad.ru/cgi-bin/f1/board.cgi?t=17698zE : Цитата [Re:] Alan (2005-07-06 17:43:35) >potapovich (2005-07-06 15:50:40) В двух словах. 1.Используем для чертежей Акад 200х. Блоки оборудования имеют код марки, остальная информация в базе. 2.База проектов и оборудования реализована на MS Acces. 3.Позволяется прогой считать с указанного чертежа (через СОМ-сервер) количество и марки блоков или дополнить в итерактивном режиме при работе программы с базой оборудования. 4.Генератор отчета формирует по объекту и заголовкам спецификацию. Можно на принтер или в pdf. 5.Инструкция 16 стр., считая вместе с титулом. Так что можно прочесть. Если что-то не понятно пишите. Выслал Вам скриншоты и образец выходного документа. Добавлено: в качестве камешка в огород баз данных и общей методики их применения: http://cadmaster.ru/articles/35_sogl_rabota.cfm Хотя там и упоминаются решения CS, да и не со всеми высказываниями лично я согласен, но почитать рекомендую. Особенно предпоследнюю часть.
Сообщение отредактировал kpblc - 27.3.2007, 11:25
|
|
|
|
|
|
|
Гость_Supermax_*
|
27.3.2007, 17:34
|
Guest Forum

|
Да, согласен, надо с начала о формулировках договорится.
«Группирование» - объединение несколько скажем не примитивов, а объектов в группу по какому-то признаку. Объединять можно путем сборки объектов в один сложный (команда _group) Объединять можно путем привязки к каждому составляющему группу объекту расширенных данных в виде строки букв или цифр. Объединять атрибуты, можно установив общее значение для всех входящих в группу атрибутов в строке Prompt. Можно группировать путем размещения в отдельном слое Можно группировать путем объединения в блок Можно группировать выделением цветом Можно группировать расположением по оси Z (что к стати я и делаю, строя модель здания).
«Привязка» - сцепление одних данных с другими. Режим объектной привязки имеет отношение к общей терминологии только в плане установки связи данных о координатах расположения с остальными данными объекта.
У царя, например атрибутом его царской власти, является скипетр и держава, а также плащ с горностаем. В модели Автокада атрибутом может быть что угодно, чего угодно. Можно назначить атрибутом блока текст в котором в начале указано имя и расположение блока. И т.д.
С показом свойств примитива следующее: Примитив должен иметься в наличии либо в самом файле AutoCAD-а, либо в зоне досягаемости (должен быть активирован доступ к файлу, где расположен объект). Если это кадовский примитив, то его надо с начала превратить во vla-объект, чтобы возвращаемое значение было #<VLA-OBJECT ТУТ_КАКАЯ_ТО_ХРЕНЬ И_ТУТ_ТОЖЕ>
(vlax-dump-object (vlax-ename->vla-object (car (entsel "выберите объект"))) T)
Потом углубляемся
(vlax-dump-object (vlax-get-property (vlax-ename->vla-object (car (entsel "выберите объект"))) 'Application) T)
Потом еще глубже
(vlax-dump-object (vlax-get-property (vlax-get-property (vlax-ename->vla-object (car (entsel "выберите объект"))) 'Application) 'ActiveDocument) T)
И т.д.
А это (vlax-dump-Object svr t) ??? наверное переменная? Ну по поводу Лиспа, погуторим как-нибудь в другой теме. Только свисни в какой.
На счет отрицания применения. 1. Приложение должно работать всегда и везде. Не выбивая систему в непонятное состояние. – За, двумя руками. 2. По максимуму учитывать варианты нескольких версий. – Смутно понимаю о чем речь, но я ведь SUPERMAX , значит за все, что MAX. 3. Данные, используемые программно, должны быть скрыты от пользователя по максимуму. Любая привязка к "человеческому фактору" чревата. Начну с заду. «Человеческий фактор» чреват там, где есть опасение, что не корректное поведение может серьезно навредить делу. Вот в AutoCad-е данные, которые используются программно, такие как настройки стилей, форматов, сценариев открыты пользователю, как в специальных окнах редактирования, так и в текстовой форме, а именно в файлах, которые можно редактировать с помощью блокнота. Мало того, вы имеете право общаться с программой программно. А что можно написать в командах? Да такое, что сотрет к черту весь винчестер.
Я лишь использую Excel как такое окно, которое лучше СУБД-ешного файла в плане умственной доступности основной массы проектировщиков, а также лучше простого текстового файла тем, что есть ячейки, разделяющие информацию. Можно конечно сделать свой «маршрутизатор», но тут есть одно маленькое обстоятельство. Я контачу с иностранными фирмами, которые производят некоторое, очень популярное у нас в стране оборудование и прога ДОЛЖНА работать по DIN, а это значит, что текст как всплывающих окон, так и маршрутизация данных при распечатке должен быть легко переводим. Особенно маршрутизатор, поскольку содержимое во многих ячейках 1:1 переписывается в лист спецификации. Для всплывающих окон я сделаю англоязычный вариант (хотя простым блокнотом легко можно все изменить хоть на китайский).
Я очень рад, что мои ироничные ограничения вас все-таки чем-то не устраивают. Ну ехало-болело допустим многим, шахтерам например, сталеварам, покорителям горных вершин и т.п. а вот для СДО, ПТО, фин.отдела... АР, АС, ОВ, ВК, ЭО, ТП... и.т.п. очень даже болело-ехало. И не только в России, а еще Украине, Белоруссии, США, Израиле, Канаде и странах ЕЭС. Смешно? - Это пока вам от них заказ за очень большие деньги не упал. Строят тут, а отчитываются там. Штампы вот изучать приходится. А заполнять их как приятно, без знания языка, обалдеть! А так, Атрибуты их, бланк их, файл с маршрутизацией «по их усмотрению» - тоже их. Все это делаю не я, а ИХ девушки. А я только ваяю и с нашими проектировщиками воюю. Все НАШИ проблемы после разрешения ИХ проблем автоматически умирают. И какие угодно бланки, в каком угодно порядке, каким угодно шрифтом (ну нет у меня в программе установленного шрифта, только импортируемое значение из маршрутизатора). Не разбирался с вашей функцией, но даже невооруженным взглядом видно, что макрос не большой. Да, привязать можно, но зачем? И что? По следующему сообщению: Ну вляпались ребята в СУБД, очевидно. Их судьба теперь все элементы, всех производителей вносить в эту базу и таскать ее за собой. Код марки вставить – вставили, а остальные параметры (которых к стати раз, два и обчелся) в БАЗУ поместили. Обалдеть! А формат этой базы их собственный, хоть и на MC Acces выполнен. И теперь их формат надо как ГОСТ или DIN утвердить (всего лишь). Ну про стандарт оформления документации, особенно про толщину линий и выбор шрифта – сколько проектировщиков, столько и мнений. А предпоследний опус очень особенно вот это: - Но откуда возьмется и как должна быть размещена информация для работы смежников? Конечно, всю информацию по использованному оборудованию можно хранить прямо в модели в качестве атрибутов. Но тогда при регенерации очередного вида (а ведь нередко модель содержит сотни и даже тысячи различных компонентов) будет работать не человек, а кофейный автомат. Как красиво описано! Какие сравнения! Какой слог! Особенно про «кофейный автомат» мне понравилось. К стати ты не знаешь о чем это они? Я расставил оборудование и отдал электрикам. Они клацнули по насосу и увидели его мощность, прицепили к нему провода и потянули, куда им надо. Я чего-то не догоняю наверное? О какой информации идет речь? Сделали отдел САПР и пытаются натянуть штаны через голову, вот что это.
|
|
|
|
|
|
|
|
28.3.2007, 8:38
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Оставлю, наверное, пока за бортом расширенные данные, словарные данные и прочую лабуду - это тема немного отдельного разговора. А чем отличается в предлагаемой терминологии привязка и объединение? Если и то, и другое выглядит (да, наверное, и реализовывается) одинаково практически? Цитата У царя, например атрибутом его царской власти, является скипетр и держава, а также плащ с горностаем. Означает ли это, что каждый, схвативший скипетр, державу и плащ с горностаем, становится царем? Если да, то я пошел копить деньги на плащ  Имя и расположение блока определяется его конкретной вставкой и делать для этого лишние телодвижения, думаю, ни к чему (через entget -> группы 2, 10, 51 и 210; для vla-представления - name, insertionpoint, rotation, normal). Не всегда надо преобразовывать примитив в vla-представление. Если честно, иногда это даже лишнее. DXF Reference пока никто не отменил, насколько мне известно  Цитата А это (vlax-dump-Object svr t) ??? наверное переменная? svr - Это указатель на СОМ-сервер, созданный из-под акада и с которым я работаю на данный момент. Свое творение, принципиально было важно показать, что методы могут иметь несколько параметров, типы данных которых сразу не скажешь, покумекать надо. Цитата «Человеческий фактор» чреват там, где есть опасение, что не корректное поведение может серьезно навредить делу. Вот в AutoCad-е данные, которые используются программно, такие как настройки стилей, форматов, сценариев открыты пользователю, как в специальных окнах редактирования, так и в текстовой форме, а именно в файлах, которые можно редактировать с помощью блокнота. Мало того, вы имеете право общаться с программой программно. А что можно написать в командах? Да такое, что сотрет к черту весь винчестер. Я говорю про следующее: например, есть вставка блока (неважно какого). Мне (точнее, лиспу) по барабану, на каком слое, каким цветом и каким типом (или весом) линии он нарисован. Через (_kpblc-ent-ldata-get) я получу, что этот блок содержит в себе, к примеру, следующие данные: '(("id" . 65) ("tablename" . "usertbl_EO_EquipLightIntRoof") ("spec_name" . "Светильник потолочный") ("conn_ent" . "16F4")) Что бы пользователь с блоком ни делал (кроме удаления и разбития, конечно), эти данные он не сможет ни удалить, ни поменять. Зато я в любой момент буду знать, что мне для составления спецификации достаточно будет сформировать запрос к БД к таблице usertbl_EO_EquipLightIntRoof примерно такого типа: Код select * from usertbl_EO_EquipLightIntRoof where ((([id]=65))); И получить полные данные об этой единице оборудования. Удалив из них ненужное, можно и таблицу любого состава делать. Цитата Я лишь использую Excel как такое окно, которое лучше СУБД-ешного файла в плане умственной доступности основной массы проектировщиков, а также лучше простого текстового файла тем, что есть ячейки, разделяющие информацию Я в свое время пробовал несложную БДшку нарисовать в Excel'e. Да, все очевидно. Но количество ограничений меня выбило из колеи. А также скорость работы. То, что оно удобно, не всегда означает, что оно правильно. Работа с БД (даже в табличной форме) дает как правило более быстрый и простой в масштабировании решения результат. А написать междумордие (интерфейс) - это задача программиста. Таскать БД за собой совершенно не обязательно (мало того, вредно). Достаточно положить ее на сервер, прописать права доступа и пользователей. Все, дальнейшая работа выполняется уже по мере надобности. И ничего лишнего.
|
|
|
|
|
|
|
Гость_Supermax_*
|
28.3.2007, 10:05
|
Guest Forum

|
Ни Grundfos, ни DRV, ни Caprari, ни Varimex, ни Ballomax, ни Ballorex, ни Giacomini, ни еще столько же раз по столько, не будут заполнять твою базу!!!! А только у Grundfos-а более 9000 наименований продукции! Да не отсохнет твоя рука, да не вытекут твои глаза! В чертеже только ОДИН насос, а чтобы вставить в спецификацию его данные надо иметь а) – сервер, б) – базу на нем, в) - наличие в этой базе данного насоса. Grundfos (а я в этом уверен) оформит свои изделия в виде блоков с атрибутами, а все СУБД-шники будут игнорировать эти атрибуты, вставлять еще один свой с номером элемента в базе и записывать в эту базу то, что уже и так есть в блоке! А чтобы чертеж без их базы посчитать было нельзя – сотрут все атрибуты производителя. 9000 раз будут переписывать в базу и 9000 раз чистить каждый блок. Зато вокруг этой базы, сервера и правил пользования этим хозяйством разведут целый штат «специалистов» и будут, как первый отдел оформлять допуск и проверять на проф. пригодность!
Уважаемый kpblc, Excel я как базу не использую. В Excel-е я разместил перечень разделов и последовательность их вывода при подсчете элементов спецификации. Я это называю «маршрутизатором». Данная фигня показывает данным по какому маршруту им двигаться при складывании в спецификацию. Также в Excel-е я разместил в некоторых ячейках цифры, которые регламентируют расположение и форму выводимых данных в данном столбце, чтобы пользователь мог сам регулировать местоположение и ширину данных в столбце.
Атрибут детали, не есть сама деталь! Атрибут власти, не есть сама власть!
Могу дать совет всем сотрудникам и начальникам отделов САПР (систем автоматизированного проектирования). Есть такое понятие как информационная технология. Есть такое понятие как сопровождение информационной технологии. Самое главное занятие сотрудников отдела САПР – это не сидение на базе, а совершенствование информационных технологий и внедрение их в практику работы института. Люди AutoCAD-ом пользоваться не умеют, рамки и штампы в модели строят. В некоторых подразделениях с кульманом никак не расстанутся, а сапровцы выбивают себе сервер с рейдмассивом, штатные должности, оклады и премии. Все это прикрывают аргументом о необходимости имения единой базы данных элементов и поскольку она ОГОГО требуют прав администратора по доступу к ней.
На сайтах производителей будут лежать виртуальные копии производимой ими продукции со всеми атрибутами. По Интернету будут гулять тысячи моделей, которые сами по себе есть исчерпывающая база данных на те элементы, которые в этих моделях есть, а в институтах с мощным серваком, амбициозным руководством отделов автоматизации, эти модели будут отвергаться как вражеские и к применению не допускаться.
Флаг вам в руки господа! Но нам не по пути.
|
|
|
|
|
|
|
|
28.3.2007, 13:24
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Раз не по пути, то тогда всего хорошего.
|
|
|
|
|
|
|
Гость_Guest_*
|
28.3.2007, 16:33
|
Guest Forum

|
>Supermax Не хотелось бы называть это битвой гигантов. Не вижу у Supermax"а: широты мы"шленния в этом вопросе; знания альтернативных способов; низкое качество ЛИСП"а и т.д. Несколько лет назад мы у себя ходили по подобно Вашему пути. Всё делали на ЛИСПе, спецификации в Автокаде (часть проекта ВК, ОВ, ТХ). Кстати говоря чертить ЛИСПом не к чему, вставляй ранее сделанный блок, а заполняй ЛИСПом. Быстрее на порядок и правильнее. Разговор идёт о 9-ти позиционных спецификациях оборудования. Спецификации элементов на чертеже (типа окна-двери, экспликацию помещений..) делаем другим способом. Чтобы не быть голословным могу прислать прогу выполнения спецификаций оборудования, о которой упоминалось в посте kpblc"а. Взгляните, покритикуйте, оцените, сравните... Alan
|
|
|
|
|
|
|
Гость_Supermax_*
|
28.3.2007, 16:47
|
Guest Forum

|
Выкладываю монтажную схему (в старом варианте блоков, то есть с именами и усе). 8,21 МБ
Сообщение отредактировал e.o.l. - 19.11.2009, 19:42
Причина редактирования: чистка форума
|
|
|
|
|
|
|
Гость_Supermax_*
|
28.3.2007, 17:26
|
Guest Forum

|
Что вы опять завели шарманку по поводу примитивного лиспика отчерчивания рамки, с критикой низкого качества которого я давно согласился. И сам же написал то, что вы тут только что предложили. Почитайте выше. На счет широты взглядов, это следует понимать так, что ежели я не согласен с позицией централизации свойств объектов, то я значит не широко вижу? А может наоборот уважаемый Guest? Я пытаюсь взглянуть на ситуацию в целом, учитывая не только интересы отдельной прослойки инженеров, а еще не забываю об источнике информации и проблемах этого источника. Что касается Лиспа - вы не заметили, что я выкладываю макросы на VBA? А пытаюсь написать на Лиспе только потому, пишу макрос к AutoCAD-у, а Лисп его родное чрево. Да, может я буду выпадать из Лиспа в VBA, может буду выпадать еще куда нибудь. Какая разница? Напишу, перепишу, еще раз напишу и т.д. Со вставкой блока рамки и штампа, еще раз повторюсь согласен на все 100. Я даже его постараюсь сделать динимическим. Разговор идет не только о 9-ти позиционной спецификации, а еще по ISO 7573:1983 и DIN 6771-2-1987, да и ГОСТ не только 21.110, а и 2.106 со всеми формами. И макросу будет наплевать, какую рамку чертит внешнее приложение и как чертит тоже. И текст располагаться бутет в том месте, в котором ему пользователь укажет. И не надо мне говорить, что кто-то не понимает что *.xls файл формируется пользователем (а то и совсем не пользователем, а тем кто написал отрисовку штампа) только один раз. Если вы думаете, что я не знаю что такое экспликация оконных и дверных проемов, то глубоко заблуждаетесь. И даже сделав экспликацию оконных и дверных проемов, вы обязаны все позиции этой экспликации отразить в спецификации. А вот вы спецификацию смешали с экспликацией помещений! kpblc-а я уважаю и даже понимаю его проблемы, но вы не поняли самого главного (или поняли, но делаете вид, что не поняли), здесь идет битва не гигантов (о чем речь и не шла) а о подходе к правилам отрисовки элементов чертежей. Одни (то есть я в гордом одиночестве) говорят, что блок должен быть с полным комплектом атрибутов, А другие (то есть kpblc) хотят, чтобы блок содержал только позицию в базе. Я противник такого разделения информации а вы?
p.s. Макрос отчерчивания рамки со штампом может и примитивный, и даже кривой и одноглазый, только что-то я не вижу нигде похожего макроса. Может ссылочку дадите, а еще лучше напишите то, что достойно с вашей точки зрения и сюда положите. Я в Макрос3.xls на него ссылочку дам. А если людям не понравится ваша версия, они свою сварганят и ссылочку подправят.
|
|
|
|
|
|
|
Гость_Supermax_*
|
29.3.2007, 10:05
|
Guest Forum

|
Есть реальная проблема. Как переставлять в списке атрибутов, отображаемых в свойствах блока, эти самые атрибуты местами? Они отображаются в обратном порядке от того, что был при их создании. То есть, последний созданный атрибут находится в первой строке свойств. Редактирование дает только видимость, вроде бы переставляет, но после двух, трех вхождений в свойства, некоторые атрибуты перемещаются сами по себе. А если блок создать заново, то даже отредактированные атрибуты все равно выстраиваются в той последовательности, в которой они были созданы в самом начале. Даже не они, а те, с которых они скопированы. Время создания тут ни причем, порядок определяется расположением атрибутов в базе рисунка.
КАК ИХ В ЭТОЙ БАЗЕ МЕНЯТЬ МЕСТАМИ???
|
|
|
|
|
|
|
Гость_Guest_*
|
29.3.2007, 11:17
|
Guest Forum

|
Все очень просто: порядок отображения атрибутов (как правило) определяется последовательностью их создания, и ничем иным. Перестраивать блоки надо.
|
|
|
|
|
|
|
Гость_Supermax_*
|
29.3.2007, 13:07
|
Guest Forum

|
Мой великий помощник Сергеев Дмитрий в данный момент пишет макрос на VBA, который по существующей группе атрибутов создает ее точную копию, только путем не копирования а создания новых атрибутов с начинкой старых в порядке по которому расположены старые атрибуты по оси Y. То есть если надо вставить атрибут в список, раздвигаете атрибуты, вставляете новый, нажимаете на кнопку, обводите старую группу и получаете новую. А старую грохаете. Как напишет - выложу. А пока король сезона - насос Grundfos Какой-то там с полным комплектом атрибутов! Не, не все, забыл вставить ссылку на страничку в сайте производителя и ссылку на поставщика. Вот макрос сделаем и испытаем. Дружные аплодисменты!!!
|
|
|
|
|
|
|
Гость_Supermax_*
|
5.4.2007, 17:09
|
Guest Forum

|
Кто сказал, что динамические блоки могут быть только 2D? Вот вам пример 3D динамических блоков. Трубы ППУ от 57 до 159 диаметров. Кто в 3D строит теплотрассы - пригодятся. Файл 84 КБ.
|
|
|
|
|
|
|
Гость_Supermax_*
|
5.4.2007, 18:31
|
Guest Forum

|
Причем заметьте господа, что если у динамического блока изменлся параметр, то и имя изменилось, а если параметр стал опять прежний, то и имя тоже станет прежним. Например: Изначально был динамический блок с установленной начальной длинной 1000мм. и именем Труба_ППУ_76. Изменили длинну до 11000мм. Имя стало к примеру +U430. Скопировали трубу и изменили длинну новой трубы на 5000мм. Имя тоже изменилось и стало +U450, опять к примеру. Опять скопировали трубу (что 5 метров длинною) и установили длинну нового участка 11000мм. Имя этой трубы стало такоеже как и у первой трубы длинною 11000мм. +U430! Таким образом, посчитав все блоки с одинаковым именем и прочтя длинну любого из них, получаем труба такая-то длинной такой-то столько-то.
|
|
|
|
|
|
|
|
6.4.2007, 12:06
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата(Supermax @ Apr 5 2007, 19:31 ) Причем заметьте господа, что если у динамического блока изменлся параметр, то и имя изменилось, а если параметр стал опять прежний, то и имя тоже станет прежним. Например: Изначально был динамический блок с установленной начальной длинной 1000мм. и именем Труба_ППУ_76. Изменили длинну до 11000мм. Имя стало к примеру +U430. Скопировали трубу и изменили длинну новой трубы на 5000мм. Имя тоже изменилось и стало +U450, опять к примеру. Опять скопировали трубу (что 5 метров длинною) и установили длинну нового участка 11000мм. Имя этой трубы стало такоеже как и у первой трубы длинною 11000мм. +U430! Таким образом, посчитав все блоки с одинаковым именем и прочтя длинну любого из них, получаем труба такая-то длинной такой-то столько-то. Лажа, прости меня, Господи. Сносим все объекты, кроме самого верхнего, чтоб уж точно знать, про что разговор. Заодно и _purge применяем. Код _$ (setq ent (vlax-ename->vla-object (car (entsel "\nЕдинственная труба : ")))) #<VLA-OBJECT IAcadBlockReference2 0d57fd74> _$ (vla-get-name ent) "*U5" _$ (vla-get-EffectiveName ent) "Труба_ППУ_57" Меняем длину с 2000 на 20000 Код _$ (vla-get-name ent) "*U5" _$ (vla-get-EffectiveName ent) "Труба_ППУ_57" Копируем объект. Теперь: Код _$ (setq ent_copied (vlax-ename->vla-object (car (entsel "\nСкопированный объект : ")))) #<VLA-OBJECT IAcadBlockReference2 0d590a64> _$ (vla-get-EffectiveName ent_copied) "Труба_ППУ_57" _$ (vla-get-name ent_copied) "*U11" _$ (vla-get-EffectiveName ent_copied) "Труба_ППУ_57" То, что name меняется, ни о чем не говорит, кроме того, что надо внимательнее читать чужие посты, в том числе и об особенностях работы bcount. А вот теперь внимание, бонус! Код _$ (vla-get-name (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-EffectiveName ent))) "Труба_ППУ_57" _$ (vla-get-name (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-EffectiveName ent_copied))) "Труба_ППУ_57" Ни о чем не говорит? --- Добавлено: код работать будет на версиях от 2006 и выше. Для обычных блоков в общем-то EffectiveName можно тоже использовать, но я бы не стал этого делать по причине того, что софт, который я пишу, работать должен и на 2005 версии тоже. А там дин.блоков нет.
Сообщение отредактировал kpblc - 6.4.2007, 12:19
|
|
|
|
|
|
|
Гость_Supermax_*
|
9.4.2007, 12:20
|
Guest Forum

|
О! А я уже тебя оплакал. Думал, вот, был у меня единственный собеседник, обиделся почему-то на меня и ушел «своей дорогой». Слава богу, ты не покидаешь меня в абсолютном моем одиночестве. Тут ведь одни приведения шастают. Качают, иногда улюлюкают и исчезают. А я один тут сижу и все сам делаю. Вот и сейчас предлагаю вниманию публики блок уже представленного выше насоса, только с динамическими атрибутами. А также анализ поведения такого блока. Все, у кого AutoCAD 2005, 2004 и ниже – сушите весла. Да, можно создать жесткий аналог производимой продукции. Вот стоят прокладки BUBE на таком насосе, значит и насос с такими прокладками, а также жестко заданными параметрами двигателя, материала корпуса, материала крыльчатки, типа присоединения и пр. переменными параметрами – один. Сколько сочетаний, столько и блоков насосов. Но есть и другой способ – это установка в блоке динамических атрибутов. Кстати, у динамических атрибутов, в свойствах блока кроме падающих меню с выбором параметра есть еще одно очень полезное свойство – «только для чтения». Установленные производителем данные должны быть защищены от случайного изменения. Нет, изменить их можно, но это надо залезть в блок, затем залезть в таблицу установок, а это уже случайностью не назовешь. Блок, снабженный динамическими атрибутами, которые не меняют геометрию объекта, также как и блок, где геометрия меняется, при изменении параметра любого из свойств доступных к выбору меняет значение точечной пары с DXF кодом (2 . *). НО! Если блок один, то есть, нет в чертеже другого, такого же - имя не меняется. При внесении изменений в обычные атрибуты имя также не меняется. Таким образом, можно смело нумеровать позиции через простые атрибуты и на подсчет блоков это не повлияет, а если у вас есть параметр, который должен быть учтен при подсчете – оформляйте его динамическими атрибутами. Сразу рявкну на любителей поумничать – любые пары (наименование свойства – его значение) декларированных свойств объекта есть его атрибуты, чем бы вы их не создали и как бы не разместили! ВНИМАНИЕ! При создании блока, после завершения процесса упаковки его атрибутами и сохранения файла, блок в рисунке – убить! Если блок необходим, то его надо только вставлять через функцию Insert. Это относится только к первому (исходному блоку), поскольку при его создании, вставляя новые атрибуты, постоянно происходит смена имени блока в Модели, а параллельно в базе чертежа тоже происходит изменение конфигурации блока, но без изменения имени. При вставке в пространство Модели блока из базы получаются два абсолютно одинаковых блока, но только с разными именами. P.S. Мне теперь столько переделывать!
|
|
|
|
|
|
|
|
9.4.2007, 13:59
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Я не хочу говорить, почему твой подход я не могу назвать полностью правильным и неоспоримым - тема свалится во флуд. Свой пост я проверял на конкретном файле и на конкретном блоке, среда проверки - ADT 2006 Rus + SP1, AutoCAD 2007 Eng + SP1, ADT 2007 Rus + SP1. И основная идея моего поста была такова: проверять надо по полной программе. Разберись с понятием "имени" блока. У тебя там такая каша получается - то имя меняется, то нет. Раздели - есть имя блока (vla-get-name blk), есть его эффективное имя (vla-get-effectivename blk). Цитата Сразу рявкну на любителей поумничать – любые пары (наименование свойства – его значение) декларированных свойств объекта есть его атрибуты, чем бы вы их не создали и как бы не разместили! Значит я поумничаю. Опять же, терминологию уточняй - атрибут это атрибут, динамическое свойство это динамическое свойство. Курица не станет крякать, сколько ее ни называй уткой. --- Добавлено: Цитата <...>теперь столько переделывать! Напиши код, который будет проверять соответствие "библиотечного" блока и имеющегося в файле. Голову сломаешь, практически гарантирую. Все надо делать через vla-функции; гарантированно "на ура" разобраться с динамическими свойствами не получится. Для примеру: Код ;|Вот так можно получить конкретные значения всех динамических свойств конкретной вставки блока|; (defun test (/ ent res) (if (and (setq ent (car (entsel "\n Select dyn block <Cancel> : "))) (= (cdr (assoc 0 (entget ent))) "INSERT") (= (vla-get-isdynamicblock (setq ent (vlax-ename->vla-object ent))) :vlax-true );_ end of = );_ end of and (setq res (mapcar '(lambda (x) (cons (vla-get-description x) (vla-get-value x)) );_ end of lambda (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties ent)) );_ end of vlax-safearray->list );_ end of mapcar );_ end of setq );_ end of if res );_ end of defun Но! Это для конкретной вставки. Как получить то же самое из описания блока, я не разбирался. А тебе, я так чуйвствую, придется
Сообщение отредактировал kpblc - 9.4.2007, 15:00
|
|
|
|
|
|
|
Гость_Supermax_*
|
9.4.2007, 16:35
|
Guest Forum

|
От подхода у меня пока только рожки да ножки, так что оценивать еще нечего. Я пока уточняю среду для анализа. Некоторые макросы еще не весь замысел. По последнему облому (в смысле динамических атрибутов), так вообще кое что рухнуло. Ты мне тут про свой пост все толкуешь, и о проверке всего и вся, так не затруднит еще раз свою позицию осветить, а то я тоже тебя с трудом понимаю. Теперь с именами. Свойство Name: Описание: Имя
Свойство EffectiveName Описание: Оригинальное имя блока.
DXF код 2 Описание: Имя (атрибута, блока и т.п.)
(vla-get-name blk) – не имя блока, а функция технологии ActiveX «vla-get» примененная к совйству «name» объекта «blk» читающая значение этого свойства. Тоже самое и с (vla-get-effectivename blk). Оригинальное имя изменить можно, переименовав блок. Но не нужно, поскольку оригинальное имя необходимо только при выборе блока из базы и вставке его в чертеж. Оно должно быть по возможности не многобуквенно и понятно. Имя, то, которое просто имя, и то самое, которое указывается в точечной паре с DXF кодом 2, и то самое по которому считается количество элементов в чертеже в динамических блоках по началу такое же как и оригинальное, но при изменении динамических параметров естессно меняется на *Unnn где nnn номер зависящий от параметров динамического блока. Два одинаковых по динамическим параметрам блока имеют один и тот же nnn (за исключением описанной мною ситуации при его создании).
Да, каша. Я ее, что ли придумал? Вот «чистый лист», в нем один единственный динамический блок. Смотрим его «прайс-лист». (entget (car (entsel)))
Select object: ((-1 . <Entity name: 7ec16040>) (0 . "INSERT") (330 . <Entity name: 7ef80cf8>) (5 . "1360") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Спецификация") (370 . 5) (100 . "AcDbBlockReference") (66 . 1) (2 . "Насос_TPED_Grundfos_65-120-2") (10 1460.98 1314.86 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Комментарии: Значение свойства Name – соответствует оригинальному имени блока.
Пошевелили динамический параметр. Select object: ((-1 . <Entity name: 7ec16040>) (0 . "INSERT") (5 . "1360") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ec16088>) (102 . "}") (330 . <Entity name: 7ef80cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Спецификация") (370 . 5) (100 . "AcDbBlockReference") (66 . 1) (2 . "*U4") (10 1460.98 1314.86 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Комментарии: Значение свойства Name – изменилось на «*U4». Что вполне понятно, поскольку данный блок не такой, как тот, что в базе.
Еще раз пошевели. Select object: ((-1 . <Entity name: 7ec16040>) (0 . "INSERT") (5 . "1360") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ec16088>) (102 . "}") (330 . <Entity name: 7ef80cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Спецификация") (370 . 5) (100 . "AcDbBlockReference") (66 . 1) (2 . "*U4") (10 1460.98 1314.86 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Комментарии: Значение свойства Name – Осталось прежним «*U4», что тоже вполне понятно, поскольку блок в чертеже один.
Вернули все значения в прежнее состояние. Select object: ((-1 . <Entity name: 7ec16040>) (0 . "INSERT") (5 . "1360") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ec16088>) (102 . "}") (330 . <Entity name: 7ef80cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Спецификация") (370 . 5) (100 . "AcDbBlockReference") (66 . 1) (2 . "*U4") (10 1460.98 1314.86 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Комментарии: Значение свойства Name – Осталось прежним «*U4», что уже не вполне понятно, поскольку блоку возвращены его родные значения по умолчанию, хотя с точки зрения логики – зачем менять, раз блок в единственном количестве?
Вставили из базы еще один такой же блок и посмотрели его параметры и параметры блока, что после возврата модификации динамических параметров.
Новый блок. Select object: ((-1 . <Entity name: 7ec16628>) (0 . "INSERT") (330 . <Entity name: 7ef80cf8>) (5 . "1415") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Спецификация") (370 . 5) (100 . "AcDbBlockReference") (66 . 1) (2 . "Насос_TPED_Grundfos_65-120-2") (10 1981.67 869.867 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Старый с восстановленными параметрами как у исходного. Select object: ((-1 . <Entity name: 7ec16040>) (0 . "INSERT") (5 . "1360") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ec16088>) (102 . "}") (330 . <Entity name: 7ef80cf8>) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Спецификация") (370 . 5) (100 . "AcDbBlockReference") (66 . 1) (2 . "*U4") (10 1460.98 1314.86 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
Комментарии: Сложилась ситуация, когда в чертеже два абсолютно одинаковых по параметрам блока, но с разными именами. Попробуем сделать ATTSYNC с начала блоку с (2 . "Насос_TPED_Grundfos_65-120-2")
Вот его данные (для сокращения места все кроме точечной пары с кодом 2 буду стирать) (2 . "Насос_TPED_Grundfos_65-120-2")
Теперь ATTSYNC блоку старому, с измененными в начале параметрами, а потом восстановленными. (2 . "*U5")
Комментарии: Сколько ни делай ATTSYNC блоку вставленному из базы его точечная пара (2 . "Насос_TPED_Grundfos_65-120-2") не меняется. А у блока, что после реанимации постоянно с каждым ATTSYNC прибавляется на единицу.
Если скопировать много таких блоков, то после ATTSYNC любого из них (2 . "*U5") изменится у всех (кроме исходного) на (2 . "*U6") и т.д.. Если бы исходного блока в чертеже не было, то все было бы логично, поскольку с каждым ATTSYNC вы перезаписываете вхождение блока, а в памяти, должно сохранятся прежнее значение, для возможности отката. А так, просто не знаю что делать. Скорее всего все динамические блоки буду проверять на соответствие их имени "*Unnn" и если не соответствует, то автоматически менять любой дин параметр, а потом его сразу восстанавливать. Таким образом все станет на свои места.
А ты говоришь «У тебя там такая каша получается - то имя меняется, то нет.»
Теперь с атрибутами. Цитирую: А.И. Чуприн, В.А. Чуприн AutoCAD 2005 Platinum Edition
Блоки с атрибутами. С любым блоком можно связать атрибуты блока – текстовую информацию, которая может изменяться при вставке блока в рисунок. С ее помощью можно выполнять надписи к блокам, ее можно выводить в отдельный файл для использования в электронных таблицах, базах данных или как исходный материал для создания различного рода спецификаций.
Конец цитаты.
Как ты думаешь, если эту текстовую информацию вывести в отдельный файл, она перестанет быть атрибутом каких-то конкретных блоков? (Тьфу, вот и я уже путаюсь. Не блоков, а изделий, которые обозначены этими конкретными блоками). Я считаю, что не перестанет. А в каком виде и с помощью каких средств она существует не имеет совершенно никакого значения для определения атрибут это или нет.
Вот перед тобой блок насоса, ну не меняются в этом графическом примитиве его свойства, а в описании меняются не свойства примитива «blk», а указываются атрибуты реального, живого насоса! Это ты все время путаешь атрибуты примитивов с атрибутами их живых прототипов.
Атрибуты примитивов это то, что выше в свойствах. Точки вставки, цвет, слой и прочая мутотень. И эти описанные свойства есть атрибуты этого примитива!
А то, за что ты так переживаешь, то есть за AttributeReference – это не атрибут, а объект AutoCAD-а предназначенный для удобного хранения информации, также как объекты Text и Mtext не сам текст, а его оболочка! Да, для удобства пользования оболочки назвали также как и их содержимое, но я называю вещи своими именами и стараюсь вернуть понимание своих читателей и одного писателя к начальному, исходному понятию значения термина «атрибут».
P.S. Динамическое свойство изделия, представленное в его виртуальной копии в виде описания этого свойства – есть атрибут этого изделия, чем бы это описание не было создано. Пока я это писал, вижу ты тоже не сидел. Пока почитай это, а я поколдую с AutoCAD-ом
Добавлено - 17:40 Ты не перживай, я активно использую ActiveX. Вот сейчас буду с его помощью потрошить Lookup Parameter и Lookup Action/
|
|
|
|
|
|
|
|
9.4.2007, 17:28
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Суть моей позиции достаточно просто (кстати, ShaggyDoc в "САПР на базе..." ее отлично описал, я попробую кратенько. 1. Приложение выполняет свою работу и не оставляет систему в невнятном для пользователя виде (возвращаются системные переменные назад, закрываются ненужные файлы, возвращается представление и тому подобное, удаляются временные примитивы, закрывается коннект к базам данных или интернету, если он был открыт ну и так далее). 2. Приложение должно корректно работать с указанных разработчиком версиях. При попытке запуска в любой другой версии оно должно выдавать соответствующее предупреждение и не мутить воду. Либо вообще отказываться устанавливаться. 3. Приложение обязано работать в любых условиях. В случае несоблюдения каких бы то ни было условий, необходимых для ее работы, оно должно корректно завершаться (см.п.1) 4. Эксплуатация приложения должна быть удобной для пользователя, простой и понятной. Это к вопросу о последнем блоке. Я, как не спец, могу запросто так скомбинировать доступные динамические параметры, что такого насоса просто не будет 5. Приложение должно работать на любых вертикальных решениях, основанных на acad.exe (ADT / MDT etc) независимо от пути их установки и прав пользователя. Также допускается работа приложения в среде AutoCAD LT при условии, что туда можно загрузить lisp (а это возможно). Также приложение не должно быть привязано к какой бы то ни было жестко заданной папке: пользователь должен иметь право установить приложение по пути z:\a_vot_ne-buded\ili\budet\работать\но\я\не.хочу - а приложение все равно будет выполнять возложенные на него задачи. 6. Удаление приложения должно оставлять машину в чистом виде; создававшиеся СОМ-серверы должны быть корректно деинсталлированы и разрегистрированы; файлы приложения должны лежать в строго определенном месте и не пытаться прописываться в системные папки, исключая случаи регистрации системных ocx-элементов (таких, например, как TruDBGrid и ему подобных). === Не менее принципиальные вещи: - сделать полностью универсальную прогу не под силу никому. И пытаться нечего. - прога должна корректно читать как минимум ту информацию, которая вставлена при помощи "дружественного" софта (попытка прочитать значение узловой выноски, созданной с помощью, например, MechaniCS, при условии отсутствия ObjetEnabler'a, обречена на фиаско). Все, что сверх того - отдельный бонус, за отдельные деньги и за отдельное время. === Теперь дальше. Динамические блоки - это порождение 2006й версии. И работать с ними лучше всего через activex-представления. Аналогичным образом ситуация обстоит и с таблицами и их стилями. Но! Нужность DXF я не отрицаю! Далее. Предлагаю следующую терминологию, иначе мы постоянно будем цапаться на ровном месте: === Описание блока. Может быть только одно. Блок = вставка блока. Имеет такие же свойства, как и любой другой примитив, а также конкретные значения текстовых атрибутов и динамических свойств. Атрибут = ATTRIB / ATTDEF = текстовый примитив, входящий в описание блока и для каждой вставки его могущий принимать различные значения. Динамическое свойство = параметр динамического блока. Свойство примитива: слой, тип, вес линии... === Почему я этого так настойчиво добиваюсь: не далее как сегодня мне в аську постучался хороший знакомый. Так мы с ним минут 20, наверное, выясняли - что ему надо: работать со вставками блоков или с описаниями блоков.
|
|
|
|
|
|
|
Гость_Supermax_*
|
9.4.2007, 18:34
|
Guest Forum

|
Твой перл в моей интерпритации.
(vl-load-com) (defun test (/ ent res) (if (and (setq ent (car (entsel "\n Select dyn block <Cancel> : "))) (= (cdr (assoc 0 (entget ent))) "INSERT") (= (vla-get-isdynamicblock (setq ent (vlax-ename->vla-object ent))) :vlax-true) ) (setq res (mapcar '(lambda (x) (cons (vla-get-PropertyName x) (vlax-variant-value (vla-get-value x)))) (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties ent))) ) ) ) res );_ end of defun
|
|
|
|
|
|
|
|
10.4.2007, 11:37
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата(Supermax @ Apr 9 2007, 19:34 ) Завтра подробнее напишу про свои чаяния, а пока твой перл в моей интерпритации.
(vl-load-com) (defun test (/ ent res) (if (and (setq ent (car (entsel "\n Select dyn block <Cancel> : "))) (= (cdr (assoc 0 (entget ent))) "INSERT") (= (vla-get-isdynamicblock (setq ent (vlax-ename->vla-object ent))) :vlax-true) ) (setq res (mapcar '(lambda (x) (cons (vla-get-PropertyName x) (vlax-variant-value (vla-get-value x)))) (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties ent))) ) ) ) res );_ end of defun
До скорого. Не очень понял разницу между моим и твоим кодами... Единственная строка - (vl-load-com), но она в 2006 уже не является обязательной. 2005-й иногда еще не подгружает ее моментально, но в 2006 такого лично я не наблюдал.
|
|
|
|
|
|
|
|
11.4.2007, 10:15
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Предыдущий ответ - мой. У меня авторизация что-то не сработала. На всякий случай повторю: > Supermax: убедил. Но тогда можно и так получать (более внятные ИМХО результаты): Код ;|Вот так можно получить конкретные значения всех динамических свойств конкретной вставки блока|; (defun test3 (/ ent res loc:conv-to-value) (defun loc:conv-to-value (value / res) (setq res (cond ((= (type value) 'safearray) (setq res (mapcar 'loc:conv-to-value (vlax-safearray->list value))) ) ((= (type value) 'variant) (setq res (mapcar 'loc:conv-to-value (vlax-variant-value value))) ) (t value) );_ end of cond );_ end of setq res );_ end of defun
(if (and (setq ent (car (entsel "\n Select dyn block <Cancel> : "))) (= (cdr (assoc 0 (entget ent))) "INSERT") (= (vla-get-isdynamicblock (setq ent (vlax-ename->vla-object ent))) :vlax-true );_ end of = );_ end of and (setq res (mapcar '(lambda (x) (cons (if (= "" (vla-get-description x)) (vla-get-propertyname x) (vla-get-description x) );_ end of if (loc:conv-to-value (vlax-variant-value (vla-get-value x))) );_ end of cons );_ end of lambda (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties ent)) );_ end of vlax-safearray->list );_ end of mapcar );_ end of setq );_ end of if res );_ end of defun
|
|
|
|
|
|
|
Гость_Supermax_*
|
11.4.2007, 14:35
|
Guest Forum

|
Прога ушла в копилку. Спасибо. Следующая задача, с которой я уже справился, это маркировка в атрибутах изделия. Ты заешь, что во многих изделиях есть такая кака, как маркировка, которая состоит из набора символов, каждый из которых есть переменная величина с количеством от двух, до целой кучи значений. Количество вариантов маркировки равно количеству переменных перемноженных на количество других переменных и результат на количество третьих переменных, и результат ….. Ну ты понял. Двери, окна, насосы Grundfos, трубы ППУ и многое другое. В атрибутах изделия есть и сама маркировка, и расшифровка отдельных ее переменных. При изменении некоторых параметров меняется не только геометрическая форма, но и появляются дополнительные атрибуты изделия, как статические (только для чтения, динамические и динамические с возможностью изменения геометрии блока). В общем раскрываются такие возможности…! НО! Без проги, помогающей заполнять дин. Атрибуты – очень и очень гиморно создавать такую крутизну. Если хочешь, расскажу как это получается. Вот маленький пример, как это сделать в динамическом блоке. файл 1.8 МБ.
|
|
|
|
|
|
|
Гость_Supermax_*
|
11.4.2007, 15:02
|
Guest Forum

|
К стати о птичках: Я в этом файле накопировал штук 50 блоков, а размер файла при этом сократился до 1.74 МБ. ХА, ХА, ХА! Сейчас решаю вопрос, куда вставлять длинну? Вот есть труба ППУ. Она заказывается в штуках. То есть, Труба такая-то, длинной такой-то, штук столько-то. Сделана труба дин. блоком. И название есть и маркировка, только длинна - динамический параметр, да еще и очень большого количества вариантов. До 5500 возможных длин с шагом 5 мм. Вставлять длинну в "Примечание"? или в следующую строку после "Наименование"? Как выделить этот параметр описания свойств изделия из остального списка и указать, куда он должен быть вставлен? Просится под "Наименование", поскольку логично звучит "Труба такая-то, L= столько-то". Наверное в маршрутизаторе надо к ячейке "Наименование" приклеить перечень наименований атрибутов, имя и значение которых надо "склеивать" со значением атрибута "Наименование"? Как думаешь? Вот, слегка отредактировал.
|
|
|
|
|
|
|
|
12.4.2007, 9:02
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Специально запустил ADT 2006 Rus и твой файлик. А вот теперь вопрос: а на фига мучаться с получением? Если можно сделать так: Код (defun test4 (/ selset tmp tmp_assoc tmp_dyn res loc:conv-to-value loc:getdynvalues res) (defun loc:conv-to-value (value / res) (setq res (cond ((= (type value) 'safearray) (setq res (mapcar 'loc:conv-to-value (vlax-safearray->list value))) ) ((= (type value) 'variant) (setq res (mapcar 'loc:conv-to-value (vlax-variant-value value))) ) (t value) );_ end of cond );_ end of setq res );_ end of defun
(defun loc:getdynvalues (ent) (mapcar '(lambda (x) (cons (if (= "" (vla-get-description x)) (vla-get-propertyname x) (vla-get-description x) );_ end of if (loc:conv-to-value (vlax-variant-value (vla-get-value x)) );_ end of loc:conv-to-value );_ end of cons );_ end of lambda (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties ent) );_ end of vlax-variant-value );_ end of vlax-safearray->list );_ end of mapcar );_ end of defun
(defun loc:nth-number (item lst) (1- (- (length lst) (length (member item lst)))) );_ end of defun
(if (setq selset (ssget "_X" '((0 . "INSERT")))) (foreach item (vl-remove-if-not '(lambda (x) (= (vla-get-isdynamicblock x) :vlax-true)) (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))) );_ end of mapcar );_ end of vl-remove-if-not (if (member (vla-get-name item) (mapcar 'car res)) (setq res (subst (cons (vla-get-name item) (append (list (cons "count" (1+ (cdr (assoc "count" (cdr (assoc (vla-get-name item) res)) );_ end of assoc );_ end of cdr );_ end of 1+ );_ end of cons );_ end of list (loc:getdynvalues item) );_ end of append );_ end of cons (assoc (vla-get-name item) res) res );_ end of subst );_ end of setq (setq res (cons (cons (vla-get-name item) (cons (cons "count" 1) (loc:getdynvalues item)) );_ end of cons res );_ end of cons );_ end of setq );_ end of if );_ end of foreach );_ end of if res );_ end of defun И разбирай дальше список. Предупреждаю сразу - код качественно протестировать не могу (попросту мало времени). Так что это на твоей совести. С назначением динамических свойств я не воевал. Сильно подозреваю, что это надо работать со словарями. Время надо, которого почти нет  --- Добавлено: немного отредактировал код - одну функцию забыл в локальные засунуть.
Сообщение отредактировал kpblc - 12.4.2007, 15:00
|
|
|
|
|
|
|
|
13.4.2007, 12:38
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
И все же насчет заполнения динамических свойств я бы крепко подумал. Смотри: допустим, администратор системы (обзовем его так, а на самом деле это просто человек, который выполняет работы общего характера) каким-то манером добавил, удалили заполнил или отредактировал - в общем, изменил характеристики. Теперь все пользователи этой системы должны получить актуальные версии этого блока. А если в файле такой дин.блок уже вставлен? Тогда AutoCAD при вставке (насколько я понял) будет брать имеющееся описание, не опрашивая "библиотечный" элемент. То есть отслеживать такие ситуации надо программисту. Какие в связи с этим проблемы лично я вижу: 1. Надо переименовать имеющиеся динамические блоки либо каким-то иным способом "забрать" с них всю информацию - точка вставки, нормаль, масштабы по осям, слой, пространство вставки и так далее. При этом надо не забыть про возможные внешние ссылки, внутри которых тоже может быть этот дин.блок. Также обработать блоки (никто не помешает дин.блок поместить внутрь другого блока). 2. Разблокировать и разморозить слои 3. Удалить все вхождения этого блока. 4. Удалить описание этого блока. 5. Импортировать по новой блок 6. Вставить новую версию блока в соответствии с параметрами, полученными в п.1. 7. Вернуть состояние слоев. При всем при этом надо в случае ошибки в любом месте вернуть файл обратно. И теперь самый главный вопрос: а когда это делать? В момент открытия файла? Если "да", то простое выполнение такого лиспа затормозит открытие файла раза в 2-3, не меньше. Соответственно надо получить полное описание "текущей версии" блока в текущем файле и сравнить ее с версией в библиотеке. И только после этого уже идти в п.1 и дальше. Просто открыть файл библиотеки тебе не удастся - лисп прекратит свое выполнение в момент активации другого файла. То есть надо устанавливать SDI в 0, потом через ObjectDBX-интерфейс (который еще тоже прописать надо) получать доступ к библиотечному файлу, брать с него описание блока, и сравнивать с имеющимся описанием дин.блока. Потом не забыть закрыть фай библиотеки. Причем делать это надо независимо от того, где лежит библиотека - локально или на серваке. Головняк, одним словом. --- P.S. Естественно, всю дорогу ИМХО.
|
|
|
|
|
|
|
Гость_Supermax_*
|
13.4.2007, 13:06
|
Guest Forum

|
Во первых, если элемент библиотечный, то в нем есть атрибут с номером в этой библиотеке и при обработке модели прога просто обязанна обратится в библиотеку за сведениями об этом элементе, но если файл перекочевал на компьютер заказчика или фрилансера, или этот файл содержит элементы других библиотек, но также содержит и собственные сведения, то по принципу субординации считается то, что доступно. Если нет доступа к библиотеке, считаем, то что имеем. При работе с библиотекой, никто ничего не получает, все только берут. Это очень важное отличие. При вставке одноименных блоков AutoCAD ругается и если пользователь слеп и туп, да еще в придачу засланный шпион, то ... ?? У динамических блоков имя тутже меняется само. Было *U9, при вставке в другой лист стало *U12, при повторной вставке из имени *U5 все равно сделало *U12, поскольку параметры длинны одни и теже. Я как не бился, а имена строго соответствуют набору параметров. Ты поиграйся с динблоком трубы, поиграйся. Советую. И все твои лавинообразно сыплящиеся страхи, а заодно и намерения по их устранению самоустранятся. <font size='1' color='#8e8b8b'>Добавлено - 14:09</font> Если кому-то интересно, то вот мои мысли по поводу маркировки изделий: Видов продукции очень много. Среди всех видов, той продукции, которая маркируется достаточно много. Единых правил по составлению маркировки не существует. Разве, что штрих-код. Я рассматриваю маркировку цифро-буквенную. Да, в динамических блоках, методом перекрестных ссылок между свойством блока «Visibility Set» и «Lookup Set» можно создать самоустанавливающуюся позицию маркировки изделия, НО! Этот прием применим только для небольшого количества вариантов маркировки. При количестве более 100, смысла в создании такой громоздкой системы нет. Помимо этого существуют случаи, когда в марку изделия включены такие параметры как длина, высота, объем, площадь, радиус, диаметр и т.п. Эти параметры имеют такое количество вариантов, что создавать дискретную систему их выбора и завязывать средствами динамических блоков просто абсурд. Что делать? Очевидно, что надо каким-то образом «склеивать» имена и значения, или только значения группы атрибутов друг с другом. Подход, который я с начала предложил через файл-маршрутизатор – не правильный. У разных производителей по разным гостам и зарубежным стандартам совершенно разные случаи бывают. Вот например у Мосфлоулайн, в маркировку шаровых кранов входит такой параметр, как высота штока, а в случае труб к названию надо приклеивать и имя, и значение атрибута «L=» то есть длинна такая-то. Я не могу навязывать всем производителям свой файл-маршрутизатор. Но создать такой блок, в котором удобно размещена информация о том, что и с чем склеивать – могу. Я всячески оттягиваю тот момент, когда использование расширенных данных станет единственной возможностью, хочу постараться сделать создание блока доступным для всех пользователей, но чует мое сердце, что настал час использования расширенных данных. С начала о том, «что» склеивать. 1. Значение атрибута «НАИМЕНОВАНИЕ» - Ну вполне понятно, ч то в колонке спецификации, в которой представлено наименование изделия, то есть значение атрибута «НАИМЕНОВАНИЕ», необходимо дополнить это значение еще несколькими дополнительными характеристиками. 2. Значение атрибута «ТИП_МАРКА_ОБОЗНАЧЕНИЕ» - Тоже понятно, что марку не всегда просто прочесть, ее иногда надо и создать. В таком случае значение атрибута «ТИП_МАРКА_ОБОЗНАЧЕНИЕ» является только первым элементом марки, а все последующие берутся только из значений (без имен) других атрибутов. Больше вариантов (в нашем варианте спецификации) я не вижу. Теперь о том, «с чем» склеивать. 1. Все параметры длин, радиусов и пр. линейных значений динамических атрибутов. 2. Некоторые позиции динамических атрибутов дискретного выбора. Тоже, больше вариантов (в нашем варианте спецификации) я не вижу. Теперь о том, «как» склеивать. - Понятное дело, программой, которая предназначена для обсчета модели. И я кажется придумал как это делать. Если в конце значения атрибута с именем «ТИП_МАРКА_ОБОЗНАЧЕНИЕ» или «НАИМЕНОВАНИЕ» стоит многоточие «…» от трех точек и выше, то это означает, что наименование или маркировка не полное и следует к нему добавить то имя атрибута или только его значение, где многоточие стоит перед значением или с него начинается имя. Например: «НАИМЕНОВАНИЕ» - Труба ППУ в металлической оболочке из оцинкованной стали…. «ТИП_МАРКА_ОБОЗНАЧЕНИЕ» - Ст 426х… «Толщина стенки трубы мм.» - …7 «Тип изоляции» - …-1 «Материал утеплителя» - …-ППУ «Материал оболочки утеплителя» - …-М «…. L=» - 11000 После обработки получаем: «НАИМЕНОВАНИЕ» - Труба ППУ в металлической оболочке из оцинкованной стали L=11000 «ТИП_МАРКА_ОБОЗНАЧЕНИЕ» - Ст 426х7-1-ППУ-М Почему спросите длинна приклеилась к имени, а все остальное к маркировке? – все очень просто. У имени четыре точки, и у L= тоже четыре, а у маркировки три. Последовательность склеивания определяется последовательностью расположения. Точки совершенно не мешают визуальному восприятию свойств, в отличии от разных знаков, и несут в себе численное значение, позволяющее оперировать различными позициями атрибутов изделия. Вот файлик с изделиями Мосфлоулайн 1,44 МБ
|
|
|
|
|
|
|
Гость_Supermax_*
|
13.4.2007, 13:46
|
Guest Forum

|
AutoCAD не дает вставлять одноименные динамические блоки. При вставке он заменяет импортируемый объект на собственный. Если из бидлиотеки взят динблок, а затем администратор библиотеки его отредактировал, то вставить его в чертеж можно только если поменять ему имя. Таким образом считаю, что чертеж защищен от "случайных" связей. Предлагаю оригинальное использование оригинального имени - Порядковый номер элемента в базе. Если элемент претерпел изменения, то и номер тоже.
|
|
|
|
|
|
|
|
16.4.2007, 14:31
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ух, пофлудю! Будет желание - пост стирайте, мне не жалко  Цитата Ты поиграйся с динблоком трубы, поиграйся. Советую. И все твои лавинообразно сыплящиеся страхи, а заодно и намерения по их устранению самоустранятся. А разве только трубы нужны? У меня, например, еще и панели, и плиты, и арматура ОВ, ВК, ЭО на совести болтается, и узловые куски... До хрена всего. Так что труба с моей точки зрения - это один конкретный случай, и не более того. По поводу расширенных данных. Поскольку ты постепенно подходишь к их использованию, сразу хочу предупредить: РД имеют порядочное количество ограничений. Самые главные из них - это ограниченность размера (16 килобайт), который дербанится между всеми приложениями. И второе - это ограничение и некоторая "зарезервированность" ключей. Лучше будет использовать ldata. P.S. Я у себя на блоге наконец-то положил очередную сборку своих лиспов, хочешь - посмотри. Там не все отлажено "на ура", но поглядеть ИМХО можно
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.4.2007, 16:14
|
Guest Forum

|
На последней странице можно что угодно, только народ этого не просек пока. Читать многие умеют, но очень плохо (через слово). Самое главное свои сообщения редактируй вовремя, а то ссылаются на то, чего уже нет. Да и стирай, когда время их пришло+ За предложение спасибо, но я все равно далеко от темы отходить не могу, вот если ты мне скажешь, что там-то и там-то лежит лисп, который в такой-то проблеме мне может помочь, буду благодарен. А то, что толку разбирать тексты, если они не приспособлены для твоих целей? Только время потеряешь. Да, может научишся чему нибудь, но когда в поисковике набираешь ЛИСП, после обвала этих лиспов, что-то ничего разбирать не тянет. По поводу панелей и прочих деталей, могу дать ценный совет - надо к этому делу привлечь ресурс Интернета. Только с начала надо определиться в каком виде тебе это надо. Я думаешь, что просто так над оформлением объекта чертежа бъюсь? Нет. Я сделаю пару, тройку блоков и на DWG.ru выложу с предложением продолжить серию и обменяться результатами. Если каждый сделает по одному блоку, то получит все, которые сделали другие. Выгодно? - Думаю, что еще как выгодно!
|
|
|
|
|
|
|
|
17.4.2007, 7:45
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Оффтоп и злостный флуд: Цитата На последней странице можно что угодно, только народ этого не просек пока. Для справки: у меня на одну страницу выводится сейчас 40 постов, и последняя страница начинается с поста kpblc Отправлено: Apr 9 2007, 14:59 А у тебя как? Цитата Самое главное свои сообщения редактируй вовремя, а то ссылаются на то, чего уже нет. Да и стирай, когда время их пришло Чтобы опять потом нить темы потерялась? Не, я на такое не согласный  Цитата Я сделаю пару, тройку блоков и на DWG.ru выложу с предложением продолжить серию и обменяться результатами. Если каждый сделает по одному блоку, то получит все, которые сделали другие. Выгодно? - Думаю, что еще как выгодно! Ага. Только сколько народу пришлет тебе блоки? Такие предложения возникают с завидной регулярностью, только делиться что-то никто не спешит...
|
|
|
|
|
|
|
Гость_Supermax_*
|
17.4.2007, 9:21
|
Guest Forum

|
Ну, давай мы с тобой будем вместе одну серию долбать и друг с другом обмениваться, а в теме будем констатировать факт произведенного обмена и обсуждать ощущения от процесса несозидания. Ведь на половину сократится объем. Мне тоже надо и прокат, и ЖБ изделия и многое другое. А кто захочет присоединиться - милости просим. Только за ответный трудовой подвиг.
Да кто-ж говорит про темы "с нитью"? Я о флуде базарю. Да и о корректировке, а то глючное сообщение стерто, а ревирансы по поводу его возникновения остались.
|
|
|
|
|
|
|
|
17.4.2007, 13:35
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну не сказал бы, что флуд ненужен http://www.forum.abok.ru/index.php?act=ST&...=26&t=17508 - и, елси не трудно, обоснуй свой голос. Я проголосовал против, т.к. не считаю это правильным. Теперь по теме. Видишь ли, я не спец в ОВ, я - программер. Не больше, но и не меньше. Цитата одну серию долбать Да я бы рад, если б хоть что-то понимал в этом деле. ЖБИ, например, я вообще делал без библиотеки блоков, отрисовывая их динамически, с одновременной проверкой актуальности данных - они слишком легко алгоритмизировались, чтобы я прошел мимо такой возможности (правда, у меня на работе почти не встречаются непрямоугольные плиты и панели, так что мне было легче). Прокат можно брать у Геннадия Поспелова на сайте - у него там вроде даже отдельно это вынесено было.
|
|
|
|
|
|
|
Гость_Supermax_*
|
17.4.2007, 14:11
|
Guest Forum

|
Тудыть твою медь! Флуд, или треп, или болтовня естественно нужны, но только для поддержания настроения в текущем моменте. А для всей темы в целом - серьезнейшая помеха читаемости основного материала. Что основное, а что не основное не так уж и важно, даже можно некоторые перлы флуда оставлять, как самые флудливые. НО!!! Начиная с первой страницы и до предпоследней надо по максимуму освобождать текст от трепа! А на последней странице (а она у тебя говоришь аж 40 сообщений) можно хоть голую ... показывать. К стати, почему до сих пор нет смайлика "Вид с зади"? С боку есть, с переди есть, а с зади нет! Непорядок! Да и с низу тоже не помешает, типа упал.
По поводу созидательного процесса: Ты для кого проги пишешь? Для балерин? Или для проектировщиков? Как можно писать проги, если нет у программиста понимания о форме объекта? А если есть, то самый лучший эталон комплектности объекта, это какой-нибудь готовый объект. Вот давай и создадим, хотя бы один. А если у тебя есть в базе что нибудь подходящее - выставь на обсуждение. Если это не эталон - доделаем. А если эталон - будем по нему равняться. Не хочешь - найди кого нибудь из проектировщиков у себя в институте и нагрузи.
Я вот как раз этим эталоном и занят, а то не понятно, прогу вроде пишем, а что она считать будет не имеем. У меня такого проката - как грязи. Да программка удобная, но мне надо 3D c атрибутами. Я после трубы ППУ пару швелеров сделаю.
|
|
|
|
|
|
|
|
17.4.2007, 15:57
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
По пунктам: Цитата ы для кого проги пишешь? Для балерин? Или для проектировщиков? Проги пишу для пользователей (и мне глубоко фиолетово - проектировщики они, уборщицы или балерины). Мне пользователи ставят задачи, я их додумываю и потом делаю. Понадобилось им АР-ные чертежи переводить "в подложку" - да пожалуйста. Сказали, чего надо в конце получить, а остальное моя забота. Цитата Как можно писать проги, если нет у программиста понимания о форме объекта? Можно. Достаточно задачу нормально поставить. Хорошая постановка задачи - не меньше 70% решения. Если тебе надо разработать средство для решения, к примеру, такого: "Позволить пользователю многократно вставлять блок, находящийся в библиотеке. Блок в момент вставки динамически отрисовывается рядом с курсором. Атрибуты блоков заполняются автоматически, на основании списка возможных. Библиотека блоков лежит локально, кроме текущего пользователя, к ней никто доступа не имеет" Вот такую задачу я тебе сделаю. Не сразу, еще потерроризирую, но в конце концов сделаю. В этом - моя работа. Вспомни тему "борьбы с сисадминами". Так вот, я - почти сисадмин. Я обязан сделать так, чтобы пользователю было удобно работать, а чем он будет заниматься - простановкой условных обозначений с помощью моих дополнений или в CS рубиться - меня не волнует. Я не обязан знать до тонкостей все вопросы проектирования и программирования. Иначе на меня можно за компанию повесить и вопросы обмена данными ACAD <-> 1C <-> MS Project <-> PDM, и коридоры подметать.
|
|
|
|
|
|
|
Гость_Supermax_*
|
18.4.2007, 18:44
|
Guest Forum

|
Ну, посмотрим, что скажет на это уважаемая публика. 3D динамический блок теплоизолированной трубы Д-159 с атрибутами. В блоке автоматически меняются атрибуты в зависимости от быбираемых параметров свойств. Обратите внимание на маркировку, наименование, вес изделия и пр. параметры. Там, где нет вариантов исполнения, параметры автоматически становятся только для чтения и т. д. Блок легко переносится, копируется, и уже легко перетягивается за метку привязки. Размер файла при использовании динамических блоков вместо солидов практически не увеличивается. В целом есть над чем поработать. Например над упрощением создания блока. Файл 200 кб. Файл вернулся после реставрации. Посыпаю голову пеплом, не тот файл положил. Вот правильный.
Сообщение отредактировал Supermax - 24.4.2007, 14:42
|
|
|
|
|
|
|
Гость_Supermax_*
|
24.4.2007, 14:47
|
Guest Forum

|
Ребята, я случайно не тот файл положил. У меня была старая версия и новая, в разных папках, вот я и перепутал. Сори огромное. Файл поменял. ( на предидущей странице) Чтобы сгладить свою оплошность выкладываю лисп от Полищука Н.Н. Надеюсь он меня не заругает. Раскрытие свойсв динамического блока (к стати этого самого). ; по данным Лазебного А.В., 22.04.07 (vl-load-com) (setq es (car (entsel))) (setq ve (vlax-ename->vla-object es)) (vlax-dump-object ve T) ;#<VLA-OBJECT IAcadBlockReference 0e84068c> ; IAcadBlockReference: Интерфейс AutoCAD для работы с вхождениями блоков. ; Значения свойств: ; Application (RO) = #<VLA-OBJECT IAcadApplication 00d73d3c> ; Document (RO) = #<VLA-OBJECT IAcadDocument 014bb7a8> ; EffectiveName (RO) = "Труба ППУ Д-159" ; Handle (RO) = "940" ; HasAttributes (RO) = -1 ; HasExtensionDictionary (RO) = -1 ; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 111a9304> ; InsertionPoint = (1751.35 1182.81 0.0) ; InsUnits (RO) = "Миллиметры" ; InsUnitsFactor (RO) = 1.0 ; IsDynamicBlock (RO) = -1 ; Layer = "0" ; Linetype = "ByLayer" ; LinetypeScale = 1.0 ; Lineweight = -1 ; Material = "ByLayer" ; Name = "*U41" ; Normal = (0.0 0.0 1.0) ; ObjectID (RO) = 2130600192 ; ObjectName (RO) = "AcDbBlockReference" ; OwnerID (RO) = 2130644216 ; PlotStyleName = "ByLayer" ; Rotation = 0.0 ; TrueColor = #<VLA-OBJECT IAcadAcCmColor 11135c60> ; Visible = -1 ; XEffectiveScaleFactor = 1.0 ; XScaleFactor = 1.0 ; YEffectiveScaleFactor = 1.0 ; YScaleFactor = 1.0 ; ZEffectiveScaleFactor = 1.0 ; ZScaleFactor = 1.0 ; Поддерживаемые методы: ; ArrayPolar (3) ; ArrayRectangular (6) ; ConvertToAnonymousBlock () ; ConvertToStaticBlock (1) ; Copy () ; Delete () ; Explode () ; GetAttributes () ; GetBoundingBox (2) ; GetConstantAttributes () ; GetDynamicBlockProperties () ; GetExtensionDictionary () ; GetXData (3) ; Highlight (1) ; IntersectWith (2) ; Mirror (2) ; Mirror3D (3) ; Move (2) ; ResetBlock () ; Rotate (2) ; Rotate3D (3) ; ScaleEntity (2) ; SetXData (2) ; TransformBy (1) ; Update ()
; Получаем семейство дианмических свойств (setq DynPrs (vla-GetDynamicBlockProperties ve))
(setq props (vlax-variant-value DynPrs)) (setq lprs (vlax-safearray->list props)) ;(#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4a64> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4644> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4804> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f47e4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f41c4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f46a4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f45a4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4684> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4904> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4844> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 11190164> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1c64> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1c84> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1ca4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1cc4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1ce4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d04> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d24> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d44> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d64> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1d84> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1da4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1dc4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1de4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e04> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e24> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e44> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e64> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1e84> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1ea4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1f84> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1fa4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1fc4> ;#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 111f1fe4>) ; количество свойств (setq countPrs (length lprs))
; Проверяем первое (setq pr0 (nth 0 lprs)) (vlax-dump-object pr0) #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 110f4a64> ; IAcadDynamicBlockReferenceProperty: Интерфейс AutoCAD для свойств динамического блока ; Значения свойств: ; AllowedValues (RO) = ("Ст 159х4,5-1-ППУ-ПЭ" "Ст 159х5-1-ППУ-ПЭ" "Ст 159х5,5-1-ППУ-ПЭ" "Ст 159х6-1-ППУ-ПЭ" "Ст 159х7-1-ППУ-ПЭ" "Ст 159х8-1-ППУ-ПЭ" ... ) ; Description (RO) = "" ; PropertyName (RO) = "Visibility" ; ReadOnly (RO) = 0 ; Show (RO) = 0 ; UnitsType (RO) = 0 ; Value = "Ст 159х8-1-ППУ-ПЭ"
; Возможные значения 0-го свойства (setq AlVals0 (vla-get-AllowedValues pr0)) (setq lVals (vlax-safearray->list (vlax-variant-value AlVals0))) ;(#<variant 8 Ст 159х4,5-1-ППУ-ПЭ> #<variant 8 Ст 159х5-1-ППУ-ПЭ> ;#<variant 8 Ст 159х5,5-1-ППУ-ПЭ> #<variant 8 Ст 159х6-1-ППУ-ПЭ> ;#<variant 8 Ст 159х7-1-ППУ-ПЭ> #<variant 8 Ст 159х8-1-ППУ-ПЭ> ;#<variant 8 Ст 159х4,5-2-ППУ-ПЭ> #<variant 8 Ст 159х5-2-ППУ-ПЭ> ;#<variant 8 Ст 159х5,5-2-ППУ-ПЭ> #<variant 8 Ст 159х6-2-ППУ-ПЭ> ;#<variant 8 Ст 159х7-2-ППУ-ПЭ> #<variant 8 Ст 159х8-2-ППУ-ПЭ> ;#<variant 8 Ст 159х4,5-1-ППУ-М> #<variant 8 Ст 159х5-1-ППУ-М> ;#<variant 8 Ст 159х5,5-1-ППУ-М> #<variant 8 Ст 159х6-1-ППУ-М> ;#<variant 8 Ст 159х7-1-ППУ-М> #<variant 8 Ст 159х8-1-ППУ-М> ;#<variant 8 ООО "Виртуальные Строительные Технологии">)
; Список возможных значений всех свойств дин. блока
(setq all-lVals '() k -1) (repeat countPrs (setq k (1+ k) pr-k (nth k lprs)) (setq AlVals-k (vla-get-AllowedValues pr-k)) (setq val-k (vlax-variant-value AlVals-k)) ; проверка правильности индексов массива (м.б. пустой массив) (if (>= (vlax-safearray-get-u-bound val-k 1) (vlax-safearray-get-l-bound val-k 1)) (setq lVals (vlax-safearray->list val-k)) (setq lVals nil) ) (setq all-lVals (append all-lVals (list lVals))) )
; Результат ;((#<variant 8 Ст 159х4,5-1-ППУ-ПЭ> #<variant 8 Ст 159х5-1-ППУ-ПЭ> ; #<variant 8 Ст 159х5,5-1-ППУ-ПЭ> #<variant 8 Ст 159х6-1-ППУ-ПЭ> ; #<variant 8 Ст 159х7-1-ППУ-ПЭ> #<variant 8 Ст 159х8-1-ППУ-ПЭ> ; #<variant 8 Ст 159х4,5-2-ППУ-ПЭ> #<variant 8 Ст 159х5-2-ППУ-ПЭ> ; #<variant 8 Ст 159х5,5-2-ППУ-ПЭ> #<variant 8 Ст 159х6-2-ППУ-ПЭ> ; #<variant 8 Ст 159х7-2-ППУ-ПЭ> #<variant 8 Ст 159х8-2-ППУ-ПЭ> ; #<variant 8 Ст 159х4,5-1-ППУ-М> #<variant 8 Ст 159х5-1-ППУ-М> ; #<variant 8 Ст 159х5,5-1-ППУ-М> #<variant 8 Ст 159х6-1-ППУ-М> ; #<variant 8 Ст 159х7-1-ППУ-М> #<variant 8 Ст 159х8-1-ППУ-М> ; #<variant 8 ООО "Виртуальные Строительные Технологии">) ; (#<variant 8 Теплоизолированная стальная труба Д-159 в полиэтиленовой оболочке ...> ; #<variant 8 Теплоизолированная стальная труба Д-159 в оболочке из оцинкованной стали ...> ; #<variant 8 Custom>) (#<variant 8 Ст 159х4,5-1-ППУ-ПЭ> #<variant 8 Ст 159х5-1-ППУ-ПЭ> ; #<variant 8 Ст 159х5,5-1-ППУ-ПЭ> #<variant 8 Ст 159х6-1-ППУ-ПЭ> ; #<variant 8 Ст 159х7-1-ППУ-ПЭ> #<variant 8 Ст 159х8-1-ППУ-ПЭ> ; #<variant 8 Ст 159х4,5-2-ППУ-ПЭ> #<variant 8 Ст 159х5-2-ППУ-ПЭ> ; #<variant 8 Ст 159х5,5-2ППУ-ПЭ> #<variant 8 Ст 159х6-2-ППУ-ПЭ> ; #<variant 8 Ст 159х7-2-ППУ-ПЭ> #<variant 8 Ст 159х8-2-ППУ-ПЭ> ; #<variant 8 Ст 159х4,5-1-ППУ-М> #<variant 8 Ст 159х5-1-ППУ-М> ; #<variant 8 Ст 159х5,5-1-ППУ-М> #<variant 8 Ст 159х6-1-ППУ-М> ; #<variant 8 Ст 159х7-1-ППУ-М> #<variant 8 Ст 159х8-1-ППУ-М> #<variant 8 Custom>) ; (#<variant 8 ОКП 493600; ТУ 400-24 578-92> #<variant 8 Custom>) ; (#<variant 8 ЗАО "Мосфлоулайн"> #<variant 8 Custom>) ; (#<variant 8 4,5мм.> #<variant 8 5мм.> #<variant 8 5,5мм.> #<variant 8 6мм.> ; #<variant 8 7мм.> #<variant 8 8мм.>) ; (#<variant 8 4,5мм.> #<variant 8 5мм.> #<variant 8 5,5мм.> #<variant 8 6мм.> ; #<variant 8 7мм.> #<variant 8 8мм.> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> ; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> ; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> ; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> ; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> ; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> ; #<variant 8 Тип 2 (толщина утеплителя 55,5мм.)>) ; (#<variant 8 4,5мм.> #<variant 8 5мм.> #<variant 8 5,5мм.> #<variant 8 6мм.> ; #<variant 8 7мм.> #<variant 8 8мм.> #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>) ; (#<variant 8 Тип 1 (толщина утеплителя 41,5мм.)> #<variant 8 > #<variant 8 Custom>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)> #<variant 8 Custom>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 М (оцинкованная сталь)>) ; (#<variant 8 ПЭ (полиэтилен)> #<variant 8 Custom>) ; (#<variant 8 Пенополиуретан> #<variant 8 Custom>) ; (#<variant 8 Шт.> #<variant 8 Custom>) ; (#<variant 8 22.391 (кг.)> #<variant 8 24.231 (кг.)> #<variant 8 26.061 (кг.)> ; #<variant 8 27.881 (кг.)> #<variant 8 31.481 (кг.)> #<variant 8 35.031 (кг.)> ; #<variant 8 24.122 (кг.)> #<variant 8 25.962 (кг.)> #<variant 8 27.792 (кг.)> ; #<variant 8 29.612 (кг.)> #<variant 8 33.212 (кг.)> #<variant 8 36.762 (кг.)> ; #<variant 8 26.91 (кг.)> #<variant 8 28.75 (кг.)> #<variant 8 30.58 (кг.)> ; #<variant 8 32.4 (кг.)> #<variant 8 36.0 (кг.)> #<variant 8 39.55 (кг.)> ; #<variant 8 Custom>) (#<variant 8 22.391 х L (кг.)> #<variant 8 24.231 х L (кг.)> ; #<variant 8 26.061 х L (кг.)> #<variant 8 27.881 х L (кг.)> ; #<variant 8 31.481 х L (кг.)> #<variant 8 35.031 х L (кг.)> ; #<variant 8 24.122 х L (кг.)> #<variant 8 25.962х L (кг.)> ; #<variant 8 27.792 х L (кг.)> #<variant 8 29.612 х L (кг.)> ; #<variant 8 33.212 х L (кг.)> #<variant 8 36.762 х L (кг.)> ; #<variant 8 26.91 х L (кг.)> #<variant 8 28.75 х L (кг.)> ; #<variant 8 30.58 х L (кг.)> #<variant 8 32.4 х L (кг.)> ; #<variant 8 36.0 х L (кг.)> #<variant 8 39.55 х L (кг.)> #<variant 8 Custom>) ; nil ; nil ; (#<variant 8 www.mosflowline.ru> #<variant 8 Custom>))
Сообщение отредактировал Supermax - 24.4.2007, 14:53
|
|
|
|
|
|
|
Гость_Supermax_*
|
25.4.2007, 16:44
|
Guest Forum

|
Решил я задачку по «встряске» свежевставленного динамического блока. Дело в том, что в AutoCAD-e есть один глюк. Когда меняешь динамические свойства блока, он переименовывается со значения EffectiveName на *U… , а когда возвращаешь старое значение этих свойств, он на значение EffectiveName не возвращается. Если в это время вставить в чертеж еще один такой же блок, то в чертеже будут два абсолютно одинаковые по всем параметрам (кроме DXF пары 2) блока. У одного имя будет, как и EffectiveName, а у другого *U… Задача была как-нибудь воздействовать на свежевставленный блок, чтобы он в DXF точечной паре 2 сравнялся с существующим *U… Все оказалось очень просто:
(setq es (car (entsel))) (setq ve (vlax-ename->vla-object es)) (setq DynPrs (vla-GetDynamicBlockProperties ve)) (setq props (vlax-variant-value DynPrs)) (setq lprs (vlax-safearray->list props)) (setq pr0 (nth 0 lprs)) (setq val (vlax-variant-value (vlax-get-property pr0 'value))) (vlax-put-property pr0 'value val)
Получилось нечто вроде ATTSYNC только наверное это NAMESYNC Читаем значение свойства value и записываем его же ему же.
|
|
|
|
|
|
|
|
26.4.2007, 11:36
|
Группа: New
Сообщений: 1
Регистрация: 26.4.2007
Пользователь №: 7390

|
На мой взгляд, процесс создания спецификации, а особенно создания выносок с позициями – самая утомительная часть проектирования. И если этот процесс автоматизировать, сэкономленными окажутся как время, так и нервы. В ходе обдумывания этих вопросов пришел к следующему выводу: У меня есть блоки (нединамические). Как правило, блок состоит из самого устройства, так и из сопутствующего фитинга: фланцев или муфт, например. В этих блоках-устройствах есть атрибуты –«Наименование», «№ опросного документа», «Код», в-общем, все графы, которые присутствуют в стандартной 9-графке. Программой я вытаскиваю значения атрибутов и заполняю в template 9-графку. Таким образом в ГОСТовскую спецификацию записывается только «основное оборудование». В excel экспортируются имена блоков, получается ведомость материалов со всеми фланцами, отводами и т.д. Особой программкой считаю рисую и считаю пустотелые трубы, которые потом вручную вбиваю в ведомость. К сожалению, насос Grundfos я оспецифицировать (извиняюсь за неологизм) не смог. Короче, выкладываю LISPы для спецификации, шаблон 9графки и пример участка трубопровода. Для работы нужно прописать в Lispах нужные пути. Предупреждаю, программа еще находится в стадии написания, так что сильно не ругайтесь. Может, быть совместными усилиями что-нибудь сваяем...
Прикрепленные файлы
specif.rar ( 1,05 мегабайт )
Кол-во скачиваний: 161
|
|
|
|
|
|
|
Гость_Supermax_*
|
4.5.2007, 14:56
|
Guest Forum

|
Ну, наконец-то! У меня тоже до некоторых пор все блоки были простые, 9-ти графку заполнял после обработки модели (подсчета) макросом, размещенным в начале темы. Блоки состоят только из элементов, которые принадлежат изделию, болты, гйки, фланцы и прочее постоянно таскаемое вслед за этими изделиями сделано своими блоками и поэтому тоже считается. НО! После изготовления мною динамического блока трубы ППУ, а также после обсуждения проблемы источника информации об изделии (которая должна быть только от производителя, без копирайта), я наконец-то изготовил первое "виртуальное изделие". Нет, вы не подумайте, что я куда-то перехожу, я и по именам подсчет оставлю. В блоках динамических, есть одна особенность, динамические атрибуты при их изменении влияют на подсчет количества, а простые атрибуты на подсчет количества не влияют. Все, чисто технические характеристики, которые определяют "лицо" изделия выполняются динамическими атрибутами, а сопутствующая информация (маркировка по схеме, раздел проекта и т.п.) простыми атрибутами. Вашу прогу испытаю, как только освобожусь. Сделал второй проект прокладки теплотрассы в ППУ дин. трубами - просто ураган так быстро! Длины подсчитал старой считалкой, даже *U не смутило. Клацаешь по трубе и в свойствах видишь ее длинну - это же здорово! К стати, у тебя старый насос стоит, ты скачай мой новый, с дин. атрибутами. Да и мой теплопункт тоже будет тебе весьма полезен "на запчасти".
Сообщение отредактировал Supermax - 4.5.2007, 15:00
|
|
|
|
|
|
|
Гость_Евгений97_*
|
4.5.2007, 15:23
|
Guest Forum

|
дык есть спдс графикс вроде?
|
|
|
|
|
|
|
Гость_Supermax_*
|
4.5.2007, 20:53
|
Guest Forum

|
Для Vorn-a
Сваять совместно можно, только если после этого мы не подеремся. Я ведь для бесплатного распостранения ее делаю. Не подумайте, что с ума сшедший, интерес есть, да еще какой! А так - не против. Первым делом решаем вопрос: надо всю модель с начала проверить на "коректность", или при подсчете проверять в порядке поступления? Потом решаем, что считать корректным. Потом решаем как будем выбирать группу элементов для подсчета и т.д. Представь себе (ничего, что на ты?) модель 100-этажного небоскреба со всеми подробностями вплоть до гаек и болтов. Ясен пень, что это не один файл, а целая куча со ссылками. Ясно также, что модель эту делает не один человек и даже не одна организация. Также понятно, что детали там от всяких разных производителей и из разных стран. Проектировщики, понятно, тоже понатырили друг у друга, да и сами наваяли много всякого несуразного. Вот такую модель и надо не только просчитать, а еще связать с MS Project-ом или другими программами для планирования. Также не плохо (и даже просто необходимо) раз уж есть указание на сайты и номера в каталогах попытаться скачать что возможно из прайсов на этих сйтах. Тот кто будет выкладывать на сайты свою продукцию в виртуальном виде об этом позаботится. Ну как задачка?
|
|
|
|
|
|
|
Гость_Supermax_*
|
14.6.2007, 14:44
|
Guest Forum

|
Написал обработчики виртуальных деталей, разобрался с динамическими блоками и написал все опции по их обработке, написал входную часть с формированием выбора по разделам проекта и вообще по всему, что только можно было и осталось только все это связать друг с другом . Задачу поставил создать набор секущей, или не секущей рамкой из элементов "корня" модели и элементов внешних ссылок, попавших в эту рамку. . Тактика следующая: Создаем первый набор (ss1), в который входят все попадающие в рамку элементы и внешние ссылки, если их зацепило. . (command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C) (setq ss1 (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2))) . Как видите, не просто создается набор, а еще и сохранены в переменных nnn1 и nnn2 координаты точек вставки рамки. В зависимости от их значений определяется тип рамки (секущая, или нет). . Далее, находим в этом наборе внешние ссылки и создаем из низ новый набор, а в исходном убиваем. Далее, включаем ручки у первой внешней ссылки и запускаем комманду _-refedit. Далее в открытой внешней ссылке добавляем в набор ss1 элементы набора ss2 созданного в открытой внешней ссылке. Да, элементы «корня» модели видны и выбираются, но при добавлении в ss1 не включаются, поскольку дубликаты. (setq ss2 (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2))) Далее закрываем внешнюю ссылку. Открыть следующую, и т.д. . Команда _-refedit отличная команда, работает в текущих координатах и имея в памяти координаты рамки легко создается автоматически набор из ее элементов, . Если написать внешнюю программу, например на С++, реагирующую на изменение системной переменной и эмулирующая перемещение курсора и нажатие левой кнопки мыши, то можно будет из AutoLisp-a не особо задумываясь управлять любыми окнами, любых программ, включая элементы меню "Пуск".
Сообщение отредактировал Supermax - 16.6.2007, 12:41
|
|
|
|
|
|
|
|
14.6.2007, 22:50
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ээээ... Я попробовал въехать в смысл, получилось не очень, каюсь. Можно высказаться немного по общим вопросам? Дело в том, что в ADT, например, при создании спецификаций производится запрос области, по которой выполнять подсчет. Но! Если в нее попадают внешние ссылки, то подсчет производится по всему содержимому внешней ссылки, невзирая на то, попали или нет "подсчитываемые объекты" в область выбора. Может, так более правильно? Если да, то сейчас попробую наваять код. Если получится - выложу.
|
|
|
|
|
|
|
Гость_Supermax_*
|
15.6.2007, 10:19
|
Guest Forum

|
И правильно и нет. Если писать что-то стоящее (я не про ADT), то нужен как локальный, так и глобальный выбор. У меня с начала идет диалог, предлагающий выбрать способ выбора, а затем уж отрабатывать элементы этого выбора. Пример: Модель здания 17 этажей, из них 10 типовых, вставленных как внещние ссылки. То есть файл один, только вставлен 10 раз с разными координатами. Идет процесс создания спецификации. Помимо прочего вставлена внешняя ссылка со стояками канализации, водопровода и пр. Это уже другая внешняя ссылка, только "по вериткали" , на весь дом одна. Надо подсчитать количество элементов на этаже. Можно конечно наделать во внешних ссылках кучу слоев, но автор умер и сделать это некому. А так - обвел, и на тебе.
Сообщение отредактировал Supermax - 16.6.2007, 12:18
|
|
|
|
|
|
|
|
15.6.2007, 13:38
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Стоп, погоди. Если в активный набор попала одна и та же внешняя ссылка, например, 2 раза, то надо(по моей логике) пройти по всему составу первой внешней ссылки, потом - по второй. То есть количество блоков попросту умножается на 2. Фильтровать набор лично мне было лениво, проще рекурсию написать  Зачем делать там "кучу слоев", я не очень догоняю.
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.6.2007, 12:02
|
Guest Forum

|
Если в набор попало 2 внешних ссылки, например 1-й и втрой типовые этажи, то иэлементы обеих копий этой ссылки, попавшие в сектор рамки пополняют набор. Естественно это происходит при поочередном открытии командой _-refedit этих ссылок. Имена элементов в копиях разные, поэтому копий нет. Про слои я написал в негативном смысле, дескать так можно, но нет гарантии, что этот подвиг будут совершать все и всегда. А рекурсия - естественно! Ссылки ведь не только в "ширь" идут, а еще и "влубь". Про умножение - забудь. Я хочу знать объем материалов на правое крыло здания, а у меня ссылки на ЦЕЛЫЕ этажи, да еще и общие коммуникации в высь простираются, а мне надо участок всего этого! Проблемы текущего финансирования знаешь?
Сообщение отредактировал Supermax - 16.6.2007, 12:29
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.6.2007, 14:25
|
Guest Forum

|
Последние изыскания в области открытия внешних ссылок автоматически: С целью (надеюсь) указания мне на недостатки, или альтернативные, еще не использованные мною способы, выкладываю "нутро".
; создаем адреса рамки выбора nnn1 и nnn2 (command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C) ; ; загружаем функцию _owp, которая должна по имени берущимся из переменной as включать ручки у ссылки и ее открывать. ; Затем предполагалось запускать в ней функцию f_ss, которая будет далее. и закрывать ссылку. ; Все работает кроме см. ниже ; (defun _owp (as / ); переменная as - это одно из начений списка из имен ссылок см. далее mapcar (ssdel as ss1); удаляем из корневого набора текущую ссылку (setq nssn (ssadd)) (sssetfirst nil (ssadd as nssn)) (command "_-refedit" "O" "All" "N") ;(f_ss); не работает рекурсия ; сюда надо будет мне добавить создание набора ; (setq nab nil ns 0) (command "REFCLOSE" "D")); конец функции _owp ; ; создаем указатель на лист и устанавливаем счетчик наборов, он же вхождений в 0. (setq u_obj (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq n_ss 0 ns 0) ; ; Загружаем функцию f_ss (defun f_ss ( / ) (setq n_ss (1+ n_ss)); сразу прибавляем 1, так что все наборы начинаются с **1 ; (set (read (strcat "ss" (itoa n_ss))) (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2))) ; конец формирования набора с порядковым номером и именем начинающимся с ss* ; (mapcar '_owp; далее идет формирование списка из имен ссылок (set (read (strcat "sp" (itoa n_ss))) (progn (while (setq _ewa (ssname (vl-symbol-value (read (strcat "ss" (itoa n_ss)))) ns)) (setq _ew (assoc 2 (entget _ewa))) (if (and (vl-symbol-value '_ew) (= (vla-get-IsXRef (vla-Item u_obj (cdr _ew))) :vlax-true)) (setq nab (append nab (list (ssname (vl-symbol-value (read (strcat "ss" (itoa n_ss)))) ns))))) (setq ns (1+ ns))) (setq nab nab)) ); конец формирования списка ссылок с порядковым номером ); конец функции mapcar ; (setq nab nil ns 0); это так, на всякий случай лишний раз обнулил счетчики ; ); конец функции f_ss
В функции _owp я пока не вставил создание набора из элементов внешней ссылки, поскольку не был уверен, что именно в нее надо вставлять эту прелесть. Если бы можно было выполнить рекурсию, то выбор элементов должен был бы вставлен в функцию f_ss.
А теперь главная новость. _-refedit нельзя запустить в нутри открытой внешней ссылки. По краеней мере напрямую. Есть вариант создания копии команды, но под другим именем, вопрос изучается. Рекурсия накрылась медным тазом. Пока можно добавлять в "корневой" набор только элементы первого уровня вложенности во внешнюю ссылку, а открыть ссылки дальше - нет. Но и то не плохо.
Сообщение отредактировал Supermax - 16.6.2007, 16:22
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.6.2007, 15:02
|
Guest Forum

|
Так, у меня есть файл с детальками, я назвал его "исходный". Его я вставил ссылкой в файл, который назвал "1-ое вложение". В следующий файл я ссылкой вставил "1-ое вложение" и назвал его "2-ое вложение". В следующий файл я ссылкой вставил "2-ое вложение" и назвал его "3-ее вложение". Запуская _-refedit я могу выбрать любое вложение и войти. Осталось только выбрав "корневую" ссылку узнать перечень всех ссылок в нутри нее и поочереди из "корня" их refedit-ом перебрать. Затык. Как указать refedit-у на нужное вложение из лиспа? Что ответить в письменном виде на запрос refedit - Select reference: ??????? Сразу скажу - наименование ссылки не катит, тем более, что копии ссылки в файле имеют одинаковые имена. Да и refedit ругается: *Invalid selection* Expects a single object. ; error: Function cancelled Думаю попробовать ручки включить у внутренней ссылки.
Сообщение отредактировал Supermax - 16.6.2007, 15:14
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.6.2007, 16:06
|
Guest Forum

|
Эх, как быстро летит мысль. Все! придумал, и очень оказывается просто. Я как сейчас действую? 1. Создаю корневой набор 2. Нахожу в нем ссылки и записываю их имена отдельным списком 3. Удаляю из набора эти элементы 4. По очереди открываю каждую и ее элементы вкидываю в корневой набор
а далее я буду делать так:
5. У меня в корневом наборе появятся ссылки из внешних ссылок 6. Я из них опять создам список 7. И опять поочереди все открою.
И так до тех пор, пока в корневом наборе не останется внешних ссылок
|
|
|
|
|
|
|
Гость_Supermax_*
|
16.6.2007, 19:42
|
Guest Forum

|
Все, опять стоп. Имена взятые из набора и являющиеся элементами внешней ссылки из корня модели не читаются, а значит не подсвечиваются и значит не открываются. Если я читаю имя элемента из корня модели, то я его и подсвечиваю, да и вообще, делаю с ним что угодно.
(entget (nth 0 (nth 0 (reverse (setq rezultat (nentsel "Укажи блок:"))))))
Если я взял и включил элемент в набор из открытой ссылки, то выйдя из нее я с этим элементом по его имени ничего сделать не могу, даже entget! В наборе куча имен, а добраться до внутренностей этих элементов нельзя. Более того, при следующем вхождении в эту же ссылку имена, которые получаются из набора функцией ssname уже другие. Вот засада....!
Сообщение отредактировал Supermax - 16.6.2007, 19:44
|
|
|
|
|
|
|
|
16.6.2007, 22:05
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Так, ты меня совсем запутал. Я тебе расскажу свое видение твоей проблемы, ладно? Только не бушуй. Примерная схема, по которой строится "Исходный", я вижу такой (см.аттач). Соответственно в зависимости от того, на какую секцию ты кликнул, находясь в "Исходном", определит, какую часть проекта считать (кстати,в ADT именно по такой логике и делается проект, я оттуда идею спер). Код, который проходит по всем внешним ссылкам независимо от уровня их вложенности, я показать не смогу (связан обязательствами), но компилированный (если правообладатель даст добро) выложить смогу. А с выбором и подсчетом "внутри него" ИМХО ты зря заморочился.
|
|
|
|
|
|
|
Гость_Supermax_*
|
18.6.2007, 12:35
|
Guest Forum

|
Смотри, есть простанство модели, в котором стоит модель дома. Модель эта состоит из элементов, находящихся в этом пространстве. Под элементами я подразумеваю все примитивы и блоки. К ссылкам это не относится. Также, частью модели дома являются внешние ссылки. Хоть они и родственны блокам, но всеж не блоки. И так, перед нами модель. Она разбита на огромное количество слоев. В список которых включены еще слои из внешних ссылок. Часть элементов модели объединена в группы. Есть еще и внешние ссылки, которые тоже нечто вроде объединенных груп. Ссылки не отображают какой либо этап строительства или раздел проекта, они создаются как модель части здания. Могут быть (а на самом деле уже есть) части здания, такие как вентиляционные, электрические и сантехнические стояки и шахты лифтов. Это цельный кусок модели и он тоже представлен ссылкой.
Основной концепцией моего подхода являлась и является догма, что информацию о принадлежности элемента к разделу проекта, этапу строительства, системе, группе материалов и пр. должна нести сама деталь или лейбл, который оперирует элементами (примитивами) как источником сведений о длине, объеме, площади. Для редактирования например позиции "этап строительства" надо выделить в модели группу элементов и специальной подсобной прогой поголовно всем из этой группы поменять данные в этой графе атрибутов. А элементы (некоторые) могут лежать во внешней ссылке. Ведь шахту лифта нельзя построить одним этапом. Ее по кусочкам строят на разных этапах. А проектируют ее цельно, а то упаси бог на 10 см. где нибудь не попасть. А к какому этапу строительства будет относится данный фрагмент, на этапе проектирования проектировщики знать не могут. Это узнается только после того, когда определен принцип финансирования (с накоплений или поступлений).
В общем о злободневном: Я могу (пока) включать ручки у любых элементов в нутри ссылок, на каких бы они уровнях не залегали. Но только по одиночке, указывая их курсором мыши. После чего я с ними могу делать что хочу. Даже синхронизирую имя блоков (старая тема). Для того, чтобы мне открыть нужную ссылку _refedit-ом мне надо знать полный перечень ссылок и их (-1 . <Entity name: 7ef820a8>), чтобы этим ссылкам ручки включать. Refedit автоматом входит в ссылку, только если ей включить ручки (точнее одну единственную). При входе в редактор ссылок "вручную" я имею возможность выбора нужной мне ссылки, а вот программно сделать этот выбор не так просто, как оказывается.
Сообщение отредактировал Supermax - 18.6.2007, 13:16
|
|
|
|
|
|
|
|
18.6.2007, 23:03
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Готов присоединиться к проэкту. Если надо написать чего на лиспе, ну там функцию какуюнибудь то не стесняйтесь обращайтесь, сделаем.
А вот с Крысом спорить не надо. Он дело говорит. Почитайте "САПР на базе...." там очень весело и подробно описано кто будет пользователем ваших программ если вы будете их криво делать.
|
|
|
|
|
|
|
|
18.6.2007, 23:33
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Слегка оффтопа: Поперше всего, mmax, приветствую  Ты хочешь задание? Их есть у меня  А если нет, то придумаю  Во-вторых, заказчик сказал примерно следующее: "сделай мне подсчет для неоткрытого файла, и компилированный код можешь выкладывать" (правда, так загадочно улыбнулся, что у меня мурашки по спине побежали). Блин, я не ожидал, что ObjectDBX столько проблем породит... Без него-то для активного документа уже сделан код (проход целиком по файлу; проход по списку объектов; проход по выбору). Теперь о деле. > Supermax : я попробую по пунктам, ок? А то я вроде как запутываюсь... Цитата Под элементами я подразумеваю все примитивы и блоки. К ссылкам это не относится. Также, частью модели дома являются внешние ссылки. Хоть они и родственны блокам, но всеж не блоки. Ну вообще-то если на них посмотреть (хоть через (entget), хоть через (vla-get-objectname)) то у них вся разница в свойстве Path, IsXref и XRefDatabase (последние 2 для описания блока). А доступ к их составу абсолютно одинаков. Цитата Она разбита на огромное количество слоев. В список которых включены еще слои из внешних ссылок. Часть элементов модели объединена в группы. Ээээ... А зачем это знать при подсчете элементов? Или... Стоп! Ты что, хочешь еще и логистику сюда подключить? И полное планирование выполнять? Это называется БКК (Большая Красная Кнопка - нажал и получай деньги). Нереал ИМХО. Я ставил задачу попроще - получить полный список блоков (и не только блоков - вообще примитивов, отвечающих определенным требованиям, например, имеющих ldata моего приложения) как минимум по активному документу. С указанием количества. А потом выводить полученные данные в любое место - хоть в многострочный текст, хоть в таблицу, хоть во внешний файл. --- Еще раз говорю - если проходить целиком по внешним ссылкам, не фильтруя их состав, то получить список видаКод '((("name" . <ИмяБлока1>) ("dynprop1" . <ЗначениеДинСвойства1>) ("dynprop2" . <ЗначениеДинСвойства2>) ... ("dynpropN" . <ЗначениеДинСвойстваN>) ("Атрибут1" . <ЗначениеАтрибута1>) ("Атрибут2" . <ЗначениеАтрибута2>) ... ("АтрибутN" . <ЗначениеАтрибутаN>) ("Кол" . <КоличествоВхождений>) (("name" . <ИмяБлока2>) ("dynprop1" . <ЗначениеДинСвойства1>) ("dynprop2" . <ЗначениеДинСвойства2>) ... ("dynpropN" . <ЗначениеДинСвойстваN>) ("Атрибут1" . <ЗначениеАтрибута1>) ("Атрибут2" . <ЗначениеАтрибута2>) ... ("АтрибутN" . <ЗначениеАтрибутаN>) ("Кол" . <КоличествоВхождений>))) с учетом внешних ссылок любого уровня вложенности особых проблем не составляет. Для активного (текущего) документа
|
|
|
|
|
|
|
|
19.6.2007, 2:05
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
В обчем так. Кое-что получилось. Правда, немного через пятую точку, но по другому я не дотумкал как сделать. Во вложении - fas-файл + readme. Там все написано  Тестируйте. Заархивировано WinRAR 3.50. --- Добавлено: lsp файл (Если он включен в архив) нерабочий!!! Гарантированного результата не дает! --- <Приложенный файл удален. В постах #145 и #146 лежит исправленный рабочий (по крайней мере надеюсь на это) вариант.>
Сообщение отредактировал kpblc - 28.6.2007, 11:40
|
|
|
|
|
|
|
Гость_Supermax_*
|
19.6.2007, 6:45
|
Guest Forum

|
Mmax-у от SuperMax-a. Ты можешь включить ручку (поскольку она одна) у внешней ссылки, лежащей внутри внешней ссылки? Интересный каламбур получился однако. Сразу скажу что есть - подсвеченная внешняя ссылка (в смысле ручка включена, DXF пара с кодом -1, да и вообще все DXF коды через функцию ssget полученные), в которой надо покапаться.
Кpblc-у Ну ты горазд ваять! Осталось только получить указатель на вхождение блока ent. Вообще, я покапаюсь. Поскольку другого выхода не вижу. Начну с сокращения лиспа за счет убиения лишних переменных начинающихся с kpblc... Далее выброшу функции (но только очень аккуратно, чтобы не повредить другие функции) считающие блоки и прочие меня не интересующие. Понятно дело, исходный файл я оставлю (вдруг когда-нибудь пригодится). Вообще-то не дело, если человек просит стакан воды, выливать на него целое ведро. Я вроде русским языком выражаюсь НАДО ВКЛЮЧАТЬ РУЧКИ У ССЫЛОК! Прямого ответа получить не могу. Я понимаю, проверяющий (ежели такой имеется) глянув на открытый код main.lsp должен очень сильно напрячься чтобы понять, сообщил ты мне государственную тайну или нет. Сообщаю: если и сообщил, то до адресата она не дошла (пока). Вот если маленький редми к ней написать, тогда может и дойдет.
Сообщение отредактировал Supermax - 19.6.2007, 13:41
|
|
|
|
|
|
|
Гость_Supermax_*
|
19.6.2007, 15:31
|
Guest Forum

|
В хелпе к каду в описании VBA есть и структура внешних ссылок, и вся структура объектной модели и методы даны как с ней работать, но что касается лиспа - очень жиденько и не внятно. Буду ручки включать через VBA. Маразм? - Знаю!, но другого выхода у меня нет. Миф о всемогуществе AutoLispa и Visual Lispa тает у меня в мозгу, как снег в костре. Все методы содраны из ActiveX тобишь С++. Доступ к примитивам просто кашмарный! Все что и так сделать можно - на поверхности и вызывает серьезные сомнения в преимуществе. То что быстрее - так ведь к С++ ближе, а на нем весь кад сделан, не заслуга это самого языка, а сворованное качество! А вот качества в частности и не видно, ни в сервисе написания диалоговых окон, ни в описании функций ни в чем. Такое впечатление, что разработки AutoCAD-a просто для себя ваяли функции, а заодно и подзаработать решили. Зачем добру пропадать! Полещук Н.Н. так прямо и пишет в Разработке приложений и адаптации, что дескать не охотно авторы идут на описание функций доступа к примитивам, а те что и описывают, так очень уж сильно поверхностно. Редактор лиспа в каде просто кошмарный. Я им пользуюсь только по праздникам, да и то, после долго руки мою. В простом блокноте куда более удобно работать. Да, к стати, никто часом не знает как в редакторе лиспа шрифтец поменять? А то он такой убогий, жирно-грязный, что смотреть на него - сил нету. В Экселе скобки разного цвета - по парам, нет чтобы и здесь такое сделать, так нет же - функцию сварганили для проверки парности - полная шизофрения! AutoCAD идет по пути Windows. Развитие этой программы более не возможно без развития программных продуктов с ней связанных. Качество этих продуктов на прямую определяет и спрос на сам AutoCAD. Не за горами тот день, когда проектирование претерпит очень серьезные изменения (я про переход к моделированию объектов как главного требования к проекту). А качество сопутствующих программ целиком и полностью зависит от открытости и дружелюбности как самой объектной модели, так и средств работы с ней. А тут какие-то тайны Мадридского двора, понимаешь! Ссылку найти в документе не могу. БЛИН!
Сообщение отредактировал Supermax - 19.6.2007, 16:01
|
|
|
|
|
|
|
|
19.6.2007, 15:33
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Блин, main.lsp нерабочая версия, там лишнего полно, и некоторых вещей не хватало. Случайно подчепилось. Так что ее можешь и не смотреть. Все остальные лиспы у меня в CADWare открытым кодом лежат.
|
|
|
|
|
|
|
|
19.6.2007, 15:41
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
P.S. А вот теперь скажи тупому, на фига включать ручки, если можно программно сделать все что ты хотишь (и даже больше)? Подсветить примитив можно хоть через VBA, хоть через lisp : метод Highlight и аргумент True / False (о сопутствующих проблемах пока забудем). Включить ручки ты сможешь только через (sssetfirst), передав 2 раза одинаковые наборы примитивов. Оно надо, учитывая, что (sssetfirst) из-под лиспа (и VBA) корректно работает только в текущем документе, и может вызывать падение када (либо отказ от дальнейшей работы) в пространстве блока / внешней ссылки, даже открытой командными методами? Ох, как хочется поспорить насчет ком.методов и расписать их проблемы... Бум такое делать?
|
|
|
|
|
|
|
Гость_Supermax_*
|
19.6.2007, 16:23
|
Guest Forum

|
Во первых, ссылка - тоже "человек", от прочих элементов, в плане доступа отличаться не должна. В блок ведь лазить приходиться. Во вторых, подсветить примитив программно - его надо еще найти, а он бедолага в ссылке лежит, и только ручками (в смысле человеческими) его можно ткнуть и засветить (даже в ссылках на самом дне). Почему в VBA все как два пальца.. а тут такая ......! Спорить надо, только вот с предметом спора пока неувязочка. Я подозреваю, что все не спроста. Почему скажи AttachExternalReference есть, а прочесть то, что сваял - немоги? Все завязано на создание, поскольку это не раскрывает сущности, а вот редактирование - это уже надо сущность показывать, а тут конкуренция ...ее и связывание рук в плане изменения всяких разных составляющих. За кад не беспокойся. Я VBA-шный макрос загружу заранее, он системную переменную (скорее несколько) будет "сторожить" и как только в ней появится признак срабатывания - посмотрит какие ссылки с включенными ручками и поголовно включит ручки всем ссылкам в нутри этих ссылок. Далее в другой системной переменной мне признак готовности скинет, и я из всех засвеченных элементов создам набор. Когда макрос VBA мне станет не нужен, я ему скину признак "выкл". Вся операция займет мгновение и она ведь один раз только делается. А набор распотрошить, думаю ты и сам знаешь как. После этого поочереди буду входить в ссылки и делать обработку элементов прямо там. Чтобы с именами не заморачиваться. Когда придумаю как на лиспе ссылки найти - переделаю.
|
|
|
|
|
|
|
Гость_Supermax_*
|
19.6.2007, 16:42
|
Guest Forum

|
"метод Highlight и аргумент True / False (о сопутствующих проблемах пока забудем). Включить ручки ты сможешь только через (sssetfirst), " В кинофильме про трех мушкетеров (с Боярским в гл. роли) есть такой эпизод: Фанат миледи говорит (с акцентом) "Имя! Скажи мне имя!" Вот и я говорю DXF код -1 и я тебе включу что хочешь! Только он может быть вставлен в набор, и только после этого этот набор можно "включить". Занавес!
|
|
|
|
|
|
|
|
19.6.2007, 21:12
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата Во первых, ссылка - тоже "человек", от прочих элементов, в плане доступа отличаться не должна. Теоретически - да. Практически - некоторые отличия есть. Цитата Во вторых, подсветить примитив программно Ты так и не ответил, зачем тебе подсвечивать примитив. Да еще и ручками. Лично я в этом не вижу никакого смысла. Цитата Почему скажи AttachExternalReference есть, а прочесть то, что сваял - немоги? А справку посмотреть внимательно? Цитата Signature RetVal = object.AttachExternalReference (PathName, Name, InsertionPoint, XScale, YScale, ZScale, Rotation, bOverlay [, Password]) Ну и где ты тут видишь "невозможность получить что наваял"? Предваряя вопрос "а как в лиспе": да легко! Код (setq xref (vla-attachexternalreference (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) "c:\\temp\\temp.dwg" "temp.dwg" (vlax-3d-point '(0. 0. 0.)) 1. 1. 1. 0. :vlax-false );_ end of vla-attachexternalreference );_ end of setq Ну или наподобие того. И работай со своей xref как душе угодно. Цитата VBA-шный макрос загружу заранее, он системную переменную (скорее несколько) будет "сторожить" Реактор на системные переменные на VBA писать собираешься? Не слишком ли круто? ИМХО - лишнее. Или командный реактор? Или реактор документа? Помрешь писавши, потом отлаживавши, потом отказываясь от его применения, поскольку все ситуации все равно не уследишь. Можешь мне поверить, я знаю, про что говорю (у меня используется реактор на двойной клик мыши, казалось бы, все учел, ан нет, сегодня выдали - не все!) Цитата В кинофильме про трех мушкетеров (с Боярским в гл. роли) есть такой эпизод: Фанат миледи говорит (с акцентом) "Имя! Скажи мне имя!" Ну, я не фанат, да и acad не миледи, хотя мозги парит изрядно. Слушай, давай договоримся - имя есть у блока, у его описания, у ссылки, наконец. У отрезка имени нет. Есть его хендл, есть указатель на него. Но не имя! Проверни следующее: Код (defun c:tt (/ ent) (vl-load-com) (setq ent (entmakex (list (cons 0 "LINE") (cons 10 '(0. 0. 0.)) (cons 11 '(10. 100. 0.))) );_ end of entmakex );_ end of setq (princ (strcat "\nent-указатель : " (vl-princ-to-string ent))) (princ (strcat "\nHandle by ent: \"" (cdr (assoc 5 (entget ent))) "\"")) (princ (strcat "\nDXF -1 : " (vl-princ-to-string (setq ent_pointer (cdr (assoc -1 (entget ent))))) );_ end of strcat );_ end of princ (princ (strcat "\nvla-указатель : " (vl-princ-to-string (setq ent (vlax-ename->vla-object ent))) );_ end of strcat );_ end of princ (princ (strcat "\nHandle by vla : \"" (vla-get-handle ent) "\"")) (princ (strcat "\nvla->ename by handle : " (vl-princ-to-string (handent (vla-get-handle ent))) );_ end of strcat );_ end of princ (princ (strcat "\nvlax-vla-object->ename : " (vl-princ-to-string (vlax-vla-object->ename ent)) );_ end of strcat );_ end of princ (textscr) (princ) );_ end of defun И проанализируй полученные результаты. Примитив один и тот же, а добраться до него сколькими способами можно? --- И все равно, объясни, чего ты хочешь от подсвечивания добиться. На фига оно надо? В глобальной, так сказать, задаче?
|
|
|
|
|
|
|
|
19.6.2007, 22:25
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Имеются 3 файла 1 2 3 dwg В 2 вложен 1 В 3 вложен 2
Мне удалось программно получить указатель на объект 1 в активном документе 3 и подсветить его и сохранить в переменной eobj. Но Чтото сделать с этим объектом при неактивной(закрытой) _refedit ничего не получается. Функция (entget eobj) возрашает nil. При этом команда !eobj возращает <Имя объекта: 7ef980a8>. С VLA-add-get-put не баловался, но думаю что будет тоже самое. Хотя во время редактирования, по моему мнению, можно делать все что угодно и не только со ссылкой, имеется ввиду программно, например нарисовать окружность в другом space. Ограничений на запуск лисппрограмм нет.
Вывод: Внешняя ссылка для вашей программы не подходит. Применять ее можно только как подложку или наглядное пособие не более. Если пользователю захотелось проспецифицировать отдельные детали ссылки, то пускай он их внедряет. Тоесть делает их блоками итп.
Если желаете то могу написать корректный код? но что он вам даст?
|
|
|
|
|
|
|
Гость_Supermax_*
|
20.6.2007, 11:02
|
Guest Forum

|
Начну с Kpbls-a Команда _-refedit - единственное средство зайти во внешнюю ссылку не потеряв пространственного расположения элементов в "корневой" системе координат. . Сразу договоримся, "корень" модели - это то пространство, которое ты видишь при открытии файла в закладке Модель. Это пространство имеет свои X, Y, Z которые и есть текущаяя система координат. В этом пространсве расположена внешняя ссылка. Она может быть вставлена в это пространство со смещением и поворотом по этим осям. Я уже молчу, что может быть многократно скопирована в разные места пространства. . Ссылку можно открыть в своем окне (тобишь файле) или "по месту" командой _-refedit. При открытии командой _-refedit все элементы внешней ссылки становятся доступны но их расположение соответствует "корневой" системе координат, то есть они расположены так, как мы их видим из "корня". При открытии ссылки в своем окне, элементы располагаются в "родной" системе координат, то есть той, которые были на момент создания файла ссылки. . Если мы хотим обработать сектор этой ссылки, но координаты этого сектора мы получили из "корня", то либо надо открыв внешнюю ссылку в своем окне, пересчитать координаты рамки выбора (включая и угол поворота), для чего надо знать координаты и угол поворота ссылки при вставке, для чего надо залезть в ее свойства в том пространстве, где она вставлена, а она вставлена в другую ссылку, а та вставлена в третью тоже со сдвигом и поворотом... Не находите господа, что это через чур геморроидально? . Другой способ посчитать сектор, это открыть ссылку "по месту" _-refedit. Но для того, чтобы это сделать автоматически, надо, либо знать наверняка X и Y точки, попадающей на какой-либо элемент этой ссылки, либо, включить ручки у этой ссылки и запустить _-refedit. Она в таком случае запрашивать уазания объекта не будет. . В случае указания точки, вы откроете только "верхнюю" ссылку. Глубже вам залезть не получится. В случае включения ручки - надо знать DXF код (-1 . .............) с APP: имя примитива (изменяется в каждом сеансе редактирования рисунка) (см. лист 851 "AutoLisp и Visual Lisp в среде AutoCAD"). Причем то имя, которое приписано к этому элементу в "корневом" пространстве модели. . Если командой _-refedit зайти в ссылку, то там и имена свои и метки и vla-объекты. Работать с ними можно только не выходя из нее. Но если в пространстве созданном _-refedit есть еще и своя внешняя ссылка, то войти в нее увы вы не сможете. Войти в эту ссылку можно только из "корня" включив ей ручку. . Внешняя ссылка располагается в той же таблице, что и блоки, только она "безтелесна", то есть не имеет своего видимого тела, поэтому выбрать ее "методом тыка" не получается. Вот блок - другое дело! . Включив ручки у всех ссылок мы командой (ssget "I") создаем набор из элементов отмеченных ручками. Далее командой (ssname 0) поочередно, начиная с 0 читаем имя этого элемента соответствующее текущему пространству "корня". Далее это имя командой (ssadd ......) включаем в новый набор (из одного элемента) и командой (sssetfirst ......) включаем ручку у этой ссылки. Далее мы запускаем _-refedit и входи в ссылку, делаем там шурум-бурум и выходим. . Для mmax-a Ручку у ссылки включил? - запусти (command "_.-refedit" "O" "All" "N") . Как только это у тебя получится - сигналь! P.S. Мне ничего с объектом делать не надо, мне надо в него войти.
Сообщение отредактировал Supermax - 20.6.2007, 11:08
|
|
|
|
|
|
|
|
20.6.2007, 12:06
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ну, начнем с того, что лично я согласен с mmax - если надо считать "кусок" внешней ссылки, то либо внедрять ее, либо использовать более мелкую "разбивку". Цитата Не находите господа, что это через чур геморроидально? Не-а. Рекурсия с последующей фильтрацией результатов и преобразованием точек - вот оно, решение  Дальше. Цитата В твоих примерах Kpbls я не увидел обратной процедуры Ну, во-первых, она "спрятана" в fas. Во-вторых, ну не так мой ник-то пишется
|
|
|
|
|
|
|
Гость_Supermax_*
|
20.6.2007, 13:25
|
Guest Forum

|
С ником это случайно, поскольку в голове держал слово крыс, извиняй. А вот рекурсией и разбиением ссылок - это ты мне предлагаешь чтобы посчитать кусочек модели всю ее превратить в кучу элементов, принадлежащих только этому файлу? А в случае переопределения этапов строительства и реквизитов поставщика, получается это только в этом файле и будет переопределено? Я на типовом этаже в конкретном туалете, конкретный унитаз переназначил по всяким там параметрам, а остальные этажи - побоку? Так, с внешними ссылками, мое вмешательство автоматически распостранится на все копии этой ссылки, а так - будь добр трудись аж до старости. А как работать в коллективе, где один - один файл ваяет, другой - другой? А тот, кто отвечает за cнабжение - должен работать со всеми файлами? Да еще и ссылки в одной модели вставлены так, а в другом файле - сяк. Файл один, а используют его как внешнюю ссылку несколько человек и каждый по своему. Автор поменял трубу, а у других она осталась прежней? Ссылки это не только сокращение объема файла, это еще и возможность работать с фрилансерами. Я не собираюсь такую груду работы делать в одиночку. И прекратите ради бога выискивать у меня в тексте спорные моменты. Прогу я для всех делаю (или мы, если кто не против). Так давайте ее родимую ваять. . В прогу можно вставлять fas, если уж ты так дорожишь секретом, только надо договориться о тактике. 1. Подарть что либо можно только если ты это имеешь. В отношении программных продуктов это факт их регистрации как готового продукта. Если это материал одного лица - распечатывается на бумаге текст исходника и нотариально заверяется дата создания. Затем можно и в палату идти регистрировать. Если прога содержит недокументированные и не зарегистрированные функции, а без них она не пашет, то при последующей регистрации этих функций, как отдельных программ возникнет правовой инцидент, поскольку распостраняться программа будет комплектом, а она может быть и подарена, а автор функций с этим не согласен..... 2. На сколько мне известно без исходников нифига не зарегистрируешь, поскольку не возможно доказать нарушение авторских прав не имея возможности это нарушение предьявить к опознанию. Я в начале темы поднимал вопрос об открытости кода и нотариальном сопровождении темы. Вот если бы за темой следил нотариус - тогда другое дело, можно писать любые секреты открыто, дата их создания автоматически равна дате появления на экранах мониторов. Но такого пока нет, поэтому и коды всякие только универсального назначения. . Выбор элементов модели секущей или простой рамкой по всем ссылкам и в текущем пространстве модели - вещь универсальная. ее можно использовать не только для обработки этх элементов в плане количества, а еще и для их переопределения, выделения, перенесения в другие слои, включеия в набор и пр. . К стати, я еще ни разу не пробовал создать набор из элементов находящихся в разных ссылках. Надо будет как нибудь попробовать.
Сообщение отредактировал Supermax - 20.6.2007, 16:28
|
|
|
|
|
|
|
|
20.6.2007, 17:00
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Я ж вроде сказал, что пока у меня не получено добро на публикацию исходного кода. Как только - так сказу. А вот хочешь я всю твою малину по выбору и получению точек расколошмачу за 5 секунд? Запускаешь Код (defun test () (mapcar '(lambda (x) (entmakex x) );_ end of lambda '(((0 . "LINE") (10 2716.29 -479.869 0.0) (11 755.128 552.49 0.0)) ((0 . "LINE") (10 569.456 -1320.84 0.0) (11 2524.81 -856.854 0.0)) ((0 . "LINE") (10 1642.87 -21.6875 0.0) (11 459.214 -1030.85 0.0)) ((0 . "LINE") (10 232.926 -456.67 0.0) (11 436.005 1115.07 0.0)) ) );_ end of mapcar );_ end of defun В ком.строке дай Код Command: _select Select objects: _wp А теперь внимание, задача! Получи вершины, по которым был построен полигон выбора. Как это сделать - и вообще, возможно ли,- я не знаю. Это все было "нумер раз". Теперь настает "нумер два". Цитата А вот рекурсией и разбиением ссылок - это ты мне предлагаешь чтобы посчитать кусочек модели всю ее превратить в кучу элементов, принадлежащих только этому файлу? Во-первых, я не предлагаю сразу и одновременно использовать внедрение ссылок и рекурсию. Не надо за меня придумывать и договаривать. Почитай внимательно мой пост #91 (оффтоп: сейчас покажу тему одному товарищу, он вынесет вердикт - кто прав а кто нет). Во-вторых. Цитата А в случае переопределения этапов строительства и реквизитов поставщика, получается это только в этом файле и будет переопределено? Что значит "переопределения"? Ты что, атрибут в блоке поменял? Или в свойствах файла покопался? Цитата Я на типовом этаже в конкретном туалете, конкретный унитаз переназначил по всяким там параметрам, а остальные этажи - побоку? Что значит "переназначил"? Я, если честно, не понимаю, какая связь между подсчетом элементов и логистикой. Ну поменял ты атрибут (к примеру) у блока в какой-то внешней ссылке, ну и ладно. Запуск подсчета по новой - вуаля, оно подсчитано как надо. Скажи, почему ты отказываешься напрочь от идеи сделать разбивку внешних ссылок более детализированной? Проблем будет на три порядка меньше. --- Добавлено в 22:29: Во, придумал пример! Смотри, ставишь ты оборудование (неважно какое - насос, вентилятор, козловой кран и т.п.). Вставляешь ты его внешней ссылкой. Теперь тебе надо для здания посчитать спецификацию. По выбранному полигону / региону. Ты выделяешь, и в этот полигон от твоего вентирятора попадает 1 лопасть, 2 болта, 3 винта и 4 гайки. И что, только это и будешь учитывать?
Сообщение отредактировал kpblc - 20.6.2007, 21:30
|
|
|
|
|
|
|
|
20.6.2007, 22:30
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Уопщем так. Создается такая программа которая подсчитывает блокрефы с определенными параметрами и заносит информацию о их названиях и количествах в спецификацию.
Вы пытаетесь навязать пользователям свою методику и свои блоки. А теперь назовите хоть одного человека который любит когда ему чтото навязывают и еще такого который относится с доверием к чужим блокам.
Все автокадчики привыкли к своим методикам и своим блокам со своими именами и комментариями. Мы не можем угадать у кого сколько блоков, как их зовут и какие данные к ним прикреплены итп. И уж темболее не имеем права говорить пользователю какие блоки использовать и как их называть.
Но Все блокрефы: 1. имеют происхождение от какогото одного блока. 2. имеют масштабы Вот и все что их унифицирует. И только по этим двум параметрам можно их сортировать и специфицировать.
Если пользователь вставляет блок под названием UNITAZ в масштабе 1 и тотже блок в масштабе 2, то он вставил два разных изделия и в спецификацию они пойдут в разные места.
Тут шел разговор о красных кнопках. В настоящее время ниодин здравомыслящий человек не будет им доверять никогда. И когда спецификация отправится к заказчику он еще раз все перепроверит, пересчитав все изделия пальцем (исключения могут быть в госпредприятиях на которых не платят зарплату).
Программа должна быть маленькой и простой и должна дать пользователю право самому выбирать что и как делать. Например: Команда СПЕЦИФИЗД Select object выбрали один блок Далее выводится диалоговое окно в котором имеется информация о подсчитанных унитазах. Также в этом окне должны быть ячейки в которые пользователь может заполнять сам и их значения будут иметь более высокий приоритет чем программно посчитанная информация, ябы даже сказал, что эти ячейки будут иметь не приоритет а выносить вердикт. Например программа в плане жилого дома нашла 10 одинаковых унитазов, так как все остальные этажи не рисуются, то надо чтобы пользователь указал некий коэффициент по которому будет посчитано полное их количество во всем доме и на всякий случай сделать маленький текстбоксик в котором пользователь сам будет выносить окончательный вердикт количеству изделий независимо от коэффициента этажности, даже если он его указал. Тоже самое касается имен и прочих столбцов спецификации, напрмер: Наша программа вычислила имя блока и предложила в диалоге, в ячейке соответствующей графе спецификации НАЗВАНИЕ ИЗДЕЛИЯ, имя блока как название изделия, а пользователь, в свою очереть, должен иметь право вынести вердикт названию.
Также будет НЕочень уместно специфицировать каждое изделие поотдельности. Поэтому надо сделать диалог так чтобы полученная информация в нем могла выстраиваться последовательно на каждое изделие. Например вывести сразу екселевскую таблицу на экран. _______________________________________________________________________ _______________________________________________________________________
Пользователь выбрал объекты рамкой и в набор попали задвижки и унитазы и в итоге в спецификации может получиться такая сумятица: Унитазы 1 серии Задвижки 5 серии Унитазы 8 серии Задвижки 125 серии А они должны располагаться по группам да еще в алфавитном порядке. Вывод: Всетаки без определенных соглашений с пользователем не обойтись придется ему в свои любимые блоки вставлять наши метки по которым программа будет их идентифицировать. Надо сделать отдельный модуль который автоматически добавит необходимую информацию в блок пользователя
Пользователь выбирал челкая по отдельным объектам и забыл один. Программа должна сообщить пользователю, что в рисунке объектов больше чем указано в спецификации. С другой стороны объектов 10 а пользователь вынес вердикт, что их 5. Значит если пользователь выносит вердикт, то это дело надо пометить. Получается, что если такая метка присутствует то можно смело посылать его куда подальше и ничего больше не считать.
На жилых этажах на каждом этаже определенное количество изделий. На первом нежилом могут быть теже самые изделия но в другом количестве. План первого этажа в другом файле, а изделия специфицируются от подвала до крыши. Вывод: В екселевском файле должна быть наша метка которая указывает, что изделие уже занесено в спецификацию и информацию об изделии надо только пересчитать или добавить к имеющемуся, а не добавлять в новую строку.
В одну спецификацию заносится информация из разных файлов. Значит надо в екселе делать метки о том какая информация откуда попала. Ошибки неизбежны. Если при строительсьтве окажется что один унитаз лишний, то сильно ругать не будут, просто на голову его вам оденут, а потом прораб утащит его к себе домой. Если недосчитаются одного, то вас в нем утопят.
Итог: А не лучше ли просто создать программку, для рисования табличек и сделать так чтобы в них было удобно заносить текст. Дабы не пришлось никому ходить с унитазом на голове.
|
|
|
|
|
|
|
|
21.6.2007, 19:46
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Имеем три файла 1 2 3 двг 1 вложен в два 2 вложен в три Работаем с третим файлом: Код (command "_-refedit") И так далее чтобы подсветить нужную ссылку надо выбирать ее по коду 2. которй хранит ее имя которое равно имени файла. Код ;подсветим самую дальнюю 1.двг
(setq ss (ssget "_X" (list (cons 2 "1"))))
(sssetfirst nil ss) при этом надо не забыть что в данном примере ссыка 2 будет подсвечиваться со ссылкой 1 так как ссылка 1 является примитивом файла 2 А вот сделать так чтобы не было окна с сообщением что ссылка сохранена неполучается ни программым ни ручным способом. При этом получается непонятная ситуация, если я внес в ссылку изменения, то теперь просто обязан их сохранить или остаться в рефедите. А находясь в рефедите не могу ни закрыть ни сохранить файл. Нажав ОК я могу угробить кучу сторонних файлов. А если я захочу отказаться от редактирования ссылки, то что мне тогда делать. команда refclose предлагает мне либо сохранить измения в файлах ссылки либо выключать компьютор из розетки. Или это всетаки глюк только Автокада 2007 Нет я вообще не буду пользоваться ссылками лучше copy paste так и овцы сыты и волки на воле. Ради размера файла не стоит на такие вещи и заморачиваться.
|
|
|
|
|
|
|
Гость_Supermax_*
|
23.6.2007, 13:12
|
Guest Forum

|
Ну вы братцы и навалили мне работы! Начну как всегда с (так, тут надо тщательнее) kpblc-а. 1. Ты ж вроде сказал, да я ж не то тебе ответил. Я сказал (пост 92), что секрет можно и не раскрывать, только использовать такую функцию надо корректно. Договорившись, лучше в письменном виде (даже не лучше, а обязательно). 2. Внимательно вчитайся в эту строку: (command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C) Она ничего не делает. Не создает набор, не выделяет объекты – она только показвает рамку и сохраняет в переменных nnn1 и nnn2 координаты рамки. И даже при выходе, она не Enter нажимает (в таком случае было бы “”) а Esc. Что соответствует ^C^C. Далее следует строка: (set (read (strcat "ss" (itoa n_ss))) (if (< (car nnn1) (car nnn2)) (ssget "_W" nnn1 nnn2) (ssget "_C" nnn1 nnn2))) Вместо (set (read (strcat "ss" (itoa n_ss))) …. Можно вставить (setq ss1 …..чтобы понятнее было Для публики поясню: В зависимости от того, меньше или больше значение X точки nnn1 по отношению к значению X точки nnn2 создается набор либо секущей, либо простой рамкой с координатами рамки nnn1 –начальная точка и nnn2 – конечная точка и сохраняется в переменной ss1 (в первом случае номер множится). Данную строку можно многократно запускать на одном и том же месте пространства (например открывая ссылки _-refedit-ом). Можно пополнять какую-нибудь базу, сведениями получившимися после обработки этого пространства, можно производить с элементами, попавшими в это пространство различные манипуляции. Можно конечно и так: (setq ss1 (ssget "_W" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)))) Или так: (setq ss1 (ssget "_C" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)))) Но в этих случаях выбор (секущая или нет) предопределен, рамка белая и жирная.
Теперь рассмотрим твой пример автоматического рисования четырех линий. Где ты их нарисовал и зачем? Ну, даже, если ты их нарисовал в том месте, где я произвожу подсчет, то я могу их посчитать (или то, что попадает в условия выбора, в смысле секущности). Раз с сохранением координат выбора проблем нет, перехожу дальше.
Даю пояснение к слову «переопределение». С начала считали, что отмостку будут делать на этапе нулевого цикла, а потом передумали и переопределили как работу этапа «благоустройство». К проектированию конструкции здания это не относится. Это моя головная боль, поскольку я занимаюсь «виртуальным строительством», то есть по готовому проекту имитирую в компьютере процесс строительства объекта. Увязывая действия многих подрядчиков между собой и заодно проверяю проект на «глюки» проектировщиков. А вот как я называюсь и где сижу – только в личку. Тут к стати ящики для участников форума есть. А на счет атрибута – да. Этап строительства был – нулевой цикл, а стал благоустройство.
Далее. А вот тут ты за меня придумываешь. Когда и где я отказывался, или вообще рассуждал о детализации внешних ссылок? Ссылки есть и будут. Большие или маленькие, но все равно будут. Приведу живой пример. Проектная фирма (у меня за стенкой) человек не много, но все с пальцами веером и неслабой зарплатой. Выход продукции зависит от их настроения. Очень долго бились за производительность и наконец-то приняли следующее решение: Работа считается выполненной, если она положена в архив на центральном файл-сервере. Редактировать ее прямо там могут считанные единицы людей (и даже не всегда может сам автор). У других она – да, да, да – внешние ссылки. В конце месяца смотрят по журналу сервера сколько кто сделал и зарплату работника делят на количество сделанного. Раньше никто не хотел записывать, кто и что его попросили сделать, а теперь сами придумывают.
Самое последнее. Козловой кран. Ты открой мой теплопункт и увидишь, что фильтры сетчатые ДУ-100 имеют свои гайки, болты и пр. детали, но они все объединены в блок и названы «фильтр сетчатый ДУ-100». Так и кран. Его надо с начала сделать краном, а не грудой элементов от крана, а уж затем этот файл вставлять ссылкой в другой. При открытии такого файла мы не получим никаких вентиляторов. Мы получим только один кран козловой.
Теперь mmax. «Вы пытаетесь навязать пользователям свою методику и свои блоки. А теперь назовите хоть одного человека который любит когда ему чтото навязывают и еще такого который относится с доверием к чужим блокам.»
Во первых я имею на экране компьютера те же блоки и элементы чертежа что и вы. Моих блоков нет. Атрибуты к блокам придумал не я, иначе бы вы их не смогли увидеть. Состав атрибутов я не определяю (как между прочим многие мне навязывают). У меня и состав и написание и количество их оставлено на усмотрение пользователя. Это к стати тоже многим не нравится. Говорят хочу сделать универсальную прогу, а это недостижимо. Слово «навязать» имеет несколько негативный характер. Я и сам не люблю, когда мне навязывают и другим этого стараюсь не делать, а вот термин «убедить» мне больше по душе. Да, я во многих вещах убежденный человек, а это значит, что меня можно в чем-то разубедить. Вся моя методика сводится к строению тела программы и к тому, что она сможет считать. И я вам даже еще раз перечислю. 1. Простые блоки – по именам, как это делает макрос на VBA лежащий в первом сообщении темы. 2. Блоки динамические и не динамические с атрибутами – по данным атрибутов с их сортировкой по этапам строительства, разделам проекта, системам, категориям и другими параметрами определяемыми пользователем в файле-маршрутизаторе. 3. Виртуальные материалы и изделия, (то есть такие, которые представлены не в виде модели, а в виде условного параметра длинны, площади, объема и т.п. взятого с примитивов типа линии, плоскости, солиды и т.п.) – по данным атрибутов с их сортировкой по этапам строительства, разделам проекта, системам, категориям и другими параметрами определяемыми пользователем в файле-маршрутизаторе.
Вот пожалуй и все. Если есть еще что-нибудь – скажите, у меня фантазия на этом исчерпалась.
Да, я маршрутизатор, (то есть такой детал, который показывает проге маршрют ее продвижения, то есть какой раздел делится на какие подразделы, в какой последовательности вести подсчет и вообще чего искать в свойствах атрибутов?) сделал на Эселе, а не на СУБД-шной базе или в блокноте – вот какой я тиран и угнетатель пользователей. Они хотят Access а я им гад даю Excel.
Количество элементов «в точности» никогда не закупается. И кабель, и трубы и те же унитазы покупаются с процентовкой в соответствии с нормами сметы. Данные проектировщика никогда не идут напрямую в работу. Только после сметчика. Про «никогда» я пожалуй поторопился, забыл где живу.
Да, красные кнопки многие не любят. Страшно. А вдруг, что не так? Но я кранные тоже не люблю, вот фиолетовые, или в крайнем случае зеленые – другое дело. Программа не должна быть настроена на окончательное действие. Ведь в работе нужно постоянно иметь возможность локального подсчета, чтобы оценить правильность общей концепции. Поэтому и выбор рамкой, и возможность иметь маршрутизатор ко всем проектам свой, и таблицы чтобы были любые, от самых примитивных в три столбца, до технологических карт и листов ресурсов к М.S. Рroject-у. Про заказчиков и их отношение к автоматизму я знаю не понаслышке. Когда объем бетонирования заваливает за 10000 м3, пальчик, которым считают, отсохнет у любого. Заказчик знает о процентах на «утруску – усушку», но закладывать их в объем закупок – только его прерогатива, и его же ответственность. Я лично сдавал объемы бетонирования по 3D модели, и могу судить о таких вещах.
Про забытые детали: Есть такая проблема, но она не потому, что пользователь не нажал на деталь курсором, а потому, что деталь относится к группе подсчитываемых, но ни в один набор не попала. То ли атрибута какого-то не хватило, то –ли в маршрутезаторе про такую разновидность материализма забыли указать. Но тем не менее, все элементы подлежащие учету выбраны, обработаны и распределены по группам, а те, что остались – предъявлены к «опознанию» и решению их дальнейшей судьбы.
С кодом – (setq ss (ssget "_X" (list (cons 2 "*")))) - Выберает все элементы с кодом 2, кроме тех, что находятся в нутрии внешних ссылок. Не веришь? Накидай в 1.dwg блоков, они тоже имеют такую пару и посчитай длину набора (функция sslength). Ну про сохранение ссылки это ты зря. Выбор есть. Я все время выхожу так: (command "REFCLOSE" "D") А хотел бы сохранятся, поставил бы “S”.
|
|
|
|
|
|
|
|
23.6.2007, 16:03
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
Сколько болтовни я все и усвоить не могу. Ну сделайте просто программу которая просто подсчитывает в 1 открытом документе блокрефы с одинаковыми именами, масштабами и атрибутами или с отсортировкой атрибутов. И все. Как два пальца об асфальт. далее пользователь сам решит что ему надо сделать. В конце концов он сам разрабатывал проэкт и знает где чего и сколько. В ссылки лазать не надо, потомучто пользователь может спокойно открыть документ на который вставлена ссылка и там спокойно запустив вашу программу все пересчитать и добавить в общий подсчет. Главное чтобы ваша программа была адаптирована к работе с несколькими документами. Тоесть подсчитали в одном документе. Перешли в следующий, программа спрашивает, начать новую спецификацию или добавить в созданные. а если вы попытаетесь автоматизировать процесс полностью, недавая пользователю контроля, то у него будет очко дрожать когда он будет передавать документы по инстанциям Цитата(Supermax @ 23.6.2007, 10:12)  С кодом – (setq ss (ssget "_X" (list (cons 2 "*")))) - Выберает все элементы с кодом 2, кроме тех, что находятся в нутрии внешних ссылок. Не веришь? Накидай в 1.dwg блоков, они тоже имеют такую пару и посчитай длину набора (функция sslength). Ну про сохранение ссылки это ты зря. Выбор есть. Я все время выхожу так: (command "REFCLOSE" "D") А хотел бы сохранятся, поставил бы “S”. Я вам руку зажег? Код (2 . 1) говорит о том что ссылка имеет имя файла 1 без DWG. Изначально разработчиками акада в этом разделе была заложена полная жопа. и нет смысла пытаться ее раздвинуть
|
|
|
|
|
|
|
|
24.6.2007, 0:35
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> Supermax : Цитата Внимательно вчитайся в эту строку: (command "_.select" "BOX" (setq nnn1 (getpoint)) (setq nnn2 (getcorner nnn1)) ^C^C) Вчитался. Проникся. Всплылил, был неправ. Это я про себя. Наверное, дело в том, что как только вижу DIESEL-выражения, не примененные к RTEXT или modemacro, я их даже не анализирую. Да и твой код, кстати, можно сделать более удобным для применения: Код (if (and (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (setq nn1 (getpoint "\nНачальная точка рамки выбора <Отмена> : ")) );_ end of lambda );_ end of vl-catch-all-apply );_ end of vl-catch-all-error-p );_ end of not nn1 (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (setq nn2 (getcorner nn1 "\nКонечная точка рамки выбора <Отмена> : ") );_ end of setq );_ end of lambda );_ end of vl-catch-all-apply );_ end of vl-catch-all-error-p );_ end of not nn2 );_ end of and (progn ;; Погнали основной код ) );_ end of if И будет такой вариант ИМХО более удобным. Теперь насчет доступа "внутрь" xref'a. Я не понимаю, неужели невозможно через vla-isxref получить - является ли элемент внешней ссылкой или нет? И если да, то выполнять проход по его внутренностям и добавлять в общий результат? Я не зря сказал, что Цитата если проходить целиком по внешним ссылкам, не фильтруя их состав, то получить список <...> с учетом внешних ссылок любого уровня вложенности особых проблем не составляет. Для активного (текущего) документа --- В общем, как я понимаю, основная проблема именно в том, чтобы составить список объектов, так? "Фильтр" выбора (блоки с атрибутами и без и/или дин.блоки с атрибутами и без и/или остальные примитивы, удовлетворяющие каким-то внешним условиям) формируется программно в момент вызова "подсчитывающей" функции. P.S. Сейчас еще раз скачаю первый VBA-макрос, куда-то я его дел...
|
|
|
|
|
|
|
Гость_Supermax_*
|
24.6.2007, 14:39
|
Guest Forum

|
Ну, теперь начну с mmax-a. Да, болтовни не просто много, а очень много. Это очень злободневная проблема всех форумов. Я тут уже бодался с некоторыми по поводу «болтовни» в темах, но оказывается тему можно сделать нечитабельной и не только болтовней. Вот она, конкретная примера однако. Те, кто интересуется данной темой, не очень стремятся читать все с нуля, а лезут в самое пекло, в текущую дискуссию, так сказать поразмяться. Даже я сам не очень горю желанием туда лезть и что-нибудь корректировать. Есть много вариантов бороться с этим, например, отредактировать все нафиг так, чтобы материал темы стал похож на художественную книгу, чтобы можно было читать и ржать или плакать. Комментатора что ли завести, как на футбольных матчах? Или еще один вариант, это периодически подводить итоги и «обнулять» исходную точку дискуссии на каждой странице темы. Чтобы далеко не ходить в поисках первоисточника. Но все лень, проклятая лень, вот это все написать не лень, а в два раза меньше для «освежения» понимания происходящего – лень. Но я как-нибудь напрягусь. Обещаю. Далее: Первый абзац – ну так оно примерно и получится, только на достигнутом останавливаться облом. В Excel уже сбрасывали, и лежа, и стоя, и по диагонали. В Word – аналогично. В Layout любые рамки, включая создание самих Layout-ов потоком. Даже настройка размеров рамки под контур границы печати. Все постигнуто и достигнуто. Осталось только сделать так, чтобы любая прихоть заказчика (про проектировщиков молчу, им лишь бы деньги были) была удовлетворена. Поверь, если ты можешь удовлетворить заказчика, остальных ты можешь удовлетворить пять раз подряд без перерыва. В ссылки лазить надо. Тебе не надо – не лазь. А мне надо – судьба. Если ссылку открыть отдельным документом – она будет иметь свое пространство. При подсчете элементов в этом пространстве будут созданы новые таблицы, которые надо будет сливать с таблицами других документов. Такое возможно и будет, поскольку не всегда работы объединены в одну модель, но это потом. Сейчас же я заказчику на огромном экране демонстрирую модель здания и отвечаю на его вопросы с помощью его воображения. Оно, это его воображение, очень меня беспокоит. Точнее его отсутствие. И вопросы «А сколько это будет стоить?», «А это за какое время можно сделать?» мне уже сняться. Если сделать программу, которая может залезть в ссылку, то не лазить туда – вопрос вкуса. Далее: Да, эта сволочь, покопалась у себя в нутрии и нашла этот файл, но ручку зажгла только одну, ту, которая на самом верхнем уровне. В набор вставить она внутреннюю ссылку не захотела. И мы по прежнему туда залезть не можем. С жопой целиком и полностью с вами согласен. Вот kpblc туда слазил, а впечатлениями делиться не спешит, видать там много интересного и нужного добра лежит. Но я все же туда дорогу отыщу. Я не мазохист по жопам лазить, но все указатели на дороге показывают именно туда. Вот один из них: (nentsel "Укажи блок:") Выдает: (<Entity name: 7efdda58> (10251.0 -3557.01 0.0) ((1.0 0.0 0.0) (0.0 1.0 0.0) (0.0 0.0 1.0) (9368.0 -3560.07 0.0)) (<Entity name: 7efd2e40> <Entity name: 7efb5da0> <Entity name: 7efa5078> <Entity name: 7ef9b090> <Entity name: 7ef820a8>))
Вот это: (<Entity name: 7efd2e40> <Entity name: 7efb5da0> <Entity name: 7efa5078> <Entity name: 7ef9b090> <Entity name: 7ef820a8>) С лева, на право 1. – имя самого блока; 2. – имя ссылки куда он вставлен; 3. – имя ссылки куда вставлена первая ссылка; 4. – имя ссылки куда вставлена вторая ссылка; 5. – имя ссылки куда вставлена третья ссылка. Последнее имя можно получить выковыряв его из простого набора в текущем пространстве созданного функцией ssget (в смысле, набор создан). Как эти имена получить без указания на деталь чертежа – вопрос открытый, поиски ответа продолжаются.
Теперь к kpblc: Мой вариант красившее. И зелененькая, и синенькая, и всего одна строчка. И работает. А у тебя белая, как я и раньше писал с ssget в паре. С (command “_select” “BOX” … такое вытворяет! И ^C^C в конце не помогает выйти из коллапса. Что я, думаешь не пробовал? Да я все почти перепробовал. Остановился на этом варианте, как на наиболее показательном. Вот ее своими проверками на политкорректность и совершенствуй. Красивый лисп, это не только волны по экрану, а еще и маленькое такое зернышко хитрости. Все гениальное не всегда – просто. Но иногда и простота бывает гениальной. Так, увлекся. Пардон. Далее: Колись как пройти целиком по внешним ссылкам. Хрен с ними, их не так уж и много будет, можно и все подряд открывать и этот клочек пространства прочесывать. Вот мои кады такой функции Lisp-а как vla-isxref не знают. Может у тебя библиотека какая-нибудь подгружена? Вот vla-get-IsXref имеется. Ну я ей и пользуюсь по мере возможности (см. пост №73). Список ссылок, попавших в набор имею, но только в верхний, в текущем пространстве модели сделанный. А мне нужны все имена, причем в привязке вернего уровня (текущего пространства модели), а не взятые при открытии ссылок из пространства _refedit. КОЛИСЬ!!! Или сделай функцию, которая включает ручки всем ссылкам.
|
|
|
|
|
|
|
|
24.6.2007, 21:10
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата Вот мои кады такой функции Lisp-а как vla-isxref не знают. Ну, знаешь, когда пишешь без запущенного акада, такого класса ошибку легко допустить. Согласен, есть только vla-get-isxref, моя ошибка. Цитата Остановился на этом варианте, как на наиболее показательном. Вот ее своими проверками на политкорректность и совершенствуй. В любой момент пользователь (то бишь я) нажимает Esc - и чего будет в результате? Праально, возврат ошибки. Который надо обрабатывать. Что лично мне делать в ломак. ИМХО гнаться за красивостью на экране в данном случае - излишество. Как бы то ни было - дело твое. Далее. Как ты проходишь по всему составу блока? В этом смысле доступ к составу внешней ссылки для активного (текущего) документа ничем не отличается. Вот и получай: если ent - vla-указатель на вхождение внешней ссылки, то пройтись по ее составу можно так: Код (vlax-for subent (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-name ent) );_ end of vla-item ;; И здесь все что надо получить - в обработку. );_ end of vlax-for Дерзай. Заключай в рекурсивную функцию и соединяй результаты. Цитата Или сделай функцию, которая включает ручки всем ссылкам. На хрена, если и без включения ручек я подобным кодом пройдусь по всем ссылкам, попавшим в набор?
Сообщение отредактировал kpblc - 24.6.2007, 21:12
|
|
|
|
|
|
|
Гость_Supermax_*
|
24.6.2007, 21:25
|
Guest Forum

|
(vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) И как же это ты совместил? Если не секрет конечно?
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvdgiCU
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqwGt2gw
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzqvY3G2W
Реклама: ООО «НовоКС» | ИНН 6330071530 | erid: 2VtzqwMVijq
Последние сообщения Форума
|