szj612 发表于 2008-6-21 14:22:00

[求助]如何把lwpolyline转换成region?

<p>请教各位高手,在VBA中,怎样用代码把封闭的lwpolyline转换成region?或者在lwpolyline内找出一个点,使它相当于region.centroid。谢谢了!</p>

兰州人 发表于 2008-6-21 15:37:00

<p>在autocad的vba帮助文件中有region的帮助实例。</p><p>注意:在帮助文件中的例子是弧和直线,放到一变量数组中,你也要把lwpolyline放到region(变体变量)中即可。</p>

szj612 发表于 2008-6-21 18:12:00

<p>谢谢楼上解答。</p><p>&nbsp;&nbsp;&nbsp;&nbsp; 但我的问题还是没有解决。我的目的是在屏幕上选择对象,然后遍历所有对象,先处理一些事后,再转成面域后继续处理后面的事情。我把我的代码简化后贴在下面,请前辈们帮忙修改一下。再次感谢!</p><p>Public Sub ss()<br/>Dim sel As AcadSelectionSet<br/>Dim ko As Variant<br/>Dim reg As AcadRegion<br/>Set sel = ThisDrawing.SelectionSets.Add("s01")<br/>sel.SelectOnScreen<br/>For Each ko In sel<br/>Set reg = ThisDrawing.ModelSpace.AddRegion(ko)<br/>reg.color = acBlue<br/>Next<br/>sel.Delete<br/>End Sub</p>

兰州人 发表于 2008-6-22 12:25:00

本帖最后由 作者 于 2008-6-22 12:31:56 编辑 <br /><br /> <pre class="Code">首先分析一下VBA的帮助文件 </pre><pre class="Code">Sub Example_AddRegion()<br/>&nbsp;&nbsp;&nbsp;&nbsp;' This example creates a region from an arc and a line.<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim curves(0 To 1) As AcadEntity<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;' Define the arc<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim centerPoint(0 To 2) As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim radius As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim startAngle As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim endAngle As Double<br/>&nbsp;&nbsp;&nbsp;&nbsp;centerPoint(0) = 5#: centerPoint(1) = 3#: centerPoint(2) = 0#<br/>&nbsp;&nbsp;&nbsp;&nbsp;radius = 2#<br/>&nbsp;&nbsp;&nbsp;&nbsp;startAngle = 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;endAngle = 3.141592<br/>&nbsp;&nbsp;&nbsp;&nbsp;Set curves(0) = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngle, endAngle)<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;' Define the line<br/>&nbsp;&nbsp;&nbsp;&nbsp;Set curves(1) = ThisDrawing.ModelSpace.AddLine(curves(0).startPoint, curves(0).endPoint)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><font color="#ff0000">在生成面域前做如下定义(前面已经定义,为了方便在此增加一行)</font></pre><pre class="Code"><font color="#ff0000">生成面域必须要用Dim curves(0 To 1) As AcadEntity实体数组</font></pre><pre class="Code">&nbsp;&nbsp;&nbsp;&nbsp;' Create the region</pre><pre class="Code">RetVal = object.AddRegion(ObjectList)</pre><pre class="Code"><p class="element">RetVal&nbsp;&nbsp;Variant This method outputs an array of the newly created <a href="mk:@MSITStore:C:\Program%20Files\AutoCAD%202004\help\acadauto.chm::/idh_region_object.htm">Region</a> objects. 输出新的区域目标数组的方法。</p><p class="element"></p><br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim regionObj As Variant 变体数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;regionObj = ThisDrawing.ModelSpace.AddRegion(curves) 面域生成的必要条件。&nbsp;&nbsp;&nbsp;&nbsp;<br/>End Sub</pre><pre class="Code">因此,你这条语句不成立</pre><pre class="Code">For Each ko In sel<br/>&nbsp;&nbsp;Set reg = ThisDrawing.ModelSpace.AddRegion(ko)<br/>reg.color = acBlue</pre><pre class="Code">另外,你说的要做其它事,常用的测量面积或boolean,你还要干什么事?半句话就不理解你的目的了。</pre><pre class="Code"></pre>

szj612 发表于 2008-6-22 15:00:00

<p>&nbsp;真的很感谢楼上的热心解答!</p><p>我说的做其他事是:在异形孔(即封闭多段线)里打上一个点作为线切割穿丝标记(就是在加工制造的时候,要先在旁边钻出一个孔,因为我这里是加工内孔,所以必须钻在封闭区域里面,然后再把线切割金属丝穿过去,再割出形状)要求钻孔不要离加工线(即封闭多段线)太近,否则可能破坏加工线,那就工件报废了),我原来用 GetBoundingBox 方法来算出中点作为打孔位置,但发现这样不可靠,有时打孔会离线太近甚至到封闭区域外(例如弯月形的),所以我想把异形孔变成面域,然后找出&nbsp;centroid 属性来定位置,这样可能好一些。</p><p>&nbsp;我也仔细看过帮助实例,但我也只能用遍历的方法,我不知道应该怎样才可以用一次选择,就在所有选中的封闭多段线里打上合适的点。</p>

szj612 发表于 2008-6-23 10:32:00

再顶一下,祈求高手解答!
页: [1]
查看完整版本: [求助]如何把lwpolyline转换成region?