CATIA CAA二次开发实现获取几何曲线所对应的具体类型

测试模型:模型中在面上开了三个标准圆孔,一个椭圆孔
在这里插入图片描述
代码:如果你需要获取具体几何对象的信息,将指针强制类型转换以下就可以。没错,这里我又偷懒了!!!

HRESULT CAAStarterCmd::GetGeometryObjectType(CATBody_var &ispBody){
	//检验输入Body是否为null
	if(!ispBody)
		return S_FALSE;
	//get all CATLoop,因为Loop是用来限制Face的,
	//那么你所获取的几何曲线的直接基类应该是CATPCurve
	//首先必须明确这一点,在之后的操作中我们都使用GetGeometryOnFace方法来获取曲线。
	//虽然我们采用GetCurve也可以获取到曲线,没方法将曲线类型区分开。
	CATLocation location;
	CATUnicodeString str;
	CATLISTP(CATDomain)olistDomain;
	ispBody->GetAllDomains(1,2,olistDomain);//这里偷了下懒,
	//要想能够测试CATCircleType、CATEllipseType等空间曲线的类型,要自己改一下,才能通用。
	CATLISTP(CATCell)olistCell;//get all edge
	for (int i=1;i<=olistDomain.Size();i++)
	{
		if (olistDomain[i]->IsATypeOf(CATLoopType))
		{
			olistDomain[i]->GetAllCells(olistCell,1);
			location=olistDomain[i]->GetLocation();
			if (location==CATLocationInner)
			{
				str="Inner";
				}else{
					str="outer";
				}
			CATCell*pDomainOwner=olistDomain[i]->GetOwningCell(ispBody);
			for (int j=1;j<=olistCell.Size();j++)
			{
				CATEdge*pEdge=(CATEdge*)olistCell[j];
				CATSide side=pEdge->GetSideOnFace((CATFace*)pDomainOwner);
				CATPCurve*pCurve=pEdge->GetGeometryOnFace((CATFace*)pDomainOwner,side);
				if(!pCurve)
					return S_FALSE;
				if (pCurve->IsATypeOf(CATPCircleType))
				{
				cout<<"this curve is a circle :"<<str<<endl;
				}
				if (pCurve->IsATypeOf(CATPEllipseType))
				{
				cout<<"this curve is a Ellipse:"<<str<<endl;
				}
				if (pCurve->IsATypeOf(CATPLineType))
				{
				cout<<"this curve is a Line:"<<str<<endl;

				}
			}
		}
		if (olistDomain[i]->IsATypeOf(CATWireType))
		{
		olistDomain[i]->GetAllCells(olistCell,1);
		CATCell*pDomainOwner=olistDomain[i]->GetOwningCell(ispBody);
		for (int j=1;j<=olistCell.Size();j++)
			{
				CATEdge*pEdge=(CATEdge*)olistCell[j];
				CATGeometry*pGeo=pEdge->GetGeometry();
				if(!pGeo)
					return S_FALSE;
				if (pGeo->IsATypeOf(CATCircleType))
				{
					cout<<"this is a circle"<<endl;
				}
				if (pGeo->IsATypeOf(CATEllipseType))
				{
					cout<<"this is a Ellipse"<<endl;
				}
			}

		}
	}
	return S_OK;
}

输出结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值