Creating a multipatch using a series of triangles
The following code example shows how to construct a textured MultiPatch geometry using a TriangleStrip that resembles a vertical polygon, assuming it is 300 (width) x 100 (height) in size:
[C#] public IMultiPatch CreateMultipatch()
{
//Prepare the geometry material list.
IGeometryMaterial texture=new GeometryMaterialClass();
texture.TextureImage="C:\\Temp\\MyImage.bmp";
IGeometryMaterialList materialList=new GeometryMaterialListClass();
materialList.AddMaterial(texture);
//Create the multipatch.
IGeneralMultiPatchCreator multiPatchCreator=new GeneralMultiPatchCreatorClass()
;
multiPatchCreator.Init(4, 1, false, false, false, 4, materialList);
//Set up part.
//Could also use a Ring or a TriangleFan.
multiPatchCreator.SetPatchType(0, esriPatchType.esriPatchTypeTriangleStrip);
multiPatchCreator.SetMaterialIndex(0, 0);
multiPatchCreator.SetPatchPointIndex(0, 0);
multiPatchCreator.SetPatchTexturePointIndex(0, 0);
//Set real-world points.
WKSPointZ upperLeft=new WKSPointZ();
WKSPointZ lowerLeft=new WKSPointZ();
WKSPointZ upperRight=new WKSPointZ();
WKSPointZ lowerRight=new WKSPointZ();
upperLeft.X=0;
upperLeft.Y=0;
upperLeft.Z=0;
upperRight.X=300;
upperRight.Y=0;
upperRight.Z=0;
lowerLeft.X=0;
lowerLeft.Y=0;
lowerLeft.Z= - 100;
lowerRight.X=300;
lowerRight.Y=0;
lowerRight.Z= - 100;
multiPatchCreator.SetWKSPointZ(0, ref upperRight);
multiPatchCreator.SetWKSPointZ(1, ref lowerRight);
multiPatchCreator.SetWKSPointZ(2, ref upperLeft);
multiPatchCreator.SetWKSPointZ(3, ref lowerLeft);
//Set texture points.
//Set the texture coordinates for a panel.
WKSPoint textureUpperLeft=new WKSPoint();
WKSPoint textureLowerLeft=new WKSPoint();
WKSPoint textureUpperRight=new WKSPoint();
WKSPoint textureLowerRight=new WKSPoint();
textureUpperLeft.X=0;
textureUpperLeft.Y=0;
textureUpperRight.X=1;
textureUpperRight.Y=0;
textureLowerLeft.X=0;
textureLowerLeft.Y=1;
textureLowerRight.X=1;
textureLowerRight.Y=1;
multiPatchCreator.SetTextureWKSPoint(0, ref textureUpperRight);
multiPatchCreator.SetTextureWKSPoint(1, ref textureLowerRight);
multiPatchCreator.SetTextureWKSPoint(2, ref textureUpperLeft);
multiPatchCreator.SetTextureWKSPoint(3, ref textureLowerLeft);
IMultiPatch multiPatch=multiPatchCreator.CreateMultiPatch()as IMultiPatch;
return multiPatch;
}
[VB.NET] Private Function CreateMultipatch() As IMultiPatch
'Prepare the geometry material list.
Dim texture As IGeometryMaterial=New GeometryMaterialClass()
texture.TextureImage="C:\\Temp\\MyImage.bmp"
Dim materialList As IGeometryMaterialList=New GeometryMaterialListClass()
materialList.AddMaterial(texture)
'Create the multipatch.
Dim multiPatchCreator As IGeneralMultiPatchCreator=New GeneralMultiPatchCreatorClass()
multiPatchCreator.Init(4, 1, False, False, False, 4, materialList)
'Set up part.
'Could also use a Ring or a TriangleFan.
multiPatchCreator.SetPatchType(0, esriPatchType.esriPatchTypeTriangleStrip)
multiPatchCreator.SetMaterialIndex(0, 0)
multiPatchCreator.SetPatchPointIndex(0, 0)
multiPatchCreator.SetPatchTexturePointIndex(0, 0)
'Set real-world points.
Dim upperLeft As WKSPointZ=New WKSPointZ()
Dim lowerLeft As WKSPointZ=New WKSPointZ()
Dim upperRight As WKSPointZ=New WKSPointZ()
Dim lowerRight As WKSPointZ=New WKSPointZ()
upperLeft.X=0
upperLeft.Y=0
upperLeft.Z=0
upperRight.X=300
upperRight.Y=0
upperRight.Z=0
lowerLeft.X=0
lowerLeft.Y=0
lowerLeft.Z=-100
lowerRight.X=300
lowerRight.Y=0
lowerRight.Z=-100
multiPatchCreator.SetWKSPointZ(0, upperRight)
multiPatchCreator.SetWKSPointZ(1, lowerRight)
multiPatchCreator.SetWKSPointZ(2, upperLeft)
multiPatchCreator.SetWKSPointZ(3, lowerLeft)
'Set texture points.
'Set the texture coordinates for a panel.
Dim textureUpperLeft As WKSPoint=New WKSPoint()
Dim textureLowerLeft As WKSPoint=New WKSPoint()
Dim textureUpperRight As WKSPoint=New WKSPoint()
Dim textureLowerRight As WKSPoint=New WKSPoint()
textureUpperLeft.X=0
textureUpperLeft.Y=0
textureUpperRight.X=1
textureUpperRight.Y=0
textureLowerLeft.X=0
textureLowerLeft.Y=1
textureLowerRight.X=1
textureLowerRight.Y=1
multiPatchCreator.SetTextureWKSPoint(0, textureUpperRight)
multiPatchCreator.SetTextureWKSPoint(1, textureLowerRight)
multiPatchCreator.SetTextureWKSPoint(2, textureUpperLeft)
multiPatchCreator.SetTextureWKSPoint(3, textureLowerLeft)
Dim multiPatch As IMultiPatch=CType(multiPatchCreator.CreateMultiPatch(), IMultiPatch)
Return multiPatch
End Function
See Also:
Samples:To use the code in this topic, reference the following assemblies in your Visual Studio project. In the code files, you will need using (C#) or Imports (VB .NET) directives for the corresponding namespaces (given in parenthesis below if different from the assembly name):
Development licensing | Deployment licensing |
---|---|
ArcGIS Desktop Basic | ArcGIS Desktop Basic |
ArcGIS Desktop Standard | ArcGIS Desktop Standard |
ArcGIS Desktop Advanced | ArcGIS Desktop Advanced |
Engine Developer Kit | Engine |