明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5798|回复: 18

求助!!区域内的多段线自动编号标注长度

  [复制链接]
发表于 2012-9-24 21:15 | 显示全部楼层 |阅读模式
1明经币
各位大侠:
小弟在处理图件的时候,遇到十分多的线需要编号(如A1,A2,A3。。。。)并且统计出个多段线的长度,工作量是否巨大,是故恳请各位大侠赐教,看是否能够自动对区域内的线自动编号(编号的顺序没有关系)并标注(或者统计)出相应线段的长度。
如图:


悬赏是个噱头,还望不弃!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

试试,除MLINE其它任意曲线均可
发表于 2012-9-24 21:15 | 显示全部楼层
本帖最后由 x_s_s_1 于 2012-9-25 20:27 编辑

试试,除MLINE其它任意曲线均可

  1. ;;;BY X_S_S_1
  2. (vl-load-com)
  3. (defun c:test1 (/
  4.                 ss
  5.                 qz
  6.                 lst
  7.                 length_lst
  8.                 en
  9.                 pt_lst
  10.                 curve-obj
  11.                 dist
  12.                 s_lst
  13.                 n
  14.                 pt
  15.                 tl
  16.                )
  17.   (defun x_ssn (ss / n lst)
  18.     (repeat (setq N (sslength ss))
  19.       (setq LST (cons (ssname SS (setq N (1- N))) LST))
  20.     )
  21.   )
  22.   (defun emk_t (layer pt1 pt2 text ang n72 n73 h /)
  23.     (entmake (list '(0 . "text")
  24.                    '(100 . "AcDbEntity")
  25.                    (cons 8 layer)
  26.                    '(100 . "AcDbText")
  27.                    (cons 10 pt1)
  28.                    (cons 1 text)
  29.                    (cons 40 h)
  30.                    '(41 . 0.75)
  31.                    '(7 . "standard")
  32.                    (cons 72 n72)
  33.                    (cons 11 pt2)
  34.                    (cons 50 ang)
  35.                    (cons 73 n73)
  36.              ) ;_ 结束list
  37.     ) ;_ 结束entmake
  38.   ) ;_ 结束defun
  39.   (SETQ SS (SSGET '((0 . "*LINE,CIRCLE,ARC,ELLIPSE"))))
  40.   (setq qz (getstring "\n前缀:"))
  41.   (setq lst (x_ssn ss))
  42.   (setq        length_lst
  43.          (mapcar '(lambda (en)
  44.                     (vlax-curve-getDistAtParam
  45.                       en
  46.                       (vlax-curve-getEndParam en)
  47.                     )
  48.                   )
  49.                  lst
  50.          )
  51.   )
  52.   (setq
  53.     pt_lst (mapcar '(lambda (curve-obj dist)
  54.                       (vlax-curve-getPointAtDist curve-obj (/ dist 2))
  55.                     )
  56.                    lst
  57.                    length_lst
  58.            )
  59.   )
  60.   (setq s_lst nil)
  61.   (repeat (setq n (length length_lst))
  62.     (setq s_lst        (cons (strcat qz
  63.                               (itoa n)
  64.                               "="
  65.                               (rtos (nth (1- n) length_lst) 2 2)
  66.                       )
  67.                       s_lst
  68.                 )
  69.     )
  70.     (setq n (1- n))
  71.   )
  72.   (mapcar '(lambda (pt tl) (emk_t "0" pt pt tl 0 1 0 250))
  73.           pt_lst
  74.           s_lst
  75.   )
  76. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

发表于 2012-9-24 23:21 | 显示全部楼层
  1. Sub aa()
  2. Dim ss As AcadSelectionSet
  3. Dim lobj As AcadLine
  4. Set ss = ThisDrawing.SelectionSets.Add(Rnd() & "abfc")
  5. Dim filter(0) As Integer
  6. Dim data(0) As Variant
  7. Dim pt3(0 To 2) As Double
  8. Dim l As Double
  9. Dim pt1 As Variant
  10. Dim pt2 As Variant
  11. filter(0) = 0
  12. data(0) = "line"
  13. ss.SelectOnScreen filter, data
  14. For i = 1 To ss.Count
  15. Set lobj = ss(i - 1)
  16. pt1 = lobj.StartPoint
  17. pt2 = lobj.EndPoint
  18. pt3(0) = (pt1(0) + pt2(0)) / 2
  19. pt3(1) = (pt1(1) + pt2(1)) / 2
  20. pt3(2) = 0
  21. l = Round(lobj.Length, 2)
  22. ThisDrawing.ModelSpace.AddText "a" & i & "=" & l, pt3, l / 15
  23. ThisDrawing.ModelSpace(ThisDrawing.ModelSpace.Count - 1).color = acRed
  24. Next
  25. End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2012-9-25 09:22 | 显示全部楼层
sscylh 发表于 2012-9-24 23:21

谢谢大侠
但是现在这个好像只能选择直线而我的全是多段线,劳大侠在费心下
回复

使用道具 举报

发表于 2012-9-25 16:37 | 显示全部楼层
TimeT 发表于 2012-9-25 09:22
谢谢大侠
但是现在这个好像只能选择直线而我的全是多段线,劳大侠在费心下

多段线的有点难,因为里面还有圆弧什么的,长度不好计算

点评

用vlax-curve函数可以解决  发表于 2012-9-25 16:40
回复

使用道具 举报

发表于 2012-9-25 19:15 | 显示全部楼层
革天明 发表于 2012-9-25 16:37
多段线的有点难,因为里面还有圆弧什么的,长度不好计算

不会,长度可以直接调用其属性得到,不需要计算
对了,你的那个问题怎么样了?解决了吗?还有什么不对的吗?
回复

使用道具 举报

发表于 2012-9-25 19:53 | 显示全部楼层
  1. Sub aa()
  2. Dim ss As AcadSelectionSet
  3. Dim lobj As AcadLine
  4. Dim lwobj As AcadLWPolyline
  5. Set ss = ThisDrawing.SelectionSets.Add(Rnd() & "abff8FDdffddc")
  6. Dim filter(0 To 3) As Integer
  7. Dim data(0 To 3) As Variant
  8. Dim pt3(0 To 2) As Double
  9. Dim l As Double
  10. Dim pt1 As Variant
  11. Dim pt2 As Variant
  12. filter(0) = -4
  13. data(0) = "<or"
  14. filter(1) = 0
  15. data(1) = "line"
  16. filter(2) = 0
  17. data(2) = "lwpolyline"
  18. filter(3) = -4
  19. data(3) = "or>"
  20. ss.SelectOnScreen filter, data
  21. For i = 1 To ss.Count
  22. If ss(i - 1).ObjectName = "AcDbLine" Then
  23. Set lobj = ss(i - 1)
  24. pt1 = lobj.StartPoint
  25. pt2 = lobj.EndPoint
  26. pt3(0) = (pt1(0) + pt2(0)) / 2
  27. pt3(1) = (pt1(1) + pt2(1)) / 2
  28. pt3(2) = 0
  29. l = Round(lobj.Length, 2)
  30. ThisDrawing.ModelSpace.AddText "a" & i & "=" & l, pt3, l / 15
  31. ThisDrawing.ModelSpace(ThisDrawing.ModelSpace.Count - 1).color = acRed
  32. ElseIf ss(i - 1).ObjectName = "AcDbPolyline" Then
  33. Set lwobj = ss(i - 1)
  34. pt1 = lwobj.Coordinate(0)
  35. pt2 = lwobj.Coordinate(1)
  36. pt3(0) = (pt1(0) + pt2(0)) / 2
  37. pt3(1) = (pt1(1) + pt2(1)) / 2
  38. pt3(2) = 0
  39. l = Round(lwobj.Length, 2)
  40. ThisDrawing.ModelSpace.AddText "a" & i & "=" & l, pt3, l / 15
  41. ThisDrawing.ModelSpace(ThisDrawing.ModelSpace.Count - 1).color = acRed
  42. End If
  43. Next
  44. End Sub

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 2012-9-25 21:53 | 显示全部楼层
本帖最后由 TimeT 于 2012-9-25 21:56 编辑

谢谢各位大侠!小弟还是要继续加强学习,不能一直做伸手党,很是汗颜。
回复

使用道具 举报

发表于 2012-9-26 11:57 | 显示全部楼层
真的很好用耶可以增加文字大小的选项
回复

使用道具 举报

发表于 2012-9-26 14:49 | 显示全部楼层
很实用的一个工具!赞!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 18:56 , Processed in 0.377560 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表