一、技术原理

基础原理是点组成线,线组成面,而citymaker中直接给的是创建多边形或者圆的几何,然后可视化该对象。
过程:CityMaker创面,先创建几何对象,然后把几何对象可视化,用到的是sdk中的IGeometryFactory(几何体工厂接口)来创建几何,然后利用IObjectManager对象管理器接口来创建可视化对象(可以设置几何样式样式IGeometrySymbol)具体类型详见几何篇。

分类:面分为polygon(面类)和triMesh(三角面),圆、椭圆、圆弧其实也是一个多边形,也是一个面,在CityMaker中给了对应的创建接口,下面我们就来说下创建过程,至于三角面详见高级篇

二、创建三维面对象

1. .NET

  1. public void CreateRenderObject(){
  2. //创建几何点和多边形,详见几何篇
  3. IGeometryFactory gFactory = new GeometryFactory();
  4. var point = (IPoint)gFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ);
  5. var polygon = (IPolygon)gFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ);
  6. var polyline = polygon.ExteriorRing;//获取多边形外环对象
  7. point.SetCoords(0,0,100,0,0);//设置第一个点的坐标
  8. polyline.AppendPoint(point);//把点第一个点加入到线上
  9. point.SetCoords(100,0,100,0,0);
  10. polyline.AppendPoint(point);
  11. point.SetCoords(100,100,100,0,0);
  12. polyline.AppendPoint(point)
  13. point.SetCoords(0,100,100,0,0);
  14. polyline.AppendPoint(point);
  15. polyline.Close();//设置闭合
  16. ISurfaceSymbol surfaceSymbol = new SurfaceSymbol();//初始化面样式
  17. surfaceSymbol.Color = 0xff0000ff;//设置填充颜色
  18. surfaceSymbol.ImageName ="D:\\citymakerbookdata\\point.png"; //设置图片
  19. surfaceSymbol.RepeatLengthU=100;//设置水平方向多少米间隔重复
  20. surfaceSymbol.RepeatLengthV=100;//设置垂直方向多少米间隔重复
  21. surfaceSymbol.Rotation=30;//设置图片旋转的角度
  22. ICurveSymbol curveSymbol = new CurveSymbol();//初始化线属性详见创建线章节
  23. curveSymbol.Color=0xffcccccc;//设置边框颜色
  24. surfaceSymbol.BoundarySymbol=curveSymbol;//设置面的边框样式
  25. //创建可视化多边形对象
  26. var rPolygon = rendercontrol.ObjectManager.CreateRenderPolygon(polygon, surfaceSymbol,rootId);
  27. rendercontrol.Camera.FlyToObject(rPolygon.Guid,gviActionCode.gviActionFlyTo);//设置相机飞到对象
  28. }
  29. //创建圆
  30. public void CreateCircle(){
  31. IPosition position = new Position();//初始化位置
  32. position.X = 100;//x坐标
  33. position.Y = 100;//y坐标
  34. position.Altitude = 0;//高度
  35. position.Cartesian = true;//是否是平面
  36. position.Heading = 0;//设置圆的方向
  37. position.Roll = 0;
  38. position.Tilt = 0;
  39. //1、创建圆 参数为位置、半径、线颜色、填充颜色、主节点id
  40. ITerrainRegularPolygon rCircle = rendercontrol.ObjectManager.CreateCircle(position, 20, 0xFF00FF00, 0xFF808080, __rootId);
  41. rCircle.NumberOfSegments=50;//设置圆边的个数
  42. //2、创建椭圆 参数为位置、x方向半径、y方向半径、线颜色、填充颜色、组成椭圆线段的个数、主节点id
  43. ITerrainEllipse rEllipse =rendercontrol.ObjectManager.CreateEllipse(position,30,20, 0xFF00FF00, 0xFF808080,25, __rootId);
  44. //3、创建圆弧 参数为位置、x方向半径、y方向半径、起始角度、终止角度、线颜色、填充颜色、组成椭圆线段的个数、主节点id
  45. ITerrainArc rArc = rendercontrol.ObjectManager.CreateArc(position,30,30,45,180,0xFF00FF00, 0xFF808080,25, __rootId);
  46. rendercontrol.Camera.FlyToObject(rCircle.Guid,gviActionCode.gviActionFlyTo);//设置相机飞到对象
  47. }

2. JavaScript

  1. function createRenderObject(){
  2. //创建几何点和多边形
  3. var point = __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPoint,gviVertexAttribute.gviVertexAttributeZ);
  4. var polygon = __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPolygon,gviVertexAttribute.gviVertexAttributeZ);
  5. var polyline = polygon.exteriorRing;//获取多边形外环对象
  6. point.setCoords(0,0,100,0,0);//设置第一个点的坐标
  7. polyline.appendPoint(point);//把点第一个点加入到线上
  8. point.setCoords(100,0,100,0,0);
  9. polyline.appendPoint(point);
  10. point.setCoords(100,100,100,0,0);
  11. polyline.appendPoint(point);
  12. point.setCoords(0,100,100,0,0);
  13. polyline.appendPoint(point);
  14. polyline.close();//设置闭合
  15. var surfaceSymbol = __g.new_SurfaceSymbol;//初始化面颜色
  16. surfaceSymbol.color = 0xff0000ff;//设置填充颜色
  17. surfaceSymbol.imageName ="D:\\citymakerbookdata\\point.png"; //设置图片
  18. surfaceSymbol.repeatLengthU=100;//设置水平方向多少米间隔重复
  19. surfaceSymbol.repeatLengthV=100;//设置垂直方向多少米间隔重复
  20. surfaceSymbol.rotation=30;//设置图片旋转的角度
  21. var curveSymbol = __g.new_CurveSymbol;//初始化线 线属性详见创建线章节
  22. curveSymbol.color=0xffcccccc;//设置边框颜色
  23. surfaceSymbol.boundarySymbol=curveSymbol;//设置面的边框样式
  24. //创建可视化多边形对象
  25. var rPolygon = __g.objectManager.createRenderPolygon(polygon, surfaceSymbol, __rootId);
  26. __g.camera.flyToObject(rPolygon.guid,gviActionCode.gviActionFlyTo);//设置相机飞到线对象
  27. }
  28. //创建圆
  29. function createCircle(){
  30. var position = __g.new_Position;//初始化位置
  31. position.x = 100;//x坐标
  32. position.y = 100;//y坐标
  33. position.altitude=0//高度
  34. position.cartesian = true;//是否是平面
  35. position.heading = 0;//设置圆的方向
  36. position.roll = 0;
  37. position.tilt = 0;
  38. //1、创建圆 参数为位置、半径、线颜色、填充颜色、主节点id
  39. var rCircle = __g.objectManager.createCircle(position, 20, 0xFF00FF00, 0xFF808080, __rootId);
  40. rCircle.numberOfSegments=50;//设置圆边的个数
  41. //2、创建椭圆 参数为位置、x方向半径、y方向半径、线颜色、填充颜色、组成椭圆线段的个数、主节点id
  42. var rEllipse = __g.objectManager.createEllipse(position,30,20, 0xFF00FF00, 0xFF808080,25, __rootId);
  43. //3、创建圆弧 参数为位置、x方向半径、y方向半径、起始角度、终止角度、线颜色、填充颜色、组成椭圆线段的个数、主节点id
  44. var rArc = __g.objectManager.createArc(position,30,30,45,180,0xFF00FF00, 0xFF808080,25, __rootId);
  45. __g.camera.flyToObject(rCircle.guid,gviActionCode.gviActionFlyTo);//设置相机飞到对象
  46. }

3. 注意

  1. 创建多边形,可以有多个内环和一个外环,外环一定要闭合,用close接口或者添加两次起始点
  2. 创建多边形设置图片地址,可以用本地路径也可以用imageClass中的图片名称,详细参考创建点篇
  3. 创建面的样式一般分为 填充样式跟边框样式,即面跟线的样式
  4. position位置是一个包括xyz坐标和欧拉角(heading、roll、tilt)的一个位置信息对象