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

**

三维中创建线对象

**

一:技术原理:

基本原理就是由点组成线,citymaker是直接给的创建线几何接口,然后通过可视化创建对象。
方法:CityMaker创建线对象,根据两个点坐标创建可视化线对象,用到的是sdk中的IGeometryFactory(几何体工厂接口)来创建几何点和几何线,然后利用IObjectManager对象管理器接口来创建可视化线对象(创建可视化点可以设置点的样式ICurveSymbol),这里主要介绍创建线段,具体线段类型详见如图:

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

二:创建三维线对象:

1. .NET

public void CreateRenderPolyline()
{   
        //利用几何工厂创建一个几何线,第一个参数为创建的几何对象类型详细见 

        //第二个参数为顶点属性详细见图:

        IPoint point=(IPoint)gFactory.CreateGeometry(gviGeometryType.gviGeometryPoint,gviVertexAttribute.gviVertexAttributeZ);
        polyline = (IPolyline)gFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ);

        point.SetCoords(100, 100, 100, 0, 0);//设置第一个点坐标
        polyline.AppendPoint(point);//把第一个点加到线上
        point.SetCoords(200,200,200,0,0);//设置第二个点坐标
        polyline.AppendPoint(point);//把第二个点加到线上
        ICurveSymbol curveSymbol = new CurveSymbol();//初始化线框样式 
        curveSymbol.Color = 0xff0000ff;//设置线颜色 

        curveSymbol.Width = 5;//设置线宽
        curveSymbol.Pattern=gviDashStyle.gviDashSolid;//设置线样式,默认为实线,详见图:

        polyline.Generalize(100);//线的容差值 该方法用直线代替曲线,可减少复合线的节点数,容差是容许顶点移动的最大距离。

        var pLength=polyline.Length//获取线长度,适用平面坐标数据            
        //创建可视化线
        rPolyline = rendercontrol.ObjectManager.CreateRenderPolyline(polyline, curveSymbol, rootId);
}

2. JS

function createRenderPolyline(){
     //利用几何工厂创建一个几何线,第一个参数为创建的几何对象类型详细见 
     //第二个参数为顶点属性详细见图:

      var point =  __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPoint,gviVertexAttribute.gviVertexAttributeZ);
      var polyline =  __g.geometryFactory.createGeometry(gviGeometryType.gviGeometryPolyline,gviVertexAttribute.gviVertexAttributeZ);

      point.setCoords(100,100,100,0,0);//设置第一个点的坐标
      polyline.appendPoint(point);//把点第一个点加入到线上
      point.setCoords(200,200,200,0,0);//设置第二个点的坐标
      polyline.appendPoint(point);//把点第二个点加入到线上

      var curveSymbol = __g.new_CurveSymbol;//初始化线框样式
      curveSymbol.color = 0xff0000ff;//设置填充颜色

      curveSymbol.width = 5;//设置线宽
      curveSymbol.pattern=gviDashStyle.gviDashSolid;//设置线样式,默认为实线,详见图:

      polyline.generalize(100);//线的容差值 该方法用直线代替曲线,可减少复合线的节点数,容差是容许顶点移动的最大距离。

      var pLength=polyline.length//获取线长度,适用平面坐标数据    
      //创建可视化线对象
      var rPolyline = __g.objectManager.createRenderPolyline(polyline, curveSymbol, __rootId);
 }

三:注意事项

1、曲线线宽,默认值0(一个像素)。当取值为正数时,单位米。当取值为负数时,单位像素(最小为-5)。支持贴地。

2、polyline.length获取线长度,适用平面坐标数据