emwhite 发表于 2022-7-5 16:58:08

测量a线的Lisp例程

大家好,我是这个论坛的新手,对编程lisp例程知之甚少。我通常只是偶尔遇到一些,然后将它们添加到我的AutoCAD安装中。
 
我正在寻找一个Lisp例程,它可以测量我选择的2d线条,然后提示我选择一个现有的文本,将线条的长度添加到文本中。
 
基本上我有一个墙轮廓,上面有墙号。我想能够点击一条墙来测量它。然后提示单击多行或单行文字,将长度添加到文字末尾,并用空格和等号将两者分隔开来。希望能够保持在英尺和英寸,如下图所示或基于什么绘图单位设置?
 
 
示例(请不要对我的文字绘制技能笑得太多):
 
墙1
______________________________
|_____________________________|
 
 
墙1=5’3 1/2“
______________________________
|_____________________________|
 
所以顶部是之前,底部是之后。
 
如果有人知道一个可以做到这一点的例程,并能给我指出来,那就太棒了!
 
如果不是,对于初学者来说,编写代码会不会过于复杂?我只是需要一些关于如何开始的指导。或者有人可以帮我编码眨眼:
 
谢谢你的帮助!
 
-埃文

ReMark 发表于 2022-7-5 17:02:07

已经有lisp例程可以测量线的长度,并将该测量放在线的上方。唯一需要添加的是墙号。我认为论坛成员LeeMac和/或alanjt发布了lisp例程,您可以学习并将其用作新例程的基础。

alanjt 发表于 2022-7-5 17:05:38

Lee和我都发布了类似的例程,但为什么不使用带有前缀的维度呢?

emwhite 发表于 2022-7-5 17:09:28

 
这是我来到这里的常规,但这不是我想要做的100%。我在浏览代码,但它似乎在我的头上。这是把我带到这里的线索:
http://www.cadtutor.net/forum/showthread.php?56656-Lisp帮助选择多行并标记它们

emwhite 发表于 2022-7-5 17:13:36

 
我正在使用的生成器需要一个没有尺寸的单独布局,只需在墙上方显示文字,并带有文字的墙的长度。我正在努力使我尽可能容易地满足建设者的要求。

BIGAL 发表于 2022-7-5 17:16:35

根据Alanjt设置尺寸。您可以关闭所有线条,以便只显示文本,分解尺寸将其转换为纯文本。
 
你有没有看过那些lisp例程,建议他们可以一次标记很多行,然后我会运行一个替代的lisp,添加墙标签,这样你可以手动选择墙编号序列。
 
再往前一点,当你画线,然后一次挑选一整束,它们是按绘制的顺序排列的,因此如果你可以控制自己,那么你可以一次性做你想做的事情,自动按绘制的顺序标记墙。我可能会手动或自动编写两个例程(在一个程序中)。

BIGAL 发表于 2022-7-5 17:18:33

你的幸运日为这段代码增加了大约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)
)
 
塔瓦特

emwhite 发表于 2022-7-5 17:20:39

 
我可以在午饭时跑回家试一试。它工作得很好!非常感谢。

Tharwat 发表于 2022-7-5 17:23:37

 
随时欢迎你。
 
塔瓦特

emwhite 发表于 2022-7-5 17:28:18

我用它,它工作得很好,但我想用它来测量距离毫米,而不是英尺和英寸,你能帮我吗?
页: [1] 2
查看完整版本: 测量a线的Lisp例程