Opencascade源码学习之模型算法_TKO模块文件介绍
Opencascade源码学习之模型数据_TKO模块文件介绍
- 1、TKO
- 1、BOPAlgo
- 2、BOPDS
- 3、BOPTools
- 4、BRepAlgoAPI
- 5、IntTools
1、TKO
1、BOPAlgo
类说明:
BOPAlgo_Algo
该类为布尔组件中的算法提供了根接口。
BOPAlgo_ArgumentAnalyzer
检查布尔运算参数的有效性
BOPAlgo_BOP
该类表示布尔运算算法的构建部分。算法的参数分为两组——对象和工具。该算法使用交集结果构建给定参数的拆分,并组合给定类型的布尔运算的结果:交集、并集、差集。参数和操作类型的规则如下:
对于布尔运算FUSE,所有参数的维数都应该相等;
对于布尔运算CUT,Tools的最小尺寸不应小于Objects的最大尺寸;
对于布尔运算COMMON,参数可以具有任何维度。
该类是一个基于通用Fuse的算法。因此,通用Fuse算法的所有选项,如Fuzzy 模式、安全处理模式、并行处理模式、粘合模式和历史支持,在该算法中也可用。
除了父类的Warnings之外,算法还返回以下警告:BOPAlgo_AlertEmptyShape-以防某些输入形状为空形状。
除了父类的错误之外,算法还返回以下错误状态:
BOPAlgo_AlertBOPIsNotSet-在未设置布尔运算类型的情况下;
BOPAlgo_AlertBOPNotAllowed-在给定输入上不允许给定类型的操作的情况下;
BOPAlgo_AlertSolidBuilderFailed-以防BuilderSolid算法无法生成并集实体。
BOPAlgo_Builder
该类是通用Fuse算法-布尔组件中算法的基本算法。除了基类的选项外,该算法还有以下选项:
安全处理模式-允许在操作过程中避免修改输入形状(默认情况下关闭);
胶合选项-允许在某些子形状重合的特殊情况下加快交点的计算;
禁用对反转实体的检查-禁用/启用对输入实体的反转状态(空间中的孔)的检查。默认值为TRUE,即执行检查。对于倒置的实体,将此标志设置为FALSE,很可能会导致不正确的结果。
BOPAlgo_BuilderArea
用于从一组边/面构建面/实体的算法的根类。
BOPAlgo_BuilderFace
从给定的面和位于该面上的一组边构建新面的算法。
该算法返回以下错误状态:
- BOPAlgo_AlertNullInputShapes-如果给定的面为空形状。
BOPAlgo_BuilderShape
具有形状作为结果的算法的根类。
该类提供了History机制,该机制允许在操作过程中跟踪输入形状的修改。它使用BRpTools_History工具作为历史对象的存储程序。
BOPAlgo_BuilderSolid
实体构建器是从一组面构建实体的算法。给定的面应该是不相交的,即面的所有重合部分都应该在它们之间共享。该算法执行以下步骤来构建实体:
1.查找:
面向内部的面;
给定两次不同方向的单独面;
2.从其余面构建所有可能的闭合壳(使用BOPAlgo_ShellSplitter);
3.对获得的贝壳在Holes和Growths上进行分类;
4.从Growth shell构建实体,将Hole shell放入闭合的Growth实体中;
5.将所有未使用的面相对创建的实体进行分类,并将它们作为内部壳放入闭合的实体中;
6.找到所有未分类的面,即所有创建的实体之外的面,用它们制作内部壳,并将这些壳置于警告中。
为了避免生成的实体中的所有内部壳,有必要使用基类的方法SetAvoidInternalShapes(true)。在这种情况下,步骤5和6将完全不被执行。该算法可能会返回以下警告:
BOPAlgo_AlertShellSplitterFailed以防ShellSpliter算法失败;
BOPAlgo_AlertSolidBuilderUnusedFaces,以防在创建的实体之外还有一些面。
算法示例:
const TopTools_ListOfShape& aFaces = ...; // Faces to build the solids Standard_Boolean isAvoidInternals = ...; // Flag which defines whether to create the internal shells or not BOPAlgo_BuilderSolid aBS; // Solid Builder tool aBS.SetShapes(aFaces); // Set the faces aBS.SetAvoidInternalShapes(isAvoidInternals); // Set the AvoidInternalShapesFlag aBS.Perform(); // Perform the operation if (!aBS.IsDone()) // Check for the errors {// error treatmentStandard_SStream aSStream;aBS.DumpErrors(aSStream);return; } if (aBS.HasWarnings()) // Check for the warnings {// warnings treatmentStandard_SStream aSStream;aBS.DumpWarnings(aSStream); } const TopTools_ListOfShape& aSolids = aBS.Areas(); // Obtaining the result solids
BOPAlgo_CellsBuilder
该算法基于通用并集算法(GFA)。GFA的结果是Arguments的所有拆分部分。该算法的目的是为结果提供以下内容:
1.用户定义的单元(部件);
2.用户定义的内部边界。
换句话说,算法应该为用户提供向结果添加或从结果中移除任何部分以及移除部分之间的任何内部边界的可能性。该算法继承了GFA对DATA的所有要求。参数可以是任何类型(维度),并且应该在BRECheck_Analyzer和BOPAlgo_ArgumentAnalyzer方面有效。
结果:
算法的结果是包含基本类型(VERTEX、EDGE、FACE或SOLID)的选定部分的复合。默认结果为空复合体。可以使用AddToRessult()和AddAllToResult()方法将任何拆分部分添加到结果中。也可以使用RemoveFromResult()和RemoveAllFromResult()方法从结果中删除任何部分。方法RemoveAllFromResult()也适用于清除结果。
要删除内部边界,有必要为应删除边界的零件设置相同的材质,并调用RemoveInternalBoundaries()方法。材质不应等于0,因为这是默认的材质值。具有此值的零件之间的边界将不会被删除。一个零件不能添加不同的材料。
在组合结果的过程中也可以去除边界。为此,有必要设置零件的材质(不等于0),并将标志bUpdate设置为TRUE。
对于类型为FACE或EDGE的参数,建议在最终完全构建结果时删除边界。
这将有助于避免结果中的自我交叉。
请注意,如果结果包含具有相同材料但不同尺寸的零件,则不会删除这些零件之间的边界。目前,不支持删除多维形状之间的内部边界。
可以使用方法MakeContainers()从添加到结果中的部分创建类型化容器。
容器的类型将取决于参数的类型:
边的线, 面的壳和实体的复合体。
结果将是含有化合物的容器。
将部件添加到这样的结果中不会更新容器。
结果化合物将包含容器和新添加的部分(基本类型)。
如果应该移除的零件在容器中,则从这样的结果中移除零件可能会影响一些容器。
在这种情况下,将在没有该部分的情况下重建此容器。
历史信息:
该算法支持基本形状类型的历史信息——VERTEX、EDGE、FACE。
这些信息可通过方法IsDeleted()和Modified()获得。
在DRAW Test Harness中,它可以通过与布尔运算(bmodified、bggenerated和bisdeleted)相同的命令使用。
该算法可以返回以下错误状态:
-在通用并集算法中获取的错误状态。
可以使用HasErrors()方法检查错误状态。如果“错误”状态不等于零,则结果不可信。
该算法可以设置以下警告状态:
BOPAlgo_AlertRemovalOfIBForMDimShapes
BOPAlgo_AlertRemovalOfIBForFacesFailed
BOPAlgo_AlertRemovalOfIBForEdgesFailed
BOPAlgo_AlertRemovalOfIBForSolidsFailed
可以使用HasWarnings()方法检查Warning状态,也可以使用DumpWarnings)方法打印Warning状态。如果记录了警告,结果可能与预期不一样。
示例1
BOPAlgo_CellsBuilder aCBuilder; TopTools_ListOfShape aLS = ...; // arguments // parallel or single mode (the default value is FALSE) bool toRunParallel = false; // fuzzy option (default value is 0) Standard_Real aTol = 0.0; // aCBuilder.SetArguments (aLS); aCBuilder.SetRunParallel (toRunParallel); aCBuilder.SetFuzzyValue (aTol); // aCBuilder.Perform(); if (aCBuilder.HasErrors()) // check error status {return; } // empty compound, as nothing has been added yet const TopoDS_Shape& aRes = aCBuilder.Shape(); // all split parts const TopoDS_Shape& aRes = aCBuilder.GetAllParts(); // TopTools_ListOfShape aLSToTake = ...; // parts of these arguments will be taken into result TopTools_ListOfShape aLSToAvoid = ...; // parts of these arguments will not be taken into result //! // // defines the material common for the cells, // i.e. the boundaries between cells with the same material will be removed. // By default it is set to 0. // Thus, to remove some boundary the value of this variable should not be equal to 0. Standard_Integer iMaterial = ...; // defines whether to update the result right now or not bool toUpdate = ...; // adding to result aCBuilder.AddToResult (aLSToTake, aLSToAvoid, iMaterial, toUpdate); aR = aCBuilder.Shape(); // the result // removing of the boundaries (should be called only if toUpdate is false) aCBuilder.RemoveInternalBoundaries(); // // removing from result aCBuilder.AddAllToResult(); aCBuilder.RemoveFromResult (aLSToTake, aLSToAvoid); aR = aCBuilder.Shape(); // the result
绘制测试代码
psphere s1 15 psphere s2 15 psphere s3 15 ttranslate s1 0 0 10 ttranslate s2 20 0 10 ttranslate s3 10 0 0 # adding arguments bclearobjects; bcleartools baddobjects s1 s2 s3 # intersection bfillds # rx will contain all split parts bcbuild rx # add to result the part that is common for all three spheres bcadd res s1 1 s2 1 s3 1 -m 1 # add to result the part that is common only for first and third spheres bcadd res s1 1 s2 0 s3 1 -m 1 # remove internal boundaries bcremoveint res
BOPAlgo_CheckerSI
检查自干涉时的形状。该算法可以设置以下错误:
BOPAlgo_AlertMultipleArguments-输入参数的数量不是一个;
-BOPALgo_ErrorIntersectionFailed-在子形状相交期间,检查已中止。
如果在子形状的相交过程中发生错误,即在BOPAlgo_PaveFiller::PerformInternal()方法中,将直接返回该方法的错误。
BOPAlgo_CheckResult
包含有关布尔运算无法处理的错误形状和错误类型的信息
BOPAlgo_CheckStatus
BOPAlgo_GlueEnum
BOPAlgo_MakeConnected
BOPAlgo_MakeConnected是用于使触摸形状连接或粘合的算法,即用于使重合的几何形状在形状之间拓扑共享。输入的形状应该是相同的尺寸,否则粘合将没有任何意义。
在使形状连接之后,输入形状的边界元素与它们所属的形状相关联。此时,将考虑形状中边界元素的方向。关联针对以下类型:
-对于输入实体,得到的FACES与输入固体相关联;
-对于输入面,生成的边与输入面相关联;
-对于输入边,生成的VERTICES与输入边相关联。
在该算法的框架中,输入形状被称为材料,关联过程被称为材质关联。材料关联允许为相反的输入形状找到重合的元素。这些元素将与至少两种材料相关联。
在使形状连接后,可以使用BOPAlgo_MakePeriodic工具使连接的形状具有周期性。在使形状具有周期性之后,材料关联将被更新以对应于结果形状的实际状态。周期性形状的重复在这里也是可能的。物质关联不会丢失。
该算法支持形状修改的历史,因此可以在操作期间跟踪输入形状的修改。
除了标准的历史方法外,该算法还提供了方法GetOrigins(),该方法允许获得创建结果形状的输入形状。该算法支持并行处理模式,可以更快地完成操作。
该算法返回以下错误/警告消息:
BOPAlgo_AlertTooFewArguments-尝试在没有参数的情况下运行算法时会发出错误警报;
BOPAlgo_AlertMultiDimensionalArguments-尝试在多维参数上运行算法时发出错误警报;
BOPAlgo_AlertEnableToGlue-如果胶接器算法无法胶接给定的参数,则会发出错误警报;
BOPAlgo_AlertEnableToMakePeriodic-如果周期生成器无法使用给定选项使连接的形状具有周期性,则会发出警告警报;
BOPAlgo_AlertShapeIsNotPeriodic-在使形状具有周期性之前,尝试重复该形状时会发出警告警报。
示例
TopTools_ListOfShape anArguments = ...; // Shapes to make connected Standard_Boolean bRunParallel = ...; // Parallel processing mode BOPAlgo_MakeConnected aMC; // Tool for making the shapes connected aMC.SetArguments(anArguments); // Set the shapes aMC.SetRunParallel(bRunParallel); // Set parallel processing mode aMC.Perform(); // Perform the operation if (aMC.HasErrors()) // Check for the errors {// errors treatmentStandard_SStream aSStream;aMC.DumpErrors(aSStream);return; } if (aMC.HasWarnings()) // Check for the warnings {// warnings treatmentStandard_SStream aSStream;aMC.DumpWarnings(aSStream); }const TopoDS_Shape& aGluedShape = aMC.Shape(); // Connected shape // Checking material associations TopAbs_ShapeEnum anElemType = ...; // Type of border element TopExp_Explorer anExp(anArguments.First(), anElemType); for (; anExp.More(); anExp.Next()) {const TopoDS_Shape& anElement = anExp.Current();const TopTools_ListOfShape& aNegativeM = aMC.MaterialsOnNegativeSide(anElement);const TopTools_ListOfShape& aPositiveM = aMC.MaterialsOnPositiveSide(anElement); } // Making the connected shape periodic BOPAlgo_MakePeriodic::PeriodicityParams aParams = ...; // Options for periodicity of the connected shape aMC.MakePeriodic(aParams); // Shape repetition after making it periodic // Check if the shape has been made periodic successfully if (aMC.PeriodicityTool().HasErrors()) {// Periodicity maker error treatment } // Shape repetition in periodic directions aMC.RepeatShape(0, 2); const TopoDS_Shape& aShape = aMC.PeriodicShape(); // Periodic and repeated shape
BOPAlgo_MakePeriodic
BOPAlgo_MakePeriodic是一种工具,用于在指定方向上使3D空间中的任意形状具有周期性。形状的周期性意味着形状可以在任何周期性方向上重复任何次数,而不会创建新的几何体或分割。
其想法是使形状在周期方向的相反侧看起来相同,因此在周期上平移形状副本时,不会有不同尺寸的重合部分。
如有必要,该算法将通过将形状分割为限制形状的请求周期的平面来修剪形状,使其适合于请求周期。
为了使形状在特定方向上具有周期性,该算法执行以下步骤:
*创建形状的副本,并将其在周期上移动到请求方向的负侧;
*通过移动的副本拆分形状的负侧,确保将几何图形从正侧复制到负侧;
*创建形状的副本(具有已拆分的负侧),并将其在周期上移动到请求方向的正侧;
*通过移动的副本分割形状的正侧,确保将几何体从负侧复制到正侧。
该算法还将位于结果形状相对两侧的相同(或双胞胎)形状相关联。
使用*GetTwins()*方法,可以从相反的一侧获得孪晶形状。
算法还提供了在周期性方向上重复周期性形状的方法。随后的重复是在重复的形状上进行的,因此在X方向上重复该形状两次将产生三个形状(原始加两个副本)。一次后续重复将产生6个形状。重复可以清除并重新开始。
该算法支持形状修改的历史记录,因此可以跟踪形状是如何改变的,使其具有周期性,以及在重复过程中创建了哪些新形状。该算法支持并行处理模式,可以更快地完成操作。
该算法支持错误/警告系统,并返回以下警报:
-BOPAlgo_AlertNoPeriodityRequired-如果在任何方向上都没有请求周期性,则会发出错误警报;
-BOPAlgo_AlertEnableToTrim-如果用于将形状调整到所请求的时间段的形状调整失败,则会发出错误警报;
-BOPAlgo_AlertEnableToMakeIdention-如果通过移动的副本拆分形状失败,则会发出错误警报;
-BOPAlgo_AlertEnableToRepeat-如果重复形状的粘合失败,则会发出警告警报。
算法的使用示例:
TopoDS_Shape aShape = ...; // The shape to make periodic Standard_Boolean bMakeXPeriodic = ...; // Flag for making or not the shape periodic in X direction Standard_Real aXPeriod = ...; // X period for the shape Standard_Boolean isXTrimmed = ...; // Flag defining whether it is necessary to trimming //! // the shape to fit to X period Standard_Real aXFirst = ...; // Start of the X period //! // (really necessary only if the trimming is requested) Standard_Boolean bRunParallel = ...; // Parallel processing mode or single //! BOPAlgo_MakePeriodic aPeriodicityMaker; // Periodicity maker aPeriodicityMaker.SetShape(aShape); // Set the shape aPeriodicityMaker.MakeXPeriodic(bMakePeriodic, aXPeriod); // Making the shape periodic in X direction aPeriodicityMaker.SetTrimmed(isXTrimmed, aXFirst); // Trim the shape to fit X period aPeriodicityMaker.SetRunParallel(bRunParallel); // Set the parallel processing mode aPeriodicityMaker.Perform(); // Performing the operation //! if (aPeriodicityMaker.HasErrors()) // Check for the errors {// errors treatmentStandard_SStream aSStream;aPeriodicityMaker.DumpErrors(aSStream);return; } if (aPeriodicityMaker.HasWarnings()) // Check for the warnings {// warnings treatmentStandard_SStream aSStream;aPeriodicityMaker.DumpWarnings(aSStream); } const TopoDS_Shape& aPeriodicShape = aPeriodicityMaker.Shape(); // Result periodic shape aPeriodicityMaker.XRepeat(2); // Making repetitions const TopoDS_Shape& aRepeat = aPeriodicityMaker.RepeatedShape(); // Getting the repeated shape aPeriodicityMaker.ClearRepetitions();
BOPAlgo_MakerVolume
算法是从一组形状中构建实体。它使用BOPAlgo_Builder算法与给定的形状相交并构建面图像(如果需要),使用BOPAGo_BuilderSolid算法构建实体。
算法步骤:
1.收集所有面:如果需要,将形状相交并收集人脸的图像,否则只需将人脸收集到列表中;此步骤上的所有面添加两次,方向为FORWARD和REVERSED;
2.创建覆盖中所有面的边界框,并从该边界框的角点(myBBox、mySBox)创建实体框。将该框中的面添加到;
3.使用BOPAlgo_BuilderSolid算法从构建实体;
4.处理结果:从中消除包含实体的面;
5.填充内部形状:将内部顶点和边添加到创建的实体中;
6.准备历史。
参数说明:
-布尔标志。它定义是否与中的形状相交(如果设置为TRUE)或不相交(FALSE)。默认值为TRUE。通过将其设置为FALSE,用户应该保证中的形状不会相互干扰,否则结果是不可预测的。
-边界框,覆盖中的所有面。
-从的角点创建的实心框。
-列表是为了保留“最终”面,这些面将被提供给BOPAlgo_BuilderSolid算法。
如果形状受到干扰,则应包含源形状的图像,否则仅包含原始面。它还包含中的面。从BOPAlgo_Builder继承的字段:
-源形状的列表。源形状可以有任何类型,但每个形状都不能自干扰。
-结果形状:
空化合物-如果没有产生固体;
实体-如果仅创建一个实体;
固体化合物-如果创建了多个固体。
从BOPAlgo_Algo继承的字段:
-定义是否打开并行处理。
-操作的错误状态。除了父算法的错误之外,它还可以具有以下值:
-BOPAlgo_AlertSolidBuilderFailed-BOPAlgo_BuilderSolid算法失败。
示例
BOPAlgo_MakerVolume aMV; // aMV.SetArguments(aLS); //source shapes aMV.SetRunParallel(bRunParallel); //parallel or single mode aMV.SetIntersect(bIntersect); //intersect or not the shapes from <aLS> // aMV.Perform(); //perform the operation if (aMV.HasErrors()) { //check error statusreturn; } const TopoDS_Shape& aResult = aMV.Shape(); //result of the operation
BOPAlgo_Operation
BOPAlgo_Options
该类为布尔组件中的算法提供了以下选项:
内存分配工具-用于内存分配的工具;
错误和警告报告-允许记录操作过程中发生的警告和错误。错误表示算法失败。
并行处理模式-提供在并行模式下执行操作的可能性;
模糊公差——检测接触或重合情况的操作的附加公差;
使用定向边界框-允许使用形状的定向边界框来过滤交叉点。
BOPAlgo_PaveFiller
该类表示布尔运算算法的交集阶段。
它按以下顺序执行参数子形状的成对交集:
1.顶点/顶点;
2.顶点/边缘;
3.边缘/边缘;
4.顶点/面;
5.边缘/表面;
6.面部/面部。
交集的结果被存储到算法的数据结构中。
除了父类提供的选项外,该算法还有以下选项:
截面属性-允许自定义面的相交(避免近似或构建2d曲线);
安全处理模式-允许在操作过程中避免修改输入形状(默认情况下关闭);
胶合选项-允许在特殊情况下加速计算,其中一些子形状是重合的。
该算法返回以下警告状态:
BOPAlgo_AlertSelfInterferingShape-如果某些参数形状是自干扰形状;
BOPAlgo_AlertTooSmallEdge-在输入形状的某些边缘没有有效范围的情况下;
BOPAlgo_AlertNotSplitableEdge-如果输入形状的某些边缘的有效范围很小,因此无法分割;
BOPAlgo_AlertBadPositioning-如果输入形状的定位导致产生小边缘;
BOPAlgo_AlertIntersectionOfPairOfShapesFailed-在某些子形状的相交失败的情况下;
BOPAlgo_AlertAcquiredSelfIntersection-以防参数的某些子形状通过其他形状连接;
BOPAlgo_AlertBuildingPCurveFailed-以防为面上的某些边构建2D曲线失败。
该算法返回以下错误警报:
BOPAlgo_AlertTooFewArguments-如果没有足够的参数来执行操作;
BOPAlgo_AlertIntersectionFailed-以防出现意外错误;
BOPAlgo_AlertNullInputShapes-以防某些参数为空形状。
BOPAlgo_RemoveFeatures
RemoveFeatures算法旨在通过去除不需要的部分来重建形状。这些部分可以是孔、突起、尖刺、圆角等。
形状本身不会被修改,结果中会构建新的形状。
目前,仅支持类型为SOLID、COMPSOLID和Solids中的COMPOUND的形状。并且只有FACE可以从形状中移除。
在输入时,算法接受形状本身和必须移除的面。脸是怎么画的并不重要。它可以是单独的面,也可以是面的集合。
这些面应该属于初始形状,不属于将被忽略。在重建形状之前,算法将对连接块(特征)上的所有给定面进行排序。这些特征将从形状中逐个删除。它将允许删除所有可能的功能,即使在删除某些功能时出现问题。
删除的特征由与该特征相邻的面的延伸填充。通常,从形状中移除单个特征的算法看起来如下:
查找与特征相邻的面;
延伸相邻面以覆盖特征;
按照原始面的边界修剪扩展面(与特征共同的边界除外),因此它将仅覆盖特征;
重建实体时,重建的相邻面避开特征中的面。
如果删除成功,结果将被新形状覆盖,并处理下一个特征。否则,将发出警告。
该算法具有以下选项:
- 历史支持;
以及基类中可用的选项:
错误/警告报告系统;
并行处理模式。
请注意,基类的其他选项在此不受支持,也不会有任何效果。
<历史支持>允许根据Modified、IsDeleted和Generated跟踪输入形状的修改。历史记录可通过历史记录工具BRpTools_history的方法获得,可在此处通过方法*history()*访问。
默认情况下,收集历史记录,但可以使用方法*SetToFillHistory(false)*禁用它;
<错误/警告报告系统>-允许获取操作过程中发生的错误/警告的扩展概述。一旦出现任何错误,算法就会停止工作。警告允许继续作业,通知用户出现问题。
该算法返回以下错误/警告:
BOPAlgo_AlertTooFewArguments-如果输入形状不包含任何固体,则会发出错误警报;
BOPAlgo_AlertUnsupportedType-如果输入形状不仅包含实体,还包含其他形状,则会发出警告警报;
BOPAlgo_AlertNoFacesToRemove-如果没有要从形状中删除的面(无需执行任何操作),则会发出错误警报;
BOPAlgo_AlertEnableToRemoveTheFeature-发出警告警报是为了通知用户无法删除该功能。该算法仍将尝试删除其他特征;
BOPAlgo_AlertMoveFeaturesFailed-如果操作因未知原因中止,则会发出错误警报。
<并行处理模式>-允许在并行模式下运行算法以更快地获得结果。
该算法有一定的局限性:
- 与特征相邻的连接面的交点不应为空。这意味着,这些面不应该彼此相切。
如果相邻面的交点为空,则算法将无法正确修剪面,并且很可能不会删除该特征。
- 该算法不处理实体的内部部分,它们只是在重建过程中被去除。
请注意,要成功删除特征,与该特征相邻的扩展面应完全覆盖该特征,否则将不会重建实体。
以下是该算法的使用示例:
TopoDS_Shape aSolid = ...; // Input shape to remove the features from TopTools_ListOfShape aFaces = ...; // Faces to remove from the shape Standard_Boolean bRunParallel = ...; // Parallel processing mode Standard_Boolean isHistoryNeeded = ...; // History support //! BOPAlgo_RemoveFeatures aRF; // Feature removal algorithm aRF.SetShape(aSolid); // Set the shape aRF.AddFacesToRemove(aFaces); // Add faces to remove aRF.SetRunParallel(bRunParallel); // Define the processing mode (parallel or single) aRF.SetToFillHistory(isHistoryNeeded); // Define whether to track the shapes modifications aRF.Perform(); // Perform the operation if (aRF.HasErrors()) // Check for the errors {// error treatmentreturn; } if (aRF.HasWarnings()) // Check for the warnings {// warnings treatment } const TopoDS_Shape& aResult = aRF.Shape(); // Result shape
该算法在结果形状中保留输入形状的类型。因此,如果输入形状是COMPSOLID,则生成的实体也将被放入COMPSOLID中。
删除所有可能的特征后,将通过从结果形状中删除操作过程中创建的额外边和顶点来简化形状。
BOPAlgo_Section
在参数之间构建Section的算法。
截面由顶点和边组成。
本节包含:
1.受V/V、E/E、E/F、F/F干扰的新顶点
2.受V/E、V/F干扰的顶点
3.受F/F干扰的新边缘
4.作为公共块的边缘
BOPAlgo_SectionAttribute
类是交集算法使用的标志的容器
BOPAlgo_ShellSplitter
该类提供在单独循环上拆分一组连接面
BOPAlgo_Splitter
分割器算法是用于将一组任意形状分割为另一组任意图形的算法。
操作的参数分为两组:
对象-将被拆分的形状
工具-用于分割对象的形状
操作的结果仅包含“*对象”组中形状的拆分部分。
结果中将排除“工具”组中形状的分割部分。
这些形状可以被同一组中的其他形状分割(以防这些形状发生干扰)。
该类是一个基于通用Fuse的算法。因此,通用Fuse算法的所有选项,如模糊模式、安全处理模式、并行处理模式、粘合模式和历史支持,在该算法中也可用。
不要求存在Tools形状。如果没有Tools形状,则拆分操作的结果将等效于General Fuse结果。
该算法的实现是最小的-只有CheckData()和Perform()方法被重写。将参数的拆分部分添加到结果中的方法BOPAlgo_Builder::BuildResult()不必被重写,因为它的本地实现为Splitter算法执行必要的操作-它只将Object的拆分部分加入到结果中,避免工具的分裂部分。
BOPAlgo_Tools
提供用于布尔运算的交集部分的工具
BOPAlgo_ToolsProvider
提供API以操作工具参数的辅助类。
BOPAlgo_WireEdgeSet
BOPAlgo_WireSplitter
该类是从给定的一组边构建循环。
它返回以下错误状态
- BOPAlgo_AlertNullInputShapes-以防没有输入边来构建循环。
类图
2、BOPDS
类说明
BOPDS_CommonBlock
BOPDS_CommonBlock类用于存储关于具有几何一致性(就公差而言)的铺砌块的信息:
a) 其他铺路砖;
b) 面部。
普通块中的第一个铺砌块(真正的铺砌块)总是具有原始边缘的最小索引的铺砌块。
BOPDS_CoupleOfPaveBlocks
BOPDS_CoupleOfPaveBlocks类用于存储
关于两个铺路砖的信息
以及一些辅助信息
BOPDS_Curve
BOPDS_Curve类用于存储有关相交曲线的信息
BOPDS_DS
BOPDS_DS类为布尔组件中的算法(如General Fuse、布尔运算、Section、Maker Volume、Splitter和Cells Builder)提供数据结构控制。
数据结构包括以下内容:
1.操作的参数[myArguments];
2关于参数/新形状及其子形状(形状类型、边界框等)的信息[myLines];
3.每个自变量形状(及其子形状)具有/具有自己的索引范围(秩);
4.在源边缘上铺设块[myPaveBlocksPool];
5.源面的状态[myFaceInfoPool];
6相同域形状的集合[myShapesSD];
7干扰集合[myInterfTB,myInterfVV,…myInterfFF]
BOPDS_FaceInfo
类BOPDS_FaceInfo用于存储有关面状态的有用信息
BOPDS_IndexRange
类BOPDS_IndexRange用于存储有关两个索引范围的信息
BOPDS_Interf
类BOPDS_Interf存储有关
*两种形状之间的干涉。
*类BOPDS_Interf是根类
BOPDS_Iterator
类BOPDS_Iterator是
1.根据操作参数的边界框来计算B返回子形状之间的交集(请参见类BOPDS_DS)
2.提供接口来迭代给定类型的相交子形状对
BOPDS_IteratorSI
BOPDS_IteratorSI类为
1.根据操作的每个参数的BRep子形状(参见类BOPDS_DS)的边界框计算它们之间的自交集
2.为迭代给定类型的相交子形状对提供接口
BOPDS_Pair
该类用于提供干涉形状的一对索引
BOPDS_Pave
类BOPDS_Pave用于存储关于边上顶点的信息。
BOPDS_PaveBlock
类BOPDS_PaveBlock用于存储有关边上铺砌块的信息。边缘上两个相邻的铺面组成了铺面块。
BOPDS_PaveMapHasher
BOPDS_Point
类BOPDS_Point用于存储关于交叉点的信息
BOPDS_ShapeInfo
类BOPDS_ShapeInfo用于存储有关形状的方便信息
BOPDS_SubIterator
类BOPDS_SubIterator用于计算操作参数的BRep子形状的两个子集的边界框之间的交集(请参见类BOPDS_DS)。该类提供了用于迭代相交子形状对的接口。
BOPDS_Tools
类BOPDS_Tools包含包BOPDS的一组辅助静态函数
3、BOPTools
类说明
BOPTools_AlgoTools
提供布尔运算算法中使用的工具:
-顶点相交;
-顶点构造;
-边缘构造;
-分类算法;
-制作连接块;
-形状验证。
BOPTools_AlgoTools2D
该类包含处理拓扑的方便的静态函数。这是BOPTools_AlgoTools2D.cdl的副本
BOPTools_AlgoTools3D
该类包含处理拓扑的方便的静态函数。这是BOPTools_AlgoTools3D.cdl的副本
BOPTools_BoxSelector
用于从BVH树中选择图元的模板选择器。
BOPTools_BoxSet
重新定义BoxSet以默认使用线性生成器
BOPTools_ConnexityBlock
BOPTools_CoupleOfShape
BOPTools_PairSelector
模板选择器,用于从两个BVH树中选择图元。
BOPTools_Parallel
BOPTools_Set
BOPTools_SetMapHasher
类图
4、BRepAlgoAPI
类说明
BRepAlgoAPI_Algo
为API算法提供根接口
BRepAlgoAPI_BooleanOperation
用于对任意形状执行布尔运算的根API类。
操作的参数分为两组——对象和工具。
每个组可以包含任意数量的形状,但每个形状都应该在BRRecheck_Analyzer和BOPAlgo_ArgumentAnalyzer方面有效。
该算法使用交集结果构建给定参数的拆分,并组合给定类型的布尔运算的结果:
FUSE-两组对象的并集;
COMMON-两组对象的交集;
CUT——从另一组中减去一组;
SECTION-所有参数的截面边缘和顶点;
参数和操作类型的规则如下:
对于布尔运算FUSE,所有参数的维数都应该相等;
对于布尔运算CUT,Tools的最小尺寸不应小于Objects的最大尺寸;
对于布尔运算COMMON,参数可以具有任何维度。
对于布尔运算SECTION,参数可以是任何类型。
除了基类的错误外,算法还返回以下错误:
- BOPAlgo_AlertBOPNotSet-在未设置布尔运算类型的情况下。
BRepAlgoAPI_BuilderAlgo
该类包含通用Fuse算法的API级别。
除了基类中定义的选项外,该算法还有以下选项:
安全处理模式-允许在操作过程中避免修改输入形状(默认情况下关闭);
胶合选项-允许在某些子形状重合的特殊情况下加快交点的计算。
禁用对反转实体的检查-禁用/启用对输入实体的反转状态(空间中的孔)的检查。默认值为TRUE,即执行检查。对于倒置的实体,将此标志设置为FALSE,很可能会导致不正确的结果。
禁用历史记录集合-允许在操作过程中禁用形状修改历史记录的集合。
它返回以下错误状态:
0-如果成功
BOPAlgo_AlertTooFewArguments-如果没有足够的参数来执行操作
BOPAlgo_AlertIntersectionFailed-在参数交叉失败的情况下
BOPAlgo_AlertBuilderFailed-以防生成结果形状失败
报告中收集了来自底层DS Filler和Builder算法的警告状态。
该类提供了通过统一切向边和面来简化结果形状的可能性。它是通过方法SimplifyResult执行的。
BRepAlgoAPI_Check
Check类提供了一个诊断工具,用于检查单个形状或多个形状的有效性。
检查形状时:
拓扑有效性;
小边缘;
自我干扰;
特定类型的布尔运算的有效性(仅适用于两个形状)。
该类提供了两种检查形状的方法(-s)
1.构造
BRepAlgoAPI_Check aCh(theS); Standard_Boolean isValid = aCh.IsValid();
2.方法设置数据和执行
BRepAlgoAPI_Check aCh;aCh.SetData(theS1, theS2, BOPAlgo_FUSE, Standard_False);aCh.Perform();Standard_Boolean isValid = aCh.IsValid();
BRepAlgoAPI_Common
该类提供了参数和工具之间的布尔公共运算(布尔交集)。
BRepAlgoAPI_Cut
类Cut在参数和工具之间提供布尔切割操作(布尔减法)
BRepAlgoAPI_Defeaturing
BRepAlgoAPI_Defeatureing算法是用于从形状中删除不需要的零件的API算法。不需要的零件(或特征)可以是孔、突起、间隙、倒角、圆角等。
形状本身不会被修改,因此会构建新的形状。
从形状中实际删除特征是由低级的BOPAlgo_RemoveFeatures工具执行的。因此,Features算法具有与低级算法相同的选项、输入数据要求和限制。
输入数据
目前,仅支持类型为SOLID、COMPSOLID和COMPOUND of Solids的形状。并且只有FACE可以从形状中移除。
在输入上,算法接受形状本身和必须去除的特征。功能是如何给出的并不重要。它可以是单独的面,也可以是面的集合。面应该属于初始形状,不属于的面将被忽略。
选项
该算法具有以下选项:
-历史支持;以及基类中可用的选项:
-错误/警告报告系统;
-并行处理模式。
请注意,基类的其他选项在此不受支持,也不会有任何效果。
有关可用选项的详细信息,请参阅BOPAlgo_RemoveFeatures算法的说明。
限制
Features算法与BOPAlgo_RemoveFeatures算法具有相同的限制。
示例
以下是该算法的使用示例:
该算法在结果形状中保留输入形状的类型。因此,如果输入形状是COMPSOLID,则生成的实体也将被放入COMPSOLID中。
BRepAlgoAPI_Fuse
该类提供了参数和工具之间的布尔融合操作(布尔并集)。
BRepAlgoAPI_Section
算法是在参数和工具之间构建Section操作。
“Section”操作的结果由顶点和边组成。
Section操作的结果包含:
1.受V/V、E/E、E/F、F/F干扰的新顶点
2.受V/E、V/F干扰的顶点
3.受F/F干扰的新边缘
4.作为公共块的边缘
BRepAlgoAPI_Splitter
该类包含拆分器算法的API级别,该算法允许将一组任意形状拆分为另一组任意图形
操作的参数分为两组:
对象-将被拆分的形状
工具-用于分割对象的形状
操作的结果仅包含“*对象”组中形状的拆分部分
结果中将排除“工具”组中形状的分割部分
这些形状可以被同一组中的其他形状分割(以防这些形状发生干扰)。
该类是一个基于通用Fuse的算法。因此,通用Fuse算法的所有选项,如模糊模式、安全处理模式、并行处理模式、粘合模式和历史支持,在该算法中也可用
不要求存在Tools形状。
如果没有Tools形状,则拆分操作的结果将等效于General Fuse结果。
算法返回以下错误状态:
0-如果成功
BOPAlgo_AlertTooFewArguments-如果操作没有足够的参数
BOPAlgo_AlertIntersectionFailed-如果参数的交集失败
BOPAlgo_AlertBuilderFailed-以防生成结果失败。
类图
5、IntTools
类说明
IntTools
包含用于相交和分类的类以及附带的类。
IntTools_BaseRangeSample
范围索引管理的基类
IntTools_BeanFaceIntersector
类BeanFaceIntersector计算bean(边的一部分)的曲线上的参数范围,该参数范围根据边和面公差绑定面表面上的bean部分。
警告:没有考虑面的实际边界,bean的大多数结果部分仅位于曲面区域内,包括面的内部。并且超出该区域的部分可以从结果中排除。
IntTools_CommonPrt
该类用于描述三维空间中两条边之间的公共部分。
IntTools_Context
交集上下文包含几何和拓扑工具包(分类器、投影器等)。集上下文用于缓存工具以提高性能。
IntTools_Curve
类是一个包含一条三维曲线、两条二维曲线和两个Tolerance值的容器
它用于面/面相交算法,以存储相交的结果。在这种情况下:
3D曲线是相交曲线
2D曲线是3D曲线在相交面上的PC曲线
公差是3D曲线的有效公差,其被计算为3D曲线和2D曲线(或者在没有2D曲线的情况下的表面)之间的最大偏差
切向公差是从3D曲线到面之间的切向区域末端的最大距离,就其公差值而言。
IntTools_CurveRangeLocalizeData
IntTools_CurveRangeSample
曲线范围索引管理类
IntTools_CurveRangeSampleMapHasher
IntTools_EdgeEdge
该类提供了基于边边界框之间的相交的边/边相交算法。
IntTools_EdgeFace
该类提供了边/面相交算法,用于确定三维空间中边和面之间的公共部分。
边和面之间的常见部分可以是:
顶点-在交叉或接触的情况下;
边缘-在边缘与面部完全重合的情况下。
IntTools_FaceFace
此类提供面的基础曲面的交点。
IntTools_FClass2d
Class提供了一种使用面边界对人脸二维空间中的二维点进行分类的算法。
IntTools_MarkedRangeSet
类MarkedRangeSet提供用标志标记的连续范围集
IntTools_PntOn2Faces
包含来自IntTools的两个点PntOnFace和一个标志
IntTools_PntOnFace
包含一个面、一个三维点、对应的UV参数和一个标志
IntTools_Range
该类描述了一维范围[myFirst,myLast]
IntTools_Root
该类用于描述Edge/Edge和Edge/Surface算法的一个变量的函数根。
IntTools_ShrunkRange
该类提供边缘的3D曲线的工作(收缩)范围[t1,t2]的计算。
IntTools_SurfaceRangeLocalizeData
IntTools_SurfaceRangeSample
曲面范围索引管理类
IntTools_SurfaceRangeSampleMapHasher
IntTools_Tools
该类包含处理几何图形和拓扑的方便的静态函数。
Adaptor3d_TopolTool
Adaptor3d中TopolTool关于采样点的类重定义方法
IntTools_WLineTool
IntTools_WLineTool提供了一组与走线相关的静态方法。
类图
Opencascade源码学习之模型算法_TKO模块文件介绍相关推荐
- Opencascade源码学习之模型数据——TKGeomBase模块文件介绍
Opencascade源码学习之模型数据--TKGeomBase模块文件介绍 1.AdvApp2Var 2.AppCont 3.AppDef 4.AppParCurves 5.Approx 6.Bnd ...
- Opencascade源码学习之模型数据
Opencascade源码学习之模型数据 1.模型数据 2.几何工具 1.插值和拟合 1.分析一组点 2.基本插值和近似 3.2D 插值 4.3D 插值 5.2D 拟合 6.3D 拟合 7.曲面拟合 ...
- fasttext源码学习(2)--模型压缩
fasttext源码学习(2)–模型压缩 前言 fasttext模型压缩的很明显,精度却降低不多,其网站上提供的语种识别模型,压缩前后的对比就是例证,压缩前126M,压缩后917K.太震惊了,必须学习 ...
- STL源码学习----集合相关算法
STL一共提供了四种与集合相关的算法,分别是并集(union), 交集(intersection),差集(difference),对称差集(symmetric difference). 这四种集合算法 ...
- libevent源码学习-----Reactor模型
libevent内部采用了reactor模型 所谓reactor模型,其实就是一套事件注册机制,用来解决单线程的阻塞问题.reactor核心思想是将事件和相应事件发生时想要调用的函数都记录下来,在事件 ...
- OpenCascade源码分析之BRepMesh_IncrementalMesh(网格离散化操作)
OpenCascade源码分析之BRepMesh_IncrementalMesh(网格离散化操作) 一.引言 在使用opencascade读取连续曲面模型的时候,一般来说我们都会调用BRepMesh_ ...
- AlphaFold2源码解析(9)--模型之损失
AlphaFold2源码解析(9)–模型之损失 损失函数和辅助头 该网络是端到端训练的,梯度来自主帧对齐点误差 (FAPE) 损失 LFAPEL_{FAPE}LFAPE和许多辅助损失. 每个示例的总 ...
- [阿里DIN] 从论文源码学习 之 embedding层如何自动更新
[阿里DIN] 从论文源码学习 之 embedding层如何自动更新 文章目录 [阿里DIN] 从论文源码学习 之 embedding层如何自动更新 0x00 摘要 0x01 DIN源码 1.1 问题 ...
- JAVA JDK 源码学习
JAVA JDK 源码学习 ,以1.8为例,按照下面图片顺序依次学习: applet ,awt,beans,io,lang,math,net,nio,rmi,security,sql,text,tim ...
最新文章
- matlab 摄像头拍照,matlab摄像头拍照
- 怎么DIY一个粒子检测器
- visio保存后公式变形_涨姿势了!仿真变形后的模型还能保存下来
- 服务器图片(绝对地址) 客户端显示问题
- LAMP基于php模块实现个人博客搭建
- Gradle 使用技巧(二) - SO/NDK过滤
- 这是一则计算机视觉顶级会议CVPR与腾讯的爆闻,啥?
- django实现上传文件并保存
- JavaScript中的 in 操作符
- 关于android:layout_weight
- 【转】javascript 只允许输入数字总结
- 【转】阿里巴巴性能测试规划思路
- Proteus8.9 下载与安装教程
- IT面试经验:简历上项目经验怎么写?3招教你来包装!
- 基于评论的跨境电商产品满意度分析_kaic
- Scala自定义MEID效验工具类
- 论文阅读 [TPAMI-2022] On Learning Disentangled Representations for Gait Recognition
- 一键搞定Netty难关,看到NIO再也不犯糊涂了,积累总结
- 删除appstore
- 水墨画端午节PPT模板
热门文章
- 日志 aop 中 @Around(“execution(?)“)中路径的配置
- IDEA查询包含关键字的文本文件
- Fork/Join框架之双端队列
- 点击欺诈木马利用单击鼠标左键逃避检测
- linux xenserver教程,XenServer 6.5安装图文教程
- Git提示: Unable to negotiate with xxx.xxx.xxx.xxx port XX: no matching host key type found.
- 人工智能技术在电力系统的应用有哪些
- 汉高于上海投资成立创新中心,在中国巩固全球布局
- 适合企业的IT运维软件应具有哪些特点?
- java jai create 方法,b用JAI扩大Java的图象处理本领/b[Java编程]