MultiPatchClass

A collection of surface patches.

Supported Platforms

Windows, Solaris, Linux

Extended Error Information

Use the ISupportErrorInfo method InterfaceSupportsErrorInfo to determine if the object supports extended error information. If the object supports extended error info, VC++ developers should use the OLE/COM IErrorInfo interface to access the ErrorInfo object. Visual Basic developers should use the global error object Err to retrieve this extended error information.

Interfaces

Interfaces Description
IArea Provides access to members that return properties common to rings and polygons.
IArea3D Provides access to members that return properties common to MultiPatches.
IClone (esriSystem) Provides access to members that control cloning of objects.
IConstructMultiPatch Provides access to members that can be used to construct MultiPatches.
IGeneralMultiPatchInfo Interface to get infomation of a GeneralMultiPatch.
IGeometry Provides access to members that describe properties and behavior of all geometric objects.
IGeometry2 Provides access to members that extend the IGeometry interface with a more sophisticated projection method.
IGeometry3 Provides rapid access to a geometry's extent in the x-y plane.
IGeometry4 Provides access to methods that indicate if a geometry has been changed (edited, projected, etc).
IGeometry5 Provides access to members that extend the IGeometry interface with a more sophisticated projection method.
IGeometryCollection Provides access to members that can be used for accessing, adding and removing individual geometries of a multi-part geometry (Multipoint, Polyline, Polygon, MultiPatch, and GeometryBag).
IHitTest Provides access to members that locate a part of a geometry closest to a point.
IHitTest3D Provides access to members that locate a part of a geometry closest to a point.
IMAware Indicator interface that identifies geometric objects that can have persistent M values attached to their vertices.
IMCollection Provides access to members that control operations on M-aware multipoints, polylines, polygons and multipatches.
IMSnap Provides access to a method that snaps ms of the geometry to the precision of the spatial reference associated with the geometry.
IMultiPatch Provides access to members that identify a MultiPatch and permit controlled access to its parts.
IPersist (esriSystem)
IPersistStream (esriSystem)
IPointCollection Provides access to members that manipulate the points of a Multipoint, Path, Ring, Polyline, Polygon, TriangleFan, TriangleStrip, or MultiPatch.
IPointCollection4 Provides access to members that manipulate the points of a Multipoint, Path, Ring, Polyline, Polygon, TriangleFan, TriangleStrip, or MultiPatch.
IPointIDAware Indicator interface that identifies geometries that can have persistent point ID values attached to coordinates.
IProximityOperator Provides access to members that find the 2D distance between two geometries.
IProximityOperator3D Provides access to members that find the 3D distance between two geometries with Zs.
IRelationalOperator Provides access to members that determine if a certain spatial relationship exists between two geometries.
IRelationalOperator2 Additional relational functions.
IRelationalOperator3D Provides access to members that determine if a certain spatial relationship exists between two geometries with Zs.
IRelationalOperator3D2 Provides access to members that determine if a certain spatial relationship exists between two geometries with Zs.
ISupportErrorInfo (esriSystem)
ITopologicalOperator Provides access to members for constructing new geometries based upon topological relationships between existing geometries.
ITopologicalOperator2 Provides access to members that extend the ITopologicalOperator interface.
ITopologicalOperator3 Provides additional information on non-simple geometries.
ITransform2D Provides access to methods for transforming geometries using either specific parameters or arbitrary transformation objects (affine transformations, geographic transformations, etc.).
ITransform3D Provides access to methods for transforming 3D geometries using either specific parameters or arbitrary transformation objects.
IVolume Provides access to members that return properties common to MultiPatches.
IXMLSerialize (esriSystem) Provides access to members that XML serialize and deserialize an object to/from XML.
IZAware Indicator interface that identifies geometries that can have persistent Z values attached to their vertices.
IZCollection Provides access to operations on Z-aware geometries.
private static object _missing = Type.Missing;

   

          public static IGeometry GetMultiPatchGeometry()

          {

              //Composite: House Composed Of 7 Ring, 1 TriangleStrip, And 1 Triangles Parts

   

              IGeometryCollection multiPatchGeometryCollection = new MultiPatchClass();

   

              IMultiPatch multiPatch = multiPatchGeometryCollection as IMultiPatch;

   

              //Base (Exterior Ring)

   

              IPointCollection basePointCollection = new RingClass();

              basePointCollection.AddPoint(ConstructPoint3D(5, 4, 0), ref _missing, ref _missing);

              basePointCollection.AddPoint(ConstructPoint3D(-5, 4, 0), ref _missing, ref _missing);

              basePointCollection.AddPoint(ConstructPoint3D(-5, -4, 0), ref _missing, ref _missing);

              basePointCollection.AddPoint(ConstructPoint3D(5, -4, 0), ref _missing, ref _missing);

              basePointCollection.AddPoint(basePointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(basePointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(basePointCollection as IRing, esriMultiPatchRingType.esriMultiPatchOuterRing);

   

              //Front With Cutaway For Door (Exterior Ring)

   

              IPointCollection frontPointCollection = new RingClass();

              frontPointCollection.AddPoint(ConstructPoint3D(5, 4, 6), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, 4, 0), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, 1, 0), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, 1, 4), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, -1, 4), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, -1, 0), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, -4, 0), ref _missing, ref _missing);

              frontPointCollection.AddPoint(ConstructPoint3D(5, -4, 6), ref _missing, ref _missing);

              frontPointCollection.AddPoint(frontPointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(frontPointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(frontPointCollection as IRing, esriMultiPatchRingType.esriMultiPatchOuterRing);

   

              //Back (Exterior Ring)

   

              IPointCollection backPointCollection = new RingClass();

              backPointCollection.AddPoint(ConstructPoint3D(-5, 4, 6), ref _missing, ref _missing);

              backPointCollection.AddPoint(ConstructPoint3D(-5, -4, 6), ref _missing, ref _missing);

              backPointCollection.AddPoint(ConstructPoint3D(-5, -4, 0), ref _missing, ref _missing);

              backPointCollection.AddPoint(ConstructPoint3D(-5, 4, 0), ref _missing, ref _missing);

              backPointCollection.AddPoint(backPointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(backPointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(backPointCollection as IRing, esriMultiPatchRingType.esriMultiPatchOuterRing);

   

              //Right Side (Ring Group)

   

              //Exterior Ring

   

              IPointCollection rightSideExteriorPointCollection = new RingClass();

              rightSideExteriorPointCollection.AddPoint(ConstructPoint3D(5, 4, 6), ref _missing, ref _missing);

              rightSideExteriorPointCollection.AddPoint(ConstructPoint3D(-5, 4, 6), ref _missing, ref _missing);

              rightSideExteriorPointCollection.AddPoint(ConstructPoint3D(-5, 4, 0), ref _missing, ref _missing);

              rightSideExteriorPointCollection.AddPoint(ConstructPoint3D(5, 4, 0), ref _missing, ref _missing);

              rightSideExteriorPointCollection.AddPoint(rightSideExteriorPointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(rightSideExteriorPointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(rightSideExteriorPointCollection as IRing, esriMultiPatchRingType.esriMultiPatchOuterRing);

   

              //Interior Ring

   

              IPointCollection rightSideInteriorPointCollection = new RingClass();

              rightSideInteriorPointCollection.AddPoint(ConstructPoint3D(1, 4, 4), ref _missing, ref _missing);

              rightSideInteriorPointCollection.AddPoint(ConstructPoint3D(1, 4, 2), ref _missing, ref _missing);

              rightSideInteriorPointCollection.AddPoint(ConstructPoint3D(-1, 4, 2), ref _missing, ref _missing);

              rightSideInteriorPointCollection.AddPoint(ConstructPoint3D(-1, 4, 4), ref _missing, ref _missing);

              rightSideInteriorPointCollection.AddPoint(rightSideInteriorPointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(rightSideInteriorPointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(rightSideInteriorPointCollection as IRing, esriMultiPatchRingType.esriMultiPatchInnerRing);

   

              //Left Side (Ring Group)

   

              //Exterior Ring

   

              IPointCollection leftSideExteriorPointCollection = new RingClass();

              leftSideExteriorPointCollection.AddPoint(ConstructPoint3D(5, -4, 6), ref _missing, ref _missing);

              leftSideExteriorPointCollection.AddPoint(ConstructPoint3D(5, -4, 0), ref _missing, ref _missing);

              leftSideExteriorPointCollection.AddPoint(ConstructPoint3D(-5, -4, 0), ref _missing, ref _missing);

              leftSideExteriorPointCollection.AddPoint(ConstructPoint3D(-5, -4, 6), ref _missing, ref _missing);

              leftSideExteriorPointCollection.AddPoint(leftSideExteriorPointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(leftSideExteriorPointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(leftSideExteriorPointCollection as IRing, esriMultiPatchRingType.esriMultiPatchOuterRing);

   

              //Interior Ring

   

              IPointCollection leftSideInteriorPointCollection = new RingClass();

              leftSideInteriorPointCollection.AddPoint(ConstructPoint3D(1, -4, 4), ref _missing, ref _missing);

              leftSideInteriorPointCollection.AddPoint(ConstructPoint3D(-1, -4, 4), ref _missing, ref _missing);

              leftSideInteriorPointCollection.AddPoint(ConstructPoint3D(-1, -4, 2), ref _missing, ref _missing);

              leftSideInteriorPointCollection.AddPoint(ConstructPoint3D(1, -4, 2), ref _missing, ref _missing);

              leftSideInteriorPointCollection.AddPoint(leftSideInteriorPointCollection.get_Point(0), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(leftSideInteriorPointCollection as IGeometry, ref _missing, ref _missing);

   

              multiPatch.PutRingType(leftSideInteriorPointCollection as IRing, esriMultiPatchRingType.esriMultiPatchInnerRing);

   

              //Roof

   

              IPointCollection roofPointCollection = new TriangleStripClass();

              roofPointCollection.AddPoint(ConstructPoint3D(-5, 4, 6), ref _missing, ref _missing);

              roofPointCollection.AddPoint(ConstructPoint3D(5, 4, 6), ref _missing, ref _missing);

              roofPointCollection.AddPoint(ConstructPoint3D(-5, 0, 9), ref _missing, ref _missing);

              roofPointCollection.AddPoint(ConstructPoint3D(5, 0, 9), ref _missing, ref _missing);

              roofPointCollection.AddPoint(ConstructPoint3D(-5, -4, 6), ref _missing, ref _missing);

              roofPointCollection.AddPoint(ConstructPoint3D(5, -4, 6), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(roofPointCollection as IGeometry, ref _missing, ref _missing);

   

              //Triangular Area Between Roof And Front/Back

   

              IPointCollection triangularAreaPointCollection = new TrianglesClass();

   

              //Area Between Roof And Front

   

              triangularAreaPointCollection.AddPoint(ConstructPoint3D(5, 0, 9), ref _missing, ref _missing);

              triangularAreaPointCollection.AddPoint(ConstructPoint3D(5, 4, 6), ref _missing, ref _missing);

              triangularAreaPointCollection.AddPoint(ConstructPoint3D(5, -4, 6), ref _missing, ref _missing);

   

              //Area Between Roof And Back

   

              triangularAreaPointCollection.AddPoint(ConstructPoint3D(-5, 0, 9), ref _missing, ref _missing);

              triangularAreaPointCollection.AddPoint(ConstructPoint3D(-5, -4, 6), ref _missing, ref _missing);

              triangularAreaPointCollection.AddPoint(ConstructPoint3D(-5, 4, 6), ref _missing, ref _missing);

   

              multiPatchGeometryCollection.AddGeometry(triangularAreaPointCollection as IGeometry, ref _missing, ref _missing);

   

              return multiPatchGeometryCollection as IGeometry;

          }

   

           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;

          }

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