IRay2 Interface

Provides access to 3D Ray properties and methods. A ray has one endpoint (its origin) and continues infinitely in one direction.

Description

This interface is new at ArcGIS 9.3. It supersedes IRay.

Members

Name Description
Read-only property Dimension The topological dimension of this geometry.
Read-only property Envelope Creates a copy of this geometry's envelope and returns it.
Read-only property GeometryType The type of this geometry.
Method GeoNormalize Shifts longitudes, if need be, into a continuous range of 360 degrees.
Method GeoNormalizeFromLongitude Normalizes longitudes into a continuous range containing the longitude. This method is obsolete.
Method GetEnumIntersect Not implemented at this release.
Method GetPointAtDistance Constructs a point at a distance along the ray.
Method Intersect Returns a point collection containing all points of intersection, in order along the ray.
Method Intersects Indicates if the ray intersects the target geometry.
Read-only property IsEmpty Indicates whether this geometry contains any points.
Read/write property Origin The origin point of the ray.
Method Project Projects this geometry into a new spatial reference.
Method QueryEnvelope Copies this geometry's envelope properties into the specified envelope.
Method QueryFirstIntersection Returns the first point of intersection between the ray and the target geometry. The point is set empty if there is no intersection.
Method QueryOrigin Sets a point equal to the ray's origin.
Method QueryPlaneIntersection Returns the point of intersection between the ray and the target plane. The point is set empty if there is no intersection.
Method QueryPointAtDistance Queries a point at a distance along the ray.
Method QueryVector Sets a vector equal to a unit vector with the same direction as the ray.
Method SetEmpty Removes all points from this geometry.
Method SnapToSpatialReference Moves points of this geometry so that they can be represented in the precision of the geometry's associated spatial reference system.
Read/write property SpatialReference The spatial reference associated with this geometry.
Read/write property Vector The direction vector of the ray.

IRay2.QueryPlaneIntersection Method

Returns the point of intersection between the ray and the target plane. The point is set empty if there is no intersection.

Public Sub QueryPlaneIntersection ( _
    ByRef pPlaneNormal As WKSPointZ, _
    ByVal D As Double, _
    ByVal pPoint As IPoint _
)
public void QueryPlaneIntersection (
    ref WKSPointZ pPlaneNormal,
    ref double D,
    ref IPoint pPoint
);

Description

Given a plane represented by a point lying in the plane (IPoint pointInPlane) and a vector normal to the plane (IVector3D normalToPlane):

· pPlaneNormal represents the X, Y, and Z components of the normal vector packed into a WKSPointZ struct:

WKSPointZ pPlaneNormal = new WKSPointZ();

pPlaneNormal.X = normalToPlane.XComponent;

pPlaneNormal.Y = normalToPlane.YComponent;

pPlaneNormal.Z = normalToPlane.ZComponent;

· D represents the dot product of the normal vector and a vector whose X, Y, and Z components are set to the X, Y, and Z coordinates of the point lying in the plane:

IVector3D vector3D = new Vector3DClass(); vector3D.SetComponents( pointInPlane.X, pointInPlane.Y, pointInPlane.Z );

double D = normalToPlane.DotProduct(vector3D);

· pPoint represents the point of intersection, and should be set to a new instance of the PointClass() before it is passed to the method:

IPoint point = new PointClass();

public static void QueryPlaneIntersection()

          {

              int seed = DateTime.Now.Millisecond;

  

              Random random = new Random(seed);

  

              IRay2 ray = GetRay(GetLine(GetPoint(random), GetPoint(random)));

  

              IRay planePackedAsRay = GetRay(GetLine(GetPoint(random), GetPoint(random)));

  

              WKSPointZ wksPointZ;

              double distance;

  

              ConstructPlaneParameters(planePackedAsRay.Vector, planePackedAsRay.Origin, out wksPointZ, out distance);

  

              IPoint intersectionPoint = new PointClass();

  

              ray.QueryPlaneIntersection(ref wksPointZ, distance, intersectionPoint);

  

              //intersectionPoint = (-6, -0.913, -7.289)

          }

  

          private static void ConstructPlaneParameters(IVector3D vector3D, IPoint point, out WKSPointZ wksPointZ, out double distance)

          {

              wksPointZ = ConstructWKSPointZ(vector3D);

              distance = vector3D.DotProduct(ConstructVector3D(point.X, point.Y, point.Z));

          }

  

          private static WKSPointZ ConstructWKSPointZ(IVector3D vector3D)

          {

              WKSPointZ wksPointZ = new WKSPointZ();

              wksPointZ.X = vector3D.XComponent;

              wksPointZ.Y = vector3D.YComponent;

              wksPointZ.Z = vector3D.ZComponent;

  

              return wksPointZ;

          }

  

          private static IRay2 GetRay(ILine line)

          {

              IRay2 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);

  

              return ray;

          }

  

          private static ILine GetLine(IPoint fromPoint, IPoint toPoint)

          {

              ILine line = new LineClass();

              line.FromPoint = fromPoint;

              line.ToPoint = toPoint;

  

              return line;

          }

  

          private static IPoint GetPoint(Random random)

          {

              const double Min = -10;

              const double Max = 10;

  

              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;

          }

Inherited Interfaces

Interfaces Description
IRay Provides access to 3D Ray properties and methods. A ray has one endpoint (its origin) and continues infinitely in one direction.
IGeometry Provides access to members that describe properties and behavior of all geometric objects.

Classes that implement IRay2

Classes Description
Ray A 3D ray that begins at a point and extends infinitely along a line in one direction only.
public IRay2 CreateRay(IPoint point, IVector3D vector)

    {

        IRay2 ray = new RayClass();

        //If the input point.Z is NAN (Not A Number = value not set) set the z to 0

        if (point.Z.Equals(Double.NaN))

        {

            point.Z = 0;

        }

        ray.Origin = point;

        ray.Vector = vector;

        return ray;

    }

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.