在三维空间中,求点到体的投影方式和求点到面的方式类似。可以使用SolidUtil下的ClosestPoint方法。只需要向该函数传入体()以及空间点坐标,就可以获得投影到体上点的坐标,以及点所在的面。
void CloseestPointTest()
{
ElementHandle ptEH(20629, ACTIVEMODEL);
ElementHandle surfEH(20595, ACTIVEMODEL);
CurveVectorPtr pCV = ICurvePathQuery::ElementToCurveVector(ptEH);
DPoint3d spacePt;
pCV->at(0)->GetStartPoint(spacePt);
ISolidKernelEntityPtr body;
SolidUtil::Convert::ElementToBody(body, surfEH);
ISubEntityPtr face;
DPoint3d ptOnFace;
SolidUtil::ClosestPoint(*body, spacePt, face, ptOnFace);
DSegment3d segment = DSegment3d::From(ptOnFace, ptOnFace);
ICurvePrimitivePtr pCP = ICurvePrimitive::CreateLine(segment);
EditElementHandle eeh;
DraftingElementSchema::ToElement(eeh, *pCP, nullptr, ACTIVEMODEL->Is3d(), *ACTIVEMODEL);
ElementPropertiesSetterPtr setter = ElementPropertiesSetter::Create();
setter->SetColor(4);
setter->SetWeight(7);
setter->Apply(eeh);
eeh.AddToModel();
}