标注到多行文字块中
大家好,这里有谁知道一个lisp文件可以采用2个线性尺寸并将其输出到多行文字(或块)中。我基本上需要的是一个lisp,在这里我可以选择一个水平线性维度,然后是一个垂直维度,并将这些维度值插入到多行文字中。或者,它们可以是块属性,只要有效。我还需要文本的序列号,但我认为我有一个解决方案。成品需要的是
文本[#]
更多文本[其他#]
[维度]
过去有人见过类似的Lisp程序吗?或者,如果没有,谁能为我指出一个可能的工作方向?
谢谢 这应该很简单。
你能举一个结果的例子吗?
因此,我要做的是标记一条封闭的多段线(虽然这里可以选择分解),并将其最长的长度和宽度标注放在多行文字的末尾,但有时我需要在开始处设置水平标注,有时需要垂直标注。理想情况下,我希望将其全部放在一个块中,以便将其附加到一个引线。我想我找到了一个lisp来完成顺序编号部分,但到目前为止,尺寸部分一直困扰着我。我做了一个快速的图片,希望能说明这一点。
http://i.imgur.com/2eE9iZ2.png
我希望能够点击两行,得到一个维度,然后再点击两个维度,得到第二个维度,并将其放置在多行文字(或块)的底部。在这种情况下,我会先单击两条红线,然后单击两条蓝线。然后,我想我将为我之前找到的项目、零件和顺序块lisp添加属性。你可能知道我对这种更复杂的autocad有点陌生。谢谢你的帮助! 像这样的?
(defun c:test (/ s lst e ss l)
;; Tharwat 08.09.2015 ;;
(princ "\nSelect the 1st group of lines :")
(if (and (setq s (ssget '((0 . "LINE"))))
(princ "\nSelect the 2nd group of lines :")
(setq ss (ssget '((0 . "LINE"))))
)
(progn
(mapcar '(lambda (sel i / sn)
(setq l 0.)
(while (setq sn (ssname sel (setq i (1+ i))))
(setq l (+ l
(distance (cdr (assoc 10 (entget sn)))
(cdr (assoc 11 (entget sn)))
)
)
)
)
(setq lst (cons l lst))
)
(list s ss)
'(-1 -1)
)
)
)
(if (and lst
(setq ss
(nentsel "\nPick on Text, Mtext or Attribute in Block :")
)
(wcmatch (cdr (assoc 0 (entget (car ss))))
"TEXT,MTEXT,ATTRIB"
)
)
(vla-put-textstring
(setq v (vlax-ename->vla-object (car ss)))
(strcat (vla-get-textstring v)
" "
(vl-princ-to-string (car lst))
"x"
(vl-princ-to-string (cadr lst))
)
)
)
(princ)
)(vl-load-com)
这不是我的意思,对不起,如果我不清楚的话。我的意思是我需要得到两条红线之间的距离作为一个维度,然后两条蓝线之间的距离作为另一个维度。虽然如果这不可能,我可以用一种改进的方式使用这个。
此外,出于某种原因,当我使用它时,它默认为十进制单位,而不是我设置的架构。你知道它是否可以改变吗?或者,如果这是一个有点多,谁能告诉我在正确的方向,聘请别人来完成这个Lisp程序?我不确定哪里是做这种专业的东西的好地方。 只要在Cadtutor这里停留一下,经常会发布代码,但作为第一篇文章,这些代码的方向并不正确。塔瓦特的回复很好,我相信他会再次尝试。
下面是单个对象选项(如pline)的部分代码。对于多个对象,您需要不同的版本。我将扩展下面比较对象的示例。
(defun c:plXY ( / obj maxpoint minpoint LL UR)
(setq obj (vlax-ename->vla-object (car (entsel))))
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq LL (vlax-safearray->listminpoint))
(setq UR (vlax-safearray->listmaxpoint))
(setq x (- (car UR)(car LL)))
(setq y (- (cadr UR)(cadr LL)))
(Alert (strcat "Length is " (rtos x 2 3) " Width is " (rtos y 2 3)))
)
页:
[1]