|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Замена динамических блоков
инженер-конструктор
Минск
Регистрация: 29.05.2004
Сообщений: 381
|
||
Просмотров: 30894
|
|
||||
цвет примитивам в составе определения блока назначай по слою. размещай вхождение блока на соответствующем слое - получишь примитивы нужного цвета и не придётся лепить предлагаемые тобою же костыли - достаточно одного определения грамотно продуманного блока.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Или ПоБлоку? Андрей, единого рецепта я пока не нашел
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Ну или так
![]() - Иосиф Виссарионович, нашли вашего двойника! - Расстрелять.. - А может просто усы сбрить? - Ну, или так
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
инженер-конструктор Регистрация: 29.05.2004
Минск
Сообщений: 381
|
Каюсь, неполно поставил задачу: примитивы кроме разного цвета имеют еще определенный набор расширенных свойств(использую Architectural Desktop). Эти свойства не являются постоянной величиной, а меняются в зависимости от трансформации динамического блока
|
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Serge_Y, может лучше выложить чертеж с блоками (исходный с уже заданными параметрами и новый, на который надо заменить) ну так для большей наглядности (желательно файл версии не старше ACAD2008)
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Serge_Y, что-то я навертел походу, но вроде работает, попробуй так
Код:
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Мой код больше потому что блоки указывает пользователь непосредственно на чертеже, а это и доп. функция (_tdg-get-object-byselect) и обработка корректности исходных данных.
(setq new_blk (vla-Insertblock model_space (vla-get-InsertionPoint old_blk) new_name_blk 1 1 1 0)) А если угол поворота текущего из заменяемых блоков будет отличаться от нуля? (ssnamex (ssget "_X" '((0 . "INSERT")))) Вы перебирает все блоки на чертеже (ssget "_X" (list (cons 0 "INSERT") (cons 2 (strcat name_old_blk ",`*U#*")))) у меня только указанный блоки и все динамические. А если пользователь по ошибке укажет не динамический блок? Когда кажется креститься надо
__________________
cadtools |
|||
![]() |
|
||||
инженер-конструктор Регистрация: 29.05.2004
Минск
Сообщений: 381
|
Спасибо! А можно сделать так, чтобы в процессе работы лиспа заменялись не все блоки "2" в чертеже, а только конкретно мною выбранные?
И второй момент, после замены блоков, повторно вставленный в чертеж блок "1" странно модифицируется, т.е. попытка его стретчить в вертикальном направлении приводит к тому, что растягивается только первая линия. |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
строку Код:
Код:
Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
Укажите новый блок: - указываем одно вхождение нового блока В ответ на запрос Select objects: нужно выбрать (рамкой или по одному или если надо все - то набрать _all) те блоки (несколько вхождений блоков), которые надо заменить на новый блок и нажать Enter
__________________
cadtools |
|||
![]() |
|
||||
Делал для себя и сам давно пользуюсь такой программой. Работает по принципу matchprop - указываем образец и заменяем на него указываемые блоки. При этом копируются свойства заменяемого блока и значения и свойства атрибутов. Помню при такой программной замене был какой-то глюк, если не соблюсти определенный порядок передачи свойств, приходилось отлавливать и править.
Последний раз редактировалось Do$, 26.09.2011 в 10:17. |
||||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Цитата:
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 25.09.2011
Сообщений: 3
|
Добрый день!
Я не программист, но с удовольствием стараюсь пользоваться возможностями Автокада, для того чтобы упростить себе жизнь при проектировании. Программку по замене динамических блоков от TararykovDG с удовольствием юзаю, но заметил некоторую необходимость в сохранении атрибутов (именно атрибутов, как это понимается в Акаде обычному пользователю не программисту). На данный момент данная программка хорошо меняет один динамический блок на другой с сохранением внутренних атрибутов блока, таких как "visible", но значения атрибутов введенных пользователем(к примеру "маркировка оборудования" или "мощность" или "место установки") после замены автоматически устанавливаются значения по умолчанию для данных атрибутов. Прошу вас не могли бы вы немного доработать эту программку ? |
|||
![]() |
|
||||
Программа из #16 не подойдет?
|
||||
![]() |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 575
|
Do$, должна и будет работать, если в одной строке добавить недостающую скобку
Код:
__________________
cadtools |
|||
![]() |
|
||||
Регистрация: 25.09.2011
Сообщений: 3
|
Все заработало. Сейчас поюзаю, посмотрю. Большое спасибо.
попробовал. Эта тема уже обсуждалась в этом форуме, но в другой программе. Дело в том, что в моем случае необходимо: 1 выбирать блок, на который происходит замена в дальнейшем, вручную (путем выделения именно этого блока на чертеже). - это в программке учтено. 2 выбирать блок (или блоки), который будет заменен при помощи области выделения (потянули стрелочкой и выделили целое поле в котором находятся блоки) 3 выбрать блок и затем автоматически перебирать ВСЕ ВСЕ блоки с этим (выделенным ранее) именем в чертеже, которые затем буду заменены.(т.е заменить на чертеже все блоки с именем "1" на блоки с именем "2") Последний раз редактировалось GreyCard, 26.09.2011 в 22:19. Причина: опробовал программку. |
|||
![]() |
|
||||
Доброго дня.
Эта программулина сохраняет свойства, но не сохраняет атрибуты. А еще хотелось бы выбирать блоки рамкой, а не тыкать каждый. Хотя с заменой с сохранением атрибутов справился (эспартировав атрибуты, и импортировав после замены блоков) проблеммно отсортировать правильно т.к. имена изменились. Может кто допилит из великих гуру ![]() |
||||
![]() |
|
||||
|
||||
![]() |
|
||||
Попробовал на 2012 и лисп Do$, и лисп TararykovDG, но 2012 на первый выдал
"Укажите блок-образец:; ошибка: no function definition: VLAX-ENAME->VLA-OBJECT", а второй "Укажите блок для замены: ; ошибка: no function definition: VLAX-GET-ACAD-OBJECT" Что-то у меня на 2012 не так? Последний раз редактировалось АлексЮстасу, 25.10.2011 в 20:44. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Опять (vl-load-com) забыли?
![]()
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
|
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Возможно, в необходимости переустановки AutoCAD...
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
есть мнение (мое скромное) что в 12 каде лисп резанули (раз в коде есть), переУстановка тут не помогет...
мимолетом вопрос: а есть кто писал прогу dcl-редактор матрицы? (поясняю для прилиспенных ))) крысов ))) есть список списков ((1 2 3 ... ч)(ф ы в ... ч)(я ч с ... ч) ... (ш щ з ... ч)) - превратить в dcl редактирование 2D таблицы) помницца где то видел отжиг Алексея с генерированием динамического dcl фАЙЛА ЗЫ завтра сам напишу, но мало ли уже есть ![]() |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Я на 2005 и 2006 версиях "ловил" подобное сообщение - слетала регистрация каких-то dll и "рушились" arx, отвечающие за использование СОМ-модели. Как правило, переустановка (правда, не помню - то ли в режиме восстановления, то ли полная) проблему решала.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
конструктор машиностроитель Регистрация: 14.05.2007
Новосибирск
Сообщений: 893
|
В 2012 лисп из #16, не работал.
Случайно выгрузил acad.cuix (бывает) а после загрузки - заработал, чудеса. Может такой прием взять на вооружение? Последний раз редактировалось Jonas, 27.10.2011 в 13:41. |
|||
![]() |
|
||||
Инженер-строитель Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994
|
Такой вариант подойдет?
Использование:
Код:
Последний раз редактировалось crosandr, 18.01.2013 в 14:16. Причина: обновил код |
|||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Здравствуйте уважаемые форумчане. Очень нужна помощь по замене одного динамического блока другим. Необходимо заменить один динамический блок отопительного прибора на другой более "легкий" и грамотно сделанный. Блоков несколько сотен в ручную совсем не вариант, а лиспом я не владею. Коды приведенные в теме в моем случае не срабатывают или совсем удаляют заменяемый объект не заменяя его нужным. Помогите пожалуйста, проект горит сдавать надо , а у меня чертежи весят по 15 метров каждый из-за "неправильных" блоков. Чертеж с блоками прикрепляю(формат AutoCad 2010).
Спасибо. |
|||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Попробовал. Код работает Блоки заменяются. Большое спасибо за помощь. Было бы замечательно если бы замещающий блок принимал от заменяемого атрибут поворота, а то получается, что блок меняется, но становится горизонтально( в моем случае это очень неудобно, так как некоторые приборы у меня установлены под нестандартными углами и заново их настраивать очень не хочется). Ну и в идеале было бы очень удобно если бы было можно заменять сразу несколько блоков и запуск по команде в удобное время
![]() Спасибо. |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Рад если уже легче, попозже вернусь
Единственное что удалось выжать, не уверен что будет корректно работать, поскольку нужно глубокоо влезать в геометрию Код:
Последний раз редактировалось Олег (jr.), 17.01.2013 в 22:44. Причина: добавлен код |
|||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
|
|||
![]() |
|
||||
Инженер-строитель Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994
|
|
|||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Похоже как раз в точке вставки блока и проблема. После редактирования точки вставки исходного блока я обнаружил картину когда все блоки разлетелись по пространству модели причем довольно хаотично. Моя ошибка в том, что я из-за недостаточного опыта не создал точку вставки блока и теперь это создало кучу проблем.
|
|||
![]() |
|
||||
Инженер-строитель Регистрация: 09.07.2010
Санкт-Петербург
Сообщений: 1,994
|
Уже обсуждалось тут. Для динамических блоков лиспа не знаю, есть лисп для изменения точки вставки статических блоков
|
|||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Цитата:
![]() |
|||
![]() |
|
||||
Как вариант решения проблемы с "разлётом" вхождений после переназначения базовой точки: Вычисли разности по осям X и Y между старым значением координат базовой точки и новым. После смены точки вставки, все вхождения перемести по осям X и Y на соответствующие дельты.
UPD В коде из #44 имеется недостаток: не учтён такой момент, что на заменяемые вхождения блоков в чертеже могут уже иметься ссылки из полей (Fields), например в таблицах... По завершению операции все такие поля превратятся в значения вида #### (поскольку автор кода создаёт новые объекты, с новыми хэндлами и идентификаторами). Это как раз такой случай, когда следует пользоваться DBObject.HandOverTo().
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 19.01.2013 в 21:05. |
||||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Цитата:
|
|||
![]() |
|
||||
Разные определения блоков (у тебя их там несколько), имеют разные "кривые" точки вставки, поэтому смещения у вхождений будут отличаться. Кроме того, возможно, что в своём чертеже к каким-то вхождениям блоков ты применял команду _.MIRROR.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Именно так блок который мне нужно заменить сделан очень криво. Команда _.MIRROR так же применялась.
|
|||
![]() |
|
||||
Сама по себе задача по корректной замене определений блоков, как обычных, так и динамических - весьма интересная и полезная. Много нюансов, которые следует учитывать. Из того, что вижу на вскидку:
1. Одно из участвующих в замене определений блоков может быть аннотативным, в то время как другое - не аннотативным (соответственно возникнут проблемы корректного отображения в различных видовых экранах). Новые вхождения блоков, если они аннотативны как и старые, должны получать тот же список аннотативных масштабов. 2. На некоторые свойства "старых" вхождений блоков, в чертеже могут иметься ссылки в виде полей - банальная замена блоков разрушит все связи. 3. Точки вставки в обоих определениях блоков могут размещаться таким образом, что после замены определений блоков, потребуется выполнять программно некоторое смещение позиций вхождений уже имеющихся блоков (на соответствующие дельты) с учётом того, было ли отзеркалено это вхождение (проверяем направление векторов). 4. Исходные вхождения блоков могут иметь подписку (выполненную программным образом, как я показывал выше по ссылке) на различные события - это тоже следует учитывать и корректно "разруливать". Одни юзеры с этим пунктом могут не сталкиваться, в то время как у других может иметься софт, который активно использует эту возможность - поэтому данный момент так же стоит учитывать. 5. Следует учитывать коэффициенты масштабирования "старых" вхождений блоков. 6. Следует учитывать то, на каких слоях размещаются "старые" вхождения блоков 7. Следует учитывать углы поворота "старых" вхождений блоков 8. Следует учитывать текущие параметры видимости "старых" вхождений блоков. 9. Следует учитывать, что в "старых" вхождениях ранее были назначены некоторые значения различных параметров, выбранных либо из списка, либо полученных за счёт манипуляции с "ручками". 10. Возможно в новом определении блока имена параметров, обозначенных в п.8 и п.9 будут иными. Т.о. нужно предоставить юзеру возможность указать соответствия имён. Учитывая все перечисленные выше пункты, GUI для взаимодействия с пользователем должен быть очень гибким.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
|||||||
Сопровождение проектов, внутренний технадзор Регистрация: 05.06.2012
Санкт-Петербург
Сообщений: 46
|
Сразу чувствуется подход профессионала.
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
И после всего вами вышесказанного мне, как человеку не разбирающемуся в программировании на лисп, данная задача кажется очень сложной и трудоемкой. |
||||||
![]() |
|
||||
Так оно и есть, причём в ходе её решения наверняка вылезут и др. подводные камни, которые я упустил в перечисленном выше списке. В приципе задача решаема, но под это дело нужно выделить достаточно времени и сил. Поставлю себе в планах "зарубку" на её решение - моим пользователям может пригодиться. Если что - на результат дам ссылку. Предупреждаю сразу - это будет не AutoLISP\Visual LISP, а .NET. Т.е. для каждой версии AutoCAD будет своя, отдельная версия библиотеки. Я не компилирую код для AutoCAD, версий ниже чем 2009-й (нет необходимости/желания/возможности).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Зависит от конкретной ситуации... Если, к примеру, была завязка на чтение значения радиуса окружности, а в новом определении вместо окружности под тем же идентификатором вдруг стал прямоугольник, то в этом случае конечно, без вариантов, поскольку радиуса там и в помине нет. Но если в новом блоке под тем же ObjectId будет окружность или дуга (к примеру), то очень даже решаемо.
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 21.01.2013 в 13:04. |
||||
![]() |
|
||||
Цитата:
Цитата:
|
||||
![]() |
|
||||
геология, геодезия Регистрация: 29.05.2009
Хабаровск
Сообщений: 185
|
Уважаемый Do$! Не могли ли Вы, по возможности, дополнить Ваш лисп выбором всех заменяемых динамических блоков и множественным выбором рамкой? По моему, из всего вышепредложенного, bchange.LSP наиболее корректно меняет динамические блоки.
|
|||
![]() |
|
||||
геология, геодезия Регистрация: 29.05.2009
Хабаровск
Сообщений: 185
|
Нашел! Весьма неплохой "реплейсер" блоков. Насчет особенностей сохранения динамических свойств сильно не разбирался. Для меня важно было сохранение значений атрибутов с совпадающими именами в заменяемых блоках без учета количества самих атрибутов, а также множественный выбор заменяемых блоков. Все это прекрасно реализовано.
|
|||
![]() |
|
||||
Загрузка выдает сообщение: The RBLOC.dcl file is not found. Или это не программа еще для пользователей?
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
геология, геодезия Регистрация: 29.05.2009
Хабаровск
Сообщений: 185
|
Наверное, я сделал несколько коряво (как правильно компиллировать lsp и dcl, подскажут наши уважаемые лисперы).
В тексте представленного кода две части - RBLOC V2.22 и RBLOC.DCL V2.20. Я скопировал первую часть файла и обозвал это rb.lsp вторую часть назвал, как потребовала программа rbloc.dcl. Далее, все как обычно для запуска приложений (оба файла в папку с приложениями к Акаду). Единственное, в файле RBLOC.DCL нужно удалить строку с названием (** Rbloc.dcl **), а то ошибку выдает. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Код:
Дополнительно: убран самовызов при загрузке; код не оптимизировался и практически не менялся
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 24.01.2011
Сообщений: 57
|
Добрый день! Подскажите как заменить вхождение блока одного или нескольких сразу в чертеже? Блоки, на которые нужно менять старые- находятся в новом файле естественно (имена блоков для замены одинаковые). Желательно чтобы это работало в BricsCADe.
|
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
http://forum.dwg.ru/showthread.php?t=145333
не лисп, но адаптировать для BricsCAD думаю можно... |
|||
![]() |
|
||||
Регистрация: 24.01.2011
Сообщений: 57
|
Спасибо, почему то не загружается , ошибка : NETLOAD
Loading .NET runtime v4.0.30319: Error Message: Не удалось загрузить файл или сборку "file:///C:\1Времянка\dynINOUT_2013-2018\dynINOUT_2017.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)(NETLOAD) ----- добавлено через 18 сек. ----- Это в Bricscade |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
|
|||
![]() |
|
||||
Остекляем!!! Алюминим!!! Регистрация: 21.02.2005
Москва
Сообщений: 3,925
![]() |
Цитата:
А то размер рамки 594х420. а единицы чертежа в дюймах.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search: |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
подсчет динамических блоков | AAI | Программирование | 37 | 25.06.2012 15:05 |
Тормозит команда расчленения набора блоков | batmax | Программирование | 4 | 31.08.2010 17:37 |
Замена названий блоков, типов линий | АлексЮстасу | Программирование | 9 | 04.06.2010 21:51 |
Замена текстовых блоков | Sputnik-e | AutoCAD | 2 | 11.09.2009 09:22 |
Библиотека динамических блоков | Коробейников Алексей | Динамические блоки | 2 | 05.04.2005 16:08 |