在顶点处打断多段线
大家好,我想一次打断多段线的顶点,然后对象保持为多段线。 再说一遍?你的意思是,如果你有一条三段多段线,并在顶点处“打断”它。您有3条独立的多段线? 使用explode命令,然后pedit multiple将直线和圆弧转换为PLINE。。。 正是pBe。我可以使用“在点处打断”命令,但使用该命令,必须拾取所有顶点。
与使用“分解”命令时相同!但是,现在唯一不同的是,对象仍然是多段线。 M、 R。
我使用Explode命令,然后pedit multiple将直线转换为多段线。但是,在一个地方有大量的对象并不容易选择分解的对象(线)。
以前的
快速示例
(defun c:sample (/ pd ent)
(setq pd (getvar 'PEDITACCEPT))
(setvar 'PEDITACCEPT 1)
(setq ent (ssget '((0 . "LWPOLYLINE"))))
(command "_explode" ent)
(command "_pedit" "_m" "_P" "" "")
(setvar 'PEDITACCEPT pd)
) 样品不错!!
我试了两个物体。只有一个多段线对象断开,另一个不断开。。
你能让它一直运行到“Esc”或。。 (defun c:sample (/ pd ent)
(setq pd (getvar 'PEDITACCEPT))
(setvar 'PEDITACCEPT 1)
(while (setq ent (ssget '((0 . "LWPOLYLINE"))))
(repeat (setq i (sslength ent))
(command "_explode" (ssname ent (setq i (1- i))))
(command "_pedit" "_m" "_P" "" "")
)
)
(setvar 'PEDITACCEPT pd)
) 也许 吧:
(defun c:exlwp (/ ss i en ed v vl nd es)
(and (setq ss (ssget '((0 . "LWPOLYLINE")(70 . 0))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en))
(setq vl nil)
(foreach g ed
(if (= (car g) 10)
(setq v (list g)))
(if (member (car g) '(40 41 42))
(setq v (cons g v)))
(if (= (car g) 42)
(setq vl (cons (reverse v) vl))))
(setq vl (reverse vl))
(while (> (length vl) 1)
(setq nd (list (assoc 0 ed)
(cons 100 "AcDbEntity")
(assoc 67 ed)
(assoc 8 ed)
(cons 100 "AcDbPolyline")
(assoc 38 ed)
(assoc 39 ed)
(cons 70 0)
(cons 90 2)))
(if (assoc 6 ed)
(setq nd (append nd (list (assoc 6 ed))))
(setq nd (append nd '((6 . "BYLAYER")))))
(if (assoc 48 ed)
(setq nd (append nd (list (assoc 48 ed))))
(setq nd (append nd '((48 . 1.0)))))
(if (assoc 62 ed)
(setq nd (append nd (list (assoc 62 ed))))
(setq nd (append nd '((62 . 256)))))
(setq nd (append nd (car vl)))
(setq es (subst (cons 40 (cdr (assoc 41 (car vl)))) (assoc 40 (cadr vl)) (cadr vl)))
(setq es (subst (cons 41 (cdr (assoc 41 (car vl)))) (assoc 41 (cadr vl)) es))
(setq nd (append nd es))
(setq nd (append nd (list (assoc 210 ed))))
(entmake nd)
(setq vl (cdr vl)))
(entdel en)
(setq i (1+ i))))
(redraw)
(prin1))
你可以处理封闭的普林斯,但这会很痛苦。
-大卫 我的变体、维护层、线型、颜色、宽度等。
也适用于闭合多段线和三维旋转多段线。
(defun C:BreakPoly ( / *error* el en end head i ss start tail)
(or acDoc (setq acDoc (vla-get-activedocument (vlax-get-acad-object))))
(vla-startundomark acDoc)
(defun *error* (m)
(and m (not (wcmatch (strcase m) "*CANCEL*,*QUIT*,*EXIT*")) (princ (strcat "\nError: " m)))
(vla-endundomark acDoc)
(princ)
)
(if
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(repeat (setq i (sslength ss))
(setq en (ssname ss (setq i (1- i)))
el (entget en)
head(vl-remove-if-not '(lambda (x) (vl-position (car x) '(0 100 67 410 8 62 6 370 43 38 39))) el)
head(append head (list '(90 . 2) (cons 70 (logand (cdr (assoc 70 el)) 128))))
tail(member (assoc 10 el) el)
start (if (= (logand (cdr (assoc 70 el)) 1) 1) (car tail))
end (append '((40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0)) (list (assoc 210 el)))
)
(repeat (1- (cdr (assoc 90 el)))
(entmake (append head (mapcar '(lambda (x) (nth x tail)) '(0 1 2 3 4 5)) end))
(setq tail (member (assoc 10 (cdr tail)) (cdr tail)))
)
(if start
(entmake (append head (mapcar '(lambda (x) (nth x tail)) '(0 1 2 3 4)) (list start) end))
)
(entdel en)
)
)
(vla-endundomark acDoc)
(princ)
)
页:
[1]
2