broncos15 发表于 2022-7-5 18:08:27

多线宽度/比例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数据,而是将其全部打印到屏幕上。有人知道为什么吗?

Lee Mac 发表于 2022-7-5 18:37:36

一些即时更正:
我还建议您阅读本教程,了解为什么在这种情况下必须使用cons。
 

broncos15 发表于 2022-7-5 18:42:56

谢谢李!我正在阅读cons函数以理解它。

broncos15 发表于 2022-7-5 19:06:06

李,很抱歉再次打扰你,但在阅读了你的帖子后,我仍然对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)
)

broncos15 发表于 2022-7-5 19:20:49

所以我最终使用了visual lisp。我只需要对它感到更舒服,因为它似乎可以让编码变得更容易。如果人们将来需要,我最后的代码是:
3
页: [1]
查看完整版本: 多线宽度/比例LISP