yfywk 发表于 2020-12-13 20:50:13

做法标注,遇到瓶颈,怎样实现引线无限增加间距

本帖最后由 yfywk 于 2020-12-14 21:09 编辑

论坛里一直找做法标注,但不是我想要的,于是自己做一个,苦于半瓶水,不能实现无线间距增加,第二行就重叠了,求助
(defun c:test ()         
                (setvar "ORTHOMODE" 1)
                (setq n2 (getvar "DIMSCALE"))
                (setq pt1 (getpoint "\n指定做法层第一点:"))
                (setq pt3 (getpoint pt1 "\n指定做法标注点:"))
                (setq pt4 (getpoint pt3 "\n指定标注方向点:"))
                (setq BNO (getstring"\n输入做法"))
                (command ".qleader" pt1 pt3 pt4 "" BNO nil)
                (while (setq pt2 (getpoint pt1 "\n指定做法层下一点:<退出>:"))
                         (vl-cmdf pt2 "")
                         (setq pt1 pt2)
                         (setq kang (angle pt1 pt3))
                         (setq len1 (* 5 n2));间距1
                         (setq len2 (* 5 n2));间距2
                         (setq p3 (polar pt3 kang len1));
                         (setq p4 (polar pt4 kang len2))
                        (command ".qleader" pt1 p3 p4 "" "" nil)
                  )
               (vl-cmdf "")
)

再次循环就出现重叠了

实现如图样子
程序目前执行后这样子




yfywk 发表于 2020-12-14 21:07:13

本帖最后由 yfywk 于 2020-12-14 21:08 编辑

用笨办法实现了5层标注,因为大多情况下也就差不多5层
(defun c:test4 ()         
         ;(progn   
            ;(QleaderSet)
                (setvar "ORTHOMODE" 1)
                (setq n2 (getvar "DIMSCALE"))
      (setq pt1 (getpoint "\n指定做法层第一点:"))
      (if (= pt1 nil)
            (setq pt1 (getpoint "\n*错误*,指定做法层第一点:或按ESC键结束命令:"))
      )
                (setq pt2 (getpoint pt1 "\n指定做法层下一点:<退出>:"))
                (if (= pt2 nil)
                  (progn
                      (setq ptx (getpoint pt1 "\n指定做法标注点:"))
                      (setq pty (getpoint ptx "\n指定标注方向点:"))
                  )
                        (progn
                        (setq pt3 (getpoint pt2 "\n指定做法层下一点:<退出>:"))
                        (if (= pt3 nil)
                              (progn
                               (setq ptx (getpoint pt1 "\n指定做法标注点:"))
                           (setq pty (getpoint ptx "\n指定标注方向点:"))
                               (setq BNO1 (getstring"\n输入做法一:"))
                               (setq BNO2 (getstring"\n输入做法二:"))
                               (setq kang (angle pt1 ptx));角度
                               (setq len1 (* 5 n2));间距
                               (setq p1 (polar ptx kang len1));
                   (setq p2 (polar pty kang len1))
                               (command ".qleader" pt1 ptx pty "" BNO1 nil)
                               (command ".qleader" pt2 p1 p2 "" BNO2 nil)
                               )
                              (progn
                                  (setq pt4 (getpoint pt2 "\n指定做法层下一点:<退出>:"))
                                  (if (= pt4 nil)
                                    (progn
                                    (setq ptx (getpoint pt1 "\n指定做法标注点:"))
                              (setq pty (getpoint ptx "\n指定标注方向点:"))
                                    (setq BNO1 (getstring"\n输入做法一:"))
                                    (setq BNO2 (getstring"\n输入做法二:"))
                                                (setq BNO3 (getstring"\n输入做法三:"))
                                    (setq kang (angle pt1 ptx));角度
                                    (setq len1 (* 5 n2));间距
                                                (setq len2 (* 10 n2));间距
                                    (setq p1 (polar ptx kang len1));
                        (setq p2 (polar pty kang len1))
                                                (setq p3 (polar ptx kang len2));
                        (setq p4 (polar pty kang len2))
                                    (command ".qleader" pt1 ptx pty "" BNO1 nil)
                                    (command ".qleader" pt2 p1 p2 "" BNO2 nil)
                                                (command ".qleader" pt3 p3 p4 "" BNO3 nil)
                                 )
                                           (progn
                                           (setq pt5 (getpoint pt2 "\n指定做法层下一点:<退出>:"))
                                           (if (= pt5 nil)
                                                         (progn
                                          (setq ptx (getpoint pt1 "\n指定做法标注点:"))
                                    (setq pty (getpoint ptx "\n指定标注方向点:"))
                                          (setq BNO1 (getstring"\n输入做法一:"))
                                          (setq BNO2 (getstring"\n输入做法二:"))
                                                      (setq BNO3 (getstring"\n输入做法三:"))
                                                          (setq BNO4 (getstring"\n输入做法四:"))
                                          (setq kang (angle pt1 ptx));角度
                                          (setq len1 (* 5 n2));间距
                                                      (setq len2 (* 10 n2));间距
                                                          (setq len3 (* 15 n2));间距
                                          (setq p1 (polar ptx kang len1));
                              (setq p2 (polar pty kang len1))
                                                      (setq p3 (polar ptx kang len2));
                              (setq p4 (polar pty kang len2))
                                                          (setq p5 (polar ptx kang len3))
                                                          (setq p6 (polar pty kang len3))
                                          (command ".qleader" pt1 ptx pty "" BNO1 nil)
                                          (command ".qleader" pt2 p1 p2 "" BNO2 nil)
                                                      (command ".qleader" pt3 p3 p4 "" BNO3 nil)
                                                          (command ".qleader" pt4 p5 p6 "" BNO4 nil)
                                        )
                                                      (progn
                                          (setq ptx (getpoint pt1 "\n指定做法标注点:"))
                                    (setq pty (getpoint ptx "\n指定标注方向点:"))
                                          (setq BNO1 (getstring"\n输入做法一:"))
                                          (setq BNO2 (getstring"\n输入做法二:"))
                                                      (setq BNO3 (getstring"\n输入做法三:"))
                                                          (setq BNO4 (getstring"\n输入做法四:"))
                                                          (setq BNO5 (getstring"\n输入做法五:"))
                                          (setq kang (angle pt1 ptx));角度
                                          (setq len1 (* 5 n2));间距
                                                      (setq len2 (* 10 n2));间距
                                                          (setq len3 (* 15 n2));间距
                                                          (setq len4 (* 20 n2));间距
                                          (setq p1 (polar ptx kang len1));
                              (setq p2 (polar pty kang len1))
                                                      (setq p3 (polar ptx kang len2));
                              (setq p4 (polar pty kang len2))
                                                          (setq p5 (polar ptx kang len3))
                                                          (setq p6 (polar pty kang len3))
                                                          (setq p7 (polar ptx kang len4))
                                                          (setq p8 (polar pty kang len4))
                                          (command ".qleader" pt1 ptx pty "" BNO1 nil)
                                          (command ".qleader" pt2 p1 p2 "" BNO2 nil)
                                                      (command ".qleader" pt3 p3 p4 "" BNO3 nil)
                                                          (command ".qleader" pt4 p5 p6 "" BNO4 nil)
                                                          (command ".qleader" pt5 p7 p8 "" BNO4 nil)
                                        )
                                           )
                                           )
                                  )
                                  )
                           )
                  )
                )
               
)

xyp1964 发表于 2020-12-15 00:25:56

(defun c:tt ()
(setq n2 (getvar "DIMSCALE"))
(setq pt1 (getpoint "\n指定做法层第一点: "))
(setq pt3 (getpoint pt1 "\n指定做法标注点: "))
(setq pt4 (getpoint pt3 "\n指定标注方向点: "))
(setq BNO (getstring "\n输入做法: "))
(setq rad (angle pt3 pt1))
(setq len (* 5 n2))
(setvar "osmode" 0)
(command "qleader" pt1 pt3 pt4 "" BNO nil)
(while (setq pt2 (getpoint pt1 "\n指定做法层下一点<退出>: "))
    (setq tx (getstring "\n输入做法: "))
    (setq pt1 pt2)
    (setq pt3 (polar pt3 rad len))
    (setq pt4 (polar pt4 rad len))
    (command ".qleader" pt1 pt3 pt4 "" tx nil)
)
(princ)
)

xyp1964 发表于 2020-12-15 00:35:23

(defun c:tt () ;tt(做法标注) 全自动方式
(setq lst '("A" "B" "C" "D" "E")) ;做法表
(setq n2 (getvar "DIMSCALE"))
(setvar "orthomode" 1)
(setq pt1 (getpoint "\n指定做法层第一点: "))
(setq pt3 (getpoint pt1 "\n指定做法标注点: "))
(setq pt4 (getpoint pt3 "\n指定标注方向点: "))
(setq rad (angle pt3 pt1))
(setq len (* 5 n2))
(setvar "osmode" 0)
(command "qleader" pt1 pt3 pt4 "" (car lst) nil)
(setq lst (cdr lst))
(foreach tx lst
    (setq pt3 (polar pt3 rad len))
    (setq pt4 (polar pt4 rad len))
    (command ".qleader" pt1 pt3 pt4 "" tx nil)
)
(princ)
)

yfywk 发表于 2020-12-15 07:23:20

xyp1964 发表于 2020-12-15 00:35


非常感谢,这两个都很好,第二个可以做成对话框,适用于5个内的做法,后面再加工一下,会更加适合我使用

Aries 发表于 2020-12-16 15:52:14

swb4420 发表于 2020-12-18 15:12:26

xyp1964 发表于 2020-12-15 00:35


代码怎么用啊?

guankuiwu 发表于 2021-1-9 22:37:52

学习中,这个功能不错。

mojianxing 发表于 2023-9-22 16:39:17


学习中,这个功能不错。
页: [1]
查看完整版本: 做法标注,遇到瓶颈,怎样实现引线无限增加间距