在使用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();
}