日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【二次开发】CityMaker几何体——面

發布時間:2024/3/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【二次开发】CityMaker几何体——面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

**

三維中創建面對象

**

一:技術原理

基礎原理是點組成線,線組成面,而citymaker中直接給的是創建多邊形或者圓的幾何,然后可視化該對象。
過程:CityMaker創面,先創建幾何對象,然后把幾何對象可視化,用到的是sdk中的IGeometryFactory(幾何體工廠接口)來創建幾何,然后利用IObjectManager對象管理器接口來創建可視化對象(可以設置幾何樣式樣式IGeometrySymbol)具體類型詳見幾何篇。

分類:面分為polygon(面類)和triMesh(三角面),圓、橢圓、圓弧其實也是一個多邊形,也是一個面,在CityMaker中給了對應的創建接口,下面我們就來說下創建過程,至于三角面詳見高級篇

二:創建面

1. .NET

public void CreateRenderObject(){//創建幾何點和多邊形,詳見幾何篇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;//獲取多邊形外環對象point.SetCoords(0,0,100,0,0);//設置第一個點的坐標polyline.AppendPoint(point);//把點第一個點加入到線上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();//設置閉合ISurfaceSymbol surfaceSymbol = new SurfaceSymbol();//初始化面樣式surfaceSymbol.Color = 0xff0000ff;//設置填充顏色surfaceSymbol.ImageName ="D:\\citymakerbookdata\\point.png"; //設置圖片surfaceSymbol.RepeatLengthU=100;//設置水平方向多少米間隔重復surfaceSymbol.RepeatLengthV=100;//設置垂直方向多少米間隔重復surfaceSymbol.Rotation=30;//設置圖片旋轉的角度ICurveSymbol curveSymbol = new CurveSymbol();//初始化線屬性詳見創建線章節curveSymbol.Color=0xffcccccc;//設置邊框顏色surfaceSymbol.BoundarySymbol=curveSymbol;//設置面的邊框樣式//創建可視化多邊形對象var rPolygon = rendercontrol.ObjectManager.CreateRenderPolygon(polygon, surfaceSymbol,rootId);rendercontrol.Camera.FlyToObject(rPolygon.Guid,gviActionCode.gviActionFlyTo);//設置相機飛到對象 }//創建圓 public void CreateCircle(){IPosition position = new Position();//初始化位置position.X = 100;//x坐標position.Y = 100;//y坐標position.Altitude = 0;//高度position.Cartesian = true;//是否是平面position.Heading = 0;//設置圓的方向position.Roll = 0;position.Tilt = 0;//1、創建圓 參數為位置、半徑、線顏色、填充顏色、主節點idITerrainRegularPolygon rCircle = rendercontrol.ObjectManager.CreateCircle(position, 20, 0xFF00FF00, 0xFF808080, __rootId); rCircle.NumberOfSegments=50;//設置圓邊的個數//2、創建橢圓 參數為位置、x方向半徑、y方向半徑、線顏色、填充顏色、組成橢圓線段的個數、主節點idITerrainEllipse rEllipse =rendercontrol.ObjectManager.CreateEllipse(position,30,20, 0xFF00FF00, 0xFF808080,25, __rootId);//3、創建圓弧 參數為位置、x方向半徑、y方向半徑、起始角度、終止角度、線顏色、填充顏色、組成橢圓線段的個數、主節點idITerrainArc rArc = rendercontrol.ObjectManager.CreateArc(position,30,30,45,180,0xFF00FF00, 0xFF808080,25, __rootId);rendercontrol.Camera.FlyToObject(rCircle.Guid,gviActionCode.gviActionFlyTo);//設置相機飛到對象 }

2. JS

function createRenderObject(){//創建幾何點和多邊形var point = __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPoint,gviVertexAttribute.gviVertexAttributeZ);var polygon = __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPolygon,gviVertexAttribute.gviVertexAttributeZ);var polyline = polygon.exteriorRing;//獲取多邊形外環對象point.setCoords(0,0,100,0,0);//設置第一個點的坐標polyline.appendPoint(point);//把點第一個點加入到線上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();//設置閉合var surfaceSymbol = __g.new_SurfaceSymbol;//初始化面顏色surfaceSymbol.color = 0xff0000ff;//設置填充顏色surfaceSymbol.imageName ="D:\\citymakerbookdata\\point.png"; //設置圖片surfaceSymbol.repeatLengthU=100;//設置水平方向多少米間隔重復surfaceSymbol.repeatLengthV=100;//設置垂直方向多少米間隔重復surfaceSymbol.rotation=30;//設置圖片旋轉的角度var curveSymbol = __g.new_CurveSymbol;//初始化線 線屬性詳見創建線章節curveSymbol.color=0xffcccccc;//設置邊框顏色surfaceSymbol.boundarySymbol=curveSymbol;//設置面的邊框樣式//創建可視化多邊形對象var rPolygon = __g.objectManager.createRenderPolygon(polygon, surfaceSymbol, __rootId);__g.camera.flyToObject(rPolygon.guid,gviActionCode.gviActionFlyTo);//設置相機飛到線對象 }//創建圓 function createCircle(){var position = __g.new_Position;//初始化位置position.x = 100;//x坐標position.y = 100;//y坐標position.altitude=0//高度position.cartesian = true;//是否是平面position.heading = 0;//設置圓的方向position.roll = 0;position.tilt = 0;//1、創建圓 參數為位置、半徑、線顏色、填充顏色、主節點idvar rCircle = __g.objectManager.createCircle(position, 20, 0xFF00FF00, 0xFF808080, __rootId); rCircle.numberOfSegments=50;//設置圓邊的個數//2、創建橢圓 參數為位置、x方向半徑、y方向半徑、線顏色、填充顏色、組成橢圓線段的個數、主節點idvar rEllipse = __g.objectManager.createEllipse(position,30,20, 0xFF00FF00, 0xFF808080,25, __rootId);//3、創建圓弧 參數為位置、x方向半徑、y方向半徑、起始角度、終止角度、線顏色、填充顏色、組成橢圓線段的個數、主節點idvar rArc = __g.objectManager.createArc(position,30,30,45,180,0xFF00FF00, 0xFF808080,25, __rootId);__g.camera.flyToObject(rCircle.guid,gviActionCode.gviActionFlyTo);//設置相機飛到對象 }

三:注意事項

1、創建多邊形,可以有多個內環和一個外環,外環一定要閉合,用close接口或者添加兩次起始點

2、創建多邊形設置圖片地址,可以用本地路徑也可以用imageClass中的圖片名稱,詳細參考創建點篇

3、創建面的樣式一般分為 填充樣式跟邊框樣式,即面跟線的樣式

4、position位置是一個包括xyz坐標和歐拉角(heading、roll、tilt)的一個位置信息對象

總結

以上是生活随笔為你收集整理的【二次开发】CityMaker几何体——面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。