由View.GetOutline()
方法返回的轮廓与可见的图形不太对应-它返回的数量比SolidWorks GUI显示的选择轮廓要多。
下面的屏幕快照显示了View.GetOutline()
(红线)返回的选择轮廓(浅蓝色虚线矩形)和轮廓的对角线:
有没有办法获得与实际可见的图形相对应的边界框?
注意:,该问题的原始标题是“是否有View.GetOutline()的替代品,其中不包含临时轴?”,但是我发现 {{ 1}}实际上不包括临时轴。问题出在 View.GetOutline()
属性中,该属性定义了包括临时轴的中心边界框。
Artem的答案非常有用,因此我决定更改问题以使其与答案相对应,并为实际问题张贴new question。
答案 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