【二次开发】CityMaker几何体——面
**
三維中創(chuàng)建面對象
**
一:技術(shù)原理
基礎(chǔ)原理是點(diǎn)組成線,線組成面,而citymaker中直接給的是創(chuàng)建多邊形或者圓的幾何,然后可視化該對象。
過程:CityMaker創(chuàng)面,先創(chuàng)建幾何對象,然后把幾何對象可視化,用到的是sdk中的IGeometryFactory(幾何體工廠接口)來創(chuàng)建幾何,然后利用IObjectManager對象管理器接口來創(chuàng)建可視化對象(可以設(shè)置幾何樣式樣式IGeometrySymbol)具體類型詳見幾何篇。
分類:面分為polygon(面類)和triMesh(三角面),圓、橢圓、圓弧其實(shí)也是一個多邊形,也是一個面,在CityMaker中給了對應(yīng)的創(chuàng)建接口,下面我們就來說下創(chuàng)建過程,至于三角面詳見高級篇
二:創(chuàng)建面
1. .NET
public void CreateRenderObject(){//創(chuàng)建幾何點(diǎn)和多邊形,詳見幾何篇IGeometryFactory gFactory = new GeometryFactory();var point = (IPoint)gFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ);var polygon = (IPolygon)gFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ);var polyline = polygon.ExteriorRing;//獲取多邊形外環(huán)對象point.SetCoords(0,0,100,0,0);//設(shè)置第一個點(diǎn)的坐標(biāo)polyline.AppendPoint(point);//把點(diǎn)第一個點(diǎn)加入到線上point.SetCoords(100,0,100,0,0);polyline.AppendPoint(point);point.SetCoords(100,100,100,0,0);polyline.AppendPoint(point)point.SetCoords(0,100,100,0,0);polyline.AppendPoint(point);polyline.Close();//設(shè)置閉合ISurfaceSymbol surfaceSymbol = new SurfaceSymbol();//初始化面樣式surfaceSymbol.Color = 0xff0000ff;//設(shè)置填充顏色surfaceSymbol.ImageName ="D:\\citymakerbookdata\\point.png"; //設(shè)置圖片surfaceSymbol.RepeatLengthU=100;//設(shè)置水平方向多少米間隔重復(fù)surfaceSymbol.RepeatLengthV=100;//設(shè)置垂直方向多少米間隔重復(fù)surfaceSymbol.Rotation=30;//設(shè)置圖片旋轉(zhuǎn)的角度ICurveSymbol curveSymbol = new CurveSymbol();//初始化線屬性詳見創(chuàng)建線章節(jié)curveSymbol.Color=0xffcccccc;//設(shè)置邊框顏色surfaceSymbol.BoundarySymbol=curveSymbol;//設(shè)置面的邊框樣式//創(chuàng)建可視化多邊形對象var rPolygon = rendercontrol.ObjectManager.CreateRenderPolygon(polygon, surfaceSymbol,rootId);rendercontrol.Camera.FlyToObject(rPolygon.Guid,gviActionCode.gviActionFlyTo);//設(shè)置相機(jī)飛到對象 }//創(chuàng)建圓 public void CreateCircle(){IPosition position = new Position();//初始化位置position.X = 100;//x坐標(biāo)position.Y = 100;//y坐標(biāo)position.Altitude = 0;//高度position.Cartesian = true;//是否是平面position.Heading = 0;//設(shè)置圓的方向position.Roll = 0;position.Tilt = 0;//1、創(chuàng)建圓 參數(shù)為位置、半徑、線顏色、填充顏色、主節(jié)點(diǎn)idITerrainRegularPolygon rCircle = rendercontrol.ObjectManager.CreateCircle(position, 20, 0xFF00FF00, 0xFF808080, __rootId); rCircle.NumberOfSegments=50;//設(shè)置圓邊的個數(shù)//2、創(chuàng)建橢圓 參數(shù)為位置、x方向半徑、y方向半徑、線顏色、填充顏色、組成橢圓線段的個數(shù)、主節(jié)點(diǎn)idITerrainEllipse rEllipse =rendercontrol.ObjectManager.CreateEllipse(position,30,20, 0xFF00FF00, 0xFF808080,25, __rootId);//3、創(chuàng)建圓弧 參數(shù)為位置、x方向半徑、y方向半徑、起始角度、終止角度、線顏色、填充顏色、組成橢圓線段的個數(shù)、主節(jié)點(diǎn)idITerrainArc rArc = rendercontrol.ObjectManager.CreateArc(position,30,30,45,180,0xFF00FF00, 0xFF808080,25, __rootId);rendercontrol.Camera.FlyToObject(rCircle.Guid,gviActionCode.gviActionFlyTo);//設(shè)置相機(jī)飛到對象 }2. JS
function createRenderObject(){//創(chuàng)建幾何點(diǎn)和多邊形var point = __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPoint,gviVertexAttribute.gviVertexAttributeZ);var polygon = __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPolygon,gviVertexAttribute.gviVertexAttributeZ);var polyline = polygon.exteriorRing;//獲取多邊形外環(huán)對象point.setCoords(0,0,100,0,0);//設(shè)置第一個點(diǎn)的坐標(biāo)polyline.appendPoint(point);//把點(diǎn)第一個點(diǎn)加入到線上point.setCoords(100,0,100,0,0);polyline.appendPoint(point);point.setCoords(100,100,100,0,0);polyline.appendPoint(point);point.setCoords(0,100,100,0,0);polyline.appendPoint(point);polyline.close();//設(shè)置閉合var surfaceSymbol = __g.new_SurfaceSymbol;//初始化面顏色surfaceSymbol.color = 0xff0000ff;//設(shè)置填充顏色surfaceSymbol.imageName ="D:\\citymakerbookdata\\point.png"; //設(shè)置圖片surfaceSymbol.repeatLengthU=100;//設(shè)置水平方向多少米間隔重復(fù)surfaceSymbol.repeatLengthV=100;//設(shè)置垂直方向多少米間隔重復(fù)surfaceSymbol.rotation=30;//設(shè)置圖片旋轉(zhuǎn)的角度var curveSymbol = __g.new_CurveSymbol;//初始化線 線屬性詳見創(chuàng)建線章節(jié)curveSymbol.color=0xffcccccc;//設(shè)置邊框顏色surfaceSymbol.boundarySymbol=curveSymbol;//設(shè)置面的邊框樣式//創(chuàng)建可視化多邊形對象var rPolygon = __g.objectManager.createRenderPolygon(polygon, surfaceSymbol, __rootId);__g.camera.flyToObject(rPolygon.guid,gviActionCode.gviActionFlyTo);//設(shè)置相機(jī)飛到線對象 }//創(chuàng)建圓 function createCircle(){var position = __g.new_Position;//初始化位置position.x = 100;//x坐標(biāo)position.y = 100;//y坐標(biāo)position.altitude=0//高度position.cartesian = true;//是否是平面position.heading = 0;//設(shè)置圓的方向position.roll = 0;position.tilt = 0;//1、創(chuàng)建圓 參數(shù)為位置、半徑、線顏色、填充顏色、主節(jié)點(diǎn)idvar rCircle = __g.objectManager.createCircle(position, 20, 0xFF00FF00, 0xFF808080, __rootId); rCircle.numberOfSegments=50;//設(shè)置圓邊的個數(shù)//2、創(chuàng)建橢圓 參數(shù)為位置、x方向半徑、y方向半徑、線顏色、填充顏色、組成橢圓線段的個數(shù)、主節(jié)點(diǎn)idvar rEllipse = __g.objectManager.createEllipse(position,30,20, 0xFF00FF00, 0xFF808080,25, __rootId);//3、創(chuàng)建圓弧 參數(shù)為位置、x方向半徑、y方向半徑、起始角度、終止角度、線顏色、填充顏色、組成橢圓線段的個數(shù)、主節(jié)點(diǎn)idvar rArc = __g.objectManager.createArc(position,30,30,45,180,0xFF00FF00, 0xFF808080,25, __rootId);__g.camera.flyToObject(rCircle.guid,gviActionCode.gviActionFlyTo);//設(shè)置相機(jī)飛到對象 }三:注意事項(xiàng)
1、創(chuàng)建多邊形,可以有多個內(nèi)環(huán)和一個外環(huán),外環(huán)一定要閉合,用close接口或者添加兩次起始點(diǎn)
2、創(chuàng)建多邊形設(shè)置圖片地址,可以用本地路徑也可以用imageClass中的圖片名稱,詳細(xì)參考創(chuàng)建點(diǎn)篇
3、創(chuàng)建面的樣式一般分為 填充樣式跟邊框樣式,即面跟線的樣式
4、position位置是一個包括xyz坐標(biāo)和歐拉角(heading、roll、tilt)的一個位置信息對象
總結(jié)
以上是生活随笔為你收集整理的【二次开发】CityMaker几何体——面的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 360和百度大战和三星苹果之争
- 下一篇: 求联想G50-70M刷bios白名单教程