根类是基本的数据类型和类,其他所有类都根据此建立的.
根类在Standard和MMgt两个包中实现。
用于处理动态大小的字符序列,可以通过句柄处理
处理动态大小的数据集合的类,类似于C++的集合类模版
TColStd包为TCollection包中通用类的一些经常使用实例化提供对象
类似Eigen库
类似Eigen库,其中包含对方程组的求解算法
ps:我也不理解 先跳过吧,基础用不到
值处理类型比句柄处理类型表现的更直接,操作也会更快
Standard_Integer 对应 int
Standard_Real 对应 double
Standard_ShortReal 对应 float
Standard_Boolean 对应 unsigned int
Standard_False 对应 0
Standard_True 对应 1
Standard_Character 对应 char
Standard_ExtCharacter 对应 short
Standard_Cstring 对应 char*
Standard_Address 对应 void*
Standard_Extstring 对应 short*
这里可以直接将句柄当作C++的指针就可以理解句柄的含义了
几个句柄可以同时指向同一个对象
Point和Line是Geom包的两个短暂类
Handle(Geom_Point)p1,p2;
Handle(Geom_Line)aLine;
//只是创建了空句柄,当前不指向任何对象
//如果要初始化句柄则需要new一个对象
对于持久类CartesianPoint是短暂类Point类的子类,具有句柄类型一致原则,比如
Handle(Geom_Point)p1;
Handle(Geom_CartesianPoint)p2,p3;
p2 = new Geom_CartesianPoint;
p1 = p2;//可以 , 类型是兼容的
//编译器将p1看作指向Point类的句柄,尽管p1实际不指向point
//低层句柄可以向上赋值给高层句柄 反过来则不可以
//p2 = p1不被允许
//如果一个句柄实际指向是其类的子类,则可以进行转换
p3 = Handle(Geom_CartesianPoint)::DownCast(p1);
//如果直接转换和句柄所指的对象类型不符 则句柄会被清空且指向NULL但不会产生异常
//可以用IsNUll来判断
if(p3.IsNull()) printf("类型不兼容");
//调用例子
Handle(Geom_Point)p1;
Handle(Geom_CartesianPoint)p2;
p2 = new Geom_CartesianPoint(1.0,2.0,3.0);
p1 = p2;
std::cout << "(" << p1->X() << "," << p1->Y() << "," << p1->Z() << ")" << std::endl;
//通过p2调用CartesianPoint中的SetX方法设置X
p2->SetX(20);
std::cout << "(" << p1->X() << "," << p1->Y() << "," << p1->Z() << ")" << std::endl;
运行结果
(1,2,3)
(20,2,3)
OCC异常类的使用和C++的非常相似
产生一个确定的异常则要使用Raise()
DomainError::Raise("message")
try:
{
do things;
}
catch(DomainError)
{
//处理异常
}
#include
#include
#include
void errorDemo(){
int a = -1;
Standard_OutOfRange_Raise_if(a < 0,"越界了");
}
int main() {
try{
//OCC_CATCH_SIGNALS可以允许把信号当作异常处理,用于捕获信号
OCC_CATCH_SIGNALS
errorDemo();
return 0;
}
catch(Standard_Failure){
std::cout << "异常" << std::endl;
return 1;
}
}
#include
int main()
{
TColStd_Array1OfInteger a(0,4);
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
//Lower获取起始下标 Upper获取最后一个元素下标
for(int i = a.Lower();i<=a.Upper();i++)
{
std::cout << a[i] << std::endl;
}
return 0;
}
#include
#include
//三维向量 索引区间为[1,3]
math_Vector v(1,3);
v(1) = 1.0; v(2) = 2.0; v(3) = 3.0;
//3x3的矩阵 行区间[0,2]列区间[0,2]
math_Matrix m(0,2,0,2);
//向量之间的=为值拷贝 对v2的改变不影响v1
v1 = v2;
gp包提供了一些几何实体