我将相应地更新LISP。 试试这个:
(defun c:pljoin (/ *error* varLst oldVars oLst plnum ss)
;; --- Error Trap ---
(defun *error* (msg)
(mapcar 'setvar varLst oldVars)
(if (= msg "")
(princ "\nFunction Complete.")
(princ (strcat "\n" (strcase msg)))
) ;_end if
(princ)
) ; end of *error*
(setq varLst(list "CMDECHO" "PEDITACCEPT")
oldVars (mapcar 'getvar varLst)
) ; end setq
;; --- Error Trap ---
(vl-load-com)
(vlax-for l
(vla-get-Layers
(vla-get-ActiveDocument
(vlax-get-acad-object)
) ;_end vla-get-ActiveDocument
) ;_end vla-get-Layers
(setq oLst
(cons (vla-get-Name l) oLst)
) ; end setq
) ; end vlax-for
(setq oLst (reverse oLst))
(setvar "cmdecho" 0)
(setvar "PEDITACCEPT" 0)
(setq plnum 0)
(foreach lay oLst
(if
(setq ss (ssget "X"
(list (cons 0 "LINE,ARC,LWPOLYLINE,POLYLINE")
(cons 410 (getvar "ctab"))
(cons 8 lay)
) ;_end list
) ;_end ssget
) ;_end setq
(progn
(command "_pedit" "M" ss "" "Y" "J" "0.0" "")
(setq plnum (+ (sslength ss) plnum))
) ;_end progn
) ;_end if
) ;_end foreach
(*error* "")
(alert (strcat (rtos plnum 2 0) " Polylines Created/Joined."))
(princ)
) ;_end defun
没问题。我真的很感激这一切。 效果完美。我认为你所做的更改实际上可能需要更改,但我不想在你的代码中乱搞。再次感谢。 太好了,很高兴你能正常工作。 先生
目前为止我现在知道如何在cad中使用lisp。。但还不知道如何创建一个。。。。我试了一下你发布的代码。。。。
首先拾取直线,然后第二次,然后2条直线自动成为多段线。。。
有没有可能不选2个点或2条线。。。
您可以使用窗口选择?
例如,如果我要转换多行。。插入多段线而不是拾取。。我要用窗户。。。。
我的意思是,不是选择第一行和第二行。。。promt是否可能用于拾取窗口?
提前感谢。。。。 像这样的?
(defun c:pljoin ()
(if (zerop (getvar "PEDITACCEPT"))
(command "._PEDIT" "_M" (ssget) "" "_Y" "J" "0.0" "")
(command "._PEDIT" "_M" (ssget) "" "J" "0.0" "")
) ;_end if
(princ)
) ;_end defun
我已经尝试了代码,它真的很有效。。。而不是挑选
现在是窗口。。。
每次我把一条线转换成多段线的时候。。。。
谢谢很多李先生。。。。 没问题,希望从长远来看能为你节省一些时间
页:
1
[2]