工程图中的视图,可以控制引用的模型中某些内容的可见性,例如草图,特征,实体(surface body)。 右键某个内容,点击【Visibility】。

有客户想通过API去控制,首先想到的两个招数是:
1. 找到对应的模型实体,修改其可见性。但这样所有引用了该模型的视图都会更新,而在UI里,即使同一个模型来的视图,都可以设置不同的可见性,因为视图只是引用了模型,可以有不同的表达
2. 找到对应的浏览树节点,然后执行【Visibility】命令。但一方面要找到节点颇费周折,另外直接执行命令有时在复杂的流程里,可能维护会有麻烦,例如是否会立刻看到执行效果,Execute2(true)是否会受到接下来的代码影响。
其实,API提供了可见性操作的API:
DrawingView.SetVisibility( Object As Object, Visible As Boolean )
只要找到对应的对象,就能控制特定视图中对应内容的可见性。
以下是个代码样例,假定我们要隐藏上图中的 View2>>Top.iam>>Part1.ipt>>Surface Body1
Sub toggleSBVisibleinDrawing()
Dim oDoc As DrawingDocument
Set oDoc = ThisApplication.ActiveDocument
'assume we only want to toggle the surface bodies presenation
Dim oView As DrawingView
Set oView = oDoc.SelectSet(1)
'assume the reference document is an assembly
Dim oRefDoc As AssemblyDocument
Set oRefDoc = oView.ReferencedDocumentDescriptor.ReferencedDocument
'check one part
Dim oOnePartOcc As ComponentOccurrence
Set oOnePartOcc = oRefDoc.ComponentDefinition.Occurrences(1)
Dim oPartDef As PartComponentDefinition
Set oPartDef = oOnePartOcc.Definition
'assume we want to make one surface body invisible.
'Note: one part can have more than 1 surface bodies
Dim oSB1 As SurfaceBody
Set oSB1 = oPartDef.SurfaceBodies(1)
Dim oSB1Proxy As SurfaceBodyProxy
Call oOnePartOcc.CreateGeometryProxy(oSB1, oSB1Proxy)
'toggle the visibility of this object
Call oView.SetVisibility(oSB1Proxy, False)
End Sub
本文介绍了如何通过Inventor API来控制工程图视图中某个surface body对应的图线的可见性。通常有两种方法,一是修改模型实体的可见性,但这会影响所有引用该模型的视图;二是操作浏览树节点执行【Visibility】命令,但这方法实现起来较为复杂。实际上,API提供了DrawingView.SetVisibility方法,可以直接控制特定视图中内容的可见性。文中提供了一个代码样例,演示了如何隐藏指定视图中的Surface Body1。
977

被折叠的 条评论
为什么被折叠?



