明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2174|回复: 9

如何计算指定线加总长度?

[复制链接]
发表于 2004-9-23 11:29:00 | 显示全部楼层 |阅读模式
如何计算指定线加总长度?



可以选定N条线(直线、曲线、多线段、圆弧......),然后计算它们的长度和。
发表于 2004-9-23 11:33:00 | 显示全部楼层
看看置顶的Vlax类
发表于 2004-9-23 17:32:00 | 显示全部楼层
工具-查询-列表显示


可以显示每条线的长度
发表于 2004-10-29 21:33:00 | 显示全部楼层
顶一下,VBA怎么实现?
发表于 2004-10-30 09:49:00 | 显示全部楼层
直线可以用length取得,其它通过取得坐标计算线长,累加就行了
发表于 2004-10-30 11:03:00 | 显示全部楼层
这样是不是对spline的精度偏差较大?


length只能对Line和Arc有效。
发表于 2004-10-30 17:13:00 | 显示全部楼层
急,我再顶!
发表于 2004-10-30 20:59:00 | 显示全部楼层
  1. Sub GetSelectCurveLength()
  2.        Dim SS As AcadSelectionSet
  3.        Set SS = CreateSelectionSet
  4.        Dim varType As Variant
  5.        Dim varData As Variant
  6.        BuildFilter varType, varData, 0, _
  7.                              "ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE,POLYLINE,SPLINE"
  8.        SS.SelectOnScreen varType, varData
  9.        Dim objEntity As AcadEntity
  10.        Dim dblLength As Double
  11.        For Each objEntity In SS
  12.                dblLength = dblLength + GetCurveLength(objEntity)
  13.        Next
  14.        MsgBox "所选曲线的总长度为 " & dblLength, , "明经通道VBA示例"
  15. End Sub
  16. Public Function GetCurveLength(curve As AcadEntity) As Double
  17.        Dim obj As VLAX, retVal
  18.       
  19.        Set obj = New VLAX
  20.       
  21.        obj.EvalLispExpression "(setq curve (handent " & Chr(34) & curve.Handle & Chr(34) & "))"
  22.        obj.EvalLispExpression "(setq curvelength (vlax-curve-getDistAtParam curve " & _
  23.                                                      "(vlax-curve-getEndParam curve)))"
  24.        retVal = obj.GetLispSymbol("curvelength")
  25.        obj.NullifySymbol "curve", "curvelength"
  26.       
  27.        '释放内存,函数返回
  28.        Set obj = Nothing
  29.        GetCurveLength = CDbl(retVal)
  30. End Function
  31. Public Sub BuildFilter(typeArray, dataArray, ParamArray gCodes())
  32.        Dim fType() As Integer, fData()
  33.        Dim index As Long, i As Long
  34.       
  35.        index = LBound(gCodes) - 1
  36.                
  37.        For i = LBound(gCodes) To UBound(gCodes) Step 2
  38.                index = index + 1
  39.                ReDim Preserve fType(0 To index)
  40.                ReDim Preserve fData(0 To index)
  41.                fType(index) = CInt(gCodes(i))
  42.                fData(index) = gCodes(i + 1)
  43.        Next
  44.        typeArray = fType: dataArray = fData
  45. End Sub
  46. Function CreateSelectionSet(Optional SSetName As String = "mjtd") As AcadSelectionSet
  47.        On Error Resume Next
  48.        ThisDrawing.SelectionSets(SSetName).Delete
  49.        Set CreateSelectionSet = ThisDrawing.SelectionSets.Add(SSetName)
  50. End Function
发表于 2004-10-31 11:56:00 | 显示全部楼层
Dim obj As VLAX, retVal

Set obj = New VLAX
????????????是不是少东西? 我不太懂,请多指教。谢谢!!
发表于 2004-10-31 12:12:00 | 显示全部楼层
二楼不是已经说过了,用VLAX类,请查看置顶贴子。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 00:38 , Processed in 0.208511 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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