Ocron 发表于 2022-7-6 12:01:54

多段线再生

你好
 
我一直遇到的问题是,试图找到一种方法来选择图形上的所有多段线,然后在所有多段线上将Ltype重新生成设置为“on”。我对autolisp有一点经验,但似乎无法实现。
 
这基本上是我的lisp现在看起来的样子,但由于某种原因,当它到达“pedit”命令时,它不能使用“ss”进行选择,而是使每个字母命令在该命令之后都未知。
 
(定义C:exd()
(setq CE-SAV(getvar“cmdecho”))
(setvar“cmdecho”0)
(setq ss(ssget“x”((0.*多段线)))
(命令“pedit”ss”““l”“on”“))
 
(setq ss nil)
 
(setvar“cmdecho”CE-SAV)
(普林斯)
) ;_ defun结束
 
 
如果可以的话,请帮助我,因为这让我非常沮丧。英雄联盟
 
非常感谢。

Lee Mac 发表于 2022-7-6 12:10:44

这应该有效:
 

(defun C:exd (/ *error* vl ov ss) ;; Localise Variables!

;; Error Handler to Reset Sys Vars in case User hits Esc!

(defun *error* (msg)
   (and ov (mapcar 'setvar vl ov))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))

;; Get Sysvars and store them

(setq vl '("CMDECHO" "PEDITACCEPT") ov (mapcar 'getvar vl))

;; Set sys vars to what we want

(mapcar 'setvar vl '(0 1))

;; Include IF statment to allow for a null SelectionSet

(if (setq ss (ssget "_X" '((0 . "*POLYLINE"))))
   (command "_.pedit" "_M" ss "" "_L" "ON" ""))

;; Reset Sys Vars

(mapcar 'setvar vl ov)
(princ))


 
请阅读评论,如果你有问题,尽管问
 

Ocron 发表于 2022-7-6 12:16:27

李,你是人类中的上帝。英雄联盟
 
谢谢你,效果很好。

Lee Mac 发表于 2022-7-6 12:26:53

 
呵呵谢谢Ocron
 
仔细考虑后,我认为代码实际上不需要错误处理程序,因为用户输入没有暂停,但这是一个很好的实践,因为我们正在篡改Sys Vars。
 

Ocron 发表于 2022-7-6 12:33:34

事实上,看到这一点并开始使用它对我来说很好。当我学习Lisp时,它是在ACAD2004年,他们甚至没有教我们这样做。大部分是Initget命令,这是一种痛苦。英雄联盟

Lee Mac 发表于 2022-7-6 12:36:57

 
呵呵,我总是说论坛是迄今为止最好的学习场所

alanjt 发表于 2022-7-6 12:45:22

这是同一件事吗?
 
(defun c:Test (/ #SS)
(and (setq #SS (ssget "_X" '((0 . "*POLYLINE"))))
      (foreach x (mapcar 'cadr (ssnamex #SS))
      (vl-catch-all-apply
          'vla-put-linetypegeneration
          (list (vlax-ename->vla-object x) :vlax-true)
      ) ;_ vl-catch-all-apply
      ) ;_ foreach
) ;_ and
(princ)
) ;_ defun

Lee Mac 发表于 2022-7-6 12:54:52

 
很可能

JONTHEPOPE 发表于 2022-7-6 13:01:25

非常干净

alanjt 发表于 2022-7-6 13:07:10

实际上,我想我可以把它缩小到这样:
 
(defun c:Test (/ #SS)
(and (setq #SS (ssget "_X" '((0 . "*POLYLINE"))))
      (foreach x (ssnamex #SS)
      (vl-catch-all-apply
          'vla-put-linetypegeneration
          (list (vlax-ename->vla-object (cadr x)) :vlax-true)
      ) ;_ vl-catch-all-apply
      ) ;_ foreach
) ;_ and
(princ)
) ;_ defun
页: [1]
查看完整版本: 多段线再生