初遇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={
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律