是否有View.GetOutline()的替代方法,可以提供更好的轮廓?

时间:2019-10-29 11:36:31

标签: vba solidworks

View.GetOutline()方法返回的轮廓与可见的图形不太对应-它返回的数量比SolidWorks GUI显示的选择轮廓要多。

下面的屏幕快照显示了View.GetOutline()(红线)返回的选择轮廓(浅蓝色虚线矩形)和轮廓的对角线:

enter image description here

有没有办法获得与实际可见的图形相对应的边界框?

注意:,该问题的原始标题是“是否有View.GetOutline()的替代品,其中不包含临时轴?”,但是我发现 {{ 1}}实际上不包括临时轴。问题出在 View.GetOutline() 属性中,该属性定义了包括临时轴的中心边界框。
Artem的答案非常有用,因此我决定更改问题以使其与答案相对应,并为实际问题张贴new question

1 个答案:

答案 0 :(得分:2)

您可以通过IPartDoc :: GetBox / IAssemblyDoc :: GetBox API从基础模型中获取边界框,然后通过IView :: ModelToViewTransform将其转换为视图空间,如this example所示。

如果您不想绘制对角线,则只需要DrawBBoxDiagonal函数的以下代码部分。 vStartPt和vEndPt的值是边界框的端点。

Dim vBox As Variant
Dim swViewTransform As SldWorks.MathTransform

Dim swMathPt As SldWorks.MathPoint
Dim vStartPt As Variant
Dim vEndPt As Variant

vBox = GetViewRefModelBBox(view)
Set swViewTransform = GetViewToSheetTransform(draw, view)

Dim swMathUtils As SldWorks.MathUtility
Set swMathUtils = swApp.GetMathUtility

Dim dPt(2) As Double
dPt(0) = vBox(0): dPt(1) = vBox(1): dPt(2) = vBox(2)

Set swMathPt = swMathUtils.CreatePoint(dPt)
Set swMathPt = swMathPt.MultiplyTransform(swViewTransform)
vStartPt = swMathPt.ArrayData

dPt(0) = vBox(3): dPt(1) = vBox(4): dPt(2) = vBox(5)

Set swMathPt = swMathUtils.CreatePoint(dPt)
Set swMathPt = swMathPt.MultiplyTransform(swViewTransform)
vEndPt = swMathPt.ArrayData

我还建议通过IBody2 :: GetExtremePoint获取精确的边界框,如here