Returns the first point of intersection between the ray and the target geometry. The point is set empty if there is no intersection.
[Visual Basic .NET] Public Sub QueryFirstIntersection ( _ ByVal targetGeometry As IGeometry, _ ByVal intersectionPoint As IPoint _ )
[C#] public void QueryFirstIntersection ( IGeometry targetGeometry, IPoint intersectionPoint );
[C++]
HRESULT QueryFirstIntersection(
IGeometry* targetGeometry,
IPoint* intersectionPoint
);
[C++]Parameters
targetGeometrytargetGeometry is a parameter of type IGeometry
intersectionPointintersectionPoint is a parameter of type IPoint
Product Availability
Description
Implemented for Points, Multipoints, Polylines, Polygons, Envelopes, and Multipatches.
Remarks
This method is intended to be called against top-level
geometries only (Point, Multipoint, Polyline, Polygon, Envelope,
MultiPatch). To call this method against a Segment/Path or
Ring, first add the part to a Polyline or Polygon container,
respectively, and then call this method against the container.
If a Ray intersects an Envelope and is located within the bounds of
the Envelope, the result of QueryFirstIntersection will be
the point closest to the Ray origin along the
Ray, located on the exterior of the Envelope at which an
intersection takes place.
public static void QueryFirstIntersection()
{
ILine
line =
new
LineClass();
line.FromPoint
= GetPoint();
line.ToPoint =
GetPoint();
IRay
ray =
new
RayClass();
ray.Origin =
line.FromPoint;
ray.Vector =
ConstructVector3D(line.ToPoint.X - line.FromPoint.X, line.ToPoint.Y
- line.FromPoint.Y, line.ToPoint.Z -
line.FromPoint.Z);
IGeometry multiPatchGeometry
= GetMultiPatchGeometry();
IPoint firstIntersectionPoint = new PointClass();
ray.QueryFirstIntersection(multiPatchGeometry, firstIntersectionPoint);
//firstIntersectionPoint
= (5, -2.13, 0.092)
}
private static IPoint GetPoint()
{
const double Min = -10;
const double Max = 10;
Random random = new
Random();
double x =
Min + (Max - Min) * random.NextDouble();
double y = Min + (Max - Min) * random.NextDouble();
double z = Min + (Max - Min) * random.NextDouble();
IPoint
point =
ConstructPoint3D(x, y, z);
MakeZAware(point as
IGeometry);
return point;
}
private static IPoint ConstructPoint3D(double x, double y, double z)
{
IPoint point = ConstructPoint2D(x, y);
point.Z = z;
return
point;
}
private static IPoint ConstructPoint2D(double x, double y)
{
IPoint point = new PointClass();
point.PutCoords(x, y);
return point;
}
private static void MakeZAware(IGeometry geometry)
{
IZAware zAware = geometry as IZAware;
zAware.ZAware = true;
}
public static IVector3D ConstructVector3D(double xComponent, double yComponent, double zComponent)
{
IVector3D vector3D = new Vector3DClass();
vector3D.SetComponents(xComponent, yComponent, zComponent);
return vector3D;
}