IGeom3DCurve::PrepByPoint

Use this method to return coordinates of the foot that is perpendicular to a given point to the curve, the tangent to, and curvature of the curve at that point.
If a Guess parameter value is supplied, the perpendicular found is the one nearest to the supplied parameter position, otherwise it is the one at which the curve is nearest to the given point. 

Compatibility

Cimatron 2024 or later

Syntax

double[] PrepByPoint(double[] iPoint, double iGuess);

def PrepByPoint(iPoint : System.Double[], iGuess : double) -> System.Double[]

Return Type

Return: double[]

pValue—Variant that contains a double array of 9 elements

  • ResultArray(0) to ResultArray(2)—The perpendicular's foot point coordinates
  • ResultArray(3) to ResultArray(5)—The tangent to curve at that point
  • ResultArray(6) to ResultArray(8)—The curvature of curve at that point
   

Input Type

Input: double[]

iPoint—Variant that contains a double array of coordinates of a given point

Input: double

iGuess—Parameter on a curve defining the nearest area to a perpendicular from point

Remarks

None

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.cmEdge);
aMdlrQuery.SetFilter((interop.CimMdlrAPI.IEntityFilter)aEdgeFilter);
interop.CimMdlrAPI.ICimEntityList aEdgeList = aMdlrQuery.Select();
int aEdgeCount = aEdgeList.Count;
interop.CimMdlrAPI.ICimEntity aEdge = (interop.CimMdlrAPI.ICimEntity)aEdgeList[1];
int aId = aEdge.ID;
interop.CimMdlrAPI.IGeometry3D aGeom = aEdge.Geometry;
if (aGeom.Type == interop.CimMdlrAPI.GeomType.cmGeomCurve)
{
interop.CimServicesAPI.IGeom3DCurve aCurve = aGeom as interop.CimServicesAPI.IGeom3DCurve;
double[] aPoint = { 1,0,0 };
double aGuess = 1.1;
double[] aPrepByPoint = (double[])aCurve.PrepByPoint(aPoint, aGuess);
}

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)
aEntityFilterEdge = aMdlrQuery.CreateFilter(interop.CimMdlrAPI.EFilterEnumType.cmFilterEntityType)
aEdgeFilter = interop.CimBaseAPI.FilterType(aEntityFilterEdge)

aEdgeFilter.Add(interop.CimBaseAPI.EntityEnumType.cmEdge)
aMdlrQuery.SetFilter(interop.CimMdlrAPI.IEntityFilter(aEdgeFilter))

aEdgeList = aMdlrQuery.Select()
aEdgeCount = aEdgeList.Count

# Get One Edge
aEdge = interop.CimMdlrAPI.ICimEntity(aEdgeList[1])
aId = aEdge.ID
aGeom = aEdge.Geometry
aCurve = None
if aGeom.Type == interop.CimMdlrAPI.GeomType.cmGeomCurve:
aCurve = interop.CimServicesAPI.IGeom3DCurve(aGeom)
aPoint =System.Array[System.Double](3)
aPoint[0] = 1
aPoint[1] = 0
aPoint[2] = 0
aGuess = 1.1
aPrepByPoint = aCurve.PrepByPoint(aPoint, aGuess)