Re: LISP. Замена набора примитивов на выбранный примитив
А что неибудь по проще. Типа замена одного блока другим. И имено не всех как в Express. Можно выбранную группу блоков. Мне нужно именно блоки. Замена с сохранение точки и угла поворота. :)
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Готовые программы → LISP. Замена набора примитивов на выбранный примитив
Чтобы отправить ответ, вы должны войти или зарегистрироваться
А что неибудь по проще. Типа замена одного блока другим. И имено не всех как в Express. Можно выбранную группу блоков. Мне нужно именно блоки. Замена с сохранение точки и угла поворота. :)
Замена a1 на b1, a2 на b2, a3 на b3.
Блоки которые заменяем могут не быть в наличие, ошибки не возникнет.
Блоки на которые заменяем д.б. в рисунке или путях автокада, иначе возникнет ошибка.
(defun replace( b_in b_out / ) (setq s_in (cons 2 b_in)) (if(/= nil (setq blokset (ssget "_X" (list '( 0 . "INS ERT") s_in)))) (progn (setq blklength (sslength blokset)) (setq i -1 ) (repeat blklength (setq i (1+ i)) (setq name_blk (ssname blokset i)) (setq spis_blk (entget name_blk)) (setq kord_b (cdr(assoc 10 spis_blk))) (setq ugol (*(cdr(assoc 50 spis_blk)) 57.297469)) (command "_.ins ert" b_out kord_b scl scl ugol) ) ;repeat (setq i -1) (repeat blklength (setq i (1+ i)) (entdel (ssname blokset i)) ) ;repeat ) ;progn ) ;if ) (defun c:b2b( / snp scl) (command "_.undo" "_begin") (setq snp (getvar "Osmode")) (setvar "Osmode" 0) (setq scl (getvar "userr1")) (if(= 0 scl)(se tq scl 1.0)) (replace "a1" "b1") (replace "a2" "b2") (replace "a3" "b3") (se tvar "Osmode" snp) (command "_.undo" "_end") )
убрать пробелы в INS ERT и se tvar и se tq
Victor,
Спасибо попробую сегодня.
Valery Brelovsky, Промни про "фокусы" движка форума. От разрывает (ставит пробелы) там где его не просят.
PS: Victor уже внес поправку.
PPS: Мне уже не хотся ничего здесь публиковать
Владимир Азарко,
Все пробелы вроде поубирал но работы всё рано не получилось. Или это часть от общей программы. Я собствено не увидел вобора объекта для замены.
спасибо, на AutoCAD 2008 rus работает, нужно в коде лиспа заменить "а1" на имя заменяемого блока, "b1" на имя заменяющего блока, например: (replace "BL_46" "g5_117b") вместо (replace "a1" "b1"). При необходимости добавить подобные строки.
PS 1. функция выбора была бы не лишней (с сохранением в отдельный файл, например)
2. возможно ли добавить функцию "раскидывания" по слоям?
Кирилл,
Но в таком случае будут менятся все блоки, а это тоже что в Express. А мне нужно один на другой. В лучшем случае группу выбранных блоков на другой блок, но не в коем случае всех. :)
В строчке
(if(/= nil (setq blokset (ssget "_X" (list '( 0 . "INSERT") s_in))))
Уберите "_X" - будет запрос на выбор
Блок на блок? Посмотри тут http://forum.dwg.ru/showthread.php?p=582225#post582225
Victor,
Хорошо переместимся на DWG.ru там проблем меньше.
{Smirnoff},
Вечер добрый! Отличный лисп. Я хотел бы попросить Вас его немного модернизировать для моего случая. У меня пару тысяч координатных точек-крестовин (каждая точка с разной отметкой), мне нужно заменить ее на обыкновенную простую точку, но с сохранением старых координат и отметок. Можно ли так сделать?
Дело в том, что существующие точки-крестовины они никак не поддаются редактированию, но ваш лисп его без проблем заменяет на другой блок (точку), на ту-же координату, но отметка новая ) т.е. отметка взята с нового блока, и получается что тысяча блоков с одинаковой отметкой. Помогите пожалуйста.
Большое спасибо.
Помогите пожалуйста доработать этот лисп.
Суть следующая, необходимо что бы элементы примитивы заменялись не в той последовательности в которой созданы, а в последовательности с лева на право, с верху в низ.
Здравствуйте. Помогите пожалуйста, сроки горят!!Как можно исправить этот лисп, чтоб при замене блока атрибутивная информация заменяемого блока не менялась?Очень надо!!!
Здравствуйте. Помогите пожалуйста, сроки горят!!Как можно исправить этот лисп, чтоб при замене блока атрибутивная информация заменяемого блока не менялась?Очень надо!!![/QUO
и еще чтоб масштаб оставался такиим же. спасибо за ранее!
Помогите пожалуйста переделать данную программу под пакетную обработку четежей
Нельзя ли сделать замену блоков и текстов не на основе их габаритов, а в точках вставки?
По-моему, заменять блоки по габаритам для общего случая некорректно. Разве что как опция, как особое требование.
Так же и тексты, на мой взгляд.
В принципе же, FRTO - оч. мощная и иногда очень нужная.
Возникла необычная проблема при работе этого лиспа в автокад 2017 и 2010. Чаще всего, при замене точки блоком, блок вставляется не вместо точки, а в координату икс умноженную на минус один. Предположим точка имела координату 100,150,110, а вставится в -100,150,110. И такое бывает не всегда, но чаще всего. С чем это может быть связано?
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Готовые программы → LISP. Замена набора примитивов на выбранный примитив
Форум работает на PunBB, при поддержке Informer Technologies, Inc