【二次开发】CityMaker常见分析——瓦片挖洞

**

瓦片挖洞

**

一:技术原理:

瓦片挖洞用到了几何编辑模块的瓦片挖洞方法,主要作用是切除部分瓦片数据,显示出瓦片以下遮挡的部分模型。
瓦片挖洞主要分为两步:绘制挖洞面,进行瓦片挖洞。####
【二次开发】CityMaker常见分析——瓦片挖洞_第1张图片

二:实现瓦片挖洞:

1. .Net代码

private void tileholeanalysis() 
{   
    AxRenderControl rendercontrol=getRenderControl();//获取控件
IGeometryFactory geoFactory = new GeometryFactory();

    //创建面要素,作为挖洞范围
    IPolygon fde_polygon = (IPolygon)geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon,
                           gviVertexAttribute.gviVertexAttributeZ); 
    fde_polygon.SpatialCRS = crs as ISpatialCRS;//定义面坐标系(保证创建的面与瓦片数据坐标相通)
    
    //定义范围坐标
    IPoint fde_point = (IPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint,
                           gviVertexAttribute.gviVertexAttributeZ); //创建点
    fde_point.SetCoords(15527.52, 35748.21, 5.2, 0, 0);
    fde_polygon.ExteriorRing.AppendPoint(fde_point);
    fde_point.SetCoords(15567.42, 35684.12, 5.2, 0, 0);
    fde_polygon.ExteriorRing.AppendPoint(fde_point);
    fde_point.SetCoords(15604.36, 35708.22, 5.2, 0, 0);
    fde_polygon.ExteriorRing.AppendPoint(fde_point);
    fde_point.SetCoords(15562.71, 35771.03, 5.2, 0, 0);
    fde_polygon.ExteriorRing.AppendPoint(fde_point);
    fde_polygon.Close ();

//瓦片挖洞
I3DTileHole hole = rendercontrol.ObjectManager.Create3DTileHole(fde_polygon, System.Guid.Empty);
}

2. JS代码

function tileholeanalysis()
{
    var __g=document.getElementById("__g");//获取控件
    var geoFactory = __g.geometryFactory;

    //创建面要素,作为挖洞范围
    var fde_polygon = geoFactory.createGeometry(gviGeometryType.gviGeometryPolygon,
            gviVertexAttribute.gviVertexAttributeZ);

    //定义范围坐标
    var fde_point = geoFactory.createGeometry(gviGeometryType.gviGeometryPoint,
            gviVertexAttribute.gviVertexAttributeZ); //创建点
    fde_point.setCoords(15527.52, 35748.21, 5.2, 0, 0);
    fde_polygon.exteriorRing.appendPoint(fde_point);
    fde_point.setCoords(15567.42, 35684.12, 5.2, 0, 0);
    fde_polygon.exteriorRing.appendPoint(fde_point);
    fde_point.setCoords(15604.36, 35708.22, 5.2, 0, 0);
    fde_polygon.exteriorRing.appendPoint(fde_point);
    fde_point.setCoords(15562.71, 35771.03, 5.2, 0, 0);
    fde_polygon.exteriorRing.appendPoint(fde_point);
    fde_polygon.close ();

    //瓦片挖洞
    var hole = __g.objectManager.create3DTileHole(fde_polygon, __rootId);
}

三:注意事项

1、瓦片挖洞仅支持瓦片数据。
2、挖洞面必须闭合,推荐在挖洞前调用close方法手动闭合。
3、挖洞面需要与瓦片数据有相同的坐标系。
4、更多示例请参考SDK中级篇TileHole。

你可能感兴趣的:(SDK开发入门教程)