测量a线的Lisp例程
大家好,我是这个论坛的新手,对编程lisp例程知之甚少。我通常只是偶尔遇到一些,然后将它们添加到我的AutoCAD安装中。我正在寻找一个Lisp例程,它可以测量我选择的2d线条,然后提示我选择一个现有的文本,将线条的长度添加到文本中。
基本上我有一个墙轮廓,上面有墙号。我想能够点击一条墙来测量它。然后提示单击多行或单行文字,将长度添加到文字末尾,并用空格和等号将两者分隔开来。希望能够保持在英尺和英寸,如下图所示或基于什么绘图单位设置?
示例(请不要对我的文字绘制技能笑得太多):
墙1
______________________________
|_____________________________|
墙1=5’3 1/2“
______________________________
|_____________________________|
所以顶部是之前,底部是之后。
如果有人知道一个可以做到这一点的例程,并能给我指出来,那就太棒了!
如果不是,对于初学者来说,编写代码会不会过于复杂?我只是需要一些关于如何开始的指导。或者有人可以帮我编码眨眼:
谢谢你的帮助!
-埃文 已经有lisp例程可以测量线的长度,并将该测量放在线的上方。唯一需要添加的是墙号。我认为论坛成员LeeMac和/或alanjt发布了lisp例程,您可以学习并将其用作新例程的基础。 Lee和我都发布了类似的例程,但为什么不使用带有前缀的维度呢?
这是我来到这里的常规,但这不是我想要做的100%。我在浏览代码,但它似乎在我的头上。这是把我带到这里的线索:
http://www.cadtutor.net/forum/showthread.php?56656-Lisp帮助选择多行并标记它们
我正在使用的生成器需要一个没有尺寸的单独布局,只需在墙上方显示文字,并带有文字的墙的长度。我正在努力使我尽可能容易地满足建设者的要求。 根据Alanjt设置尺寸。您可以关闭所有线条,以便只显示文本,分解尺寸将其转换为纯文本。
你有没有看过那些lisp例程,建议他们可以一次标记很多行,然后我会运行一个替代的lisp,添加墙标签,这样你可以手动选择墙编号序列。
再往前一点,当你画线,然后一次挑选一整束,它们是按绘制的顺序排列的,因此如果你可以控制自己,那么你可以一次性做你想做的事情,自动按绘制的顺序标记墙。我可能会手动或自动编写两个例程(在一个程序中)。 你的幸运日为这段代码增加了大约5行代码,现在它可以工作了,如果需要其他更改,那么可能是学习如何编写/更改程序的好时机。这将根据我的工作岗位以上无论是自动选择或手动谢谢李
: original program by lee mac
; Room and number added by Alan H FEB 2011
(princ "\nTo run type plen3")
(defun c:pLen3 (/ *error* doc spc ss mid tStr tBox tObj lAng)
(vl-load-com)
(defun *error* (msg)
(if
(not
(wcmatch
(strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
(princ
(strcat
"\n<< Error: " msg " >>")))
(princ))
(if
(eq 4
(logand 4
(cdr (assoc 70
(tblsearch "LAYER"
(getvar "CLAYER"))))))
(progn
(princ "\n<< Current Layer Locked >>") (exit)))
(setq doc (vla-get-ActiveDocument
(vlax-get-Acad-Object))
spc (if
(zerop
(vla-get-activespace doc))
(if (= (vla-get-mspace doc) :vlax-true)
(vla-get-modelspace doc)
(vla-get-paperspace doc))
(vla-get-modelspace doc)))
(while (not ss)
(setq ss (ssget '((0 . "*LINE")))))
(setq tSze (getvar "DIMTXT"))
(setq x 1)
(foreach Obj
(mapcar 'vlax-ename->vla-object
(vl-remove-if 'listp
(mapcar 'cadr (ssnamex ss))))
(setq tStr (rtos (vla-get-length Obj) 3 2)
tBox (textbox
(list
(cons 1 (strcat "room" tStr ".."))
(cons 40 tSze)
(cons 7 (getvar "TEXTSTYLE")))))
(setq mid (/ (abs (- (vlax-curve-getEndParam Obj)
(vlax-curve-getStartParam Obj))) 2.)
lAng (angle '(0 0 0) (vlax-curve-getFirstDeriv Obj mid)))
(cond ((and (> lAng (/ pi 2)) (<= lAng pi))
(setq lAng (- lAng pi)))
((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
(setq lAng (+ lAng pi))))
(setq rnum (rtos X 2 0))
(setq tstr (strcat "ROOM" rnumtStr))
(setq tObj
(vla-addMText spc
(vlax-3D-point (vlax-curve-getPointatParam Obj mid))
(- (caadr tBox) (caar tBox)) tStr))
(vla-put-Height tObj tSze)
(vla-put-Rotation tObj lAng)
(setq x (+ x 1))
)
(princ)
)
塔瓦特
我可以在午饭时跑回家试一试。它工作得很好!非常感谢。
随时欢迎你。
塔瓦特 我用它,它工作得很好,但我想用它来测量距离毫米,而不是英尺和英寸,你能帮我吗?
页:
[1]
2