C++ 空间中点到体的投影


在三维空间中,求点到体的投影方式和求点到面的方式类似。可以使用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();
}