Creo二次开发 获取特征下所有的面和点

1.获取面

bool ThkHPipPrtMdl::GetRefSrf()
{
	if (m_tSld.IsEmpty())
	{
		return false;
	}
	CAtlArray<ThkFeature> arrFeat;
	m_tSld.GetFeatByParam(arrFeat,THK_HPIP_FTYPE, E_HPIP_FEAT_EXT);
	if (arrFeat.GetCount()<=0)
	{
		return false;
	}
	ThkFeature tFeat = arrFeat[0];
	CAtlArray<ProGeomitem> arrSur;
	tFeat.VisitGeomitem(arrSur,PRO_SURFACE);
	for (int i=0;i<(int)arrSur.GetCount();i++)
	{
		ThkSurface tSrf=arrSur[i];
		if (tSrf.IsEmpty())
		{
			continue;
		}
		if (tSrf.GetType()!=PRO_SRF_PLANE || tSrf.GetArea()<=0.0)
		{
			continue;
		}
		if (m_tStartSrf.IsEmpty() && tSrf.GetDist(m_tStartPnt.GetPos()) == 0 && tSrf.IsInside(m_tStartPnt.GetPos()))
		{
			m_tStartSrf = tSrf;
		}
		else if (tSrf.GetDist(m_tEndPnt.GetPos()) == 0 && tSrf.IsInside(m_tEndPnt.GetPos()) && abs(tSrf.GetArea() - m_tStartSrf.GetArea()) <1.0e-3)
		{
			m_tEndSrf = tSrf;
		}
		if (!m_tStartSrf.IsEmpty() && !m_tEndSrf.IsEmpty())
		{
			break;
		}
	}
	return true;
}

2.获取点

bool ThkHPipPrtMdl::GetRefPnt()
{
	if (m_tSld.IsEmpty())
	{
		return false;
	}
	CAtlArray<ThkFeature> arrFeat;
	m_tSld.GetAllFeature(arrFeat);
	for (int i = 0; i < (int)arrFeat.GetCount(); i++)
	{
		ThkFeature tFeat = arrFeat[i];
		if (tFeat.IsEmpty())
		{
			continue;
		}
		if (tFeat.GetIntParam(_T(THK_HPIP_FTYPE))!= E_HPIP_FEAT_REFPNT)
		{
			continue;
		}
		CAtlArray<ProGeomitem> arrGeom;
		tFeat.VisitGeomitem(arrGeom, PRO_POINT);
		if ((int)arrGeom.GetCount()<=1)
		{
			continue;
		}
		m_tStartPnt = arrGeom[0];
		int nIdx = (int)arrGeom.GetCount();
		m_tEndPnt = arrGeom[nIdx - 1];
		break;
	}
	return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行为艺术家Zzz

新人 求鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值