ArcObjects Library Reference (Geometry)  

esriMultiPatchRingType Constants

MultiPatch Ring Types.

Constant Value Description
esriMultiPatchInvalidRing 1 Invalid Ring.
esriMultiPatchUndefinedRing 2 Ring type has not been defined.
esriMultiPatchFirstRing 4 The beginning FirstRing in a FirstRing/Ring sequence.
esriMultiPatchRing 8 A following Ring in a FirstRing/Ring sequence or a beginning Ring in a solo Ring group.
esriMultiPatchOuterRing 16 The beginning OuterRing in an OuterRing/InnerRing sequence.
esriMultiPatchInnerRing 32 A following InnerRing in an OuterRing/InnerRing sequence.
esriMultiPatchBeginningRingMask 28 A mask of valid beginning rings (OuterRings, FirstRings, and solo Rings).
esriMultiPatchFollowingRingMask 40 A mask of valid following rings (InnerRings and Rings).
esriMultiPatchProblemCaseRingMask 3 A mask of problematic rings (UndefinedRings and InvalidRings).

Product Availability

Available with ArcGIS Engine, ArcGIS Desktop, and ArcGIS Server.
[C#]

private static object _missing = Type.Missing;

public static IGeometry GetMultiPatchGeometry()

{

  const int XRange = 16;

  const int YRange = 16;

  const int InteriorRingCount = 25;

  const double HoleRange = 0.5;

    //RingGroup: Square Lying In XY Plane With Single Exterior Ring

   //           And Multiple Interior Rings



  IGeometryCollection multiPatchGeometryCollection = new MultiPatchClass();

  IMultiPatch multiPatch = multiPatchGeometryCollection as IMultiPatch;



  //Exterior Ring

  IPointCollection exteriorRingPointCollection = new RingClass();



  exteriorRingPointCollection.AddPoint(ConstructPoint3D(0.5 * (XRange + 2),-0.5 * (YRange + 2), 0), ref _missing, ref _missing);

  exteriorRingPointCollection.AddPoint(ConstructPoint3D(-0.5 * (XRange + 2), -0.5 * (YRange + 2), 0), ref _missing, ref _missing);

  exteriorRingPointCollection.AddPoint(ConstructPoint3D(-0.5 * (XRange + 2), 0.5 * (YRange + 2),0), ref _missing, ref _missing);

  exteriorRingPointCollection.AddPoint(ConstructPoint3D(0.5 * (XRange + 2),0.5 * (YRange + 2), 0), ref _missing, ref _missing);



  IRing exteriorRing = exteriorRingPointCollection as IRing;

  exteriorRing.Close();



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

  multiPatch.PutRingType(exteriorRing,esriMultiPatchRingType.esriMultiPatchOuterRing);



  //Interior Rings

  Random random = new Random();



  for (int i = 0; i < InteriorRingCount; i++)

  {

    double interiorRingOriginX = XRange * (random.NextDouble() - 0.5);

    double interiorRingOriginY = YRange * (random.NextDouble() - 0.5);



    IPointCollection interiorRingPointCollection = new RingClass();

    interiorRingPointCollection.AddPoint(ConstructPoint3D(interiorRingOriginX - 0.5 * HoleRange, interiorRingOriginY - 0.5 * HoleRange, 0), ref _missing, ref _missing);

    interiorRingPointCollection.AddPoint(ConstructPoint3D(interiorRingOriginX + 0.5 * HoleRange, interiorRingOriginY - 0.5 * HoleRange, 0), ref _missing, ref _missing);

    interiorRingPointCollection.AddPoint(ConstructPoint3D(interiorRingOriginX + 0.5 * HoleRange, interiorRingOriginY + 0.5 * HoleRange, 0), ref _missing, ref _missing);

    interiorRingPointCollection.AddPoint(ConstructPoint3D(interiorRingOriginX - 0.5 * HoleRange, interiorRingOriginY + 0.5 * HoleRange, 0), ref _missing, ref _missing);



    IRing interiorRing = interiorRingPointCollection as IRing;

    interiorRing.Close();



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



    multiPatch.PutRingType(interiorRing, esriMultiPatchRingType.esriMultiPatchInnerRing);

  }



  return multiPatchGeometryCollection as IGeometry;

}



public static IPoint ConstructPoint3D(double x, double y, double z)

{

  IPoint point = ConstructPoint2D(x, y);

  point.Z = z;



  return point;

}



public static IPoint ConstructPoint2D(double x, double y)

{

  IPoint point = new PointClass();

  point.PutCoords(x, y);



  return point;

}