Тема: Lisp Объединение линий в одну полилинию?

Добрый вечер, поискал по форуму, нашел лисп который объединяет, если концы сходятся. Так вот возможно ли созадать лисп который ещё и удлиняет или обрезает при необходимости линии.

Re: Lisp Объединение линий в одну полилинию?

Нашел что то похожее, но немного не то,

(defun c:jf () (c:pljoinfuzz)) ; this line can be commented out if there is an existing command called jf
(defun c:pljoinfuzz (/ ss1 entLine objType oldcmdecho oldpeditaccept fuzz okObjects)
  (setq oldcmdecho (getvar "cmdecho"))
  (setq oldpeditaccept (getvar "PEDITACCEPT"))
  (setvar "cmdecho" 0)
  (setq A2k4 (>= (substr (getvar "ACADVER") 1 2) "16"))
  (if A2k4 (setvar "PEDITACCEPT" 0))
  (setq    okObjects '((0 . "LINE,ARC,POLYLINE,LWPOLYLINE")))
  (princ "\nSelect object to join: ")
  (setq ss1 (ssget okObjects))
  (setq fuzz (getdist "\nFuzz distance <0>: "))
  (if (= fuzz nil) (setq fuzz 0))
  (if (/= ss1 nil)
      (progn
    (setq objType (cdr (assoc 0 (entget (setq entLine (ssname ss1 0))))))
    (if (= (sslength ss1) 1) (setq ss1 (ssget "X" okObjects)))
    (if (member objType '("LINE" "ARC"))
      (command "_.pedit" "_M" ss1 "" "_Y" "_J" "_J" "_B" fuzz "")
      (command "_.pedit" "_M" ss1 "" "_J" "_J" "_B" fuzz "")
    )
      )
  )
  (setvar "cmdecho" oldcmdecho)
  (if A2k4 (setvar "PEDITACCEPT" oldpeditaccept))
  (princ)
)

Хочется чтоб было не тупо соединение, а если надо обрезание и соединение.

Re: Lisp Объединение линий в одну полилинию?

Если я правильно понял то, после этого

PatRioT пишет:

Нашел что то похожее, но немного не то,

_overkill - получается одна полилиния :)

Re: Lisp Объединение линий в одну полилинию?

Эм.. _overkill это по моему удаление наслаивающихся друг на друга линий, завтра утром с картинками попробую объяснить что я ищу)

Re: Lisp Объединение линий в одну полилинию?

PatRioT пишет:

Нашел что то похожее, но немного не то,

Почему не то? Пробовал вводить допуск (Fuzz distance) побольше?

Re: Lisp Объединение линий в одну полилинию?

Пробовать то пробовал, но фишка в другом... сейчас попробую изобразить
Lisp Объединение линий в одну полилинию?
Вот: с допуском (Fuzz distance) побольше, линии объединяються по красной линии, а я хочу чтобы обрезало желтые линии и соединяло в точке пересечения

Re: Lisp Объединение линий в одну полилинию?

Попробуй заменить "_B" на "_E" в коде.
То есть вместо

...
     (command "_.pedit" "_M" ss1 "" "_Y" "_J" "_J" "_B" fuzz "") 
     (command "_.pedit" "_M" ss1 "" "_J" "_J" "_B" fuzz "") 
...

должно быть:

...
     (command "_.pedit" "_M" ss1 "" "_Y" "_J" "_J" "_E" fuzz "") 
     (command "_.pedit" "_M" ss1 "" "_J" "_J" "_E" fuzz "") 
...

Re: Lisp Объединение линий в одну полилинию?

Спасибо Большое!!!
То что надо :D

(изменено: PatRioT, 16 февраля 2012г. 13:35:44)

Re: Lisp Объединение линий в одну полилинию?

А возможно изменить код чтоб соединялись линии если они не пересекаются, а наложены друг на друга? на рисунке это красная линия. Т.е. чтоб они соединились в любой точке красной линии.

Lisp Объединение линий в одну полилинию?


upd^ Вопрос снят тут _overkill помогает