直线标签lisp
谁能帮我解决这个Lisp程序的问题吗。我需要它绕到最整齐的脚并添加“符号”。如果可能的话,让它坐在线上而不是线上。我正在使用Autocad 2011。此Lisp由Tharwat创建:
(默认c:Lentxt(/ss)
(if(setq ss(ssget“_:L”'((0。“LINE”)))
(
(λ(i/ss1 e dis pt1 pt2 pt3)
(虽然
(setq ss1(ssname ss(setq i(1+i)))
(setq e(entget ss1))
(setq dis(距离(setq pt1(cdr(assoc 10 e)))(setq pt2(cdr(assoc 11 eЮ)Ю)))
(条件((
(setq pt3(极pt1(setq ang(角度pt1 pt2))(/dis 2))
)
((>(car pt1)(car pt2))(setq pt3(极坐标pt2(setq ang(角度pt2 pt1))(/dis 2))
)
)
(entmakex(列表(cons 0“文本”)
(cons 10(极性pt3和0))
(cons 1(rtos dis 2))
(cons 50 ang)
(cons 40(getvar的文本大小)))
))-1)
(princ“\n未选择行”)
)
(普林斯)
) 你应该提到你从哪里得到Lisp程序,或者至少带来了链接。
从这里开始
塔瓦特 上次我来找人帮忙时,有人给我发了这封信。我忘了他们的标签名。 J_spawn_h
我们这里有一些简单的规则:
或者最好到这里阅读所有的线程-你也可以了解代码标签。
萨尔瓦特
我无意损害你的声誉,我相信这是个错误。无论如何,您可以为Lisp例程提供一个简短的个人标题。 对不起,我不知道如何回到以前的帖子。
你的lisp很好用,我只是想把它加上去,但我想不出它是怎么得到这个数字的,所以我可以加一个(cvunit x“inches”“feet”)。
我只是不知道如何找出是谁给我的。
我在第一个帖子中纠正了我的错误。 假设:
[列表]
[*]线条以英寸为单位绘制,您需要四舍五入到最近的英尺:
[*]您只需要2D距离
[*]您希望文本居中对齐在行的中间上方
[*]您已经预设了TEXTSTYLE TEXTSIZE层
[*]一切都是WCS
[*]雅达雅达雅达
[/列表]
可能是这样的:
(defun c:llabel (/ ss en ed p10 p11 mpt d2d lan dir tan)
(defun round1 (r)
(if (<= 0.5 (abs (rem r 1)))
(fix (1+ r))
(fix r)))
(and (setq ss (ssget "X" '((0 . "LINE"))))
(while (setq en (ssname ss 0))
(setq ed (entget en)
p10 (cdr (assoc 10 ed))
p11 (cdr (assoc 11 ed))
mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11)
d2d (distance (cdr (reverse p10)) (cdr (reverse p11)))
lan (angle p10 p11)
dir (if (< (* pi 0.5) lan (* pi 1.5)) - +)
tan (if (> (* pi 1.5) lan (* pi 0.5)) (+ lan pi) lan))
(entmake (list (cons 0 "TEXT")
(cons 8 (getvar "CLAYER"))
(cons 7 (getvar "TEXTSTYLE"))
(cons 40 (getvar "TEXTSIZE"))
(cons 72 4)
(cons 10 (polar mpt (dir (angle p10 p11) (* pi 0.5))
(getvar "TEXTSIZE")))
(cons 11 (polar mpt (dir (angle p10 p11) (* pi 0.5))
(getvar "TEXTSIZE")))
(cons 50 tan)
(cons 1 (strcat (itoa (round1 (/ d2d 12.))) "'"))))
(ssdel en ss)))
(prin1))
未经良好测试-大卫
页:
[1]