MSCE C++ 关于使用BodyFromLoft对一个曲面进行放样,结果是一个矩形


在使用BodyFromLoft对曲面进行放样的时候发现的到了一个矩形,并没有按照曲面进行放样。

经过分析发现BodyFromLoft的第2个参数CurveVector需要传递一个类型为BOUNDARY_TYPE_Open的CurveVector。

而如果我们直接使用模型中的封闭图形,那么将得到一个类型为非BOUNDARY_TYPE_Open的CurveVector。所以,在我们获取到由封闭图形构成的CurveVector后,需要将它重新构造为BOUNDARY_TYPE_Open的CurveVector。这样就可以生成由曲面生成的体了。

void bodyFromLoftTest()
{
	EditElementHandle eeh1(11357L, ACTIVEMODEL);
	EditElementHandle eeh2(11368L, ACTIVEMODEL);

	CurveVectorPtr profiles[2];	
	profiles[0] = ICurvePathQuery::ElementToCurveVector(eeh1);
	profiles[1] = ICurvePathQuery::ElementToCurveVector(eeh2);

	CurveVectorPtr newProfiles[2];
	newProfiles[0] = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Open);
	newProfiles[0]->AddPrimitives(*profiles[0]);

	newProfiles[1] = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Open);
	newProfiles[1]->AddPrimitives(*profiles[1]);
	ISolidKernelEntityPtr out = NULL;

	SolidUtil::Create::BodyFromLoft(out, newProfiles, sizeof(newProfiles) / sizeof(newProfiles[0]), NULL, 0, *ACTIVEMODEL);
	EditElementHandle result;
	SolidUtil::Convert::BodyToElement(result, *out, NULL, *ACTIVEMODEL);
	result.AddToModel();
}