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.
Cimatron 2024 or later
double[] PrepByPoint(double[] iPoint, double iGuess);
def PrepByPoint(iPoint : System.Double[], iGuess : double) -> System.Double[]
|
Return: double[] |
pValue—Variant that contains a double array of 9 elements
|
|
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 |
None
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)
