一、技术原理
基础原理是点组成线,线组成面,而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. JavaScript
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);//设置相机飞到对象}
3. 注意
- 创建多边形,可以有多个内环和一个外环,外环一定要闭合,用close接口或者添加两次起始点
- 创建多边形设置图片地址,可以用本地路径也可以用imageClass中的图片名称,详细参考创建点篇
- 创建面的样式一般分为 填充样式跟边框样式,即面跟线的样式
- position位置是一个包括xyz坐标和欧拉角(heading、roll、tilt)的一个位置信息对象
