vladthedog 发表于 2022-7-6 15:53:37

效果好多了。我真的很感激这一切。但当setq ss时,它看起来只是选择直线,没有曲线。所以它仍然没有对整条线进行多边形编辑(例如,如果你沿着一些墙看,这些墙是红色的,大多数是直线,但有一些区域是曲线。它将对所有部分进行多边形编辑,但这些部分除外)。谢谢

Lee Mac 发表于 2022-7-6 15:56:21

很抱歉,当我现在读到你的帖子时,它确实说要编辑每一层上的所有内容,而不仅仅是线条。
 
我将相应地更新LISP。

Lee Mac 发表于 2022-7-6 16:00:06

试试这个:
 

(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


vladthedog 发表于 2022-7-6 16:01:55

没问题。我真的很感激这一切。

vladthedog 发表于 2022-7-6 16:04:25

效果完美。我认为你所做的更改实际上可能需要更改,但我不想在你的代码中乱搞。再次感谢。

Lee Mac 发表于 2022-7-6 16:08:42

太好了,很高兴你能正常工作。

arjun_samar 发表于 2022-7-6 16:12:07

先生
 
目前为止我现在知道如何在cad中使用lisp。。但还不知道如何创建一个。。。。我试了一下你发布的代码。。。。
 
首先拾取直线,然后第二次,然后2条直线自动成为多段线。。。
 
有没有可能不选2个点或2条线。。。
您可以使用窗口选择?
 
例如,如果我要转换多行。。插入多段线而不是拾取。。我要用窗户。。。。
我的意思是,不是选择第一行和第二行。。。promt是否可能用于拾取窗口?
 
提前感谢。。。。

Lee Mac 发表于 2022-7-6 16:14:42

像这样的?
 

(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

arjun_samar 发表于 2022-7-6 16:17:43

我已经尝试了代码,它真的很有效。。。而不是挑选
 
现在是窗口。。。
 
每次我把一条线转换成多段线的时候。。。。
 
谢谢很多李先生。。。。

Lee Mac 发表于 2022-7-6 16:20:01

没问题,希望从长远来看能为你节省一些时间
页: 1 [2]
查看完整版本: 需要lisp到polyedi的帮助