Geometry 对象浅析 作者:
Flyingis
ArcEngine Geometry库定义了基本几何图形的矢量表达形式,顶级的几何图形有Points、Multipoints、Polylines、Polygons、 Multipatches,Geodatabase和绘图系统使用这些几何图形来定义其他各种形状的特征和图形,提供了编辑图形的操作方法和地图符号系统 符号化特征数据的途径。
Geometry库中几个核心类和接口构成了Geometry对象的基本框架。
GeometryEnvironment
GeometryEnvironment提供了从不同的输入、设置或获取全局变量来创建几何图形的方法,以便控制geometry方法的行为。GeometryEnvironment对象是一个单例对象。
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061233KOD.jpg)
public IPolyline TestGeometryEnvironment()
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0612354nA.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/06123733n.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061239HH9.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061240Xfr.jpg)
ISpatialReferenceFactory spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061244ktT.jpg)
//Create a projected coordinate system and define its domain, resolution, and x,y tolerance.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061245rOO.jpg)
ISpatialReferenceResolution spatialReferenceResolution = spatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983UTM_11N) as ISpatialReferenceResolution;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061248J9h.jpg)
spatialReferenceResolution.ConstructFromHorizon();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061253YMA.jpg)
ISpatialReferenceTolerance spatialReferenceTolerance = spatialReferenceResolution as ISpatialReferenceTolerance;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061254Kf2.jpg)
spatialReferenceTolerance.SetDefaultXYTolerance();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061256Ec2.jpg)
ISpatialReference spatialReference = spatialReferenceResolution as ISpatialReference;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061302vEK.jpg)
//Create an array of WKSPoint structures starting in the middle of the x,y domain of the
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061303yBl.jpg)
//projected coordinate system.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0613064Sw.jpg)
double xMin;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061307ijN.jpg)
double xMax;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061308ysX.jpg)
double yMin;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061309PUL.jpg)
double yMax;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061310DDi.jpg)
spatialReference.GetDomain(out xMin, out xMax, out yMin, out yMax);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061312L89.jpg)
double xFactor = (xMin + xMax) * 0.5;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0613136wS.jpg)
double yFactor = (yMin + yMax) * 0.5;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061318JJA.jpg)
WKSPoint[] wksPoints = new WKSPoint[10];
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061319ryc.jpg)
for (int i = 0; i < wksPoints.Length; i++)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061320jDR.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061323q2G.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061324Sr7.jpg)
wksPoints[i].X = xFactor + i;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061334cK6.jpg)
wksPoints[i].Y = yFactor + i;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0613378dN.jpg)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061339mBQ.jpg)
IPointCollection4 pointCollection = new PolylineClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061341FnV.jpg)
IGeometryBridge2 geometryBridge = new GeometryEnvironmentClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061343VvX.jpg)
geometryBridge.AddWKSPoints(pointCollection, ref wksPoints);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061345hbE.jpg)
IPolyline polyline = pointCollection as IPolyline;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061346gbZ.jpg)
polyline.SpatialReference = spatialReference;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061348F5f.jpg)
return polyline;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061349cyy.jpg)
} new GeometryEnvironmentClass仅仅是创建了一个指向已存在的GeometryEnvironmentClass的引用。注意 IGeometryBridge2接口的使用,addWKSPoints方法将WKSPoint二维点添加到PointCollection中,用于构建 path、ring、polyline、polygon,或增加新点到Multipoint、TriangleFan、TriangleStrip。在 Geometry库中,除了IGeometryBridge2还有IGeometryBridge接口,后者继承了前者,增加了一些编辑功能(添加点、插 入点、重置点、分段等)。
GeometryBag
GeometryBag是支持IGeometry接口的几何对象引用的集合,任何几何对象都可以通过IGeometryCollection接口添加到 GeometryBag中,但是在使用拓扑操作的时候,需要注意不同类型的几何类型可能会有相互不兼容的情况。在向GeometryBag中添加几何对象 的时候,GeometryBag对象需要指定空间参考,添加到其中的几何对象均拥有和GeometryBag对象一样的空间参考。
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061351VtT.jpg)
private IPolygon GeometryBag_Example(IFeatureClass featureClass)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0613524qF.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061353VXp.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061354S6J.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061356uri.jpg)
//Check input objects.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061357bcO.jpg)
if (featureClass == null)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061359Qul.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061410Wlp.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061414Ful.jpg)
return null;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061415dAI.jpg)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061418lq9.jpg)
IGeoDataset geoDataset = featureClass as IGeoDataset;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061419MKN.jpg)
ISpatialFilter queryFilter = new SpatialFilterClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061424zAQ.jpg)
//Set the properties of the spatial filter here.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061425ccG.jpg)
IGeometry geometryBag = new GeometryBagClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061431Qpw.jpg)
//Define the spatial reference of the bag before adding geometries to it.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061432rs9.jpg)
geometryBag.SpatialReference = geoDataset.SpatialReference;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0614362yz.jpg)
//Use a nonrecycling cursor so each returned geometry is a separate object.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061442ajP.jpg)
IFeatureCursor featureCursor = featureClass.Search(queryFilter, false);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061445Jfu.jpg)
IGeometryCollection geometryCollection = geometryBag as IGeometryCollection;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061447q97.jpg)
IFeature currentFeature = featureCursor.NextFeature();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061450Gyg.jpg)
while (currentFeature != null)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061452mfB.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061454gEg.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061456UzM.jpg)
//Add a reference to this feature's geometry into the bag.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061500044.jpg)
//You don't specify the before or after geometry (missing),
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061505q38.jpg)
//so the currentFeature.Shape IGeometry is added to the end of the geometryCollection.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061507tda.jpg)
object missing = Type.Missing;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061508PjL.jpg)
geometryCollection.AddGeometry(currentFeature.Shape, ref missing, ref missing);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061511dOo.jpg)
currentFeature = featureCursor.NextFeature();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061512mry.jpg)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0615188ZS.jpg)
// Create the polygon that will be the union of the features returned from the search cursor.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061519gHN.jpg)
// The spatial reference of this feature does not need to be set ahead of time. The
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0615210qW.jpg)
// ConstructUnion method defines the constructed polygon's spatial reference to be the same as
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061522dZ4.jpg)
// the input geometry bag.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061523hbj.jpg)
ITopologicalOperator unionedPolygon = new PolygonClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061525ZJD.jpg)
unionedPolygon.ConstructUnion(geometryBag as IEnumGeometry);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061527b2w.jpg)
return unionedPolygon as IPolygon;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061529jtL.jpg)
}
Points
一个点包括X、Y坐标,同时可以增加M、Z值及ID属性来扩展点的功能。
Multipoints
点的集合,多点组成Multipoint几何类型,使用multipoint对象实现了的IPointCollection接口可以访问所有的点元素,这些点同样可以拥有M、Z值及ID属性来获得更多的地理空间内涵。
下面列举一个例子,通过一个已知的polyline来定义一个新的multipart polyline。
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061536o26.jpg)
public IPolyline ConstructMultiPartPolyline(IPolyline inputPolyline)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061538bpm.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061540Jkd.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061541Cp0.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061542q4w.jpg)
IGeometry outGeometry = new PolylineClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061544gdO.jpg)
//Always associate new, top-level geometries with an appropriate spatial reference.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061546aq4.jpg)
outGeometry.SpatialReference = inputPolyline.SpatialReference;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061548ddu.jpg)
IGeometryCollection geometryCollection = outGeometry as IGeometryCollection;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061551OhZ.jpg)
ISegmentCollection segmentCollection = inputPolyline as ISegmentCollection;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061553Gr1.jpg)
//Iterate over existing polyline segments using a segment enumerator.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061557ADB.jpg)
IEnumSegment segments = segmentCollection.EnumSegments;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0615596Rc.jpg)
ISegment currentSegment;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061601xam.jpg)
int partIndex = 0;;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061602ka1.jpg)
int segmentIndex = 0;;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061603AFv.jpg)
segments.Next(out currentSegment,ref partIndex, ref segmentIndex);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061605J2L.jpg)
while(currentSegment != null)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061606q2P.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0616098e6.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0616102zK.jpg)
ILine normal = new LineClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061612q4m.jpg)
//Geometry methods with _Query_ in their name expect to modify existing geometries.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061614qa4.jpg)
//In this case, the QueryNormal method modifies an existing line
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061615sYS.jpg)
//segment (normal) to be the normal vector to
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061616oCj.jpg)
//currentSegment at the specified location along currentSegment.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061617iSY.jpg)
currentSegment.QueryNormal(esriSegmentExtension.esriNoExtension, 0.5, true, currentSegment.Length / 3, normal);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061624K5d.jpg)
//Since each normal vector is not connected to others, create a new path for each one.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061625f6g.jpg)
ISegmentCollection newPath = new PathClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061627Iz7.jpg)
object missing = Type.Missing;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061628eif.jpg)
newPath.AddSegment(normal as ISegment, ref missing, ref missing);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061629694.jpg)
//The spatial reference associated with geometryCollection will be assigned to all incoming paths and segments.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061633UPy.jpg)
geometryCollection.AddGeometry(newPath as IGeometry, ref missing, ref missing);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061638P8c.jpg)
segments.Next(out currentSegment,ref partIndex, ref segmentIndex);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0616401MN.jpg)
}
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061646Ux5.jpg)
//The geometryCollection now contains the new, multipart polyline.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0616489L8.jpg)
return geometryCollection as IPolyline;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0616491i5.jpg)
}
ISegment接口的QueryNormal方法用来在弧段上的某一点生成该弧段的法线,指定其长度,这样就生成了新的segment,并且多个path添加到geometryCollection中,以IPolyline的形式返回。
Polylines
Polylines是有序path组成的集合,可以拥有M、Z和ID属性值。Polyline对象的IPointCollection接口包含了所有节点 的复制,IGeometryCollection接口可以获取polyline的paths,ISegmentCollection接口可以获取 polyline的segments。
Polyline结构图
Polygons
Polygon是一系列rings组成的集合,可以拥有M、Z和ID属性值。每一个ring由一个或多个segment组成,Polygon或ring对 象的IPointCollection接口包含了所有节点的复制,IGeometryCollection接口可以获取polygon的rings, ISegmentCollection接口可以获取polygon的segments。
Polygon结构图
Multipatch
Multipatch用于描述3D面状几何类型,由一系列的矢量三角形构成,如果其中的part是一个ring,那么它必须是封闭的,第一个节点和最后一 个节点相同,另外每个part所包含节点的顺序非常重要,Inner Rings在Outer Rings之后,代表单个表面patch的一系列rings必须由第一个ring开始。
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061658AVf.jpg)
在9.0以后的开发包中,使用IGeneralMultiPatchCreator创建新的Multipatch,IGeometryMaterial进行材质贴图。
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061702S8L.jpg)
public IMultiPatch CreateMultipatch()
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0617033F8.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0617053i7.jpg)
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061709nhy.jpg)
{
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061711k8H.jpg)
//Prepare the geometry material list.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061713PW7.jpg)
IGeometryMaterial texture = new GeometryMaterialClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061717Z45.jpg)
texture.TextureImage = "C:\\Temp\\MyImage.bmp";
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061734nCr.jpg)
IGeometryMaterialList materialList = new GeometryMaterialListClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061735GFz.jpg)
materialList.AddMaterial(texture);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061750gbF.jpg)
//Create the multipatch.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061752IuA.jpg)
IGeneralMultiPatchCreator multiPatchCreator = new GeneralMultiPatchCreatorClass();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061753fOU.jpg)
multiPatchCreator.Init(4, 1, false, false, false, 4, materialList);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061755ZIH.jpg)
//Set up part.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061757aKo.jpg)
//Could also use a Ring or a TriangleFan.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061759OJa.jpg)
multiPatchCreator.SetPatchType(0, esriPatchType.esriPatchTypeTriangleStrip);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061800pW6.jpg)
multiPatchCreator.SetMaterialIndex(0, 0);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0618014g5.jpg)
multiPatchCreator.SetPatchPointIndex(0, 0);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061803Iky.jpg)
multiPatchCreator.SetPatchTexturePointIndex(0, 0);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061806k6U.jpg)
//Set real-world points.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061816WrS.jpg)
WKSPointZ upperLeft = new WKSPointZ();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061818Kvr.jpg)
WKSPointZ lowerLeft = new WKSPointZ();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061819KF2.jpg)
WKSPointZ upperRight = new WKSPointZ();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061820dIX.jpg)
WKSPointZ lowerRight = new WKSPointZ();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061824L47.jpg)
upperLeft.X = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061825EDw.jpg)
upperLeft.Y = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0618270vv.jpg)
upperLeft.Z = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0618288an.jpg)
upperRight.X = 300;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061829hFm.jpg)
upperRight.Y = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0618337Um.jpg)
upperRight.Z = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061835q9B.jpg)
lowerLeft.X = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061836vAT.jpg)
lowerLeft.Y = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061837Ply.jpg)
lowerLeft.Z = -100;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061839Y8U.jpg)
lowerRight.X = 300;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0618412hC.jpg)
lowerRight.Y = 1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0618421Ds.jpg)
lowerRight.Z = -100;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061845WoE.jpg)
multiPatchCreator.SetWKSPointZ(0, ref upperRight);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061846A4y.jpg)
multiPatchCreator.SetWKSPointZ(1, ref lowerRight);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061849X92.jpg)
multiPatchCreator.SetWKSPointZ(2, ref upperLeft);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061850RUc.jpg)
multiPatchCreator.SetWKSPointZ(3, ref lowerLeft);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061855fZq.jpg)
//Set texture points.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061858pZb.jpg)
//Set the texture coordinates for a panel.
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061900e9z.jpg)
WKSPoint textureUpperLeft = new WKSPoint();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061901q80.jpg)
WKSPoint textureLowerLeft = new WKSPoint();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061903Pj1.jpg)
WKSPoint textureUpperRight = new WKSPoint();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061905jNc.jpg)
WKSPoint textureLowerRight = new WKSPoint();
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061908sso.jpg)
textureUpperLeft.X = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/0619105W3.jpg)
textureUpperLeft.Y = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061912qBG.jpg)
textureUpperRight.X = 1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061915b0t.jpg)
textureUpperRight.Y = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061917jBH.jpg)
textureLowerLeft.X = 0;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061918W7M.jpg)
textureLowerLeft.Y = 1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061920TUX.jpg)
textureLowerRight.X = 1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061921ZKW.jpg)
textureLowerRight.Y = 1;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061924qpj.jpg)
multiPatchCreator.SetTextureWKSPoint(0, ref textureUpperRight);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061926p9Q.jpg)
multiPatchCreator.SetTextureWKSPoint(1, ref textureLowerRight);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061929obO.jpg)
multiPatchCreator.SetTextureWKSPoint(2, ref textureUpperLeft);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061932684.jpg)
multiPatchCreator.SetTextureWKSPoint(3, ref textureLowerLeft);
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061934HYm.jpg)
IMultiPatch multiPatch = multiPatchCreator.CreateMultiPatch() as IMultiPatch;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061941ufy.jpg)
return multiPatch;
![](http://www.lzdodo.com/wp-content/uploads/auto_save_image/2012/07/061943WdV.jpg)
}