MR MAN 发表于 2022-7-5 17:03:03

将直线转换为多段线

有没有办法通过选择直线将其转换为多段线?

Dipali 发表于 2022-7-5 17:09:19

在命令行键入“pedit”,然后选择该行。当它只有一行时,它会问“你想把它转成一行吗”说“是的”
&而不是使用连接选项添加其他行(如果需要)。
如果您将“peditacept”值设置为“1”,则iwl将抑制该提示,而无需询问即可将其转换为一(多段线)。

Lee Mac 发表于 2022-7-5 17:10:50

简单介绍一下:
 

(defun c:pj (/ ss1)
   (setq varlist (list "cmdecho" "peditaccept")
   oldvars (mapcar 'getvar varlist)
   ) ;_end setq
   (mapcar 'setvar varlist (list 0 1))
   (setq ss1 (ssget))
   (if    (> (sslength ss1) 1)
   (progn
       (vl-cmdf "_pedit" "_M" ss1 "" "J" "0" "")
       (princ (strcat "\n" (itoa (sslength ss1)) " Lines Converted. "))
   ) ;_end progn
   (progn
       (vl-cmdf "_pedit" ss1 "")
       (princ (strcat "\n" (itoa (sslength ss1)) " Line Converted. "))
   ) ;_end progn
   ) ;_end if
   (mapcar 'setvar varlist oldvars)
   (princ)
) ;_end defun

ReMark 发表于 2022-7-5 17:14:12

对于这样一个直截了当的任务,这需要很多代码。难道不能用单行宏来完成吗?只是好奇。

Lee Mac 发表于 2022-7-5 17:18:24

我解释了如果用户也只选择一个实体,那么需要两个语句而不是一个。。。此外,我必须在开始和结束时设置变量值。
 
次要更新:
 

(defun c:pj (/ varlist oldvars ss1)
   (setq varlist (list "cmdecho" "peditaccept")
   oldvars (mapcar 'getvar varlist)
   ) ;_end setq
   (mapcar 'setvar varlist (list 0 1))
   (setq ss1 (ssget '((0 . "LINE"))))
   (if    (> (sslength ss1) 1)
   (progn
       (vl-cmdf "_pedit" "_M" ss1 "" "J" "0" "")
       (princ (strcat "\n" (itoa (sslength ss1)) " Lines Converted. "))
   ) ;_end progn
   (progn
       (vl-cmdf "_pedit" ss1 "")
       (princ (strcat "\n" (itoa (sslength ss1)) " Line Converted. "))
   ) ;_end progn
   ) ;_end if
   (mapcar 'setvar varlist oldvars)
   (princ)
) ;_end defun

 
忘记了本地化一些变量,并添加了一个过滤器列表。

rkmcswain 发表于 2022-7-5 17:19:24

 
几乎……:-)

(if (zerop (getvar "PEDITACCEPT"))
(command "._PEDIT" "_M" (ssget) "" "_Y" "")
(command "._PEDIT" "_M" (ssget) "" "")          
)

Lee Mac 发表于 2022-7-5 17:22:29

哈哈,不错的一个麦克斯温,但不允许单一耳鼻喉科。。。

wizman 发表于 2022-7-5 17:25:26

还有mpedit

Lee Mac 发表于 2022-7-5 17:28:24

那是快车吗?

wizman 发表于 2022-7-5 17:32:50

 
是的,李,这是一个快速工具…:-)
页: [1] 2
查看完整版本: 将直线转换为多段线