装配中部件做布尔操作
来源:互联网 发布:守望先锋技能伤害数据 编辑:程序博客网 时间: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
- 装配中部件做布尔操作
- 第二天:布尔值、列表、字典和文件操作
- 装配件(.NET)
- C#装配件
- 关于YII中部件的使用详解 .
- PyQt5初级教程--PyQt5中部件[8/13]
- 布尔操作符
- awk布尔操作符
- javacript 之布尔操作
- 布尔操作符
- Python 布尔操作符
- 应用域和装配件
- 装配件(.NET)之结构
- 用JavaScript封装下FileSystemObject,做下文件操作!
- 装配操作相关开发
- javascript中布尔操作符
- Conditional 条件和布尔操作
- 彻底删除SVN版本库中部分文件或文件夹
- HashMap / Hashtable / LinkedHashMap / TreeMap的区别
- c++11学习笔记之auto
- 自适应波束形成(二)——时域窄带LCMV波束形成器
- Java中的线程池
- android相对布局RelativeLayout介绍
- 装配中部件做布尔操作
- 论要不要重复造轮子
- 在ERP界面找到数据出处
- android listview实现快速查询A—Z (模拟一些天气搜狐,网易等天气预报)
- python菜鸟之暴走漫画
- epoll多进程回显服务器示例
- JDK源码阅读之Arrays
- ArrayList和Vector实现类
- iOS7 新后台及下载SDK介绍