[原创]不规则多边形区域填充的代码
<p>在论坛学到了不少知识,也应该做点回报。</p><p>填充不是很快,别人画的偶然会出现程序无影响的现象,几百个填了近一个小时。发出来大家看看。但我自己用多条多段线画的不规则多边形可以很快填充。其中有几个窗口界面上的就不发了,只发了关键代码。</p><p>其中,Listbox1是从Excel取过来的数据。</p><p>程序可以利用查找图中的文字内容与EXcel取的数据对比,如相符,则填充文字所在区域周围的不规则的多边形。多边形里面的孤岛不填充。</p><p>代码如下:</p><p>Dim layerName As String<br/>Dim entry As AcadLayer<br/>Dim ghtc As Boolean<br/>Dim colo As Integer</p><p>layerName = ""</p><p>For Each entry In ThisDrawing.Layers<br/>layerName = entry.Name<br/>If layerName = "填充" Then<br/>ghtc = True<br/>ThisDrawing.ActiveLayer = entry<br/>Exit For<br/>End If<br/>Next</p><p>If ghtc <> True Then</p><p>Set entry = ThisDrawing.Layers.Add("填充")<br/>ThisDrawing.ActiveLayer = entry</p><p>End If<br/>entry.color = acGreen ' 指定"填充"图层的颜色为绿色<br/>colo = 3<br/>ThisDrawing.SendCommand "_-color" & vbCr & colo & vbCr<br/> Do<br/> If COMMANDNAME = "" Then<br/> Sleep 50<br/> Exit Do<br/> End If<br/> Loop</p><p>On Error GoTo errHandle</p><p>Dim Found<br/>'Dim pt As Variant<br/>Dim MyObject As AcadObject<br/>Dim MyCollection As AcadModelSpace</p><p>UserForm1.TextBox1.text = ""<br/>UserForm1.Hide<br/>UserForm3.Show<br/> <br/>Found = False ' 设置变量初始值。</p><p>ZoomExtents</p><p>Set MyCollection = ThisDrawing.ModelSpace</p><p>For i = 0 To ListBox1.ListCount - 1</p><p> DoEvents<br/> <br/> For Each MyObject In MyCollection ' 对每个成员作一次迭代。<br/> 'MsgBox MyObject.ObjectName<br/> <br/> If MyObject.ObjectName = "AcDbText" Then<br/> DoEvents<br/> Found = False<br/> <br/> If Left(MyObject.textString, 13) = ListBox1.List(i, 0) Then<br/> ' 如果 Text 属性值等于设定值则。<br/> Found = True ' 将变量 Found 的值设成 True。<br/> MyObject.GetBoundingBox , MinPoint<br/> magnification = 2500</p><p> ThisDrawing.Application.ZoomCenter pt, magnification</p><p> ThisDrawing.SendCommand "_-bhatch" & vbCr & "p" & vbCr & "solid" & vbCr & MinPoint(0) & "," & MinPoint(1)& vbCr & vbCr <br/> <br/> Do<br/> If COMMANDNAME = "" Then<br/> Sleep 50<br/> 'MsgBox "正在填充" & ListBox1.List(i, 0) & "!"<br/> Exit Do<br/> End If<br/> Loop</p><p> ZoomExtents</p><p> Exit For<br/> <br/> Else<br/> Found = False<br/> End If<br/> End If<br/> UserForm3.Label1.Caption = ListBox1.List(i, 0) & vbCrLf & "完成" & Round((i + 1) / ListBox1.ListCount, 2) * 100 & "%"<br/> Next<br/> <br/> colo = 70 + (i Mod 4) * 10<br/> ThisDrawing.SendCommand "_-color" & vbCr & colo & vbCr<br/> Do<br/> If COMMANDNAME = "" Then<br/> Sleep 50<br/> Exit Do<br/> End If<br/> Loop<br/> <br/> If Found = False Then<br/> Dim xbtext As String<br/> xbtext = TextBox1.text<br/> TextBox1.text = xbtext & ListBox1.List(i, 0) & vbCrLf<br/> End If</p><p>DoEvents<br/>Next</p><p>errHandle:<br/> If Err.Number = -2145386493 Then<br/> MsgBox "填充定义边界未闭合!", vbCritical<br/> End If<br/> Err.Clear<br/> <br/> UserForm3.Hide<br/> UserForm1.Show<br/> <br/></p>
页:
[1]