乐筑天下

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

问了几次了,多段线的长度怎么获得

[复制链接]

17

主题

38

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2003-6-12 21:55:00 | 显示全部楼层 |阅读模式
劳烦版主回答了几次,
但我运行时却报错呀
贴出我的源程序
  1. Sub Count_len()
  2.     ' 创建新的选择集
  3.     Dim sset As AcadSelectionSet
  4. For i = 0 To ThisDrawing.SelectionSets.Count - 1
  5. ThisDrawing.SelectionSets.Item(i).Clear
  6. ThisDrawing.SelectionSets.Item(i).Delete
  7. Next
  8. On Error Resume Next
  9.     Set sset = ThisDrawing.SelectionSets.Add("SS0")
  10.    sset.SelectOnScreen
  11.      Dim entry As AcadEntity
  12.     Dim l_text As String
  13.     Dim l_l As Double
  14.     Dim Arc_count As Integer
  15.     Dim Line_count As Integer
  16.     For Each entry In sset
  17.         '如果是多段线或曲线的长度,就不行了
  18.         If entry.ObjectName = "AcDbArc" Then
  19.         l_text = l_text & "+" & entry.ArcLength
  20.         l_l = l_l + entry.ArcLength
  21.         Arc_count = Arc_count + 1
  22.         ElseIf entry.ObjectName = "AcDbLine" Then
  23.         l_text = l_text & "+" & entry.Length
  24.         l_l = l_l + entry.Length
  25.         Line_count = Line_count + 1
  26.         End If
  27.     Next entry
  28. ThisDrawing.Utility.Prompt vbCrLf & Arc_count & "个弧," & Line_count & "条直线. 共" & Arc_count + Line_count & "个对象." & vbCrLf & l_text & "=" & l_l & vbCrLf
  29. End Sub
回复

使用道具 举报

17

主题

38

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
106
发表于 2003-6-12 21:58:00 | 显示全部楼层
谢谢
回复

使用道具 举报

0

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
2
发表于 2003-7-10 01:00:00 | 显示全部楼层
用2004吧,里面可以直接调用pline的length属性。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-7-10 06:57:00 | 显示全部楼层
导入vlax.cls类后,在thisdrawing模块中输入以下代码,运行则可:
  1. Sub GetLength()
  2.     Dim obj As AcadEntity
  3.     Dim pnt As Variant
  4.     ThisDrawing.Utility.GetEntity obj, pnt, "选取曲线:"
  5.     Dim leng As Double
  6.     leng = GetCurveLength(obj)
  7.     MsgBox "所选曲线的长度为 " & leng, , "乐筑天下VBA示例"
  8. End Sub
  9. Public Function GetCurveLength(curve As AcadEntity) As Double
  10.     Dim obj As VLAX, retVal
  11.    
  12.     Set obj = New VLAX
  13.     obj.EvalLispExpression "(setq curve (handent " & Chr(34) & curve.Handle & Chr(34) & "))"
  14.     obj.EvalLispExpression "(setq curvelength (vlax-curve-getDistAtParam curve " & _
  15.                            "(vlax-curve-getEndParam curve)))"
  16.     retVal = obj.GetLispSymbol("curvelength")
  17.     obj.NullifySymbol "curve", "curvelength"
  18.     Set obj = Nothing
  19.     GetCurveLength = CDbl(retVal)
  20. End Function
回复

使用道具 举报

gzy

25

主题

1118

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1221
发表于 2003-9-22 22:27:00 | 显示全部楼层
可一先分解再获得嘛
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 16:36 , Processed in 1.688881 second(s), 62 queries .

© 2020-2025 乐筑天下

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