IGeom3DSurface::ClosestPoint

This method gets a point that lies on a given face that is closest to a given point and also returns a normal to a face from a received point on a face. 

Compatibility

Cimatron 2024 or later

Syntax

double[] ClosestPoint(double[] inPoint);

def ClosestPoint(inPoint System.Double[]) -> double[] 

Return Type

Return: double[]

oPointOnSurface_Normal—Variant that contains a double type one-dimensional array of six elements. The first three elements are normal vector coordinates to the face formed by the received closest point, and the second three elements are coordinates of the closest point on the face.

   

Input Type

Input: double[]

inPoint—Variant that contains a double-type one-dimensional array of given point coordinates.

   

Remarks

All coordinates are given relative to the model's main UCS.

Example

interop.CimAppAccess.AppAccess AppAcc = new interop.CimAppAccess.AppAccess();
interop.CimatronE.IApplication CimApp = (interop.CimatronE.IApplication)AppAcc.GetApplication();
interop.CimatronE.ICimDocument aDOC = CimApp.GetActiveDoc();
interop.CimMdlrAPI.IModelContainer aContainer = (interop.CimMdlrAPI.IModelContainer)aDoc;
interop.CimMdlrAPI.IMdlrModel aMdlrModel = (interop.CimMdlrAPI.IMdlrModel)aContainer.Model;
interop.CimMdlrAPI.IEntityQuery aMdlrQuery = (interop.CimMdlrAPI.IEntityQuery)aMdlrModel;
interop.CimMdlrAPI.IEntityFilter aEntityFilterEdge = aMdlrQuery.CreateFilter(interop.CimMdlrAPI.EFilterEnumType.cmFilterEntityType);
interop.CimBaseAPI.FilterType aEdgeFilter = (interop.CimBaseAPI.FilterType)aEntityFilterEdge;
aEdgeFilter.Add(interop.CimBaseAPI.EntityEnumType.cmFace);
aMdlrQuery.SetFilter((interop.CimMdlrAPI.IEntityFilter)aEdgeFilter);
interop.CimMdlrAPI.ICimEntityList aFaceList = aMdlrQuery.Select();
int aFaceCount = aFaceList.Count;
interop.CimMdlrAPI.ICimEntity aFace = (interop.CimMdlrAPI.ICimEntity)aFaceList[1];
int aId = aFace.ID;
interop.CimMdlrAPI.IGeometry3D aGeom = aFace.Geometry;
if (aGeom.Type == interop.CimMdlrAPI.GeomType.cmGeomSurface)
{
interop.CimServicesAPI.IGeom3DSurface aSurface = aGeom as interop.CimServicesAPI.IGeom3DSurface;
double[] aPoint = { 1, 0, 0 };
double[] aClosestPoint = aSurface.ClosestPoint(aPoint);
}  

import clr
clr.AddReference("interop.CimAppAccess")
clr.AddReference("interop.CimatronE")
clr.AddReference("interop.CimServicesAPI")
clr.AddReference("interop.CimBaseAPI")
clr.AddReference("interop.CimMdlrAPI")
clr.AddReference("interop.CimNcAPI")
import interop.CimAppAccess
import interop.CimatronE
import interop.CimServicesAPI
import interop.CimBaseAPI
import interop.CimMdlrAPI
import interop.CimNcAPI
import System

aAppAcc = interop.CimAppAccess.AppAccess()
aCimApp = interop.CimatronE.IApplication(aAppAcc.GetApplication())
aDOC = aCimApp.GetActiveDoc()
aContainer = interop.CimMdlrAPI.IModelContainer(aDOC)
aMdlrModel = interop.CimMdlrAPI.IMdlrModel(aContainer.Model)

aMdlrQuery = interop.CimMdlrAPI.IEntityQuery(aMdlrModel)
aEntityFilterFace = aMdlrQuery.CreateFilter(interop.CimMdlrAPI.EFilterEnumType.cmFilterEntityType)
aFaceFilter = interop.CimBaseAPI.FilterType(aEntityFilterFace)

aFaceFilter.Add(interop.CimBaseAPI.EntityEnumType.cmFace)
aMdlrQuery.SetFilter(interop.CimMdlrAPI.IEntityFilter(aFaceFilter))

aFaceList = aMdlrQuery.Select()
aFaceCount = aFaceList.Count

# Get One Face
aFace = interop.CimMdlrAPI.ICimEntity(aFaceList[1])
aId = aFace.ID
aGeom = aFace.Geometry
aSurface = None
if aGeom.Type == interop.CimMdlrAPI.GeomType.cmGeomSurface:
aSurface = interop.CimServicesAPI.IGeom3DSurface(aGeom)
aPoint =System.Array[System.Double](3)
aPoint[0] = 1
aPoint[1] = 0
aPoint[2] = 0
aClosestPoint = aSurface.ClosestPoint(aPoint)