执行以下代码,将会让用户选取部件1和部件2,对两个部件的SurfaceBody做戳记,最后创建一个新零件文档,把戳记返回的body1 和body2作为非参数化特征添加。
Public Sub CreateImprintFromAssembly()
' 获取当前装配文档.
Dim asmDoc As AssemblyDocument
Set asmDoc = ThisApplication.ActiveDocument
' 选取两个部件
Dim part1 As ComponentOccurrence
Dim part2 As ComponentOccurrence
Set part1 = ThisApplication.CommandManager.Pick(kAssemblyLeafOccurrenceFilter, "Select part 1")
Set part2 = ThisApplication.CommandManager.Pick(kAssemblyLeafOccurrenceFilter, "Select part 2")
' 获得部件对应的SurfaceBody,并拷贝出临时SurfaceBody,然后根据部件在装配中的位置变换
Dim transBrep As TransientBRep
Set transBrep = ThisApplication.TransientBRep
Dim body1 As SurfaceBody
Dim body2 As SurfaceBody
Set body1 = transBrep.Copy(part1.Definition.SurfaceBodies.Item(1))
Set body2 = transBrep.Copy(part2.Definition.SurfaceBodies.Item(1))
Call transBrep.Transform(body1, part1.Transformation)
Call transBrep.Transform(body2, part2.Transformation)
'做戳记
Dim newBody1 As SurfaceBody
Dim newBody2 As SurfaceBody
Dim body1OverlapFaces As Faces
Dim body2OverlapFaces As Faces
Dim body1OverlapEdges As Edges
Dim body2OverlapEdges As Edges
Call ThisApplication.TransientBRep.ImprintBodies(body1, body2, True, newBody1, newBody2, body1OverlapFaces, body2OverlapFaces, body1OverlapEdges, body2OverlapEdges)
'创建一个新文档
Dim partDoc As PartDocument
Set partDoc = ThisApplication.Documents.Add(kPartDocumentObject, _
ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject))
Dim partDef As PartComponentDefinition
Set partDef = partDoc.ComponentDefinition
' 根据戳记返回的新body1添加非参数化特征1
Dim non1 As NonParametricBaseFeature
Set non1 = partDef.Features.NonParametricBaseFeatures.Add(newBody1)
Set newBody1 = non1.SurfaceBodies.Item(1)
' 根据戳记返回的新body1添加非参数化特征2
Dim non2 As NonParametricBaseFeature
Set non2 = partDef.Features.NonParametricBaseFeatures.Add(newBody2)
Set newBody2 = non2.SurfaceBodies.Item(1)
End Sub
看上去和原有装配的样子差不多,不过,当你拾取两部件配合面的时候,你会发现一些不同。为清楚显示,先将一个特征抑制。可以看到,配合面不再是一个面,而是多个面,类似我们盖章一样,被另外特征打了个印记。
对于另外一个特征也是类似的。
所以,Imprinting就是对发生贴合关系的两个体进行分析,获得其贴合后的体:body1和body2,并返回分割后的贴合面或边的集合。对应的方法是:
TransientBRep.ImprintBodies ( InputBodyOne As SurfaceBody, 原体1
InputBodyTwo As SurfaceBody, 原体2
ImprintCoincidentEdges As Boolean, 重合边是否计算在内
OutputBodyOne As SurfaceBody, 结果体1
OutputBodyTwo As SurfaceBody, 结果体2
BodyOneOverlappingFaces As Faces, 体1发生贴合的面集合
BodyTwoOverlappingFaces As Faces, 体2发生贴合的面集合
BodyOneOverlappingEdges As Edges, 体1发生贴合的边集合
BodyTwoOverlappingEdges As Edges, 体2发生贴合的边集合
[Tolerance As Double])
更多说明,请查看API帮助文档。