请教斑主及各位大虾与面域有关的问题
<P>斑主及大虾们:</P><P> 本人对VBA+CAD只知皮毛, 附图中的AB两个问题能解决吗?,怎么解决??</P>
<P> 求求各位了,国庆长假我作东</P> <P>Sub getArea()</P>
<P> Dim objEnts() As AcadEntity<BR> Dim objEnt As AcadEntity<BR> Dim ssSet As AcadSelectionSet<BR> Dim iCount As Long<BR> Dim lngCount As Long<BR> Dim objRegion1 As Variant<BR> Dim objRegion As AcadRegion</P>
<P><BR> lngCount = ThisDrawing.SelectionSets.Count<BR> If lngCount > 0 Then<BR> For iCount = lngCount - 1 To 0 Step -1<BR> Set ssSet = ThisDrawing.SelectionSets(iCount)<BR> If ssSet.Name = "SSSS" Then ssSet.Delete<BR> Next<BR> End If</P>
<P><BR> Set ssSet = ThisDrawing.SelectionSets.Add("SSSS")</P>
<P> ssSet.SelectOnScreen<BR> <BR> lngCount = ssSet.Count<BR> <BR> If lngCount > 0 Then<BR> ReDim objEnts(0 To lngCount - 1)<BR> For iCount = 0 To lngCount - 1<BR> Set objEnts(iCount) = ssSet(iCount)<BR> Next<BR> End If<BR> <BR> objRegion1 = ThisDrawing.ModelSpace.AddRegion(objEnts)<BR> For iCount = LBound(objRegion1) To UBound(objRegion1)<BR> Set objRegion = objRegion1(iCount)<BR> 'dblArea1 = dblArea1 + objRegion.Area</P>
<P> MsgBox Cstr(objRegion.Area)<BR> Next<BR> ssSet.Delete<BR> <BR> Set objEnt = Nothing<BR> Set ssSet = Nothing<BR> Set objRegion = Nothing<BR> <BR>End Sub<BR></P> <P>问题B也是比较简单的,既然你有各点的坐标,先把圆弧也当成直线加入到轻量多段线中去,然后设置它的凸度就可以了。凸度计算公式是2*H/D,D为弦长,H为圆弧顶点到弦的距离。逆时针取正值,顺时针取负值。</P>
<P>以下代码画一段轻量多段线,第二段为圆弧:</P>
<P>Sub test()</P>
<P> Dim oLSP As AcadLWPolyline<BR> Dim p(0 To 7) As Double<BR> <BR> p(0) = 0#: p(1) = 0#<BR> p(2) = 100#: p(3) = 0#<BR> p(4) = 100#: p(5) = 100#<BR> p(6) = 0#: p(7) = 100#<BR> <BR> Set oLSP = ThisDrawing.ModelSpace.AddLightWeightPolyline(p)<BR> <BR> oLSP.SetBulge 1, 1<BR> <BR> Set oLSP = Nothing</P>
<P> <BR>End Sub<BR></P> <P>非常感谢<A name=59625><FONT color=#000066><B>songzhi</B></FONT></A> 第二个问题已解决.</P>
<P>第一个问题通过屏幕选择相关的对象后,运行到</P>
<P> objRegion1 = cad2.ModelSpace.AddRegion(objEnts) 这句时出现错误:</P>
<P>实时错误'-2147418113(8000ffff)':</P>
<P>对象'Addregion' 的方法IAcadModeSpace'失败</P>
<P>还望赐教</P> 上面的代码我是在ACAD2004 的VBA环境下测试的,没有在VB下试过。你说的问题我搜索了一下网上的相关资料。据资料介绍你可以编译后再试试看! <P>用 ThisDrawing.SendCommand Chr(3) & Chr(3) & "-boundary" & vbCr & basePMN(0) & "," & basePMN(1) & vbCr & vbCr</P>
<P>可以自动生成一闭合多义线,即可求面积!</P>
页:
[1]