Тема: растянуть отрезки до ближайшего пересечения
Изолирую нужные слои командой layiso,
Возможно кто нибудь поделится ЛИСПом:
Нужно растянуть выбранные отрезки до ближайшего пересечения (другой отрезок или блок).
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → LISP → растянуть отрезки до ближайшего пересечения
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Изолирую нужные слои командой layiso,
Возможно кто нибудь поделится ЛИСПом:
Нужно растянуть выбранные отрезки до ближайшего пересечения (другой отрезок или блок).
_.extend и дальше в ком.строку - не оно?
Обьясни, пожаилуста подробней, мне надо пару сотен отрезков растянуть до ближаишего пересечения с другим отрезком блоком или polyline. Выбираю все обьекты, а дальше ну crossing в 2008 (а в 2004 и этого нет), ну надо довольно много кликать, все обьекты рамкой цеплять, ответить просто all команда не дает.
У команды _.extrude (так же как и у команды _.trim) есть опция _f (_fence). Попробуй ее.
есть конечно fence, но, сколько им надо работать что бы растянуть все балки на плане до ближайших балок или колонн?
Это не то.
_.extrude? (_.extend)
мне кажется что _fence хорошее решение, но если вам не нравится, то
(vl-load-com) (defun c:test (/ SSE) (command "_.EXTEND" "\\" "") (if (= (logand (getvar 'CMDACTIVE)) 1) (progn (if (setq SSE (ssget (list (cons 0 "LINE,LWPOLYLINE")))) (progn (foreach EntName (vl-remove-if 'listp (mapcar 'cadr (ssnamex SSE))) (command (list EntName (vlax-curve-getStartPoint EntName))) (command (list EntName (vlax-curve-getEndPoint EntName))) ) ) ) (command "") ) ) (princ) )
> Vovka
Вот тут фаил. Надо растянуть все балки до колон или до ближаиших балок. Код работает на небольшом количестве пересечении (кстати когда вибираешь обьекты рамка на первом выборе не дается, только кликом можно выбрать одиночный обьект), если выбрать все колонны и балки в чертеже, код работает очень долго , фактически нет конца, результат не очень.(часть обьектов не растянута)
Не могу почему то дать ссылку. Ничего другого не придумал как открыть эту же тему на dwg.ru в разделе програмирование и приложил туда фаил.
для рамки на первом выборе поменять
(command "_.EXTEND" "\\" "")
на
(command "_.EXTEND" (ssget) "")
насчет скорости ничего поделать не могу.
если есть возможность, то поищите Autodesk Map там есть прекрасная утилита "Drawing Cleanup"
Критика с мусором полностью принимается. Новый код работает быстро (причем с мусором то же), проблема- игнорируются блоки (колонны) - балки растягиваются до балок через колонны.
> PL
дело в том что "_.EXTEND" для получения кромки не использует стандартный select, у него свой метод с использованием nentsel.
для того что бы моя функция работала более-менее нормально, могу посоветовать перед запуском функции сделать копии блоков колон на новом слое а там их взорвать.
Да, это решение. Большое спасибо. Ускорит работу в разы.
Для интереса..., первый код, когда немного выбранных обьектов в чертеже, растягивает балки до блоков колонн.
Еще раз спасибо и всех благ.
мне кажется что _fence хорошее решение, но если вам не нравится, то
(vl-load-com) (defun c:test (/ SSE) (command "_.EXTEND" "\\" "") (if (= (logand (getvar 'CMDACTIVE)) 1) (progn (if (setq SSE (ssget (list (cons 0 "LINE,LWPOLYLINE")))) (progn (foreach EntName (vl-remove-if 'listp (mapcar 'cadr (ssnamex SSE))) (command (list EntName (vlax-curve-getStartPoint EntName))) (command (list EntName (vlax-curve-getEndPoint EntName))) ) ) ) (command "") ) ) (princ) )
Спасибо тебе, хороший человек!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → LISP → растянуть отрезки до ближайшего пересечения
Форум работает на PunBB, при поддержке Informer Technologies, Inc