Opencascade源码学习之模型数据——TKGeomBase模块文件介绍

文章深入探讨了Opencascade库中TKGeomBase模块的源码,特别是针对模型数据处理的关键组件,如曲面近似、B样条曲线构造、几何实体计算及曲面投影算法等。详细介绍了AdvApp2Var、AppCont、AppDef等模块中类的功能,以及如何进行参数化、拟合和优化,还涉及了边界框生成技术。
摘要由CSDN通过智能技术生成


1、AdvApp2Var

类说明

  • AdvApp2Var_ApproxAFunc2Var:执行F(U,V)的近似。参数为:

    • Num1DSS,Num2DSS,Num3DSS:1,2,3维子空间的数量。
    • OneDTol、TwoDTol、ThreeDTol:每个子空间中的近似公差。
    • OneDTolFr,TwoDTol Fr,ThreeDTolFr:每个子空间中边界的近似容差。
    • [FirstInU,LastInU]:近似的U中边界。
    • [FirstInV,LastInV]:近似的V中边界。
    • FavorIso:优先提取F(U,V)上的U-iso或V-iso。

    警告:

    MaxDegInU(或MaxDegIn V)必须大于等于2*iu(或iv)+1,其中iu(或iv)=0、1、2,如果ContInU(或.ContInV)=GeomAbs_C0、GeomAbs_C1,GeomAbs_C2。

    MaxPatch:Patch的最大等待数量Patch的数量是您所跨越的数量。

    Func:评估F(U,V)的外部方法。

    Crit:重新定义收敛条件。

    UChoice, VChoice :定义U(或V)结点插入方式。

    警告:

    当结果是一个三维曲面,Num1DSS和Num2DSS必须等于0,并且Num3DSS必须等于1。

    警告:

    Approvx中EvaluatorFunc2Var类型的函数必须是AdvApp2Var_EvaluatorFunc2Var的子类-结果应按以下方式格式化:

    <–Num1DSS–> <–2Num2DSS–><-3Num3DSS–>

    R[0,0]… R[Num1DSS,0]…R[Dimension-1,0]

    R[0,i] … R[Num1DSS, i]…R[Dimension-1, i]

    R[0,N-1] …R[Num1DSS,N-1]… R[Dimension-1,N-1]

    每个子空间出现的顺序应与创建函数中给出的公差一致,结果也将按该顺序给出,即:

    曲面(n)将对应于Num3DSS描述的第n个条目

  • AdvApp2Var_ApproxF2var:描述dvapp2var中使用的两个变量拟合宏和原型例程

  • AdvApp2Var_Context:包含拟合的所有参数(公差、计算选项…)

  • AdvApp2Var_Criterion:这个类包含要满足的给定标准。

  • AdvApp2Var_CriterionRepartition:切割过程中,在每一个切割步骤的所有切割点的方式:步骤N为(a+i(b-a)/N)i,步骤N+1为(a+i(b-a)/(N+1))i,…,其中(a,b)是全局间隔。在切割过程的每个步骤添加一个新的切割点。

  • AdvApp2Var_CriterionType:准则不满足时准则对切削过程的影响。当误差最大值不好或如果误差最大值好且不满足标准时,取消激活误差最大值切割的计算。AdvApp2Var_Absolute,AdvApp2Var_Relative。

  • AdvApp2Var_Data、AdvApp2Var_Data_f2c:定义了一些拟合用的数据结构。

  • AdvApp2Var_EvaluatorFunc2Var:历史-转换为虚拟类的C函数指针,以摆脱静态函数和静态数据的使用。

  • AdvApp2Var_Framework:

  • AdvApp2Var_Iso:用于存储线U=Ui或V=Vj上的约束。

  • AdvApp2Var_MathBase:定义了一些数学计算的函数。

  • AdvApp2Var_Network

  • AdvApp2Var_Node:用于存储(Ui,Vj)点上的约束

  • AdvApp2Var_Patch:用于存储域[Ui,Ui+1]x[Vj,Vj+1]上的结果

  • AdvApp2Var_SysBase

2、AppCont

类说明

AppCont_Function:描述连续3d和/或函数f(u)的类。此类必须由用户提供才能使用近似算法FittingCurve。
AppCont_LeastSquare:最小二乘法拟合

3、AppDef

类说明

math_BFGS:
AppDef_BSpGradient_BFGSOfMyBSplGradientOfBSplineCompute
AppDef_BSplineCompute
math_MultipleVarFunctionWithGradient
AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute
AppDef_BSpParLeastSquareOfMyBSplGradientOfBSplineCompute
AppDef_Compute
math_BFGS
AppDef_Gradient_BFGSOfMyGradientbisOfBSplineCompute
AppDef_Gradient_BFGSOfMyGradientOfCompute
AppDef_Gradient_BFGSOfTheGradient
AppDef_SmoothCriterion
AppDef_LinearCriteria
AppDef_MultiLine
AppParCurves_MultiPoint
AppDef_MultiPointConstraint
AppDef_MyBSplGradientOfBSplineCompute
AppDef_MyGradientbisOfBSplineCompute
AppDef_MyGradientOfCompute
AppDef_MyLineTool
math_MultipleVarFunctionWithGradient
AppDef_ParFunctionOfMyGradientbisOfBSplineCompute
math_MultipleVarFunctionWithGradient
AppDef_ParFunctionOfMyGradientOfCompute
math_MultipleVarFunctionWithGradient
AppDef_ParFunctionOfTheGradient
AppDef_ParLeastSquareOfMyGradientbisOfBSplineCompute
AppDef_ParLeastSquareOfMyGradientOfCompute
AppDef_ParLeastSquareOfTheGradient
AppDef_ResConstraintOfMyGradientbisOfBSplineCompute
AppDef_ResConstraintOfMyGradientOfCompute
AppDef_ResConstraintOfTheGradient
AppDef_SmoothCriterion
math_MultipleVarFunctionWithGradient
AppDef_TheFunction
AppDef_TheGradient
AppDef_TheLeastSquares
AppDef_TheResol
AppDef_Variational

类图

math_BFGS
AppDef_BSpGradient_BFGSOfMyBSplGradientOfBSplineCompute
AppDef_Gradient_BFGSOfMyGradientbisOfBSplineCompute
AppDef_Gradient_BFGSOfMyGradientOfCompute
AppDef_Gradient_BFGSOfTheGradient
math_MultipleVarFunctionWithGradient
AppDef_BSpParFunctionOfMyBSplGradientOfBSplineCompute
AppDef_ParFunctionOfMyGradientbisOfBSplineCompute
AppDef_ParFunctionOfMyGradientOfCompute
AppDef_ParFunctionOfTheGradient
AppDef_TheFunction
AppDef_SmoothCriterion
AppDef_LinearCriteria
AppParCurves_MultiPoint
AppDef_MultiPointConstraint

4、AppParCurves

类说明

AppParCurvesn:n条曲线中的平行拟合。该软件包提供了用于拟合的工具,MLineTool所描述的MultiLine的所有算法。拟合的结果将是一个多曲线。
AppParCurves_Constraint:
- 无约束:该点没有约束。
- 通过点:近似曲线通过该点。
- 相切点:该点具有相切约束。
- CurvaturePoint:该点具有曲率约束。
AppParCurves_ConstraintCouple:关联对象的索引和约束。AppDef_TheVariational在执行拟合时使用此对。
AppParCurves_MultiBSpCurve:此类描述近似于多线的多条B样条曲线。正如多线是一组给定数量的线一样,多BSPCurve是一组指定数量的B样条曲线,定义如下:
-指定数量的多点
-指定数量曲线的极点(控制点)
-每个指定数量的曲线的拟合阶数相同
AppParCurves_MultiCurve:此类描述近似多线的多曲线。由于“多线”是一组n条线,因此“多曲线”是一组n条曲线。这些曲线是贝塞尔曲线。多曲线由m个多点组成。这n条曲线的拟合阶数都是相同的。
AppParCurves_MultiPoint:此类描述组成多点的点。这些点可以是2D或3D。用户必须首先给出三维点,然后是二维点。它们是贝塞尔曲线的极点。此类用于定义并行执行多个拟合时的数据输入或结果。

5、Approx

类说明

  • Approx_Curve2d:对Adaptor3d的HCurve2d进行拟合

  • Approx_Curve3d:

  • Approx_CurveOnSurface:曲面上的曲线拟合。

  • Approx_CurvilinearParameter:曲线的近似,使其参数成为曲线横坐标。如果曲线是曲面S上的曲线,C2D是相应的Pcurve,我们认为曲线是由其表示S(C2D(u))给出的。如果该曲线是两个表面S1和S2上的曲线,并且C2D1和C2D2是两个对应的P曲线,则我们认为该曲线由其表示1/2(S1(C2D1(u)+S2(C2D2(u))给出。

  • Approx_CurvlinFunc:使用曲线参数化定义抽象曲线

  • Approx_FitAndDivide:在达到公差之前,将对MultiLine<Line>进行拟合。如果对应的布尔值为True,则将通过切割从degreemin到degreemax进行拟合。

  • Approx_FitAndDivide2d:

  • Approx_MCurvesToBSpCurve:将复合多曲线转为B样条曲线。

  • Approx_ParametrizationType:

    • Approx_ChordLength:点的参数与它们之间的距离成比例;
    • Approx_Centripetal:点的参数与它们之间距离的平方根成比例
    • Approx_IsoParametric:点的参数分布均匀
  • Approx_SameParameter:曲面上P曲线的拟合,使其参数与给定三维参考曲线的参数相同。

  • Approx_Status:它是内部计算中使用的辅助标志

  • Approx_SweepApproximation:由截面定律定义的曲面S(u,v)的近似(并最终关联2d曲线)。该曲面由函数F(u,v)定义,其中Ft(u)=F(u、t),且是b样条曲线。

    要使用此算法,必须将Ft(u)实现为Approv_SweepFunction的导数类。

    该算法可用于混合、扫描…

  • Approx_SweepFunction:定义了SweepApproximation用于执行扫描应用程序的函数。

6、BndLib

类说明

BndLib包提供了将几何图元添加到边界框的函数。

注意:这些函数适用于gp对象,可以选择受参数值的限制。如果gp包提供的曲线和曲面没有显式参数化,它们仍然具有隐式参数化功能,类似于它们为等效的Geom或Geom2d对象推断的参数化功能。

Add:用于在二维和三维中从gp计算基本对象的边界框的包。

AddCurve2d:一个类,用于计算二维曲线的边界框;曲线是由一个工具定义的

AddCurve:一个用于计算三维曲线边界框的类;曲线是由一个工具定义的

AddSurface:用于计算曲面边界框的类。

曲面由一个用于几何图形的工具和另一个用于拓扑的工具定义(仅二维中的边)

BndLib
BndLib_Add2dCurve
BndLib_Add3dCurve
BndLib_AddSurface

7、CPnts

类说明

  • CPnts_AbscissaPoint:该算法计算曲线上与曲线上另一点相距给定距离的点。我们可以实例化Adaptor3d的Curve、gp的Pnt、gp的Vec或Adaptor2d的Curve2d、gp的Pnt2d、gp的Vec2d。

  • CPnts_MyGaussFunction:计算高斯的值的实现。

  • CPnts_MyRootFunction:实现牛顿算法的函数,以找到Integral(F)=L的解(计算牛顿曲线的长度和导数)

  • CPnts_UniformDeflection:

  • 类定义了一种算法,用于在给定参数化曲线或修剪圆的恒定偏转位置创建一组点(具有给定弦偏差)。曲线的连续性必须至少为C2。

    用法如下。

    class myUniformDFeflection instantiates
    UniformDeflection(Curve, Tool);
     Curve C; // Curve inherits from Curve or Curve2d from Adaptor2d
     myUniformDeflection Iter1;
     DefPntOfmyUniformDeflection P;
    
     for(Iter1.Initialize(C, Deflection, EPSILON, True);
     Iter1.More();
     Iter1.Next()) {
     P = Iter1.Value();
     ... make something with P
     }
     if(!Iter1.IsAllDone()) {
     ... something wrong happened
     }
    

类图

math_Function
CPnts_MyGaussFunction
math_FunctionWithDerivative
CPnts_MyRootFunction

8、Extrema

类说明

Extrema_CCLocFOfLocECC:
Extrema_CCLocFOfLocECC2d
Extrema_Curve2dTool
Extrema_CurveTool
Extrema_ECC
Extrema_ECC2d
Extrema_ElementType
Extrema_ELPCOfLocateExtPC
Extrema_ELPCOfLocateExtPC2d
Extrema_EPCOfELPCOfLocateExtPC
Extrema_EPCOfELPCOfLocateExtPC2d
Extrema_EPCOfExtPC
Extrema_EPCOfExtPC2d
Extrema_ExtAlgo
Extrema_ExtCC:它计算两条曲线之间的所有距离。这些距离可以是最大的,也可以是最小的。
Extrema_ExtCC2d:计算两条2d曲线之间的所有距离
Extrema_ExtCS:它计算曲线和曲面之间的所有极值距离。这些距离可以是最小的,也可以是最大的。
Extrema_ExtElC:它计算两条基本曲线之间的所有距离。这些距离可以是最大的,也可以是最小的。
Extrema_ExtElC2d:它计算两条2d基本曲线之间的所有距离
Extrema_ExtElCS:它计算曲线和曲面之间的所有距离。这些距离可以是最大的,也可以是最小的。
Extrema_ExtElSS:它计算两个基本曲面之间的所有距离。这些距离可以是最大的,也可以是最小的。
Extrema_ExtFlag:
Extrema_ExtPC
Extrema_ExtPC2d
Extrema_ExtPElC:它计算一个点和一条基本曲线之间的所有距离。这些距离可以是最小的,也可以是最大的。
Extrema_ExtPElC2d:它计算一个点和一条基本曲线之间的所有距离。
Extrema_ExtPElS:它计算一个点和一个曲面之间的所有极值距离。这些距离可以是最小的,也可以是最大的。
Extrema_ExtPExtS:它计算点和线性拉伸曲面之间的所有极值(最小和最大)距离。
Extrema_ExtPRevS:它计算点和旋转表面之间的所有极值(最小和最大)距离。
Extrema_ExtPS:它计算一个点和一个曲面之间的所有极值距离。这些距离可以是最小的,也可以是最大的。
Extrema_ExtSS:它计算两个曲面之间的所有极值距离。这些距离可以是最小的,也可以是最大的。
Extrema_FuncExtCS:用于查找曲线和曲面之间距离的极值的函数。
Extrema_FuncExtSS:查找两个曲面之间距离的极值的函数。
Extrema_FuncPSDist:从近似解(u0,v0)开始,用于搜索点P和曲面S之间的平方欧几里得距离的极值。该类继承了math_MultipleVarFunctionWithGradient,因此打算在math_BFGS算法中使用。标准方程为:
F = SquareDist(P, S(u, v)) - > min。
一阶导数为:
F1(u,v)=(S(u,v)-P)*Su;
F2(u,v)=(S(u,v)-P)*Sv;
Su和Sv是曲面的一阶导数,*符号表示点积。
Extrema_FuncPSNorm:
从近似解(u0,v0)开始,用于搜索点P和曲面S之间距离的极值。
该类继承了math_FunctionSetWithDerivatives,因此用于math_FFunctionSetRoot算法。
将曲面S(u,v)的导数分别表示为u和v,表示为Su和Sv,要作废的两个函数为:
F1(u,v)=(S-P)*Su
F2(u,v)=(S-P)*Sv
函数的导数为:
Duf1(u,v)=Su^2+(S-P)*Suu;
Dvf1(u,v)=Su*Sv+(S-P)*Suv
Duf2(u,v)=Sv*Su+(S-P)*Suv=Dvf1
Dvf2(u,v)=Sv^2+(S-P)*Svv
这里*表示标量乘积,^2是平方幂。
Extrema_GenExtCS、Extrema_GenExtPS、Extrema_GenExtSS:它计算曲线、点、曲面和曲面之间的所有极值距离。这些距离可以是最小的,也可以是最大的。
Extrema_GenLocateExtCS、Extrema_GenLocateExtPS、Extrema_GenLocateExtSS:通过两个接近点,它可以计算曲线和曲面、点和曲面、两个曲面之间的距离。这个距离可以是最小值,也可以是最大值。
Extrema_GlobOptFuncCCC0:该类实现了在C1和C2连续性为C0的情况下,计算曲线上的点和其他曲线上点之间的欧氏距离的函数。
Extrema_GlobOptFuncConicS:该类实现了计算曲面上的点和圆锥曲线上最近点之间的平方欧氏距离的函数。
Extrema_GlobOptFuncCQuadric:该类实现了计算曲面上的点和圆锥曲线上最近点之间的平方欧氏距离的函数。
Extrema_GlobOptFuncCS:该类实现了在连续性为C2的情况下计算曲线上的点和曲面上的点之间的平方欧氏距离的函数。
Extrema_LocateExtCC:它计算具有一个闭合点的两条曲线之间的距离;这些距离可以是最大的,也可以是最小的。
Extrema_LocateExtCC2d:它计算2d具有一个闭合点的两条曲线之间的距离;这些距离可以是最大的,也可以是最小的。
Extrema_LocateExtPC
Extrema_LocateExtPC2d
Extrema_LocECC
Extrema_LocECC2d
Extrema_LocEPCOfLocateExtPC
Extrema_LocEPCOfLocateExtPC2d
Extrema_PCFOfEPCOfELPCOfLocateExtPC
Extrema_PCFOfEPCOfELPCOfLocateExtPC2d
Extrema_PCFOfEPCOfExtPC
Extrema_PCFOfEPCOfExtPC2d
Extrema_PCLocFOfLocEPCOfLocateExtPC
Extrema_PCLocFOfLocEPCOfLocateExtPC2d
Extrema_POnCurv
Extrema_POnCurv2d
Extrema_POnSurf:曲面上的点的定义。
Extrema_POnSurfParams:曲面上点参数的数据容器。需要这些参数来计算极值计算的初始近似值。

类图

math_FunctionSetWithDerivatives
Extrema_CCLocFOfLocECC
Extrema_CCLocFOfLocECC2d
Extrema_FuncExtCS
Extrema_FuncExtSS
math_MultipleVarFunction
Extrema_GlobOptFuncCCC0
Extrema_GlobOptFuncConicS
Extrema_GlobOptFuncCQuadric
math_FunctionWithDerivative
Extrema_PCFOfEPCOfELPCOfLocateExtPC
Extrema_PCFOfEPCOfELPCOfLocateExtPC2d
Extrema_PCFOfEPCOfExtPC
Extrema_PCFOfEPCOfExtPC2d
Extrema_PCLocFOfLocEPCOfLocateExtPC
Extrema_PCLocFOfLocEPCOfLocateExtPC2d
math_MultipleVarFunctionWithGradient
Extrema_FuncPSDist
math_FunctionSetWithDerivatives
Extrema_FuncPSNorm
math_MultipleVarFunctionWithHessian
Extrema_GlobOptFuncCS
Extrema_POnSurf
Extrema_POnSurfParams

9、FEmTool

类说明:

FEmTool_Assembly
FEmTool_Curve
FEmTool_ElementaryCriterion
math_FunctionSet
FEmTool_ElementsOfRefMatrix
FEmTool_ElementaryCriterion
FEmTool_LinearFlexion
FEmTool_LinearJerk
FEmTool_LinearTension
FEmTool_SparseMatrix
EmTool_ProfileMatrix

类图:

math_FunctionSet
FEmTool_ElementsOfRefMatrix
FEmTool_ElementaryCriterion
FEmTool_LinearFlexion
FEmTool_LinearJerk
FEmTool_LinearTension
FEmTool_SparseMatrix
FEmTool_ProfileMatrix

10、GC

类说明:构造圆弧、椭圆弧、双曲线弧、抛物线弧、圆、圆锥曲面、圆柱曲面、椭圆、双曲线、直线、镜像、平面、旋转、缩放、分段、矩阵变换、分割圆台、分割圆柱,以及这些类的根节点

GC_Root
GC_MakeArcOfCircle
GC_MakeArcOfEllipse
GC_MakeArcOfHyperbola
GC_MakeArcOfParabola
GC_MakeCircle
GC_MakeConicalSurface
GC_MakeCylindricalSurface
GC_MakeEllipse
GC_MakeHyperbola
GC_MakeLine
GC_MakeMirror
GC_MakePlane
GC_MakeRotation
GC_MakeScale
GC_MakeSegment
GC_MakeTranslation
GC_MakeTrimmedCone
GC_MakeTrimmedCylinder

类图

GC_Root
GC_MakeArcOfCircle
GC_MakeArcOfEllipse
GC_MakeArcOfHyperbola
GC_MakeArcOfParabola
GC_MakeCircle
GC_MakeConicalSurface
GC_MakeCylindricalSurface
GC_MakeEllipse
GC_MakeHyperbola
GC_MakeLine
GC_MakeMirror
GC_MakePlane
GC_MakeSegment
GC_MakeTrimmedCone
GC_MakeTrimmedCylinder

11、gce

类说明:和GC模块类似

gce_ErrorType
gce_Root
gce_MakeCirc
gce_MakeCirc2d
gce_MakeCone
gce_MakeCylinder
gce_MakeDir
gce_MakeDir2d
gce_MakeElips
gce_MakeElips2d
gce_MakeHypr
gce_MakeHypr2d
gce_MakeLin
gce_MakeLin2d
gce_MakeMirror
gce_MakeMirror2d
gce_MakeParab
gce_MakeParab2d
gce_MakePln
gce_MakeRotation
gce_MakeRotation2d
gce_MakeScale
gce_MakeScale2d
gce_MakeTranslation
gce_MakeTranslation2d

类图

gce_Root
gce_MakeCirc
gce_MakeCirc2d
gce_MakeCone
gce_MakeCylinder
gce_MakeDir
gce_MakeDir2d
gce_MakeElips
gce_MakeElips2d
gce_MakeHypr
gce_MakeHypr2d
gce_MakeLin
gce_MakeLin2d
gce_MakeParab
gce_MakeParab2d
gce_MakePln

12、GCE2d

类说明:

GCE2d_MakeArcOfCircle
GCE2d_MakeArcOfEllipse
GCE2d_MakeArcOfHyperbola
GCE2d_MakeArcOfParabola
GCE2d_MakeCircle
GCE2d_MakeEllipse
GCE2d_MakeHyperbola
GCE2d_MakeLine
GCE2d_MakeMirror
GCE2d_MakeParabola
GCE2d_MakeRotation
GCE2d_MakeScale
GCE2d_MakeSegment
GCE2d_MakeTranslation
GCE2d_Root

类图

GCE2d_Root
GCE2d_MakeArcOfCircle
GCE2d_MakeArcOfEllipse
GCE2d_MakeArcOfHyperbola
GCE2d_MakeArcOfParabola
GCE2d_MakeCircle
GCE2d_MakeEllipse
GCE2d_MakeHyperbola
GCE2d_MakeLine
GCE2d_MakeParabola
GCE2d_MakeSegment

13、GCPnts

类说明:

  • GCPnts_AbscissaPoint:提供一种算法来计算曲线上与曲线上的另一点相距给定距离的点,沿着曲线测量的距离(曲线上的曲线横坐标)。该算法也用于计算曲线的长度。AbcissaPoint对象提供了一个框架,用于:

    • 定义要计算的点
    • 构造算法的实现
    • 查阅结果
  • GCPnts_AbscissaType:

  • GCPnts_DeflectionType:

  • GCPnts_DistFunction:类来定义函数,该函数计算曲线C(u)、U1<=u<=U2上的点与通过点C(U1)和C(U2)的线之间的平方距离。该函数用于任何最小化算法中,以定义曲线和直线之间的最大偏差,它需要一个没有导数的变量函数(例如math_BrentMinimum)。

  • GCPnts_DistFunction2d:

  • GCPnts_QuasiUniformAbscissa:此类提供了一种算法来计算曲线上点的均匀横坐标分布,即等距点序列。两个连续点之间的距离是沿着曲线测量的。分布由多个点定义。

  • GCPnts_QuasiUniformDeflection:这个类计算曲线上点的分布。这些点可以考虑偏转。

    该算法不是基于经典预测(具有曲线的二阶导数),而是基于两点的中点和中点参数的点之间的距离的评估,或者基于两点及其切线的三次插值的中点和参数0.5处的点之间距离的评估。

    注意:该算法比GCPnts_UniformDeflection算法更快,并且能够处理非“C2”连续曲线。然而,它会在分布中生成更多的点。

  • GCPnts_TangentialDeflection:

    计算包Adaptor3d中曲线上的一组点,例如两个连续点P1(u1)和P2(u2)之间的点:

    //! . ||P1P3^P3P2||/||P1P3||*||P3P2||<AngularDeflection
    //! . ||P1P2^P1P3||/||P1P2||<CurvatureDeflection
    

    其中P3是横坐标点((u1+u2)/2),u1是点P1的横坐标,u2是点P2的横坐标。

    ^是两个向量的叉积,并且||P1P2||是向量P1P2的大小。

    施工时必须满足条件AngularDeflection>gp::Resolution()和CurvatureDeflection>gp::Resolution()。对于线性或圆形元素,可以固定最小数量的点。

    例子:

    Handle(Geom_BezierCurve) aCurve = new Geom_BezierCurve (thePoles); GeomAdaptor_Curve aCurveAdaptor (aCurve);
    double aCDeflect  = 0.01; // Curvature deflection
    double anADeflect = 0.09; // Angular   deflection
    GCPnts_TangentialDeflection aPointsOnCurve;
    aPointsOnCurve.Initialize (aCurveAdaptor, anADeflect, aCDeflect);
    for (int i = 1; i <= aPointsOnCurve.NbPoints(); ++i)
    {
      double aU   = aPointsOnCurve.Parameter (i);
      gp_Pnt aPnt = aPointsOnCurve.Value (i);
    }
    
  • GCPnts_TCurveTypes

  • GCPnts_UniformAbscissa:此类允许计算曲线上点的均匀分布(即,所有点的距离相等)。

  • GCPnts_UniformDeflection:

    提供一种算法来计算“C2”连续曲线上的点分布。

    该算法遵循由计算的点产生的曲线和多边形之间的最大偏转的标准。

    注意:此算法相对耗时。

    GCPnts_QuasiUniformDeflection算法速度更快;

    它也可以处理非’C2’连续曲线,但它会在分布中生成更多的点。

14、Geom2dConvert

类说明

  • Geom2dConvert:该包提供了一种算法实现,用于在包Geom2d中的等效几何实体之间进行转换。它提供了一种可能性:

    • 以获得有界曲线的B样条表示。

    • 为了将一条B样条曲线分割成几个具有一些连续性约束的B样条线曲线,

    • .将一条B样条曲线转换为多条贝塞尔曲线或曲面。

      此程序包中使用的所有几何实体都是有界的。

  • Geom2dConvert_ApproxCurve:用于将二维曲线转换为B样条线的框架。这是通过在给定公差范围内进行拟合来完成的。

  • Geom2dConvert_BSplineCurveKnotSplitting:

    一种算法,用于确定B样条曲线应该分割的点,以便获得相同连续性的圆弧。

    如果计算需要具有最小连续性的曲线,那么了解圆弧之间具有给定阶数连续性的点是很有用的。连续性顺序在施工时给出。

    对于B样条曲线,不连续性位于节点值处。在两个节点值之间,B样条线是无限且连续可微的。在给定的节点上,连续性等于:Degree-Mult,其中Degree是B样条曲线的阶数,Mult是节点的多重性。

    可以使用Geom2dConvert包提供的全局函数SplitBSplineCurve来计算与此拆分相对应的圆弧。

    BSplineCurveKnotSplitting对象提供了一个框架,用于:

    • 定义要分析的曲线和所需的连续性程度,

    • 实现所述计算算法,以及

    • 查阅结果。

  • Geom2dConvert_BSplineCurveToBezierCurve:

    一种将B样条曲线转换为一系列相邻贝塞尔曲线的算法。

    BSplineCurveToBezierCurve对象提供了一个框架,用于:

    • 定义要转换的B样条曲线

    • 实现构造算法,以及

    • 查阅结果。

  • Geom2dConvert_CompCurveToBSplineCurve:算法转换并连接BSPrineCurve中的多条曲线

15、GeomConvert

类说明

  • GeomConvert:

    GeomConvert包提供了一些全局函数,如下所示

    • 将经典Geom曲线转换为B样条曲线,

    • 分割B样条曲线,特别是在节点值处:此函数可与GeomConvert_BSplineCurveKnotSplitting类结合使用,将B样条线曲线分割为符合所需连续性级别的圆弧,

    • 将经典Geom曲面转换为B样条曲面,以及

    • 分割B样条线曲面,特别是在节点值处:此函数可与GeomConvert_BSplineSurfaceKnotSplitting类结合使用,将B样条曲线曲面分割为符合所需连续性级别的面片。

      此程序包中使用的所有几何实体都是有界的。

  • GeomConvert_ApproxCurve:用于将三维曲线转换为三维B样条线的框架。这是通过在给定公差内近似B样条曲线来完成的。

  • GeomConvert_ApproxSurface:用于将曲面转换为B样条线曲面的框架。这是通过在给定公差内近似B样条线曲面来完成的。

  • GeomConvert_BSplineCurveKnotSplitting:一种算法,用于确定B样条曲线应该分割的点,以便获得相同连续性的圆弧。

    如果计算需要具有最小连续性的曲线,那么了解圆弧之间具有给定阶数连续性的点是很有用的。连续性顺序在施工时给出。

    对于B样条曲线,不连续性位于节点值处。在两个节点值之间,B样条线是无限且连续可微的。在给定的节点上,连续性等于:Degree-Mult,其中Degree是B样条曲线的阶数,Mult是节点的多重性。

    可以使用GeomConvert包提供的全局函数SplitBSplineCurve来计算与此拆分相对应的圆弧。

    BSplineCurveKnotSplitting对象提供了一个框架,用于:

    • 定义要分析的曲线和所需的连续性程度,

    • 实现所述计算算法,以及

    • 查阅结果。

  • GeomConvert_BSplineCurveToBezierCurve:一种将B样条曲线转换为一系列相邻贝塞尔曲线的算法。BSplineCurveToBezierCurve对象提供了一个框架,用于:

    • 定义要转换的B样条曲线

    • 实现构造算法,以及

    • 查阅结果。

  • GeomConvert_BSplineSurfaceKnotSplitting:

    一种确定等参曲线的算法,应沿该等参曲线分割B样条曲面,以获得具有相同连续性的面片。连续性顺序在施工时给出。可以使用封装SplitBSplineSurface的方法来计算与分割相对应的曲面面片。

    对于B样条曲面,不连续性位于节点值处。在两个节点值之间,B样条线是无限连续可微的。对于范围索引节点处的每个参数方向,该方向上的连续性等于:Degree-Mult(索引),其中Degree是基本B样条函数的次数,Mult是

    范围索引的结在给定方向上的多重性。

    如果您的计算需要具有最小连续性的B样条曲面,那么了解B样条面片在哪些节点值之间具有给定阶数的连续性可能会很有趣。

    该算法计算应该分割曲面的节点的索引,以获得在构建时具有恒定连续性的面片。如果你只想计算曲面上的局部导数,而不需要创建BSpline补丁,你可以使用Geom包中BSplineSurface类的函数LocalD1、LocalD2、LocalD3、LocalDN。

  • GeomConvert_BSplineSurfaceToBezierSurface:

    该算法将一个B样条曲面转换为多个Bezier曲面。它使用了一种打结插入算法。

    BSplineSurfaceToBezierSurface对象提供了一个框架,用于:

    • 定义要转换的B样条线表面,

    • 实现构造算法,以及

    • 查阅结果。

  • GeomConvert_CompBezierSurfacesToBSplineSurface:

    一种将相邻非有理Bezier曲面的网格(具有连续性CM)转换为B样条曲面(具有连续度CM)的算法。CompBezierSurfacesToBSplineSurface对象提供了一个框架,用于:

    • 定义要转换为B样条曲面的相邻贝塞尔曲面的网格,

    • 实现所述计算算法,以及

    • 查阅结果。

  • GeomConvert_CompCurveToBSplineCurve:算法转换并连接BSPrineCurve中的多条曲线

  • GeomConvert_Units:类包含二维geom对象的转换方法。

16、GeomLib

类说明

  • GeomLib:Geom库。该软件包提供了Geom和Geom2d软件包中几何实体基本计算功能的实现。

  • GeomLib_Check2dBSplineCurve:检查端点切线:这些切线是否反转;

  • GeomLib_CheckBSplineCurve:检查端点切线:关于第三个或第n-3个控件,这些切线是否颠倒

  • GeomLib_CheckCurveOnSurface:计算某个曲面中三维曲线和二维曲线之间的最大距离。

  • GeomLib_DenominatorMultiplier:这为CancelDenominatorDerivative将在一个方向上使用的2个变量的函数定义了一个计算器。

  • GeomLib_Interpolate:该类用于通过在给定参数下插值来构造B样条曲线。

  • GeomLib_InterpolationErrors:

  • GeomLib_IsPlanarSurface:查找曲面是否为平面曲面。

  • GeomLib_LogSample

  • GeomLib_MakeCurvefromApprox:此类用于拟合(AdvApprovx中的ApprovsAFunction)构造B样条曲线。

  • GeomLib_PolyFunc:多项式函数

  • GeomLib_Tool:为Geom2d和Geom曲线和曲面提供各种方法。

    此类方法计算曲线或曲面上给定点的参数。为了获得有效的结果,点必须位于离曲线(曲面)相当近的位置,或者至少可以获得明确的结果(不要将点放在圆心…),但曲线/曲面和点之间的“信任”距离的选择由用户负责(参数MaxDist)。

    如果点超出MaxDist限制或计算失败,则返回FALSE。

17、GeomProjLib

类说明

  • GeomProjLib:曲面上曲线的投影。

18、GeomTools

类说明

  • GeomTools:GeomTools包为几何体提供了实用程序。
    *SurfaceSet、CurveSet和Curve2dSet:用于转储、写入和读取的工具。
    *转储、写入、读取曲线和曲面的方法。
  • GeomTools_Curve2dSet:存储Geom2d中的一组曲线。
  • GeomTools_CurveSet:存储Geom中的一组曲线。
  • GeomTools_SurfaceSet:存储Geom中的一组曲面。
  • GeomTools_UndefinedTypeHandler

19、Hermit

类说明

Hermit:这用于重新参数化Rational B样条曲线,以便我们稍后可以将它们连接起来以构建C1曲线。它从埃尔米特插值开始构建1维重新参数化函数,并添加节点和修改以这种方式获得的1维 B样条线的极点。目标是建立a(u),这样如果我们考虑B样条曲线
N(u)
f(u)=-----
D(u)

函数a(u)D(u)在umin和umax处具有值1,并且具有0.0e0的导数值a umin和umix。

20、IntAna

类说明

  • IntAna_Curve:参数曲线的定义,它是两个二次曲面相交的结果。

  • IntAna_Int3Pln:3个平面之间的交点。该算法搜索一个交点。如果其中两个平面平行或相同,IsEmpty将返回TRUE。

  • IntAna_IntConicQuad:此类提供了定义为gp(Lin,Circ,Elips,Parab,Hypr)元素的圆锥曲线与IntAna中定义的二次曲面之间的分析交集。圆锥曲线和平面之间的相交被视为一种特殊情况。交点的结果是与圆锥曲线上的参数相关联的点(来自gp的Pnt)。

  • IntAna_IntLinTorus:直线和圆环体之间的交点。

  • IntAna_IntQuadQuad:

    此类提供gp中的圆柱体或圆锥体与另一个二次曲面之间的分析交集,如IntAna中的二次曲面类中所定义。当几何交集(IntAna中的类QuadQuadGeo)没有返回几何解时,使用此算法。

    交叉口的结果可能是

    • 在类Curve from IntAna中定义的曲线

    • 点(来自gp的Pnt)

  • IntAna_QuadQuadGeo:两个自然二次曲面(球体、圆柱体、圆锥体、来自gp的Pln)之间的几何交点。

    可能的交叉点有:

    • 1个点

    • 1或2线

    • 1个点和1个线

    • 1个圆圈

    • 1个椭圆

    • 1条抛物线

    • 1或2个双曲线。

    • 空:两个二次曲面之间没有交集。

    • 相同:二次曲面相同

    • NoGeometricSolution:可能存在交叉点,但有必要使用分析算法来确定。

  • IntAna_Quadric: 此类通过自然坐标系中的系数来描述四边形。

  • IntAna_ResultType

21、IntAna2d

类说明

  • IntAna2d_AnaIntersection:

    执行以下各项之间的分析交集:

    -两个Lin2d,

    -两个Circ2d,

    -Lin2d和Circ2d,

    -gp的一个元素(Lin2d、Circ2d、Elips2d、Parab2d、Hypr2d)

    和另一个圆锥曲线。

    所有交叉点都没有给出公差:公差将是“精密机器”。

  • IntAna2d_Conic:二次曲线通过其隐式四元方程的定义。

  • IntAna2d_IntPoint:两个二维元素之间的几何相交。

  • MyDirectPolynomialRoots

22、ProjLib

类说明

  • ProjLib:

    projLib包首先提供沿给定方向在平面上投影曲线。结果将是一条3D曲线。
    ProjLib软件包提供曲面上曲线的投影,以计算参数空间中的曲线。
    假设曲线在曲面上。
    它提供了
    *处理最简单情况的方法:

    • 平面上的直线、圆、椭圆、抛物线、双曲线。
    • 圆柱体上的直线、圆。
    • 直线,圆锥体上的圆。
    • 处理一般情况的类:
    • 平面
    • 圆柱
    • 圆锥
    • 圆环
      一个通用类,用于在Adaptor3d的曲面上处理Adaptor3d中的曲线。
  • ProjLib_CompProjectedCurve

  • ProjLib_ComputeApprox:拟合分析曲面上三维曲线的投影,并将结果存储在拟合中。

    结果是一条二维曲线。为了拟合,使用了一些参数,包括:所需的近似公差。

    公差是投影曲线的三维投影与“精确”三维投影的三维偏差的最大可能值。由于该算法搜索曲面上的二维曲线,因此需要借助曲面的U、V分辨率从三维公差中计算出所需的二维公差。

    三维和二维公差只对曲面上的曲线有意义,它定义了投影和拟合的精度,与投影曲线和曲面之间的距离无关。

  • ProjLib_ComputeApproxOnPolarSurface:

    拟合三维曲线在极性表面上的投影,并将结果存储在拟合中。

    结果是一条二维曲线。对2d曲线的当前点的评估是通过对极值P3d-曲面的评估来完成的。

    对于拟合,使用了一些参数,包括所需的近似公差。

    公差是投影曲线的三维投影与“精确”三维投影的三维偏差的最大可能值。由于该算法搜索曲面上的二维曲线,因此需要借助曲面的U、V分辨率从三维公差中计算出所需的二维公差。

    三维和二维公差只对曲面上的曲线有意义,它定义了投影和拟合的精度,与投影曲线和曲面之间的距离无关。

  • ProjLib_Cone、ProjLib_Cylinder、ProjLib_Plane、ProjLib_Sphere、ProjLib_Torus:将基本曲线投影到圆锥体、圆柱、平面上、球面、圆环面上。

  • ProjLib_PrjFunc

  • ProjLib_PrjResolve

  • ProjLib_ProjectedCurve:

    计算二维曲线。如果可能的话,试着解决这个特殊的案件。否则,将进行拟合。对于拟合,使用了一些参数,包括所需的近似公差。

    公差是投影曲线的三维投影与“精确”三维投影的三维偏差的最大可能值。由于该算法搜索曲面上的二维曲线,因此需要借助曲面的U、V分辨率从三维公差中计算出所需的二维公差。

    三维和二维公差只对曲面上的曲线有意义,它定义了投影和拟合的精度,与投影曲线和曲面之间的距离无关。

  • ProjLib_ProjectOnPlane:用于在平面上投影三维曲线的类。结果将是一条三维曲线。

    可以要求投影曲线具有与原始曲线相同的参数化。

    投影可以沿着不平行于平面的每个方向进行。

  • ProjLib_ProjectOnSurface:在曲面上投影曲线。结果(三维曲线)将是近似值

  • ProjLib_Projector:投影算法的根类,存储结果。

类图

ProjLib_Projector
ProjLib_Cone
ProjLib_Cylinder
ProjLib_Plane
ProjLib_Sphere
ProjLib_Torus
math_FunctionSetWithDerivatives
ProjLib_PrjFunc
Adaptor2d_Curve2d
ProjLib_CompProjectedCurve
ProjLib_ProjectedCurve
Adaptor3d_Curve
ProjLib_ProjectOnPlane
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值