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

|
> Supermax, #209: Это не я говорю о получении неполного состава внешней ссылки, а ты  По крайней мере у меня сложилось такое мнение по результатам темы. Потому что пройтись по всему составу внешней ссылки активного документа лично у меня проблем не вызывало - проанализируй мой код. > Supermax, #211: Вот уж не думал, что надо будет рассказывать элементарные вещи... Есть несколько вариантов получения указателей на элемент: - (entsel [msg]) - получает ename-указатель на примитив, на котором "щелкнул" пользователь + координаты точки, в которой был выполнен "щелчок" в текущей системе координат. Выбранный примитив временно подсвечивается пунктиром. Результат (если отбросить ненужное) - ename - (nentsel) - аналогично, но при "щелчке" на примитиве, входящем в блок или внешнюю ссылку, указывает данные "по хозяину". Никогда не пользовался, поскольку практически не требовалась. Результат - ename - (ssget) с различными фильтрами - получение набора примитивов. Результат - pickset (!) Рассматривается ниже - (vlax-for) - немного отдельная песня. Сейчас ее рассмотрим поближе. Извращения типа того, чем так любит страдать Лентяй на dwg.ru, я не рассматриваю. Итак, погнали разбор наборов? (ssget) - позволяет получить набор примитивов. Сконвертировав его в список примитивов, мы можем делать с ними все что угодно. Примерно так: Код (defun _kpblc-conv-selset-to-ename (selset) ;| * Функция преобразования набора, полученного через (ssget), в список * ename-примитивов. * Параметры вызова: * selset набор примитивов * Примеры вызова: (_kpblc-conv-selset-to-ename (ssget)) |; (if selset (vl-remove-if 'listp (mapcar 'cadr (ssnamex selset))) );_ end of if );_ end of defun Сейчас мне будет задан вопрос: так все равно же выполняется выбор, и примитивы подсвечиваются! На что я отвечу: при формировании набора типа (ssget "_X") "подсветка" примитивов не выполняется! А доступ к ним все равно есть. Теперь насчет (vlax-for) (vlax-for) позволяет пройтись по всей коллекции, например, описаний блоков, и для каждого элемента описания получить его состав. В этой коллекции обязательно присутствуют блоки с именами *Model_space* и *Paper_space*, обозначающие соответственно пространство модели и пространство листа. Так, для файла с 2 пространствами листа (абсолютно пустого) функция вида Код (defun getblocks () (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (princ (strcat "\n" (vla-get-name blk))) );_ end of vlax-for (princ) );_ end of defun вернет Код _$ (getblocks)
*Model_Space *Paper_Space *Paper_Space0 _$ Соответственно, проходя по составу уже этих блоков, можно получить их состав (в пустом файле нарисуем линию "от балды" в пространстве модели и еще одну в пространстве листа, запускаем Код (defun getall () (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (princ (strcat "\n" (vla-get-name blk))) (vlax-for ent blk (princ (strcat "\n\t" (vla-get-objectname ent) " : " (vl-princ-to-string ent)) );_ end of princ );_ end of vlax-for );_ end of vlax-for (princ) );_ end of defun и получаем нечто типа: Код _$ (getall)
*Model_Space AcDbLine : #<VLA-OBJECT IAcadLine 052573b4> *Paper_Space AcDbViewport : #<VLA-OBJECT IAcadPViewport2 05254394> AcDbViewport : #<VLA-OBJECT IAcadPViewport2 05254334> AcDbLine : #<VLA-OBJECT IAcadLine 05254204> *Paper_Space0 Хотя бы один объект подсвечен? Не-а. А доступ получен? Ага. Так что подсвечивание объекта не является критичным для получения доступа к нему. Цитата как приравнять координаты вставки элементов к единому пространству? для справки: в vla-представлениях примитивов все координаты хранятся в мировой системе координат. Соответственно выполняется нечто типа: Код (mapcar '+ (vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint block_reference)) );_ end of vlax-safearray->list (vlax-safearray->list (vlax-variant-value (vla-get-startpoint line))) );_ end of mapcar И всех делов. На выходе ты получишь реальные координаты начала отрезка при условии, что xref имеет 0 угол поворота. Для "ненулевого угла" и "немировой системы коодинат" думай уж сам  Вот такая я сволочь. Цитата Как заранее узнать, что потребуется? Развернутое диалоговое окно, плюс дополнительная фильтрация. Ты думаешь, я от безделья только полгода назад начал заниматься спецификациями вплотную? Не-а, я почву готовил. Цитата Ссылки, ссылки, сылки! Что с ними делать? Программно? Только читать. Любые изменения должен вносить пользователь. Сугубо ИМХО. [offtop]Странное дело - мне приходят уведомления о новых ответах, только если отвечал не Supermax и не я. Учитывая интенсивность общения, по меньшей мере хочется исправить. Как - пока не знаю. Блин.[/offtop] --- Добавлено: И тишина. И только количество просмотров растет...
Сообщение отредактировал kpblc - 11.7.2007, 22:22
|
|
|
|
Гость_Supermax_*
|
14.7.2007, 11:21
|
Guest Forum

|
Ох уж эта Анапа! Связь - полный кишечник при сильном расстройстве. Пока загараю. Процесс вставки элементов из другого файла должен начинаться с копирования файла-матки в промежуточный файл, далее переименование всех слоев в слои с именами состоящими из имени файла-матки - разделитель - прежнее имя слоя. Далее объединение всех элементов в блок с именем файла-матки. Далее - надо где-то хранить параметры вставки такого блока (X, Y, Z, масштаб, угол поворота и т.п.).
|
|
|
|
|
14.7.2007, 21:48
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Выдумываешь механизм внешних ссылок?
|
|
|
|
Гость_Supermax_*
|
15.7.2007, 11:54
|
Guest Forum

|
Да вот refedit с префиксом глючит. Получается, что только в ручную можно работать. Поещуку передам материал, пусть убедится и подтвердит сей прискорбный факт, а затем уж в AutoDesk настучу. Право на жизнь имеет любая форма существования. Почему бы и такой вот способ не потрогать руками? Существующие внешние ссылки это не отменит все равно. Но в некоторых случаях может что-нибудь интересное родится.
Сообщение отредактировал Supermax - 21.7.2007, 11:27
|
|
|
|
|
15.7.2007, 22:30
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Ты только Николаю Николаевичу и ссылку на эту тему передавай уж заодно  Может, рассудит наконец нас с тобою
|
|
|
|
Гость_Supermax_*
|
16.7.2007, 11:37
|
Guest Forum

|
Ссылку я уже много раз передавал, только так и не понял, заходил он сюда или нет. И на счет разногласий: я считаю - данные на изделия должны быть в самих изделиях, а на сколько я тебя понял, ты считаешь, что данные на изделия должны быть на сервере. Других разногласий я не помню. А многое вообще решается по принципу И.
|
|
|
|
Гость_Supermax_*
|
21.7.2007, 11:27
|
Guest Forum

|
Сижу в Интернет клубе, в окружении геймеров-маньяков. Орущих, и очень шумящих. Связь через телефон только на прием. Очень много мыслей по поводу удаленной работы. Раньше 30-го работать по настоящему наверное не получится.
|
|
|
|
Гость_Supermax_*
|
21.7.2007, 11:37
|
Guest Forum

|
Кстати, есть предложение. Раз уж ты хочешь иметь в элементах чертежа только ссылки на базу, то тебе и карты в руки. Где и в каком виде надо разместить эту бирку, чтобы машина ее обнаружив, передала (опять вопрос - что? и куда?). Бирка может быть и атрибутом и расширенными данными и пр. Это я к тому, что можно сделать "И". Есть также вопрос: Собираешся ли ты работать с виртуальными элементами? Ну это когда коммуникации представлены линиями, покраска плоскостями, объемы 3D солидами. Если да, то куда лепить бирку?
|
|
|
|
|
21.7.2007, 23:20
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Цитата Сижу в Интернет клубе, в окружении геймеров-маньяков Могу только посочувствовать. Сижу дома, сильно хочется спать, сегодня был на даче, ноготь срезал до мяса (больно, блин), так что за ошибки (грамматические) прошу не бить особо сильно. Цитата Очень много мыслей по поводу удаленной работы. Мыслей не меньше, а вот времени... Цитата Кстати, есть предложение. Раз уж ты хочешь иметь в элементах чертежа только ссылки на базу, то тебе и карты в руки. Где и в каком виде надо разместить эту бирку, чтобы машина ее обнаружив, передала (опять вопрос - что? и куда?). Бирка может быть и атрибутом и расширенными данными и пр. Это я к тому, что можно сделать "И". Есть также вопрос: Собираешся ли ты работать с виртуальными элементами? Ну это когда коммуникации представлены линиями, покраска плоскостями, объемы 3D солидами. Если да, то куда лепить бирку? Отвечу сразу на все. Во-первых, машина "сама по себе" эту (как ты ее называешь) "бирку" сможет обнаружить только когда ее об этом (явно или не очень) попросит пользователь. И обрабатывать она ее будет так, как ты скажешь. Я против расширенных данных и против атрибутов. Против РД потому, что, во-первых, их структура слишком жестко задана; во-вторых, серьезные ограничения по объему (16 кб); в-третьих, эти РД распеределяются между всеми приложениями. Для справки: попробуй засунуть свои РД в примитив видового экрана листа. Не получится - онм уже забиты приложением ACAD. Я против использования атрибутов во-первых, потому, что пользователь может поменять эти данные, используя штатные средства AutoCAD'a. Соответственно прога попытается обработать эти неверные данные, и в лучшем случае выдаст nil или ошибку. В худшем - она их обработает, выдав некорректный результат. Во-вторых, потому, что атрибуты применимы только для блоков. А этого иногда может оказаться недостаточно. Как пример (черт с ним, разберем блок вкупе с БД): В БД есть таблица, например, решеток вентиляционных примерно такого вида: Код {tableVentNets}: ID Name Cost 1 Вент.решетка#1 $10.00 2 Вент.решетка#2 $200.00 В блоке болтается всего 2 атрибута - первый (DB_TableName) - это имя таблицы; 2й (DB_TableID) - ID записи. Разработана функция получения значения атрибутов с блока примерно такого названия: (GetBlockAttrValues BlockReference AttributeName). Также разработана функция выполнения запроса к БД, например, (GetDataBaseSQL SQLQuery). Получаем указатель на блок: Код (setq blk (car (entsel "\nSelect a block : "))) Контроль значений пока оставим в стороне, оно не критично. Формируем запрос: Код (setq sql (strcat "select " (GetBlockAttrValues blk "DB_TableName") ".[cost] from " (GetBlockAttrValues blk "DB_TableName") " where ((([id])=" (vl-princ-to-string (GetBlockAttrValues blk "DB_TableID"))"));")) Пишу без запущенного када, так что со скобками могут быть проблемы. Теперь указываем блок, в котором DB_TableName=tableVentNets и DB_TableID=1. Выполняем запрос (GetDataBaseSQL sql), получаем Cost = $10.00 А вот теперь представь себе ситуацию, что пользователь взял да и поменял 1 на 2 в DB_TableID - просто "посмотреть, а чего будет?". Выполнение того же самого sql, вернет уже не $10.00, а $200.00! И это только одна таблица, только один параметр. А, как ты сам понимаешь, их может быть ооочень много. Ты же не сможешь отследить такое изменение атрибута! Вешать объектный реактор на блок на изменение одного из его подпримитивов? Запаришься, и все равно я смогу это обойти. Я просто запущу акад без твоих дополнений и все, пишите письма мелким почерком. Поэтому данные должны храниться в месте, недоступном для простого пользователя, и не иметь таких явных ограничений, как РД. Выход - ldata, функции я показывал. ldata, кстати, можно присоединить вообще к чему угодно, им по фигу, с чем работать. Как пример, опять же (реализованный): в элементы (блоки, полилинии, отрезки...), вставленные с использованием интерфейса к БД, вставляются ldata вида '(("table" . <ИмяТаблицы>) ("id" . <НомерЗаписиВ_Таблице>)) и этого достаточно, чтобы получить при составлении спецификации и полное наименование, и стоимость, и любые технические (и не только) параметры именно этого примитива. А уж свести все в единый список - ну тут вообще неинтересно обсуждать, это самая скучная часть задачи.
|
|
|
|
Гость_Supermax_*
|
7.8.2007, 11:23
|
Guest Forum

|
Приехал из Анапы и сразу заболел. Горло, сопли и никакая медицина не берет. Уже на антибиотики перешел. Сегодня даже коньюктивит начался. Глаз ночью слезился, слезился, а потом взял и склеился. Николай Николаевич подтвердил факт не корректной работы команды refedit. Посоветовал связаться напрямую с обслуживающим персоналом службы поддержки. Я и по поводу наших разногласий мнение спрашивал. Он сказал, что это дело вкуса. Что при крупных объемах лучше СУБД, а при мелких - хранить даные в примитивах. Логически так оно и получается, данные о товаре делают примитив более громоздким и если таких примитивов много, то в целом модель становится неповоротливой. Николай Николаевич еще высказал мнение, что надо копировать из базы данные в примитив и наоборот, чтобы избежать искажений и обеспечить пополнение базы. Сделать перекресное наполнение в принципе можно, только я боюсь, что в случае развития торговли материалами и оборудованием с сопровождением виртуальными аналогами будет очень не просто сделать адаптер параметров для перекачки из этих изделий в базу их данных. Есть еще один аспект в наличии атрибутов в блоках. Атрибуты эти могут быть вынесены в другой слой, а сам слой - выключен. Кто и в каком слое будет их устанавливать и какие слои будут перекачевывать в модель с вставкой блока из базы донара - вопрос не простой. Скорее всего ожидается "замусоривание" таблицы слоев. Сейчас я пытаюсь разработать методику замера времени обработки массива блоков с атрибутами и без. В частности поворот орбитом. Пока замораживаю работу над выбором секущей или не секущей рамкой с включением внешних ссылок. До полного прояснения с refedit. Вообще ушел от работы с внешними ссылками. Создавать аналог внешних ссылок, так как предлагает mmax очень трудоемкий процесс. Скорее всего я потихоньку его буду прорабатывать, но все силы на него тратить сейчас не могу.
|
|
|
|
|
7.8.2007, 11:30
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
На самом деле (ИМХО) достаточно прописать только реактор на закрытие документа - хоть командный, хоть базы документа. И в этом реакторе создавать объект коннекта к БД, проходить по всем примитивам dwg-файла (возможно, с обработкой внешних ссылок) и формировать несколько SQL-запросов, которые пакетно и выполнять. Об ошибках сообщать. Ставить такое на реактор сохранения файла (или не дай боже на добавление примитива в файл) не советую - кад слетит, и база может следом отправиться.
|
|
|
|
Гость_Supermax_*
|
22.8.2007, 15:02
|
Guest Forum

|
Наконец-то я придумал как выкрутится из этой ситуации и даже кое что попробовал. Алгоритм дальнейших действий таков: 1. После того, как пользователь установил в видовом экране положение модели, ну скажем, 3D-орбитом, он запускает макрос и после процедур определения параметров фильтра выбора наконец-то добирается до секущей рамки. Которой он несколько раз (ну как правило, оного раза не хватает) обозначает пространство учета. 2. Макрос, запомнив координаты всех этих действий с рамками делает следующее: - Сохраняет в переменной текущее имя файла - Сохраняет (или не сохраняет, пока не решил) текущий файл. - Сахраняет КАК все тот же файл, но под другим, технологическим именем. При этом, в окне автоматически сменяется файл-оригинал на сохраненный файл. (проверено, макрос продолжает нормально работать) - Находит все "верхние" внешние ссылки и в переменных записывает их имена и имена вложенных в них внешних ссылок - Запускает -XREF и далее B, перечень имен "верхних" ссылок, что приводит к преобразованию всех ссылок в блоки. (проверено, внутринние ссылки автоматически преобразуются во вставленные блоки с именами как у ссылок) - Поочередно выделяет блоки с именами как у внешних ссылок из которых они образовались и их EXPLODE. 3. Далее, извлекая данные рамок опять проводится формирование набора, который на этот раз состоит из одних элементов не являющихся внешними ссылками. 4. Делается подсчет 5. Открывается старый но образцовый файл 6. Убивается файл, в котором только что были разчленены внешние ссылки.
Вот так я избавился вообще от REFEDIT.
|
|
|
|
|
22.8.2007, 15:10
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Мне интересно, как получить координаты контрольных точек наборов? И потом, переход лиспа из текущего документа в другой моментом убивает все его результаты выполнения. Значит, их придется куда-то сохранять (например, в txt-файл). Но вот вопрос - а что там сохранять-то надо будет? Все подряд?
|
|
|
|
Гость_Supermax_*
|
23.8.2007, 9:21
|
Guest Forum

|
Ну во первых, наборы в файле-оригинале мы не создаем. Мы только рамочкой машем и ее координаты записываем. Как я уже тебе показывал. Во вторых, как не странно это выглядит, но при работе с командой saveas лисп начав работу в одном файле, продолжает работу в другом, сохраняя при этом и положение пространства модели по отношению к видовому экрану и все значения переменных записанных через setq. А вот после разбиения внешних ссылок мы там наборы и создаем, обрабатываем и сваливаем, уничтожая за собой мосты. Я пока не пробовал, но открытие нового файла наверное тоже будет делать тоже самое. Скорее всего, все дело в том, что saveas не переписывает базу рисунка, а просто меняет в ней клеточку с именем файла, вот и получается, что мы никуда и не сваливали, а сидим в той же базе, только нас переименовали.
Сообщение отредактировал Supermax - 23.8.2007, 9:54
|
|
|
|
Гость_Supermax_*
|
4.9.2007, 19:08
|
Guest Forum

|
Э-хе-хе, что-то я заскучал, однако. Расскажу публике о бытии 3D проектирования. Сижу и проектирую теплотрассу. Оказывается, спрос на ее моделирование очень высок. Если просто линии нарисовать и в спецификации указать общее количество труб, то в процессе ее строительства из-за того, что нет листа раскроя труб, очень много получается обрезков. Прорабу самому приходится карандашиком проставлять размеры на плане и делать монтажную схему. Крутится план, не смотря на его колоссальные размеры и наличие атрибутов во всех блоках довольно терпимо, но на пределе. Благодаря тому, что прокладка теплотрассы выполнена не линиями, а в 3D, очень чувствуются реальные масштабы объектов, хотя они – просто контуры. Это впечатляет заказчика больше чем все остальное. Второй заказ – смоделировать кирпичную кладку и конструкцию кровли коттеджа. Кладка не из простого кирпича, а из камней Knauf – большие такие кирпичи, однако. С наружи облицован дом лицевым кирпичом. Уже на середине окон первого этажа (моделирование начато с плиты перекрытия 0,00) подкачка 2,2 гига. Скидываю ряды в специально созданные для этого слоя, которые держу выключенными, все равно крутить объект просто невероятно сложно. Чуть сильнее крутани, или чего-нибудь лишнее в это время нажми – и все, Але-с капут. Явно назрел кризис насыщенности модели элементами (больше 24000). Там к каждому кирпичу еще и раствор пластинками приделан. А если целый микрорайон надо смоделировать? Даже один большой объект и то проблема. Главное препятствие – это догма, что должен существовать такой файл, в котором представлена вся модель. Включить одновременно все внешние ссылки это означает загрузить в память все их элементы, а на какой черт это надо? Ведь в каждом конкретном случае надо только иметь возможность детализировать какой-то фрагмент. Как Google Earth делает? Дает общую картинку, с очень низким разрешением и по мере приближения к точке фокуса удаляет из памяти лишние растры и закачивает новые, более детализованные. В AutoCAD-e же не смотря на то, что вы придвинули к себе модель на столько, что у вас болт на весь экран, в памяти все равно сидит весь теплопункт. Как сделать так, чтобы модель микрорайона, по мере приближения к конкретному дому, а затем к конкретному теплопункту в этом доме, добавляла к себе необходимые элементы или внешние ссылки и при этом закрывала не нужные? Думаю, что надо сделать маркеры, при активации которых срабатывает реактор и появляется диалоговое окно с предложением подгрузки элементов (можно целое дерево). Если погасить маркер – все элементы выгружаются, а ссылки отключаются. Можно к маркерам включение-выключение слоев прилепить. Можно сделать активацию маркера так: Подсветил маркер – выскочило окно «вкл / выкл» Нажал «вкл» - маркер стал зеленый и выскочило окно с выбором того, что ты хочешь включить. После выбора маркер потух, а если его опять подсветить – опять выскочит окно «вкл/выкл» и тут можно все выключить. Таким образом, в разных частях модели, на разных уровнях будут лежать маленькие примитивы (можно треугольники, можно квадратики) при выделении и включении которых модель будет «усложняться», а при выключении «упрощаться». Включение маркера может привести к появлению кроме дополнительных элементов еще и других маркеров, что позволит углубиться еще больше. Я чувствую, если покопать в этом направлении, то идеология моделирования очень сильно измениться, а значит, изменится и идеология подсчета материалов и оборудования. Господа! А ну, напрягли извилины! У кого что на этот счет есть?
|
|
|
|
|
4.9.2007, 22:39
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
А, может, проще все же рендер делать в VIZ'e или 3DSMax? Текстуру натягивать и вперед. Сугубо ИМХО, поскольку рендером не занимаюсь совсем.
|
|
|
|
Гость_Supermax_*
|
5.9.2007, 10:55
|
Guest Forum

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

|
Ну тогда хоть через РД, хоть через словари, хоть через ldata записывай материал компонента стены, а потом считывай его. Или переходи на Revit / AA2008 / MEP2008, чтобы не изобретать велосипед  В тех пакетах понятие многокомпонентных стен уже давно сделано. Насчет труб и Ко не знаю
|
|
|
|
Гость_Supermax_*
|
5.9.2007, 13:59
|
Guest Forum

|
Дело даже не в этих конкретных камнях (так они правильно называются). Нет таких в базе программ использующих расчет по условному поганожу. И укладываются они без поперечных швов, что оказывает влияние на расчет массы раствора. Дело в том, что уж сильно быстро наступает в AutoCAD-e порог ограничения по количеству (где-то около 5000 элементов), что естественно беспокоит, так как планы мои - Наполеоновские. Я хочу понять, как надо строить модель, чтобы строить ее до бесконечности, но машину при этом не убить? Вот у меня на экране 16890 элементов, а скопировать в буфер могу только 5000 (примерно). И это только маленькая часть модели. Мне ее еще строить надо. У меня камень 3,3 гига и 3 гига оперативки. Видеокарта хоть и не за 1000$, но не самая плохая. И такое положение у всех проектировщиков, их заказчиков и разных других службах. . Как строить модель до бесконечности? . Ясен пень, надо что-то делать с подгрузкой и выгрузкой элементов. Нужно выработать стратегию.
|
|
|
|
|
5.9.2007, 14:21
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Когда я делал зимние сады, я для 3Д специально делал профили с минимумом скруглений и фасок. То есть сознательно шел на визуальное упрощение модели. Зачем работать с буфером - не очень понимаю, если честно. P.S. Специально сделал файл с полумиллионом примитивов - работает, скотина! Хреново, но работает! Intel 2x1.7GHz, 1Gb RAM, Video on-board. ADT 2006 Rus + SP1, ADT 2007 Rus + SP1, AA 2008 Eng
|
|
|
|
Гость_Supermax_*
|
5.9.2007, 15:18
|
Guest Forum

|
Да, ты прав, чем больше точек в примитиве, тем меньше таких примитивов AutoCAD может проглатить. Хоть он при вращении объекта сам упрощает примитивы, помогает это ненадолго. Аппаратные ресурсы дело конечно не плохое, но лучше придумать какую-нибудь хитрость.
Сообщение отредактировал Supermax - 7.9.2007, 16:22
|
|
|
|
|
5.9.2007, 15:43
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
В dwg.ru я не тусуюсь, я там живу  Модером я там числюсь со всеми вытекающими  Встречи достаточно регулярно проводятся и в Москве, и в Питере. Надо просто темы смотреть - за московскими встречами я не слежу (все же Питер мне ближе  ).
|
|
|
|
|
5.9.2007, 22:58
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
Блин, что значит с 17:00 Мск до 24:00 Мск быть лишенным сети http://dwg.ru/search.php?zone=2&mod=1&...%EE%F1%EA%E2%E0показывает, что кое-что все же висит.
|
|
|
|
|
5.9.2007, 23:58
|
Группа: Участники форума
Сообщений: 51
Регистрация: 18.6.2007
Из: Череповец
Пользователь №: 9568

|
http://www.progz.ru/forum/index.php?showtopic=31957#Испытай свой автокад. У меня получилось 1 048 576 примитивов LINE, это конечно не 3д. Подсчитал я их командой _LIST, предварительно выделив все. комп тормозил, но работал.
|
|
|
|
|
6.9.2007, 9:07
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> mmax : Можно и так посчитать количество (без выделения): Код (vla-get-count (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
|
|
|
|
Гость_Supermax_*
|
7.9.2007, 20:45
|
Guest Forum

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

|
Это понадобится делать реактор на изменение выделение (pickfirst-чего-то-там). Занятие малоприятное, доложу я вам. Вдобавок чреватое глюками на вертикальных приложениях.
|
|
|
|
Гость_Supermax_*
|
8.9.2007, 13:12
|
Guest Forum

|
Есть еще другая, очень похожая идея: Создаем два одноименных (почти) слоя. Один всегда выключен, другой - всегда включен. Задаем сектор охвата видимости модели. Поясняю: Ставим точку и по отношению к ней определяем размер куба, где эта точка лежит ровно в центре. Куба естественно нет, это только координаты X, Y, Z. Задавая место положения точки обзора (так ее назовем), макрос выбирает в выключенном слое все элементы попадающие в этот куб и переносит их во включенный слой, а все элементы, вышедшие за границы куба во включенном слое - выкидывает в выключенный слой. Поменять принадлежность элемента слою - дело плевое и для обработки быстрое. Теоретически так можно перемещая точку обзора по пространству модели высвечивать только те ее элементы, которые требуются для работы с ними. Таких зон может быть несколько. Можно вместо перебрасывания по слоям использовать включение или выключение видимости объекта (правда я не пробовал это делать и не знаю, как обрабатывается модель с включенными слоями, но с выключенной видимостью объектов в ней). Если слои выключать, то тут гарантировано ускорение работы (проверено многократно), а вот с видимостью не знаю. Ясен пень, что все слои тогда в модели должны иметь пару, так сказать сиамские близнецы. А то у меня кирпичи все в одном слое и делать каждому кирпичу отдельный слой - .... А так, как фонариком шаришь по модели, а она тебе достраивает ее и скрывает лишнее. По идее макрос должен получиться не большой.
|
|
|
|
Гость_Supermax_*
|
8.9.2007, 13:25
|
Guest Forum

|
Про глюки: Я тут сидел, работал, захотел "выйти", сохранился, "вышел", а когда пришел на рабочее место - висит. Кто-то магнитным импульсом не иначе его шарахнул. Вообще никого не было и ничего не происходило, а он завис.  Говорят, если ничего не делать, то ничего и не произойдет. Практика показывает, что и в этом правиле бывают исключения. Понятие "чревато" преследует нас везде, от похода в туалет, принятии пищи, попытке убедить начальство или жену, до получения большого заказа, широкой известности и финансовой обеспеченности. Я предпочитаю жить как поет Макаревич "Не надо прогибаться под изменчивый мир, пусть он прогнется под нас!"
|
|
|
|
|
8.9.2007, 18:38
|
CAD Developer
Группа: Участники форума
Сообщений: 409
Регистрация: 6.2.2006
Из: C.-Петербург, Россия
Пользователь №: 2062

|
> #239 : посмотри вариант моего аналога Isolate Objects из ADT: http://www.autocad.ru/cgi-bin/f1/board.cgi?t=22342xe> #240 : под глюками я имею в виду совершенно иное. Например, я сделал свой реактор на двойной клик. Для его корректной работы приходится, во-первых, выгружать один из стандартных arx, а, во-вторых, постоянно отслеживать совместимость с приложениями типа СПДС GraphiCS. И после того, как все сделано на "чистом" acad'e, каково получить систематический вылет ADT или AutoCAD LT именно потому, что выгружен arx? Я такого добра нахлебался полной ложкой.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
Реклама
ООО «Арктика групп» ИНН: 7713634274
Реклама: ООО «СибСтронг» | ИНН 6670013662 | ERID: 2VtzqvWgxEU
ООО «УНИСПЛИТ» ИНН: 6453155081 erid:2VtzqvybpdW
Реклама: ООО «СЛ-ЛАЗЕР» ИНН 7727447267 | erid: 2VtzquvhFWx
Последние сообщения Форума
|