多段线再生
你好我一直遇到的问题是,试图找到一种方法来选择图形上的所有多段线,然后在所有多段线上将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结束
如果可以的话,请帮助我,因为这让我非常沮丧。英雄联盟
非常感谢。 这应该有效:
(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
仔细考虑后,我认为代码实际上不需要错误处理程序,因为用户输入没有暂停,但这是一个很好的实践,因为我们正在篡改Sys Vars。
李 事实上,看到这一点并开始使用它对我来说很好。当我学习Lisp时,它是在ACAD2004年,他们甚至没有教我们这样做。大部分是Initget命令,这是一种痛苦。英雄联盟
呵呵,我总是说论坛是迄今为止最好的学习场所 这是同一件事吗?
(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
很可能 非常干净 实际上,我想我可以把它缩小到这样:
(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]