请教各位大侠,关于polyline面积的问题,在线等待
本帖最后由 作者 于 2009-4-9 16:06:10 编辑 <br /><br /> <p>请教各位大侠:</p><p>Sub Example_Layer() </p><p>'图在附件中,关于面积自动注记的一个小程序,在cad中绘制一个闭合的pl线,使用此程序自动注记面积<br/> Dim x, y As Double<br/> Dim coor() As Double<br/> Dim pt(2) As Double '注记坐标<br/> 'Dim pl As AcadObject<br/> Dim pl As AcadEntity<br/> Dim pl1 As AcadPolyline<br/> Dim layerObj As AcadLayer<br/> Dim sset As AcadSelectionSet<br/> Dim zjtxt As AcadText<br/> 'On Error Resume Next<br/> If Not IsNull(ThisDrawing.SelectionSets.Item("this")) Then<br/> Set sset = ThisDrawing.SelectionSets.Item("this")<br/> sset.Delete<br/> End If<br/> Set sset = ThisDrawing.SelectionSets.Add("this")<br/> sset.SelectOnScreen<br/> <br/> 'Set layerObj = ThisDrawing.Layers.Add("ABC")<br/> Dim i As Integer<br/> <br/> For Each pl In sset<br/> 'If entity.Layer = Trim(UserForm1.ComboBox1.Text) Then<br/> i = 0<br/> If pl.ObjectName = "AcDbPolyline" And pl.Closed = True Then<br/> i = i + 1<br/> <br/> <br/> <em><strong><font color="#ee3d11"> '这个地方出问题了,怎样解决?<br/> <br/> Set pl1 = pl<br/></font></strong></em> <br/> <br/> coor = pl.Coordinates<br/> End If<br/> <br/> For i = 0 To (UBound(coor) - 1) Step 2<br/> 'ss = ss + Str(coor(i)) + vbCrLf<br/> 'ss = ss + Str(UBound(coor))<br/> x = x + coor(i)<br/> y = y + coor(i + 1)<br/> Next i<br/> pt(0) = x / ((UBound(coor) + 1) / 2)<br/> pt(1) = y / ((UBound(coor) + 1) / 2)<br/> pt(2) = 0<br/> Set zjtxt = ThisDrawing.ModelSpace.AddText(Str(pl1.Area), pt, 3)<br/> 'End If<br/> Next<br/> 'MsgBox Str(x / 4) + "," + Str(y / 4)<br/>End Sub</p><p></p> <p>我已经解决了这个问题,如下即可:</p><p>本人在贵网站学到了很多知识,为了感谢贵网站,本人把修改完整的代码放在下面,调试通过</p><p>Sub Example_Layer() </p><p>'图在附件中,关于面积自动注记的一个小程序,在cad中绘制一个闭合的pl线,使用此程序自动注记面积<br/> Dim x, y As Double<br/> Dim coor() As Double<br/> Dim pt(2) As Double '注记坐标<br/> 'Dim pl As AcadObject<br/> Dim pl As AcadEntity<br/> Dim pl1 As AcadPolyline<br/> Dim layerObj As AcadLayer<br/> Dim sset As AcadSelectionSet<br/> Dim zjtxt As AcadText<br/> 'On Error Resume Next<br/> If Not IsNull(ThisDrawing.SelectionSets.Item("this")) Then<br/> Set sset = ThisDrawing.SelectionSets.Item("this")<br/> sset.Delete<br/> End If<br/> Set sset = ThisDrawing.SelectionSets.Add("this")<br/> sset.SelectOnScreen<br/> <br/> 'Set layerObj = ThisDrawing.Layers.Add("ABC")<br/> Dim i As Integer<br/> <br/> For Each pl In sset<br/> 'If entity.Layer = Trim(UserForm1.ComboBox1.Text) Then<br/> i = 0<br/> If pl.ObjectName = "AcDbPolyline" And pl.Closed = True Then<br/> i = i + 1<br/> <br/> <br/> <em><strong><font color="#ee3d11"> '这个地方出问题了,怎样解决?<br/> <br/> ’ Set pl1 = pl<br/></font></strong></em> <br/> <br/> coor = pl.Coordinates<br/> End If<br/> <br/> For i = 0 To (UBound(coor) - 1) Step 2<br/> 'ss = ss + Str(coor(i)) + vbCrLf<br/> 'ss = ss + Str(UBound(coor))<br/> x = x + coor(i)<br/> y = y + coor(i + 1)<br/> Next i<br/> pt(0) = x / ((UBound(coor) + 1) / 2)<br/> pt(1) = y / ((UBound(coor) + 1) / 2)<br/> pt(2) = 0<br/> Set zjtxt = ThisDrawing.ModelSpace.AddText(Str(pl.Area), pt, 3)<br/> 'End If<br/> Next</p><p>exit sub<br/> 'MsgBox Str(x / 4) + "," + Str(y / 4)<br/>End Sub</p>
页:
[1]