欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

Geometry 對(duì)象淺析_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:再議ASP.NET DataGrid控件中的“添加新行”功能
  說(shuō)起在DataGrid中添加新行,ASP.NET開發(fā)的大牛人物:Dino Esposito,他的《構(gòu)建WEB解決方案--應(yīng)用ASP.NET和ADO.NET》一書中提供了和以上兩位類似的方法,但是Dino又加了些功能,首先就是&rd

  ArcEngine Geometry庫(kù)定義了基本幾何圖形的矢量表達(dá)形式,頂級(jí)的幾何圖形有Points、Multipoints、Polylines、Polygons、 Multipatches,Geodatabase和繪圖系統(tǒng)使用這些幾何圖形來(lái)定義其他各種形狀的特征和圖形,提供了編輯圖形的操作方法和地圖符號(hào)系統(tǒng)符號(hào)化特征數(shù)據(jù)的途徑。


  Geometry庫(kù)中幾個(gè)核心類和接口構(gòu)成了Geometry對(duì)象的基本框架。


  GeometryEnvironment


  GeometryEnvironment提供了從不同的輸入、設(shè)置或獲取全局變量來(lái)創(chuàng)建幾何圖形的方法,以便控制geometry方法的行為。GeometryEnvironment對(duì)象是一個(gè)單例對(duì)象。

以下為引用的內(nèi)容:
public IPolyline TestGeometryEnvironment()
{
ISpatialReferenceFactory spatialReferenceFactory
= new SpatialReferenceEnvironmentClass();

//Create a projected coordinate system and define its domain, resolution, and x,y tolerance.
ISpatialReferenceResolution spatialReferenceResolution = spatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983UTM_11N) as ISpatialReferenceResolution;
spatialReferenceResolution.ConstructFromHorizon();
ISpatialReferenceTolerance spatialReferenceTolerance
= spatialReferenceResolution as ISpatialReferenceTolerance;
spatialReferenceTolerance.SetDefaultXYTolerance();
ISpatialReference spatialReference
= spatialReferenceResolution as ISpatialReference;

//Create an array of WKSPoint structures starting in the middle of the x,y domain of the
//projected coordinate system.

double xMin;
double xMax;
double yMin;
double yMax;
spatialReference.GetDomain(
out xMin, out xMax, out yMin, out yMax);

double xFactor = (xMin xMax) * 0.5;
double yFactor = (yMin yMax) * 0.5;

WKSPoint[] wksPoints
= new WKSPoint[10];
for (int i = 0; i < wksPoints.Length; i )
{
wksPoints[i].X
= xFactor i;
wksPoints[i].Y
= yFactor i;
}


IPointCollection4 pointCollection
= new PolylineClass();

IGeometryBridge2 geometryBridge
= new GeometryEnvironmentClass();
geometryBridge.AddWKSPoints(pointCollection,
ref wksPoints);

IPolyline polyline
= pointCollection as IPolyline;
polyline.SpatialReference
= spatialReference;

return polyline;
}

  new GeometryEnvironmentClass僅僅是創(chuàng)建了一個(gè)指向已存在的GeometryEnvironmentClass的引用。注意 IGeometryBridge2接口的使用,addWKSPoints方法將WKSPoint二維點(diǎn)添加到PointCollection中,用于構(gòu)建 path、ring、polyline、polygon,或增加新點(diǎn)到Multipoint、TriangleFan、TriangleStrip。在 Geometry庫(kù)中,除了IGeometryBridge2還有IGeometryBridge接口,后者繼承了前者,增加了一些編輯功能(添加點(diǎn)、插入點(diǎn)、重置點(diǎn)、分段等)。


  GeometryBag


  GeometryBag是支持IGeometry接口的幾何對(duì)象引用的集合,任何幾何對(duì)象都可以通過IGeometryCollection接口添加到 GeometryBag中,但是在使用拓?fù)洳僮鞯臅r(shí)候,需要注意不同類型的幾何類型可能會(huì)有相互不兼容的情況。在向GeometryBag中添加幾何對(duì)象的時(shí)候,GeometryBag對(duì)象需要指定空間參考,添加到其中的幾何對(duì)象均擁有和GeometryBag對(duì)象一樣的空間參考。

以下為引用的內(nèi)容:
private IPolygon GeometryBag_Example(IFeatureClass featureClass)
{

//Check input objects.
if (featureClass == null)
{
return null;
}


IGeoDataset geoDataset
= featureClass as IGeoDataset;
ISpatialFilter queryFilter
= new SpatialFilterClass();

//Set the properties of the spatial filter here.
IGeometry geometryBag = new GeometryBagClass();

//Define the spatial reference of the bag before adding geometries to it.
geometryBag.SpatialReference = geoDataset.SpatialReference;

//Use a nonrecycling cursor so each returned geometry is a separate object.
IFeatureCursor featureCursor = featureClass.Search(queryFilter, false);

IGeometryCollection geometryCollection
= geometryBag as IGeometryCollection;
IFeature currentFeature
= featureCursor.NextFeature();

while (currentFeature != null)
{
//Add a reference to this feature's geometry into the bag.
//You don't specify the before or after geometry (missing),
//so the currentFeature.Shape IGeometry is added to the end of the geometryCollection.
object missing = Type.Missing;
geometryCollection.AddGeometry(currentFeature.Shape,
ref missing, ref missing);

currentFeature
= featureCursor.NextFeature();
}


// Create the polygon that will be the union of the features returned from the search cursor.
// The spatial reference of this feature does not need to be set ahead of time. The
// ConstructUnion method defines the constructed polygon's spatial reference to be the same as
// the input geometry bag.
ITopologicalOperator unionedPolygon = new PolygonClass();
unionedPolygon.ConstructUnion(geometryBag
as IEnumGeometry);

return unionedPolygon as IPolygon;
}

  Points


  一個(gè)點(diǎn)包括X、Y坐標(biāo),同時(shí)可以增加M、Z值及ID屬性來(lái)擴(kuò)展點(diǎn)的功能。


  Multipoints


  點(diǎn)的集合,多點(diǎn)組成Multipoint幾何類型,使用multipoint對(duì)象實(shí)現(xiàn)了的IPointCollection接口可以訪問所有的點(diǎn)元素,這些點(diǎn)同樣可以擁有M、Z值及ID屬性來(lái)獲得更多的地理空間內(nèi)涵。


  下面列舉一個(gè)例子,通過一個(gè)已知的polyline來(lái)定義一個(gè)新的multipart polyline。

以下為引用的內(nèi)容:
public IPolyline ConstructMultiPartPolyline(IPolyline inputPolyline)
{
IGeometry outGeometry
= new PolylineClass();

//Always associate new, top-level geometries with an appropriate spatial reference.
outGeometry.SpatialReference = inputPolyline.SpatialReference;

IGeometryCollection geometryCollection
= outGeometry as IGeometryCollection;

ISegmentCollection segmentCollection
= inputPolyline as ISegmentCollection;

//Iterate over existing polyline segments using a segment enumerator.
IEnumSegment segments = segmentCollection.EnumSegments;

ISegment currentSegment;
int partIndex = 0;;
int segmentIndex = 0;;
segments.Next(
out currentSegment,ref partIndex, ref segmentIndex);
while(currentSegment != null)
{
ILine normal
= new LineClass();

//Geometry methods with _Query_ in their name expect to modify existing geometries.
//In this case, the QueryNormal method modifies an existing line
//segment (normal) to be the normal vector to
//currentSegment at the specified location along currentSegment.
currentSegment.QueryNormal(esriSegmentExtension.esriNoExtension, 0.5, true, currentSegment.Length / 3, normal);

//Since each normal vector is not connected to others, create a new path for each one.
ISegmentCollection newPath = new PathClass();
object missing = Type.Missing;
newPath.AddSegment(normal
as ISegment, ref missing, ref missing);
//The spatial reference associated with geometryCollection will be assigned to all incoming paths and segments.
geometryCollection.AddGeometry(newPath as IGeometry, ref missing, ref missing);

segments.Next(
out currentSegment,ref partIndex, ref segmentIndex);
}

//The geometryCollection now contains the new, multipart polyline.
return geometryCollection as IPolyline;
}

  ISegment接口的QueryNormal方法用來(lái)在弧段上的某一點(diǎn)生成該弧段的法線,指定其長(zhǎng)度,這樣就生成了新的segment,并且多個(gè)path添加到geometryCollection中,以IPolyline的形式返回。


  Polylines


  Polylines是有序path組成的集合,可以擁有M、Z和ID屬性值。Polyline對(duì)象的IPointCollection接口包含了所有節(jié)點(diǎn)的復(fù)制,IGeometryCollection接口可以獲取polyline的paths,ISegmentCollection接口可以獲取 polyline的segments。


  Polyline結(jié)構(gòu)圖

  Polygons


  Polygon是一系列rings組成的集合,可以擁有M、Z和ID屬性值。每一個(gè)ring由一個(gè)或多個(gè)segment組成,Polygon或ring對(duì)象的IPointCollection接口包含了所有節(jié)點(diǎn)的復(fù)制,IGeometryCollection接口可以獲取polygon的rings, ISegmentCollection接口可以獲取polygon的segments。


  Polygon結(jié)構(gòu)圖

  Multipatch


  Multipatch用于描述3D面狀幾何類型,由一系列的矢量三角形構(gòu)成,如果其中的part是一個(gè)ring,那么它必須是封閉的,第一個(gè)節(jié)點(diǎn)和最后一個(gè)節(jié)點(diǎn)相同,另外每個(gè)part所包含節(jié)點(diǎn)的順序非常重要,Inner Rings在Outer Rings之后,代表單個(gè)表面patch的一系列rings必須由第一個(gè)ring開始。

  在9.0以后的開發(fā)包中,使用IGeneralMultiPatchCreator創(chuàng)建新的Multipatch,IGeometryMaterial進(jìn)行材質(zhì)貼圖。

以下為引用的內(nèi)容:
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
= 1;
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;
}

分享:AJAX實(shí)現(xiàn)web頁(yè)面中級(jí)聯(lián)菜單的設(shè)計(jì)
  看了大峽搞的級(jí)聯(lián)菜單,我也班門弄斧一把,嘿嘿,花了一點(diǎn)時(shí)間搞了個(gè)級(jí)聯(lián)菜單貼上來(lái)看看。本例中只要你選擇成員分類名稱就會(huì)自動(dòng)顯示成員名稱: 首先在eclipse中建一個(gè)項(xiàng)目,名稱你自

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程