乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 10|回复: 10

[编程交流] 寻找标签线

[复制链接]

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 15:53:15 | 显示全部楼层 |阅读模式
好的,伙计们。我需要一些想法。我写这篇文章是为了标签,文本需要按数字顺序排列。但我需要一种方法让它先在一个地方开始,然后我认为它会正确标记。现在它只是随机排列。现在可能是我写代码的方式,我做不到。我试着自我科技化,不去寻求你们的帮助。
 
  1. (defun c:td (/ dt layerset hr raf1 raf2 ss en ed p10 p11 mpt d2d d1d d3d d4d lan tan fg hg)
  2. (vl-load-com)
  3. (defun errorhandler (s)
  4.    (if    (/= s "Function cancelled")
  5.      (princ (strcat "\nError: " s))
  6.      (princ "SW function cancelled!")
  7.    )                    ;end if
  8.    (setvar "clayer" layerset)
  9.    (setvar "orthomode" orthoset)
  10.    (setvar "osmode" osset)
  11.    (setvar "cmddia" cmddiaset)
  12.    (setvar "attdia" attdiaset)
  13.    (setvar "regenmode" 1)
  14.    (setq *error* olderr)
  15.    (princ)
  16. )                    ;end defun error
  17.               
  18. (setq dscal (getvar "dimscale"))
  19. (setq dimconv (/ 96.0 dscal))
  20. (setq lspace (* 9.0 (/ dscal 96.0)))
  21. (setq tfc12 (* 12.0 (/ dscal 96.0)))
  22. ;;;;----set variables -------------------------------------
  23. (setq layerset (getvar "clayer"))
  24. (command "_.layer" "s" "s-Fnd-Tbeam" "")
  25. (command "_.layer" "off" "*" "n" "")
  26. (command
  27.    "_.layer"
  28.    "on"
  29.    "s-fnd-stend,s-fnd-btend,s-fnd-hstend,s-fnd-vstend,s-fnd-vbtend,s-fnd-hbtend"
  30.    ""
  31. )
  32. (command "textsize" "6" "")
  33. (command "_.style" "romans" "0" "0.80" "" "" "" "")
  34. ;;;;-----Get point for start side-------------------
  35. (setq dt (getstring "DBL(2) or TRPL(3) Tendons"))
  36. (setq arr (getpoint "Pick first side you want the Live end"))
  37. (setq ss (ssget "_:L" '((0 . "LINE,LWPOLYLINE"))))
  38. (setq count 1)
  39.    
  40. (while (setq en (ssname ss 0))
  41.                    ;(setq e (ssname ss (setq i (1+ i))))
  42.    (setq ed (entget en))
  43.    (setq lyr (cdr (assoc 8 ed)))
  44.    (setq p10 (cdr (assoc 10 ed)))
  45.    (setq p11 (cdr (assoc 11 ed)))
  46.    (setq pln (cdr (assoc 90 ed)))
  47.    (setq pp10 p10)            ;first pline corrd for start placement
  48.    (setq pp9 p11)            ;second pline corrd for start rotation
  49.    (setq pp11 p11)            ;last pline corrd for end placement
  50.    (setq pp12 p10)            ;second to last corrd on miltiple plines for end rotation
  51.    (setq leng (vla-get-length (vlax-ename->vla-object en)))
  52.    (setq leng1 (fix (/ leng 12.0)))
  53.    (if    (= (cdr (assoc 0 ed)) "LWPOLYLINE")
  54.      (progn
  55.    (if (setq chk (= pln 2))
  56.      (setq    pp1  (nth 19 ed)
  57.        pp9  (cdr pp1)        ;start rotation
  58.        pp11 (cdr pp1)        ;end location
  59.      )                ;end setq
  60.                    ;(setq distt1 (fix (/ (distance pp10 pp1) 12.0)))
  61.    )                ;end if 2
  62.    (if (setq chk (= pln 3))
  63.      (setq    pp1  (nth 24 ed)
  64.        pp2  (nth 19 ed)
  65.        pp9  (cdr pp2)        ;start rotation
  66.        pp11 (cdr pp1)        ;end location
  67.        pp12 (cdr pp2)        ;end rotation
  68.      )                ;end setq
  69.                    ;(setq distt1 (fix (/ ((distance pp10 pp2)+(distance pp2 pp1)) 12.0)))
  70.    )                ;end if 3         
  71.    (if (setq chk (= pln 4))
  72.      (setq    pp1  (nth 29 ed)
  73.        pp2  (nth 19 ed)
  74.        pp3  (nth 24 ed)
  75.        pp9  (cdr pp2)        ;start rotation
  76.        pp11 (cdr pp1)        ;end location
  77.        pp12 (cdr pp3)        ;end rotation
  78.      )                ;end setq
  79.    )                ;end if 4
  80.    (if (setq chk (= pln 5))
  81.      (setq    pp1  (nth 34 ed)
  82.        pp2  (nth 19 ed)
  83.        pp3  (nth 29 ed)
  84.        pp9  (cdr pp2)        ;start rotation
  85.        pp11 (cdr pp1)        ;end location
  86.        pp12 (cdr pp3)        ;end rotation
  87.      )                ;end setq
  88.    )                ;end if 5
  89.    (if (setq chk (= pln 6))
  90.      (setq    pp1  (nth 39 ed)
  91.        pp2  (nth 19 ed)
  92.        pp3  (nth 34 ed)
  93.        pp9  (cdr pp2)        ;start rotation
  94.        pp11 (cdr pp1)        ;end location
  95.        pp12 (cdr pp3)        ;end rotation
  96.      )                ;end setq
  97.    )                ;end if 6
  98.      )                    ;end progn
  99.    )                    ;end if 0
  100. ;;;insert start and end placement
  101.    (if    (< (distance arr pp10) (distance arr pp11))
  102.      (setq p9 pp10)
  103.    )
  104.    (if    (< (distance arr pp11) (distance arr pp10))
  105.      (setq p9 pp11)
  106.    )
  107.    (if    (> (distance arr pp10) (distance arr pp11))
  108.      (setq p12 pp10)
  109.    )
  110.    (if    (> (distance arr pp11) (distance arr pp10))
  111.      (setq p12 pp11)
  112.    )
  113.    (setq cpi arr)
  114.    (setq cpix (car cpi))
  115.    (setq cpiy (cadr cpi))
  116.    (setq cp (list cpix cpiy))
  117. ;;;;start
  118.    (setq cdist1 (distance cp pp10))
  119.    (setq cdist2 (distance cp pp9))
  120.    (if    (< cdist1 cdist2)        ; begin iloop 3
  121.      (setq tsp pp10)
  122.      (setq tsp pp9)
  123.    )                    ; end iloop 3
  124.    (if    (< cdist1 cdist2)        ; begin iloop 4
  125.      (setq tep pp9)
  126.      (setq tep pp10)
  127.    )                    ; end iloop 4
  128. ;;;;ends
  129.    (setq cdist13 (distance cp pp11))
  130.    (setq cdist23 (distance cp pp12))
  131.    (if    (< cdist13 cdist23)        ; begin iloop 3
  132.      (setq tsp3 pp11)
  133.      (setq tsp3 pp12)
  134.    )                    ; end iloop 3
  135.    (if    (< cdist13 cdist23)        ; begin iloop 4
  136.      (setq tep3 pp12)
  137.      (setq tep3 pp11)
  138.    )                    ; end iloop 4
  139.                    ;-------JUSTIFICATION---------------            -------------------------
  140.    (setq tenang (angle tsp tep))    ;start angle
  141.    (setq tenang2 (angle tsp3 tep3))    ;(angle tsp3 tep3));end angle
  142.    (setq tenangro (- tenang (/ pi 2.0)))
  143.    (setq tenangro2 (- tenang2 (/ pi 2.0)))
  144.    (setq tenangconv (/ (fix (* 10.0 (* 180.0 (/ tenang pi)))) 10.0))
  145.                    ;text info
  146.    (setq tenro (* 180.0 (/ (- tenangro pi) pi)))
  147.    (setq tenro2 (* 180.0 (/ (- tenangro2 pi) pi)))
  148.                    ;----------------------add the prefix to the lengths   --------------------------------------------------------------
  149.    (if    (= lyr "S-FND-HSTEND")
  150.      (setq tentag (strcat "T" (itoa count) " \(" (itoa leng1) "\)"))
  151.    )
  152.    (if    (= lyr "S-FND-VSTEND")
  153.      (setq tentag (strcat "T" (itoa count) " \(" (itoa leng1) "\)"))
  154.    )
  155.    (if    (= lyr "S-FND-STEND")
  156.      (setq tentag (strcat "T" (itoa count) " \(" (itoa leng1) "\)"))
  157.    )
  158.    (if    (= dt "2")
  159.      (progn
  160.    (if (= lyr "S-FND-HBTEND")
  161.      (setq    tentag (strcat "T"
  162.                   (itoa count)
  163.                   "\("
  164.                   (itoa leng1)
  165.                   "\) "
  166.                   "T"
  167.                   (itoa count2)
  168.                   "\("
  169.                   (itoa leng1)
  170.                   "\) "
  171.               )
  172.      )
  173.    )
  174.    (if (= lyr "S-FND-VBTEND")
  175.      (setq    tentag (strcat "T"
  176.                   (itoa count)
  177.                   "\("
  178.                   (itoa leng1)
  179.                   "\) "
  180.                   "T"
  181.                   (itoa count2)
  182.                   "\("
  183.                   (itoa leng1)
  184.                   "\) "
  185.               )
  186.      )
  187.    )
  188.    (if (= lyr "S-FND-BTEND")
  189.      (setq    tentag (strcat "T"
  190.                   (itoa count)
  191.                   "\("
  192.                   (itoa leng1)
  193.                   "\) "
  194.                   "T"
  195.                   (itoa count2)
  196.                   "\("
  197.                   (itoa leng1)
  198.                   "\) "
  199.               )
  200.      )
  201.    )
  202.      )                    ;end progn
  203.      (progn
  204.    (if (= lyr "S-FND-HBTEND")
  205.      (setq    tentag (strcat "T"
  206.                   (itoa count)
  207.                   "\("
  208.                   (itoa leng1)
  209.                   "\) "
  210.                   "T"
  211.                   (itoa count2)
  212.                   "\("
  213.                   (itoa leng1)
  214.                   "\) "
  215.                   "T"
  216.                   (itoa count3)
  217.                   "\("
  218.                   (itoa leng1)
  219.                   "\) "
  220.               )
  221.      )
  222.    )
  223.    (if (= lyr "S-FND-VBTEND")
  224.      (setq    tentag (strcat "T"
  225.                   (itoa count)
  226.                   "\("
  227.                   (itoa leng1)
  228.                   "\) "
  229.                   "T"
  230.                   (itoa count2)
  231.                   "\("
  232.                   (itoa leng1)
  233.                   "\) "
  234.                   "T"
  235.                   (itoa count3)
  236.                   "\("
  237.                   (itoa leng1)
  238.                   "\) "
  239.               )
  240.      )
  241.    )
  242.    (if (= lyr "S-FND-BTEND")
  243.      (setq    tentag (strcat "T"
  244.                   (itoa count)
  245.                   "\("
  246.                   (itoa leng1)
  247.                   "\) "
  248.                   "T"
  249.                   (itoa count2)
  250.                   "\("
  251.                   (itoa leng1)
  252.                   "\) "
  253.                   "T"
  254.                   (itoa count3)
  255.                   "\("
  256.                   (itoa leng1)
  257.                   "\) "
  258.               )
  259.      )
  260.    )
  261.      )                    ;end progn
  262.    )                    ;end if
  263.    (setq count (1+ count))
  264.    (setq count2 (1+ count))
  265.    (setq count3 (1+ count2))
  266. ;;;----------------------------text JUSTIFY----------------------------------------------------------
  267.    (if    (= tenangconv 0.0)
  268.      (setq just "mr")
  269.    )
  270.    (if    (and (> tenangconv 0.0) (<= tenangconv 90.0))
  271.      (setq just "mr")
  272.    )
  273.    (if    (and (> tenangconv 90.0) (< tenangconv 180.0))
  274.      (setq just "ml")
  275.    )
  276.    (if    (= tenangconv 180.0)
  277.      (setq just "ml")
  278.    )
  279.    (if    (and (> tenangconv 180.0) (<= tenangconv 270.0))
  280.      (setq just "ml")
  281.    )
  282.    (if    (> tenangconv 270.0)
  283.      (setq just "mr")
  284.    )
  285. ;;;text rotation--------------------------------------------------------------------------------
  286.    (if    (= tenangconv 0.0)
  287.      (setq textroi (- tenangro pi))
  288.    )
  289.    (if    (and (> tenangconv 0.0) (<= tenangconv 90.0))
  290.      (setq textroi (- tenangro pi))
  291.    )
  292.    (if    (and (> tenangconv 90.0) (< tenangconv 180.0))
  293.      (setq textroi tenangro)
  294.    )
  295.    (if    (= tenangconv 180.0)
  296.      (setq textroi tenangro)
  297.    )
  298.    (if    (and (> tenangconv 180.0) (<= tenangconv 270.0))
  299.      (setq textroi tenangro)
  300.    )
  301.    (if    (> tenangconv 270.0)
  302.      (setq textroi (- tenangro pi))
  303.    )
  304.    (setq textro (* 180.0 (/ (- textroi (/ pi 2.0)) pi)))
  305.    ;;text location---------------------------------------------------------------------------------
  306.    (if    (= tenangconv 0.0)
  307.      (setq textp4 tfc12)
  308.    )
  309.    (if    (and (> tenangconv 0.0) (<= tenangconv 90.0))
  310.      (setq textp4 tfc12)
  311.    )
  312.    (if    (and (> tenangconv 90.0) (< tenangconv 180.0))
  313.      (setq textp4 (- 0.0 tfc12))
  314.    )
  315.    (if    (= tenangconv 180.0)
  316.      (setq textp4 (- 0.0 tfc12))
  317.    )
  318.    (if    (and (> tenangconv 180.0) (<= tenangconv 270.0))
  319.      (setq textp4 (- 0.0 tfc12))
  320.    )
  321.    (if    (> tenangconv 270.0)
  322.      (setq textp4 tfc12)
  323.    )
  324.    (setq textp2 (polar p9 tenang lspace))
  325.    (setq textp3 (polar textp2 tenangro2 textp4))
  326.                    ;-----------------------INSERT-----------------------------------------
  327.    (if    (= dt "2")
  328.      (setq btnl "btenl"
  329.        btnd "btend"
  330.      )
  331.    )                    ;end if
  332.    (if    (= dt "3")
  333.      (setq btnl "btenl3"
  334.        btnd "btend3"
  335.      )
  336.    )                    ;end if
  337.    (if    (= lyr "S-FND-STEND")
  338.      (setq btnl "btenl-s")
  339.    )                    ;END IF
  340.    (if    (= lyr "S-FND-STEND")
  341.      (setq btnd "btend-s")
  342.    )                    ;END IF
  343.    (if    (= lyr "S-FND-HSTEND")
  344.      (setq btnl "btenl-s")
  345.    )                    ;END IF
  346.    (if    (= lyr "S-FND-HSTEND")
  347.      (setq btnd "btend-s")
  348.    )                    ;END IF
  349.    (if    (= lyr "S-FND-VSTEND")
  350.      (setq btnl "btenl-s")
  351.    )                    ;END IF
  352.    (if    (= lyr "S-FND-VSTEND")
  353.      (setq btnd "btend-s")
  354.    )                    ;END IF
  355.    (command "_.insert" btnl p9 dscal "" tenro) ;arrow
  356.    (command "_.insert" btnd p12 dscal "" tenro2) ;tails
  357.    (command "_.text" "_s" "ROMANS" "_j" just textp3 ;LOCATION
  358.         lspace            ;HEIGHT
  359.         textro            ;ROTATION
  360.         tentag            ;LENGTH
  361.         "")
  362.    (ssdel en ss)
  363. )                    ;end while
  364. (command "_.layer" "on" "*" "" "")
  365. (setvar "clayer" layerset)
  366. (prin1)
  367. )                    ;end defun
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:03:59 | 显示全部楼层
如果我理解正确,这个主题可能会有用:
http://www.cadtutor.net/forum/showthread.php?99152-Lisp编辑多行文字&p=675107&viewfull=1#post675107
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:08:36 | 显示全部楼层
OP,你可以上传示例DWG与你的主要DWG的一部分,并解释你的代码应该在DWG内做什么。。。处理前后的样品也会很好。。。
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:17:04 | 显示全部楼层
@罗伊,我看了那个帖子,但我对编码了解不够,无法理解它的作用。
 
 
@marko这样做很有帮助。
实例图纸
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:18:10 | 显示全部楼层
 
我并没有仔细看你们的代码,但这里有一些注释代码,可以从左下角排序这些行,然后向右。希望你能从中学习。不管好坏我给我们这个任务的属性块,而不是放置文本。
 
  1. (defun c:foo (/ a hor i p1 p2 s vrt x)
  2. ;; Sort bottom left corner then head right
  3. (if (setq s (ssget '((0 . "line"))))
  4.    (progn ;; Compile a list of angle, smallest horizontal X point, largest vertical Y point
  5.    (setq s (mapcar '(lambda (x)
  6.                       (list ;; Divide angle by PI .  always returns 0 ot (/ pi 2) assuming you have horizontal and vertical lines
  7.                             (setq a (rem (angle        (setq p1 (vlax-curve-getstartpoint x))
  8.                                                 (setq p2 (vlax-curve-getendpoint x))
  9.                                          )
  10.                                          pi
  11.                                     )
  12.                             )
  13.                             ;; Return smallest horizontal X point, largest vertical Y point
  14.                             (car (vl-sort (list p1 p2)
  15.                                           '(lambda (a b)
  16.                                              (if (= 0 a)
  17.                                                (< (car a) (car b))
  18.                                                (> (cadr a) (cadr b))
  19.                                              )
  20.                                            )
  21.                                  )
  22.                             )
  23.                       )
  24.                     )
  25.                    ;; Convert selset to list
  26.                    (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  27.            )
  28.    )
  29.    ;; Separate horizontal from vertical lines
  30.    (setq s (mapcar '(lambda (x)
  31.                       (if (= 0 (car x))
  32.                         (setq hor (cons x hor))
  33.                         (setq vrt (cons x vrt))
  34.                       )
  35.                     )
  36.                    s
  37.            )
  38.    )
  39.    ;; Sort horizontal point by smallest Y value
  40.    (setq hor (vl-sort hor '(lambda (a b) (< (cadr (last a)) (cadr (last b))))))
  41.    ;; Sort vertical point by smallest X value
  42.    (setq vrt (vl-sort vrt '(lambda (a b) (< (car (last a)) (car (last b))))))
  43.    ;; Counter
  44.    (setq i 0)
  45.    ;; Show that it works
  46.    (mapcar '(lambda (x)
  47.               (entmakex        (list '(0 . "TEXT")
  48.                               '(100 . "AcDbEntity")
  49.                               (cons 8 "text")
  50.                               '(100 . "AcDbText")
  51.                               (cons 10 (cadr x))
  52.                               '(40 . 12.0)
  53.                               (cons 1 (itoa (setq i (1+ i))))
  54.                               (cons 50 (car x))
  55.                               '(72 . 1)
  56.                               (cons 11 (cadr x))
  57.                               '(73 . 2)
  58.                         )
  59.               )
  60.             )
  61.            ;; Sort list by angle
  62.            (append hor vrt)
  63.    )
  64.    ;; Here you can use '((<angle> point)....)
  65.    ;; (foreach (append hor vrt) yada yada)
  66.    )
  67. )
  68. (princ)
  69. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:26:15 | 显示全部楼层
这是我的尝试。。。请注意,我在DWG中缺少一些块,所以我无法获得所需的结果。。。你必须进一步测试它。。。我希望我能尽我所能帮助你。。。M、 R。
td新。lsp
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:32:14 | 显示全部楼层
我想按数字顺序给这些行贴上标签,但我似乎不知道该怎么做。在所附的cad中有一个我正在谈论的示例。我想把它作为一个窗口,一次给它们贴上标签。直线和多段线。
新建块。图纸
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:35:21 | 显示全部楼层
你为什么放弃这条线索
http://www.cadtutor.net/forum/showthread.php?101822-数字顺序起点帮助
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 16:46:22 | 显示全部楼层
是的,这是一个线程,我开始关于这一点,但它在错误的方向与我所需要的。我希望得到更简单的东西。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:52:08 | 显示全部楼层
通过使用带有SSGET的“F”围栏选项,可以非常简单地完成此操作,它将按线路顺序进行选择。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 19:53 , Processed in 0.501210 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表