多线宽度/比例LISP
因此,我正在研究一些LISP例程,以使使用MLINES更有趣。我当前快速编写的附加dxf代码40的代码(这是mlines比例的所在)如下所示:(defun c:mlwidth ()
(if (setq ss (LM:ssget "\nSelect multilines: " '("_:L" ((0 . "MLINE")))))
(initget 4)
(setq mwidth
(cond ((getdist "\nSpecify width for all mlines <0.0>: ")) (0.0)))
(setq newdxf '(40 . mwidth))
(setq cnt 0)
(repeat (sslength ss)
(setq dxfdata (ssname ss cnt))
(setq entdata (entget dxfdata))
(setq dxfdata (subst newdxf olddxf dxfdata))
(entmod dxfdata)
(setq cnt (+ 1 cnt))
)
)
)
;; ssget-Lee Mac
;; A wrapper for the ssget function to permit the use of a custom selection prompt
;; msg - selection prompt
;; arg - list of ssget arguments
(defun LM:ssget (msg arg / sel)
(princ msg)
(setvar 'nomutt 1)
(setq sel (vl-catch-all-apply 'ssget arg))
(setvar 'nomutt 0)
(if (not (vl-catch-all-error-p sel))
sel
)
)
。我不明白为什么这实际上不是附加dxf数据,而是将其全部打印到屏幕上。有人知道为什么吗? 一些即时更正:
我还建议您阅读本教程,了解为什么在这种情况下必须使用cons。
李 谢谢李!我正在阅读cons函数以理解它。 李,很抱歉再次打扰你,但在阅读了你的帖子后,我仍然对cons函数有点困惑。这是我的更新代码。我很困惑为什么我同时使用cons功能和assoc不起作用。
(defun c:mlwidth (/ ss mwidth newdxf cnt dxfdata ent olddxf)
(if (setq
ss (LM:ssget "\nSelect multilines: " '("_:L" ((0 . "MLINE"))))
)
(progn
(initget 4)
(setq
mwidth (cond
((getdist "\nSpecify width for all mlines <0.0>: "))
(0.0)
)
)
(setq cnt 0)
(repeat (sslength ss)
(setq dxfdata (ssname ss cnt))
(setq ent (entget dxfdata))
(setq dxfdata (subst (cons 40 mwidth) (assoc 8 ent) ent))
(entmod dxfdata)
(setq cnt (+ 1 cnt))
)
)
)
(princ)
) 所以我最终使用了visual lisp。我只需要对它感到更舒服,因为它似乎可以让编码变得更容易。如果人们将来需要,我最后的代码是:
3
页:
[1]