Как заменить один блок другим?
>>kpblc
А возможно копировать динамические параметры блока? т.е. есть 2 одинаковых блока динамических с атрибутами, с одинаковыми именами. В одном добавились примитивы и параметры растяжения. Блоки в разных файлах, дак вот нужно из одного блока скопировать примитивы с динамическими параметрами (например move) в другой блок. Возможно ли?
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Скажу честно: я в дин.блоках не разбирался практически. Тут больше Supermax шарит, его надо спрашивать.
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 04.07.2005
Сообщений: 213
Ясно, спасибо.
Регистрация: 28.03.2007
Сообщений: 1,831
Значица так:
Примитивы копируются из файла в файл легко. Имею в виду из пространства редактора блоков в пространство редактора блоков в другом файле. С оригинальными точками вставки. Вот в одном и том же файле из блока в блок — только через вспомогательный файл. Это если руками. Лиспом тоже можно повторить ручной путь. Прописывать указатели на объекты в visibility пока трудоемко очень. Но над этим работаем. Динамические параметы проще скопировать чем объекты, но надо лисп писать для этого, а я пока занят.
Регистрация: 04.07.2005
Сообщений: 213
Усе понял, спасибо!
Регистрация: 23.10.2007
Сообщений: 1,980
Вот какой вопрос возник. Надо заменить в определенной части чертежа (не во всем) один блок другим, как быть? Express так не делает, лисп по адресу с второго поста работает по принципу:
вставка в центр ограничивающего (габаритного) прямоугольника старых объектов |
а мне надо, чтоб за точку вставки блока менять.
Регистрация: 18.10.2007
Сообщений: 104
значицца так,
(имхо) выделяем нужные блоки, ctrl+shift+c, erase , ctrl+shift+v > block editor>block editor ,explode, чотя сам не пробовал.
Регистрация: 18.10.2007
Сообщений: 104
neposhlo ., razve shto block
save as
Регистрация: 23.10.2007
Сообщений: 1,980
maximas Ты не очень уж и вник в вопрос. Почитай http://www.autocad.ru/cgi-bin/f1/board.cgi?t=21048Af потом поговорим.
Регистрация: 10.11.2009
Сообщений: 15
Дано: на чертеже несколько одинаковых блоков, но у них разные углы поворота.
Требуется: заменить часть блоков (не все!) на другой блок, при этом сохранив угол поворота каждого блока.
Как это осуществить?
blockreplace из Expresstools сохраняет угол, но заменяет сразу все блоки
Лисп Замена.lsp отсюда: http://forum.dwg.ru/showpost.php?p=702977&postcount=6 и программка отсюда: http://pdi13soft.ucoz.ru/load/plagin. ocad/13-1-0-17 заменяют только выбранные блоки, но при этом «сбрасывается» угол поворота.
Есть ли программка, удовлетворяющая моим потребностям?
Violent MITCHELL |
Посмотреть профиль |
Найти ещё сообщения от Violent MITCHELL |
Регистрация: 29.10.2004
Сообщений: 16,333
Violent MITCHELL, эту тему посмотри http://forum.dwg.ru/showthread.php?t=53466
я обхожусь #12
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,989
Сообщение от Violent MITCHELL
Дано: на чертеже несколько одинаковых блоков, но у них разные углы поворота.
Требуется: заменить часть блоков (не все!) на другой блок, при этом сохранив угол поворота каждого блока.
;;;---------Программа замены указанным блоком выбираемых с сохранением исходных атрибутов и параметров вставки --------------------------------------------------------- (defun c:blrevers (/ a b) ;;; замена выбранных блоков на указанный (and (setq a (car (entsel "\nВыберите исходный блок: "))) (setq a (entget a)) (while (and (= (cdr (assoc 0 a)) "INSERT") (setq b (car (entsel "\nВыберите изменяемый блок: "))) (setq b (entget b)) (= (cdr (assoc 0 b)) "INSERT") (entmod (vl-remove (assoc 330 b) (subst (assoc 2 a) (assoc 2 b) b)) ;_ vl-remove ) ;_ entmod ) ;_ and ) ;_ while ) ;_ and (princ) ) ;_ defunКак заменить один блок на другой в автокаде
Плагин работает в двух режимах: Заменить выбранные – позволяет заменить все выбранные блоки на один блок-образчик; Заменить подобные – позволяет заменить все вхождения одного блока на один блок-образец. Позволяет удалить описание замененного блока из базы чертежа. По аналогии с командой "Очистить" (_PURGE). Присутствуют различные настройки
Связанные новости и статьи
Использование
Вариант работы функции [заменитьВыбранные/заменитьПодобные]:
Выбор режима работы функцииРежим "Заменить выбранные" позволяет заменить все выбранные блоки на один блок-образчик
Выберите несколько блоков для их замены:
Выбор одного или нескольких блоков. В выбор может попадать и блок-образчикВыберите заменяющий блок:
Выбор блока-образчика, на который будут заменены блоки в предыдущем выбореРежим "Заменить подобные" позволяет заменить все вхождения одного блока на один блок-образчик
Выберите заменяемый блок:
Выбор одного блока, все вхождения которого требуется заменитьВыберите заменяющий блок:
Выбор блока-образчикаУдаление блока из базы чертежа
Позволяет удалить описание замененного блока из базы чертежа. По аналогии с командой "Очистить" (_PURGE). Срабатывает при обоих режимах работы функции
Удалить замененные блоки из базы чертежа? [Да/Нет]:
Да - удаление описаний блока из базы чертежа; Нет - завершение работы функцииЗамена одного блока на другой
Господа тут такая проблема в чертеже необходимо поменять часть условных обозначений на другое. Как это сделать. Удалять и вставлять по новой скучно (больше 100 шт). Т е. необходимо часть блоков (например "свая1") поменять на другой блок (например "свая2).
#2 Ответ от Leonid_01 26 апреля 2003г. 08:08:51
Re: Замена одного блока на другой
Если это у тебя блок, то необхродимо его отредактировать: Редактировать-Блоки и внешние ссылки-Редактирование вхождений. Выбираешь нужный блок, затем элементы, входящие в него и производишь необходимые изменения. После завершения нажимаешь на панели "Редактирование вхождений" кнопку "Сохранить изменения" - и у тебя автоматически заменятся все блоки.
#3 Ответ от MS 26 апреля 2003г. 13:24:11
Re: Замена одного блока на другой
Поменять блоки (и вообще любые свойства объектов по запросу) можно в Autocad Map'е
#4 Ответ от ABoltrushko 26 апреля 2003г. 13:25:07
Re: Замена одного блока на другой
Такие возможности есть в Express Tools
#5 Ответ от Vlad 26 апреля 2003г. 20:05:37
Re: Замена одного блока на другой
> Leonid
мне необходимо поменять не все блоки данного типа на другой, а только часть.
По поводу Express Tools меня почемуто скачаный с этого сайта не устанавливается(после установки нет файла меню в папке с Express-ом)#6 Ответ от Oleg 26 апреля 2003г. 22:35:59
Re: Замена одного блока на другой
Скопировать блок - запомнить точку привязки блока - разбить блок - отредактировать - создать блок с тем же именем и привязкой - переопределить!
#7 Ответ от Vlad 27 апреля 2003г. 15:34:08
Re: Замена одного блока на другой
> Oleg.
Перечисленные тобой операции можно провести с одним блоком, а не с сотней( ведь мне надо переопределить не все блоки данного типа, а только часть)#8 Ответ от VH 27 апреля 2003г. 17:11:02
Re: Замена одного блока на другой
(defun C:CHINSERT ()
(setq new_name (getstring "\nNew block name: "))
(if (tblsearch "BLOCK" new_name)
(while (setq e (car (entsel "\nSelect Block Reference: ")))
(if (= (cdr (assoc 0 (setq d (entget e)))) "INSERT")
(entmod (subst (cons 2 new_name)(assoc 2 d) d))
(prompt "\nThis is NOT Block Reference.")))
(prompt (strcat "\nBlock " new_name " NOT found.")))
(prin1)
)
Пока указываете на экземпляры блоков, они меняют имя и, соответственно, внешний вид.#9 Ответ от Vova 27 апреля 2003г. 17:48:05
Re: Замена одного блока на другой
VH> как решается вопрос с точкой вставки блока? Твоя программа вставляет новый блок вместо старого в ту же точку а помечается старый блок в любом месте? А как же с именами обоих блоков, ведь старый надо сохранить?
#10 Ответ от VH 28 апреля 2003г. 09:59:26
Re: Замена одного блока на другой
Механизм блоков в AutoCADе устроен следующим образом: есть ОПИСАНИЕ блока (которое хранится в Таблице Блоков) и ЭКЗЕМПЛЯРЫ блока (которые являются графическими примитивами в чертеже). Экземпляр блока среди своих данных содержит имя блока, которое собственно и меняется (при этом внешний вид меняется соответственно). Так что программа не "вставляет новый блок вместо старого", а подменяет один другим (кстати, при этом Атрибуты остаются "старые"). Описание "старого" блока хранится в Таблице, ничуть не изменяется и может быть использовано для вставки Экземпляра в любой момент. Разрешите напомнить, что Описание сохраняется и при отсутствии Экземпляров (что приводит к "темной массе" в чертеже и множеству вопросов о том, как эту "массу" убить).
Так как сведения о точке вставки программой не меняются, разумеется, "новый" Экземпляр располагается в чертеже там же, где и "старый".
". помечается старый блок в любом месте. " - функция (entsel) не выбирает объекты, входящие в состав блока, и воспринимает Экземпляр блока как единое целое.#11 Ответ от VladSh 28 апреля 2003г. 16:42:40
Re: Замена одного блока на другой
Express на http://www-eng.lbl.gov/~anita/pdm/etv1-9.exe
Команда "Replace block with another block".
Есть ещё прикольная "Convert block to &xref".#12 Ответ от Vova 29 апреля 2003г. 05:34:01
Re: Замена одного блока на другой
VH> Это новая требующая отладки программа или уже отработанная?
1. программа заменяет блок у его атрибутов (?) другим блоком, старые атрибуты принадлежат теперь новому блоку и располагаются поэтому в случайном месте, не привязанном к новой форме. Если новый блок имел свои атрибуты то они исчезают. По-видимому эта программа разработана для какого-то частного случая.
2. Почему команда UNDO убирает две последние операции а не одну? Или у меня глючит? Но именно с этой программой.
3. Для блоков без атрибутов работает четко, всего один щелчок и блок заменен, причем точки вставки сохраняются.
4. Можно сделать макрос с комбинацией insert+ erase, но это потребует двух щелчков на одну замену.
5. Все автокадовские команды по замене блока другим, как из Express, так и старая команда -Insert с опцией "=" заменяют блоки глобально, все сразу, поэтому Vlad'у надо работать либо вручную, либо программой VH.#13 Ответ от VH 29 апреля 2003г. 09:33:20
Re: Замена одного блока на другой
Уважаемый Vova, программа эта написана по вопросу Vlad и выполняет то, что ему и требуется - подменяет имя блока в указанном экземпляре (в вопросе про атрибуты ни слова нет).
Что такое "требующая отладки программа" я не понимаю, ибо структурное программирование утверждает, что программа пишется по шаблону языка программирования на основе спроектированоого алгоритма и либо содержит правильную запись алгоритма (и тогда она правильна), либо не содержит (и тогда ее надо не "отлаживать", а переписывать), правильность изложения алгоритма доказывается математически, а никак не тестированием.
1. Block Reference(INSERT) и Атрибуты(ATTRIB) представляют собой цепочку примитивов, которая завершается примитивом SEQEND. Следовательно, вся цепочка Атрибутов сохраняется. В принципе можно создавать Экземпляры того же самого блока с _различными_ наборами Атрибутов (независимыми от Определения блока). Атрибуты "нового блока" не исчезают, а просто не создаются (ибо задания на это в вопросе нет).
2. Вероятно, следует управление UNDO включить в программу (что-нибудь типа UNDO Group / UNDO End).
3. Что и требовалось.
4. Можно сделать другую программу (с одним щелчком) - сообщите, что требуется.
5. Полагаю, что Vlad пришлет сообщение.Как заменить блок другим блоком?
Здравствуйте.
Необходимо несколько одинаковых боков заменить другим блоком.
Т.е. на чертеже, например, 10 блоков болт.dwg и его нужно заменить 10 блоков гайка.dwg.#2 Ответ от Modis 3 декабря 2011г. 16:16:20
Re: Как заменить блок другим блоком?
#3 Ответ от Игорь Богаченко 3 декабря 2011г. 17:26:57
- Игорь Богаченко
- Активный участник
- Откуда: Украина / Ивано-Франковская /
- На форуме с 14 сентября 2005г.
- Сообщений: 429
- Спасибо: 2
Re: Как заменить блок другим блоком?
Igor Basev пишет:
Здравствуйте.
Необходимо несколько одинаковых боков заменить другим блоком.
Т.е. на чертеже, например, 10 блоков болт.dwg и его нужно заменить 10 блоков гайка.dwg.
Команда из Експресов. Блок-Замена одного блока другим.