乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 96|回复: 5

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

[复制链接]

10

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2008-6-21 14:22:00 | 显示全部楼层 |阅读模式
请教各位高手,在VBA中,怎样用代码把封闭的lwpolyline转换成region?或者在lwpolyline内找出一个点,使它相当于region.centroid。谢谢了!
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-6-21 15:37:00 | 显示全部楼层
在autocad的vba帮助文件中有region的帮助实例。
注意:在帮助文件中的例子是弧和直线,放到一变量数组中,你也要把lwpolyline放到region(变体变量)中即可。
回复

使用道具 举报

10

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2008-6-21 18:12:00 | 显示全部楼层
谢谢楼上解答。
     但我的问题还是没有解决。我的目的是在屏幕上选择对象,然后遍历所有对象,先处理一些事后,再转成面域后继续处理后面的事情。我把我的代码简化后贴在下面,请前辈们帮忙修改一下。再次感谢!
Public Sub ss()
Dim sel As AcadSelectionSet
Dim ko As Variant
Dim reg As AcadRegion
Set sel = ThisDrawing.SelectionSets.Add("s01")
sel.SelectOnScreen
For Each ko In sel
Set reg = ThisDrawing.ModelSpace.AddRegion(ko)
reg.color = acBlue
Next
sel.Delete
End Sub
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-6-22 12:25:00 | 显示全部楼层

首先分析一下VBA的帮助文件 Sub Example_AddRegion()
    ' This example creates a region from an arc and a line.
   
    Dim curves(0 To 1) As AcadEntity
    ' Define the arc
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    Dim startAngle As Double
    Dim endAngle As Double
    centerPoint(0) = 5#: centerPoint(1) = 3#: centerPoint(2) = 0#
    radius = 2#
    startAngle = 0
    endAngle = 3.141592
    Set curves(0) = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngle, endAngle)
   
    ' Define the line
    Set curves(1) = ThisDrawing.ModelSpace.AddLine(curves(0).startPoint, curves(0).endPoint)
        
在生成面域前做如下定义(前面已经定义,为了方便在此增加一行)生成面域必须要用Dim curves(0 To 1) As AcadEntity实体数组    ' Create the regionRetVal = object.AddRegion(ObjectList)RetVal  Variant This method outputs an array of the newly created  objects. 输出新的区域目标数组的方法。
    Dim regionObj As Variant 变体数据
    regionObj = ThisDrawing.ModelSpace.AddRegion(curves) 面域生成的必要条件。   
End Sub因此,你这条语句不成立For Each ko In sel
  Set reg = ThisDrawing.ModelSpace.AddRegion(ko)
reg.color = acBlue另外,你说的要做其它事,常用的测量面积或boolean,你还要干什么事?半句话就不理解你的目的了。
回复

使用道具 举报

10

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

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

使用道具 举报

10

主题

34

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
74
发表于 2008-6-23 10:32:00 | 显示全部楼层
再顶一下,祈求高手解答!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 11:54 , Processed in 0.689236 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表