装配中部件做布尔操作

来源:互联网 发布:守望先锋技能伤害数据 编辑:程序博客网 时间:2024/05/29 02:24

今天有个用户想在装配中把某个部件和其它部件做布尔操作,得到新结果。就这个问题,我做了答复。

首先,装配里的部件都只是对原零件的一种引用,装配环境下是代理实体。部件和部件之间是无法相互影响的,只能建立约束或链接关系。如果想得到一种布尔运算的结果,可以考了的方式有两种。这里假定在一个装配中有三个部件,我们希望让第三个和前面两个进行布尔操作。



方法1: 如果部件三是很简单的基本体,例如圆柱,可以创建一个和它参数一样的 装配特征。大家知道,装配特征只能移除材料,也就达到了布尔切割的工作。不过这个过程需要知道部件三在装配中的底面所在的平面,基于它建立操作,然后拉伸特征。假设部件三很复杂,那就需要得到它包含的每个基本特征,一一创建装配特征



显然,方法1其实复杂,而且并不能很好的处理复杂的部件。


方法2: API的TransientBrep.DoBoolean可以对任何形体做布尔运算。所以,我们可以先根据三个部件创建对应的临时形体SurfaceBody,然后用这个三个SurfaceBody做布尔运算,将body1和body2做融合,接着和body3做切割。将最后的结果形体加入到一个新零件,创建为非参数化特征,最后把此新零件添加到装配。以下代码或许更能解释这个流程。


Sub cutTest()    Dim oAssDoc As AssemblyDocument    Set oAssDoc = ThisApplication.ActiveDocument        Dim oAssDef As AssemblyComponentDefinition    Set oAssDef = oAssDoc.ComponentDefinition        Dim oOcc1 As ComponentOccurrence    Dim oOcc2 As ComponentOccurrence    Dim oOcc3 As ComponentOccurrence        '得到三个部件    Set oOcc1 = oAssDef.Occurrences(1)    Set oOcc2 = oAssDef.Occurrences(2)    Set oOcc3 = oAssDef.Occurrences(3)           ' 分别获取三个部件对应的surfacebody    Dim transBrep As TransientBRep    Set transBrep = ThisApplication.TransientBRep        Dim body1 As SurfaceBody    Dim body2 As SurfaceBody    Dim body3 As SurfaceBody        '零件可以有多个surfacebody。这个例子假定我们只考察其第一个surfacebody        Set body1 = transBrep.Copy(oOcc1.Definition.SurfaceBodies.Item(1))    Set body2 = transBrep.Copy(oOcc2.Definition.SurfaceBodies.Item(1))    Set body3 = transBrep.Copy(oOcc3.Definition.SurfaceBodies.Item(1))        '将形体变换到装配坐标系    Call transBrep.Transform(body1, oOcc1.Transformation)    Call transBrep.Transform(body2, oOcc2.Transformation)    Call transBrep.Transform(body3, oOcc3.Transformation)        '将body1和body2融合    Dim oCombineBody As SurfaceBody        Call transBrep.DoBoolean(body1, body2, kBooleanTypeUnion)    '获取融合结果the result body is stored with body1    Set oCombineBody = body1         '将融合体和body3做切割    Dim oCutBody As SurfaceBody    Call transBrep.DoBoolean(body1, body3, kBooleanTypeDifference)     Set oCutBody = body1          '创建一个新零件    Dim partDoc As PartDocument    Set partDoc = ThisApplication.Documents.Add(kPartDocumentObject, _                  ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject))    Dim partDef As PartComponentDefinition    Set partDef = partDoc.ComponentDefinition       ' 将切割后的形体加入为非参数化特征    Dim nonBody As NonParametricBaseFeature    Set nonBody = partDef.Features.NonParametricBaseFeatures.Add(oCutBody)          Dim oPlaceMatrix As Matrix     Set oPlaceMatrix = ThisApplication.TransientGeometry.CreateMatrix()    '将此新零件插入到装配    Call oAssDef.Occurrences.AddByComponentDefinition(partDef, oPlaceMatrix)        oAssDoc.Activate        '如果需要抑制装配中的那三个部件    '这样可以看清楚切割后的形体    oOcc1.Suppress    oOcc2.Suppress    oOcc3.Suppress    End Sub




0 0
原创粉丝点击