arden 发表于 2007-1-6 20:58:00

[求助] 请高手请入

<p>在用Pline画线时按提示</p><p><font color="#ff0000">指定指定下一个点或 [</font><a name="bogus"><font color="#ff0000">圆弧</font></a><font color="#ff0000">(A)/</font><a name="bogus"><font color="#ff0000">闭合</font></a><font color="#ff0000">(C)/</font><a name="bogus"><font color="#ff0000">半宽</font></a><font color="#ff0000">(H)/</font><a name="bogus"><font color="#ff0000">长度</font></a><font color="#ff0000">(L)/</font><a name="bogus"><font color="#ff0000">放弃</font></a><font color="#ff0000">(U)/</font><a name="bogus"><font color="#ff0000">宽度</font></a><font color="#ff0000">(W)]:<em class="Emphasis">指定点 (2) 或输入选项</em>
                        下一个点或 [</font><a name="bogus"><font color="#ff0000">圆弧</font></a><font color="#ff0000">(A)/</font><a name="bogus"><font color="#ff0000">闭合</font></a><font color="#ff0000">(C)/</font><a name="bogus"><font color="#ff0000">半宽</font></a><font color="#ff0000">(H)/</font><a name="bogus"><font color="#ff0000">长度</font></a><font color="#ff0000">(L)/</font><a name="bogus"><font color="#ff0000">放弃</font></a><font color="#ff0000">(U)/</font><a name="bogus"><font color="#ff0000">宽度</font></a><font color="#ff0000">(W)]:<em class="Emphasis">指定点 (2) 或输入选项</em></font>
        </p><p>如果输入 A&nbsp; 即画的多段线中有的部份是圆弧,请问怎样用程序的方法来分别出带圆弧的多段线和不带圆弧的多段线,有相应的不同属性吗?</p>

arden 发表于 2007-1-6 21:21:00

<p>刚才在本站找到如下代码应该能实现,可是我不懂lisp,哪位大侠帮忙用vba解释一下</p><p>(defun checkarc (ename)<br/>&nbsp;&nbsp;(setq obj (vlax-ename-&gt;vla-object ename))<br/>&nbsp;&nbsp;(setq plist (vlax-safearray-&gt;list<br/>(vlax-variant-value<br/>&nbsp;&nbsp;(vla-get-coordinates obj))))<br/>&nbsp;&nbsp;(setq n 0 bu nil)<br/>&nbsp;&nbsp;(repeat (/ (length plist) 2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;(if (/= (vla-getbulge obj n) 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(setq bu T)<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;(setq n (+ n 1))<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;bu<br/>) </p>

arden 发表于 2007-1-6 21:47:00

<pre><font color="#000080">' 按照起点、终点和凸度计算多段线中某一段的长度
Function GetArcLeng(PointS As Variant, PointE As Variant, Bugle As Double) As Double
    Dim Angle As Double
    Dim Radius As Double
    Dim Length As Double
    Dim Dist As Double
    Dim i As Integer
    ' 计算起点到终点的长度
    For i = LBound(PointS) To UBound(PointS)
      Dist = Dist + ((PointS(i) - PointE(i)) ^ 2)
    Next
    Length = Sqr(Dist)
    ' 如果凸度为0,则为直线段,所以起点到终点的长度就是需要的长度
    If Bugle = 0 Then
      GetArcLeng = Length
    Else
      ' 如果凸度不为零,则计算弧段的长度。按照凸度的定义,凸度为包角的1/4的正切值。
      Angle = 4 * Atn(Abs(Bugle))
      ' 计算弧段的半径
      Radius = (Length / 2) / Sin(Angle / 2)
      ' 计算弧段的长度
      GetArcLeng = Radius * Angle
    End If
End Function</font></pre><pre><font color="#000080"></font></pre><pre><font color="#000080">中的Bugle怎样得到其值?</font></pre>

mccad 发表于 2007-1-7 14:01:00

<p>凸度可从多段线的属性中取得,自己看看。</p>

gtj116600 发表于 2013-5-31 16:42:46

计算多义线的凸度,好东东
页: [1]
查看完整版本: [求助] 请高手请入