|
|
|
@ -1,231 +0,0 @@
|
|
|
|
|
/*
|
|
|
|
|
* @Author: cbwu 504-wuchengbo@htsdfp.com
|
|
|
|
|
* @Date: 2024-03-28 09:14:45
|
|
|
|
|
* @LastEditors: cbwu
|
|
|
|
|
* @LastEditTime: 2024-03-28 17:40:14
|
|
|
|
|
* @Description: 封装的几何类型类
|
|
|
|
|
*/
|
|
|
|
|
import {
|
|
|
|
|
Entity,
|
|
|
|
|
EntityCollection,
|
|
|
|
|
Cartesian3,
|
|
|
|
|
Color,
|
|
|
|
|
PrimitiveCollection,
|
|
|
|
|
PointPrimitiveCollection,
|
|
|
|
|
PolylineGeometry,
|
|
|
|
|
PointGraphics,
|
|
|
|
|
Property,
|
|
|
|
|
PositionProperty,
|
|
|
|
|
LabelGraphics,
|
|
|
|
|
PolylineGraphics,
|
|
|
|
|
PolygonGraphics,
|
|
|
|
|
Cartesian2,
|
|
|
|
|
ConstantPositionProperty,
|
|
|
|
|
CallbackProperty,
|
|
|
|
|
} from 'cesium'
|
|
|
|
|
type EntityOptions = {
|
|
|
|
|
id?: string
|
|
|
|
|
name?: string
|
|
|
|
|
show?: boolean
|
|
|
|
|
pixelSize?: number
|
|
|
|
|
outlineColor?: Color
|
|
|
|
|
color?: Color
|
|
|
|
|
fillColor?: Color
|
|
|
|
|
fill?: boolean
|
|
|
|
|
width?: number
|
|
|
|
|
outlineWidth?: number
|
|
|
|
|
text?: string
|
|
|
|
|
font?: string
|
|
|
|
|
pixelOffset?: Cartesian2
|
|
|
|
|
}
|
|
|
|
|
// 点
|
|
|
|
|
class PointEntity extends Entity {
|
|
|
|
|
static ID: number = 0
|
|
|
|
|
public subId: number = 0 //用于作为其他几何体的控制点时标记节点号
|
|
|
|
|
options: EntityOptions = {
|
|
|
|
|
id: 'Point' + String(PointEntity.ID),
|
|
|
|
|
name: 'Point' + String(PointEntity.ID + 1),
|
|
|
|
|
show: true,
|
|
|
|
|
pixelSize: 10,
|
|
|
|
|
color: Color.GREEN,
|
|
|
|
|
outlineWidth: 0,
|
|
|
|
|
}
|
|
|
|
|
constructor(
|
|
|
|
|
position: PositionProperty | Cartesian3,
|
|
|
|
|
options?: EntityOptions,
|
|
|
|
|
) {
|
|
|
|
|
super({
|
|
|
|
|
position: position,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
this.options = { ...this.options, ...options }
|
|
|
|
|
//点对象
|
|
|
|
|
this.point = new PointGraphics({
|
|
|
|
|
pixelSize: this.options.pixelSize,
|
|
|
|
|
color: this.options.color,
|
|
|
|
|
outlineColor: this.options.outlineColor,
|
|
|
|
|
outlineWidth: this.options.outlineWidth,
|
|
|
|
|
})
|
|
|
|
|
// 标注对象
|
|
|
|
|
this.label = new LabelGraphics({
|
|
|
|
|
text: this.options.text,
|
|
|
|
|
font: this.options.font,
|
|
|
|
|
pixelOffset: this.options.pixelOffset,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
PointEntity.ID++
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 线
|
|
|
|
|
class PolylineEntity extends EntityCollection {
|
|
|
|
|
static ID: number = 0
|
|
|
|
|
positions: Cartesian3[] = []
|
|
|
|
|
controlPointsID: string[] = []
|
|
|
|
|
options: EntityOptions = {
|
|
|
|
|
id: 'Polyline' + String(PolylineEntity.ID),
|
|
|
|
|
name: 'Polyline' + String(PolylineEntity.ID + 1),
|
|
|
|
|
show: true,
|
|
|
|
|
width: 2,
|
|
|
|
|
color: Color.GREEN,
|
|
|
|
|
}
|
|
|
|
|
constructor(ptArr: Cartesian3[], options?: EntityOptions) {
|
|
|
|
|
super()
|
|
|
|
|
this.options = { ...this.options, ...options }
|
|
|
|
|
this.positions = ptArr
|
|
|
|
|
const polyline = new Entity({
|
|
|
|
|
name: this.options.name,
|
|
|
|
|
polyline: {
|
|
|
|
|
positions: new CallbackProperty(() => {
|
|
|
|
|
return this.positions
|
|
|
|
|
}, false),
|
|
|
|
|
show: this.options.show,
|
|
|
|
|
width: this.options.width,
|
|
|
|
|
material: this.options.color,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
this.add(polyline)
|
|
|
|
|
ptArr.forEach((pt, index) => {
|
|
|
|
|
this.createPoint(pt, index)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
PolylineEntity.ID++
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 新增一个节点,默认插入在尾部,
|
|
|
|
|
* @param pos 点坐标
|
|
|
|
|
* @param index 插入的位置,0起步
|
|
|
|
|
*/
|
|
|
|
|
public addPoint(pos: Cartesian3, index: number = -1) {
|
|
|
|
|
if (index === -1) {
|
|
|
|
|
//插入尾部
|
|
|
|
|
this.positions.push(pos)
|
|
|
|
|
this.createPoint(pos, this.positions.length - 1)
|
|
|
|
|
} else if (index >= 0 && index < this.positions.length) {
|
|
|
|
|
this.positions.splice(index, 0, pos)
|
|
|
|
|
this.createPoint(pos, index)
|
|
|
|
|
} else {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 移除点
|
|
|
|
|
* @param index 移除点的位置
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
|
|
|
|
public removePoint(index: number = -1) {
|
|
|
|
|
if (index === -1 || index === this.positions.length - 1) {
|
|
|
|
|
//移除尾部元素
|
|
|
|
|
this.positions.pop()
|
|
|
|
|
} else if (index >= 0 && index < this.positions.length) {
|
|
|
|
|
this.positions.splice(index, 1)
|
|
|
|
|
this.removeById(this.controlPointsID[index])
|
|
|
|
|
this.controlPointsID.splice(index, 1)
|
|
|
|
|
} else {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 修改某点的坐标
|
|
|
|
|
* @param pos 修改点的坐标
|
|
|
|
|
* @param index 修改点的位置
|
|
|
|
|
*/
|
|
|
|
|
public modifyPoint(pos: Cartesian3, index: number) {
|
|
|
|
|
if (index >= 0 && index < this.positions.length) {
|
|
|
|
|
this.positions.splice(index, 1, pos)
|
|
|
|
|
//修改控制点坐标
|
|
|
|
|
const point = this.getById(this.controlPointsID[index])
|
|
|
|
|
if (point) {
|
|
|
|
|
point.position = new ConstantPositionProperty(pos)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 新加一个点
|
|
|
|
|
* @param pos 点的坐标
|
|
|
|
|
* @param index 插入的位置,0起步
|
|
|
|
|
*/
|
|
|
|
|
createPoint(pos: Cartesian3, index: number) {
|
|
|
|
|
const point = new PointEntity(pos)
|
|
|
|
|
point.subId = index + 1
|
|
|
|
|
this.add(point)
|
|
|
|
|
this.controlPointsID.splice(index, 0, point.id)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 多边形
|
|
|
|
|
class PolygonEntity extends Entity {
|
|
|
|
|
static id: number = 0
|
|
|
|
|
options: EntityOptions = {
|
|
|
|
|
id: 'Polygon' + String(PolygonEntity.id),
|
|
|
|
|
name: 'Polygon' + String(PolygonEntity.id + 1),
|
|
|
|
|
show: true,
|
|
|
|
|
width: 2,
|
|
|
|
|
color: Color.RED,
|
|
|
|
|
fillColor: Color.RED.withAlpha(0.5),
|
|
|
|
|
fill: true,
|
|
|
|
|
}
|
|
|
|
|
constructor(ptArr: Cartesian3[] | Property, options?: EntityOptions) {
|
|
|
|
|
super({
|
|
|
|
|
// id: options?.id || String(PolygonEntity.id),
|
|
|
|
|
})
|
|
|
|
|
this.options = { ...this.options, ...options }
|
|
|
|
|
this.name = this.options.name
|
|
|
|
|
this.polygon = new PolygonGraphics({
|
|
|
|
|
show: this.options.show,
|
|
|
|
|
hierarchy: ptArr,
|
|
|
|
|
material: this.options.fillColor, //填充颜色
|
|
|
|
|
fill: this.options.fill, //是否填充
|
|
|
|
|
outlineWidth: this.options.width, //线宽
|
|
|
|
|
outlineColor: this.options.color, //线颜色
|
|
|
|
|
})
|
|
|
|
|
PolygonEntity.id++
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 线
|
|
|
|
|
class Polyline extends PrimitiveCollection {
|
|
|
|
|
constructor(ptArr: Cartesian3[]) {
|
|
|
|
|
super()
|
|
|
|
|
this.add(this.createPoints(ptArr))
|
|
|
|
|
this.add(this.createPolyline(ptArr))
|
|
|
|
|
// this.id
|
|
|
|
|
}
|
|
|
|
|
private createPoints(posArr: Cartesian3[]) {
|
|
|
|
|
const points = new PointPrimitiveCollection()
|
|
|
|
|
for (const pos in posArr) {
|
|
|
|
|
points.add({
|
|
|
|
|
position: pos,
|
|
|
|
|
color: Color.RED,
|
|
|
|
|
pixelSize: 10,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
return points
|
|
|
|
|
}
|
|
|
|
|
private createPolyline(posArr: Cartesian3[]) {
|
|
|
|
|
return new PolylineGeometry({
|
|
|
|
|
positions: posArr,
|
|
|
|
|
width: 2,
|
|
|
|
|
colors: new Array(posArr.length).fill(Color.fromCssColorString('green')),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
export { PointEntity, Polyline, PolylineEntity, PolygonEntity }
|