j_spawn_h 发表于 2022-7-6 09:33:01

直线标签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未选择行”)
)
(普林斯)
)

Tharwat 发表于 2022-7-6 09:56:56

你应该提到你从哪里得到Lisp程序,或者至少带来了链接。
 
从这里开始
 
塔瓦特

j_spawn_h 发表于 2022-7-6 10:00:30

上次我来找人帮忙时,有人给我发了这封信。我忘了他们的标签名。

fuccaro 发表于 2022-7-6 10:10:33

J_spawn_h
我们这里有一些简单的规则:
或者最好到这里阅读所有的线程-你也可以了解代码标签。 
萨尔瓦特
我无意损害你的声誉,我相信这是个错误。无论如何,您可以为Lisp例程提供一个简短的个人标题。

j_spawn_h 发表于 2022-7-6 10:31:44

对不起,我不知道如何回到以前的帖子。
你的lisp很好用,我只是想把它加上去,但我想不出它是怎么得到这个数字的,所以我可以加一个(cvunit x“inches”“feet”)。
我只是不知道如何找出是谁给我的。
我在第一个帖子中纠正了我的错误。

David Bethel 发表于 2022-7-6 10:39:53

假设:
[列表]
[*]线条以英寸为单位绘制,您需要四舍五入到最近的英尺:
[*]您只需要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]
查看完整版本: 直线标签lisp