财产行为领域
我有以下代码来标识块中多段线的面积(混凝土板的轮廓)和用于标识其中一个块/板中孔的多段线累积面积:Public Sub GetSlabAndHoleAreas(ByVal slabBlock As AcadBlock, ByRef slabArea As Double, ByRef holeArea As Double)
Dim entity As AcadEntity
Try
'Extract the slab outline area and hole areas in mm2
slabArea = 0
holeArea = 0
For Each entity In slabBlock
'Find the largest outline i.e. the slab outline
If entity.ObjectName = "AcDbRegion" Then
If entity.Area > slabArea Then
slabArea = entity.Area
End If
End If
'Find the holes
If entity.Layer = EASICAD_LAYERS.HOLE_SYMBOL Or entity.Layer = EASICAD_LAYERS.COLUMN_CUTOUT_SYMBOL Then
holeArea += entity.Area
End If
Next
Catch ex As Exception
MsgBox("Reusable.GetSlabAndHoleAreas : " & ex.Message, MsgBoxStyle.OkOnly, EasiCADException.EasiCADErrorTitle)
End Try
End Sub
我继承了逻辑,它确实有效,并将其重构为此例程,以标准化输出…这使我询问生成的数字。这些对我来说没有意义。Slabera变量报告的是板的面积减去孔洞的累积面积。
此属性的帮助https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-2D31D8C1-9BEC-48CF-8B73-E2AD38A08D74-htm.html没有说任何关于这种行为的事情,这不是我所期望的。但软件正在运行
有人能给我解释一下为什么从主轮廓多段线的总面积中删除这些闭合多段线区域吗<向你问好,保罗
**** Hidden Message ***** 您的代码不是VBA的,但您的问题是与代码无关
的slabArea
被评估为从您编写的内容中找到的块中找到的所有
区域
对象中最大的区域
,这些区域(或者至少是具有最大面积的区域)很可能是对两个或多个原始区域进行某些前减法布尔运算的结果,因此“
面积等于地区
。
虽然
holeArea
被评估为属于两个特定图层的所有图元的总和,这两个图元可能只承载“简单”折线或区域(但圆弧、圆、椭圆、剖面线和样条也有资格获得面积属性),
您可能希望发布 dwg 以查看其中
的内容 谢谢。 我一直在使用论坛的这一部分,因为尽管基于.NET的大多数代码都是基于ActiveX / COM的,而不是真正的.NET。 但是,如果我应该使用.NET部分来回答这类问题,我将来会这样做。
因此,块中的每个区域都将区域存储为属性,而不是在运行时进行计算? 这对我来说似乎有点奇怪,但这不是AutoCAD第一次对我来说有点奇怪。 你所说的正是似乎发生的事情。 在某一点上向地板区域或单个楼板添加一个孔的代码是这样做的:
.....
explodedRegion = holeRegion.Explode
'Subtract the hole from the slab outline
'This actually changes the outline of the slab!
floorOutlineRegion.Boolean(AcBooleanType.acSubtraction, holeRegion)
.....
其中 floorOutlineRegion 是每个楼板最终铺设的整个地板区域(有些包含孔,或者孔成为缺口,有些根本不是)。
谢谢,现在这是有道理的。 我会知道将来要寻找什么。
页:
[1]