Тема: растянуть отрезки до ближайшего пересечения

Изолирую нужные слои командой layiso,
Возможно кто нибудь поделится ЛИСПом:
Нужно растянуть выбранные отрезки до ближайшего пересечения (другой отрезок или блок).

Re: растянуть отрезки до ближайшего пересечения

_.extend и дальше в ком.строку - не оно?

Re: растянуть отрезки до ближайшего пересечения

Обьясни, пожаилуста подробней, мне надо пару сотен отрезков растянуть до ближаишего пересечения с другим отрезком блоком или polyline. Выбираю все обьекты, а дальше ну crossing в 2008 (а в 2004 и этого нет), ну надо довольно много кликать, все обьекты рамкой цеплять, ответить просто all команда не дает.

Re: растянуть отрезки до ближайшего пересечения

У команды _.extrude (так же как и у команды _.trim) есть опция _f (_fence). Попробуй ее.

Re: растянуть отрезки до ближайшего пересечения

есть конечно fence, но, сколько им надо работать что бы растянуть все балки на плане до ближайших балок или колонн?
Это не то.
_.extrude? (_.extend)

Re: растянуть отрезки до ближайшего пересечения

мне кажется что _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)
)
Спасибо сказали: alextc11

Re: растянуть отрезки до ближайшего пересечения

> Vovka
Вот тут фаил. Надо растянуть все балки до колон или до ближаиших балок. Код работает на небольшом количестве пересечении (кстати когда вибираешь обьекты рамка на первом выборе не дается, только кликом можно выбрать одиночный обьект), если выбрать все колонны и балки в чертеже, код работает очень долго , фактически нет конца, результат не очень.(часть обьектов не растянута)

Re: растянуть отрезки до ближайшего пересечения

Не могу почему то дать ссылку. Ничего другого не придумал как открыть эту же тему на dwg.ru в разделе програмирование и приложил туда фаил.

Re: растянуть отрезки до ближайшего пересечения

для рамки на первом выборе поменять

(command "_.EXTEND" "\\" "")

на

(command "_.EXTEND" (ssget) "")

насчет скорости ничего поделать не могу.
если есть возможность, то поищите Autodesk Map там есть прекрасная утилита "Drawing Cleanup"

Re: растянуть отрезки до ближайшего пересечения

Критика с мусором полностью принимается. Новый код работает быстро (причем с мусором то же), проблема- игнорируются блоки (колонны) - балки растягиваются до балок через колонны.

Re: растянуть отрезки до ближайшего пересечения

> PL
дело в том что "_.EXTEND" для получения кромки не использует стандартный select, у него свой метод с использованием nentsel.
для того что бы моя функция работала более-менее нормально, могу посоветовать перед запуском функции сделать копии блоков колон на новом слое а там их взорвать.

Re: растянуть отрезки до ближайшего пересечения

Да, это решение. Большое спасибо. Ускорит работу в разы.
Для интереса..., первый код, когда немного  выбранных обьектов в чертеже, растягивает балки до блоков колонн.
Еще раз спасибо и всех благ.

Re: растянуть отрезки до ближайшего пересечения

Vovka пишет:

мне кажется что _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)
)

Спасибо тебе, хороший человек!