初遇Citymaker (六)

这次我们来说下要素构建

  • 要素构建

```javasctipt
import { cw5 } from "../index.js";

export const geometryCreator = {};

//原生类型值反映射枚举; type, 代表高程

let innerType = {
0: "unknown",
1: "point",
2: "modelPoint",
4: "POI",
6: "circularArc",
10: "line",
11: "circle",
30: "polyline",
31: "ring",
32: "compoundLine",
50: "polygon",
51: "triMesh",
70: "collection",
71: "multiPoint",
72: "multiPolyline",
73: "multiPolygon",
74: "multiTrimesh",
77: "closedTriMesh",
100: "pointCloud"
};

/**

  • 创建点要素

  • xyz 坐标

  • m 测量值

  • id ID

  • */
    geometryCreator.createPoint = function(x, y, z, m = 0, id = 0) {
    var point = cw5.__g.geometryFactory.createPoint(cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZ);

     

    if (x != null && y != null && z != null) {
    point.setCoords(x, y, z, m, id);
    }

     

    if (point != null) {
    let geometry =geometryCreator.createGeometry(point)
    return geometry;
    }
    }

/**

  • 创建线要素

  • paths Number[][]

  • */
    geometryCreator.createPolyline = function(paths) {
    let latitude = null;
    let longitude = null;
    let height = null;
    let position = cw5.__g.new_Vector3;
    let pathpoint = cw5.__g.geometryFactory.createPoint(cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZ);
    let line = cw5.__g.geometryFactory.createGeometry(cw5.innerConfig.gviGeometryType.gviGeometryPolyline, cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZ);
    //向线路中添加点
    if (paths != null) {
    for (let i = 0; i < paths.length; i++) {
    latitude = paths[i][0];
    longitude = paths[i][1];
    height = paths[i][2];

     

    position.set(latitude, longitude, height);
    pathpoint.position = position;
    line.appendPoint(pathpoint);
    }
    }
    if (line != null) {
    let geometry =geometryCreator.createGeometry(line)
    return geometry;
    }
    };

/**

  • 创建POI要素

  • xyz 坐标

  • m 测量值

  • id ID

  • */
    geometryCreator.createPOI = function(x, y, z, m = 0, id = 0) {

     

    var point = cw5.__g.geometryFactory.createGeometry(cw5.innerConfig.gviGeometryType.gviGeometryPOI, cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZ);//初始化矢量点对象
    point.setCoords(x, y, z, m, id);

     

    if (point != null) {
    let geometry =geometryCreator.createGeometry(point)
    return geometry;
    }
    };

/**

  • 创建多边形要素

  • paths Number[][]

  • */
    geometryCreator.createPolygon = function(paths) {
    let polygon = cw5.__g.geometryFactory.createGeometry(cw5.innerConfig.gviGeometryType.gviGeometryPolygon, cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZM);
    if (polygon == null) {
    return;
    }

     

    if (paths != null) {
    var exteriorRing = polygon.exteriorRing;

     

    let latitude = null;
    let longitude = null;
    let height = null;
    let position = cw5.__g.new_Vector3;
    let pathpoint = cw5.__g.geometryFactory.createPoint(cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZ);

     

    //向边界中添加点
    for (let i = 0; i < paths.length; i++) {
    latitude = paths[i][0];
    longitude = paths[i][1];
    height = paths[i][2];
    position.set(latitude, longitude, height);
    pathpoint.position = position;
    exteriorRing.appendPoint(pathpoint);
    }
    // exteriorRing.reverseOrientation()
    }

     

    let geometry =geometryCreator.createGeometry(polygon)
    return geometry;
    };

/**

  • 创建点模型
  • modelName 模型路径
  • xyz 坐标
  • m 测量值
  • id ID
  • */
    geometryCreator.createModelPoint = function(modelName,x, y, z, m = 0, id = 0) {
    var modelPoint= cw5.__g.geometryFactory.createGeometry(cw5.innerConfig.gviGeometryType.gviGeometryModelPoint, cw5.innerConfig.gviVertexAttribute.gviVertexAttributeZ);//初始化矢量点对象
    modelPoint.modelName = modelName;
    modelPoint.setCoords(x, y, z, m, id);
    if (modelPoint != null) {
    let geometry =geometryCreator.createGeometry(modelPoint)
    return geometry;
    }
    };

/**

  • 创建geometry 从原生对象

  • object citymaker原生geometry

  • */
    geometryCreator.createGeometry = function(object) {
    let type =innerType[object.geometryType] ;

     

    let geometry={

posted @ 2022-01-21 11:28  haibalai  阅读(31)  评论(0编辑  收藏  举报