返回的大纲View.GetOutline()
方法并不完全对应于可见绘图 - 它返回的内容比 SolidWorks GUI 显示的选择轮廓要多一些。
下面的屏幕截图显示了选择轮廓(浅蓝色虚线矩形)和由返回的轮廓的对角线View.GetOutline()
(红线):
有没有办法获得与实际可见绘图相对应的边界框?
Note:这个问题的原始标题是“View.GetOutline() 是否有不包括临时轴的替代方案?”,但是我发现View.GetOutline()
实际上不包括临时轴。问题出在View.Position
定义中心边界框的属性包括临时轴.
Artem的答案非常有用,所以我决定更改问题以对应于答案并发布新问题 https://stackoverflow.com/questions/58649808/is-there-an-alternative-to-view-getoutline-which-does-include-temporary-axes对于实际问题。
您可以通过 IPartDoc::GetBox/IAssemblyDoc::GetBox API 从底层模型获取边界框,并通过 IView::ModelToViewTransform 将其转换为视图空间,如下所示这个例子 https://www.codestack.net/solidworks-api/document/drawing/sheet-context-sketch/.
如果您不想绘制对角线,则只需要 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 https://www.codestack.net/solidworks-api/geometry/precise-bounding-box/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)