jicqj 发表于 2010-6-14 21:11:00

获得多段线分段长度的vba

<p><font face="Verdana">我们知道 对象的长度可以用 object.length 获得,但是对于多段线,只能获得合计的长度,如何显示每段的长度呢。这是我的小程序,希望对大家有帮助。</font></p>
<p>&nbsp;</p>
<p><font face="Verdana">Function PLinelength(ent As AcadEntity) As String<br/>On Error GoTo errHandle<br/>Dim i As Integer<br/>Dim myPointSta As Variant, myPointEnd As Variant<br/>Dim myLength As Double</font></p>
<p><font face="Verdana">i = 1<br/>myPointSta = ent.Coordinate(0)</font></p><font face="Verdana">
<p>&nbsp;Do<br/>myPointEnd = ent.Coordinate(i)<br/>myLength = VBA.Sqr((myPointSta(0) - myPointEnd(0)) ^ 2 + (myPointSta(1) - myPointEnd(1)) ^ 2)</p>
<p>&nbsp;</p>
<p>myPointSta = myPointEnd<br/>PLinelength = IIf(PLinelength = "", myLength, PLinelength &amp; "+" &amp; myLength)<br/>i = i + 1<br/>Loop Until Err</p>
<p>errHandle:<br/><br/>End Function</p>
<p>&nbsp;</p>
<p><font face="Verdana">Sub 测试程序()</font></p>
<p><font face="Verdana">'////////////////////////////////////////////////<br/>&nbsp;&nbsp;&nbsp; Dim ssetObj As AcadSelectionSet<br/>&nbsp;&nbsp;&nbsp;&nbsp; Dim tCONUT As Integer<br/>&nbsp;&nbsp;&nbsp; tCONUT = 0<br/>&nbsp;&nbsp;&nbsp; tCONUT = ThisDrawing.SelectionSets.Count<br/>&nbsp;&nbsp;&nbsp;&nbsp; For ti = 0 To tCONUT - 1 '删除所有的选择集<br/>&nbsp;&nbsp;&nbsp; Set ssetObj = ThisDrawing.SelectionSets.Item(0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssetObj.Delete<br/>&nbsp;&nbsp;&nbsp; Next ti</font></p>
<p><font face="Verdana">'//////////////////////////////////////////////////<br/>Set sel = ThisDrawing.SelectionSets.Add("ssel")&nbsp; </font></p>
<p><font face="Verdana">If Err Then<br/>Err.Clear<br/>Set sel = ThisDrawing.SelectionSets.Item("ssel") </font></p>
<p><font face="Verdana">End If<br/><br/>Lab_star:</font></p>
<p><font face="Verdana">sel.SelectOnScreen</font></p>
<p><font face="Verdana">Dim ent As AcadEntity<br/><br/>For Each ent In sel<br/></font></p><font face="Verdana">
<p>MsgBox PLinelength(ent)<br/>Next ent</p>
<p><br/>End Sub</font></p>
<p><font face="Verdana"></font></font>&nbsp;</p>

jdzhqddzh 发表于 2020-8-5 17:53:51

有圆弧段的结果不正确。

jicqj 发表于 2010-6-23 16:44:00

<p>自己顶一下</p>

hhh454 发表于 2010-10-13 21:17:00

顶起来,我也不太会

xinght99 发表于 2010-11-9 07:51:00

好的兄弟,有志气

hhh454 发表于 2010-11-9 10:24:00

我想要一个lisp的获得多段线的分段长度

cuyongping 发表于 2011-11-11 11:39:50

我也想要一个lisp的获得多段线的分段长度!呵呵希望有人提供!

yshf 发表于 2011-11-11 20:44:27

有圆弧段的结果不正确。

jicqj 发表于 2011-11-12 17:02:18

yshf 发表于 2011-11-11 20:44 static/image/common/back.gif
有圆弧段的结果不正确。

看来算法要改进 你有什么好办法

yshf 发表于 2011-11-12 22:49:44

当多段线中有某段为圆弧时,其凸度(弓高/半弦长)不为零,由此可得到半径、圆心角,也就能得到该段的长度。

随风缘 发表于 2013-4-25 01:30:52

先学习一下
页: [1] 2
查看完整版本: 获得多段线分段长度的vba