在边缘上打开多段线
当通过双击选择闭合多段线时,多段线编辑对话框将接合。如果选择“打开”选项,多段线将通过删除其中一条线而打开,看起来是随机的。但是,如果以某种方式可以控制要擦除的行的选择呢?如果我可以双击一条多段线,一旦选择“打开”,多段线就会在我双击的线上打开,这将证明是最有用的。是一种可能性还是只是一种玩笑? 我无法解决你的问题;但我只是想说,当打开一个闭合的pline时,“擦除一行”并不是随机的。它将始终在普林线关闭的地方打开。 作为你正在做的事情的捷径:(defun c:PlOpen (/ ent Obj)
(vl-load-com)
(if (and (setq ent (entsel "\nSelect LWPolyline: "))
(eq "AcDbPolyline"
(vla-get-ObjectName
(setq Obj (vlax-ename->vla-object (car ent))))))
(vla-put-Closed Obj :vlax-false))
(princ))
试试这个Mr Destroyer,它只适用于没有弧和有趣东西的多段线。
(defun c:PlOpen (/ ent Obj pPar pCrds)
(vl-load-com)
(if (and (setq ent (entsel "\nSelect LWPolyline: "))
(eq "AcDbPolyline"
(vla-get-ObjectName
(setq Obj (vlax-ename->vla-object (car ent))))))
(if (eq :vlax-true (vla-get-Closed Obj))
(progn
(setq pPar
(1+
(fix
(vlax-curve-getParamatPoint Obj
(vlax-curve-getClosestPointto Obj (cadr ent))))))
(setq pCrds
(apply 'append
(remake-list
(vlax-list->2D-point
(vlax-safearray->list
(vlax-variant-value
(vla-get-Coordinates Obj)))) pPar)))
(vla-put-Coordinates Obj
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbdouble
(cons 0 (1- (length pCrds)))) pCrds)))
(vla-put-closed Obj :vlax-false))
(princ "\n** LWPolyline not Closed **"))
(princ "\n** Object Not an LWPolyline **"))
(princ))
(defun vlax-list->2D-point (lst)
(if lst
(cons (list (car lst) (cadr lst))
(vlax-list->2D-point (cddr lst)))))
(defun Remake-List (lst i / j k)
(setq j -1 k -1)
(append
(vl-remove-if
(function
(lambda (x)
(< (setq j (1+ j)) i))) lst)
(vl-remove-if
(function
(lambda (x)
(>= (setq k (1+ k)) i))) lst)))
嘿,不错!但是,有没有办法将其合并到“编辑多段线”命令中的选项集合中?以及打开/连接/宽度等。?如果我只需双击一条多段线就能得到所有这些,那就太棒了。
哈哈,你会很幸运的。。。我怀疑您是否可以像这样编辑AutoCAD命令…:眨眼: 以下是允许多段线中的圆弧的升级:
;; Open Polylines at Selected Edge
;; Copyright © 2009 Lee McDonnell ~ 20.08.2009
(defun c:PlOpen (/ ent Obj pPar pCrds lst Blg i)
(vl-load-com)
(setq doc (vla-get-ActiveDocument
(vlax-get-acad-object)))
(if (and (setq ent (entsel "\nSelect LWPolyline: "))
(eq "AcDbPolyline"
(vla-get-ObjectName
(setq Obj (vlax-ename->vla-object (car ent))))))
(if (eq :vlax-true (vla-get-Closed Obj))
(progn
(vla-StartUndoMark doc)
(setq pPar
(1+
(fix
(vlax-curve-getParamatPoint Obj
(vlax-curve-getClosestPointto Obj (cadr ent))))))
(setq pCrds
(vlax-list->2D-point
(vlax-safearray->list
(vlax-variant-value
(vla-get-Coordinates Obj))))
lst (list (fix (vlax-curve-getStartParam Obj))) i -1)
(repeat (1- (length pCrds))
(setq lst (cons (1+ (car lst)) lst)))
(setq Blg
(remake-list
(mapcar
(function
(lambda (x)
(vla-getBulge Obj x)))
(reverse lst))
pPar))
(vla-put-Coordinates Obj
(vlax-make-variant
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbdouble (cons 0 (1- (* (length pCrds) 2))))
(apply 'append (remake-list pCrds pPar)))))
(mapcar
(function
(lambda (x)
(vla-setBulge Obj
(setq i (1+ i)) x))) Blg)
(vla-put-closed Obj :vlax-false)
(vla-EndUndoMark doc))
(princ "\n** LWPolyline not Closed **"))
(princ "\n** Object Not an LWPolyline **"))
(princ))
(defun vlax-list->2D-point (lst)
(if lst
(cons (list (car lst) (cadr lst))
(vlax-list->2D-point (cddr lst)))))
(defun Remake-List (lst i / j k)
(setq j -1 k -1)
(append
(vl-remove-if
(function
(lambda (x)
(< (setq j (1+ j)) i))) lst)
(vl-remove-if
(function
(lambda (x)
(>= (setq k (1+ k)) i))) lst)))
相当圆滑 啊,不用担心。嘿,它甚至记得当你再次关闭它时,删除了什么类型的线!最棒的东西,谢谢!
谢谢伙计
是-由于在特定顶点设置了凸出值:wink:
页:
[1]
2