您的位置:首页 > 其它

装配中部件做布尔操作

2014-03-26 14:12 357 查看
今天有个用户想在装配中把某个部件和其它部件做布尔操作,得到新结果。就这个问题,我做了答复。

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



方法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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: