|
|
|
|
/*
|
|
|
|
|
* @Author: cbwu 504-wuchengbo@htsdfp.com
|
|
|
|
|
* @Date: 2024-03-28 16:22:58
|
|
|
|
|
* @LastEditors: cbwu
|
|
|
|
|
* @LastEditTime: 2024-04-22 11:32:00
|
|
|
|
|
* @Description: 几何类抽象基类
|
|
|
|
|
*/
|
|
|
|
|
import {
|
|
|
|
|
// EntityCollection,
|
|
|
|
|
Entity,
|
|
|
|
|
Cartesian3,
|
|
|
|
|
Color,
|
|
|
|
|
ConstantPositionProperty,
|
|
|
|
|
CustomDataSource,
|
|
|
|
|
} from 'cesium'
|
|
|
|
|
import { PointEntity } from './pointEntity'
|
|
|
|
|
import { EntityOptions } from '@/types/entityoptions'
|
|
|
|
|
export abstract class BaseGeometry extends CustomDataSource {
|
|
|
|
|
static ID: number
|
|
|
|
|
// abstract subId: number
|
|
|
|
|
geometry: Entity | null = null
|
|
|
|
|
positions: Cartesian3[] = []
|
|
|
|
|
controlPointsID: string[] = [] //存储
|
|
|
|
|
options: EntityOptions = {
|
|
|
|
|
// id: 'Point' + String(PointEntity.ID),
|
|
|
|
|
// name: 'Point' + String(PointEntity.ID + 1),
|
|
|
|
|
show: true,
|
|
|
|
|
// pixelSize: 10,
|
|
|
|
|
width: 2,
|
|
|
|
|
color: Color.GREEN,
|
|
|
|
|
outlineWidth: 0,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
|
super()
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 新增一个节点,默认插入在尾部,
|
|
|
|
|
* @param pos 点坐标
|
|
|
|
|
* @param index 插入的位置,0起步
|
|
|
|
|
* @param bAddControlPoint
|
|
|
|
|
* @bAddControlPoint 是否添加控制点
|
|
|
|
|
*/
|
|
|
|
|
public addPoint(
|
|
|
|
|
pos: Cartesian3,
|
|
|
|
|
index: number = -1,
|
|
|
|
|
bAddControlPoint: boolean = true,
|
|
|
|
|
) {
|
|
|
|
|
if (index === -1) {
|
|
|
|
|
//插入尾部
|
|
|
|
|
this.positions.push(pos)
|
|
|
|
|
if (bAddControlPoint)
|
|
|
|
|
this.createControlPoint(pos, this.positions.length - 1)
|
|
|
|
|
} else if (index >= 0 && index < this.positions.length) {
|
|
|
|
|
this.positions.splice(index, 0, pos)
|
|
|
|
|
if (bAddControlPoint) this.createControlPoint(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)
|
|
|
|
|
} else {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//移除控制点
|
|
|
|
|
this.removeControlPoint(index)
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 修改某点的坐标
|
|
|
|
|
* @param pos 修改点的坐标
|
|
|
|
|
* @param index 修改点的位置
|
|
|
|
|
*/
|
|
|
|
|
public modifyPoint(pos: Cartesian3, index: number) {
|
|
|
|
|
if (index === -1) {
|
|
|
|
|
index = this.positions.length - 1
|
|
|
|
|
}
|
|
|
|
|
if (index >= 0 && index < this.positions.length) {
|
|
|
|
|
this.positions.splice(index, 1, pos)
|
|
|
|
|
if (this.controlPointsID[index]) {
|
|
|
|
|
//修改控制点坐标
|
|
|
|
|
const point = this.entities.getById(this.controlPointsID[index])
|
|
|
|
|
if (point) {
|
|
|
|
|
point.position = new ConstantPositionProperty(pos)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 新加一个点
|
|
|
|
|
* @param pos 点的坐标
|
|
|
|
|
* @param index 插入的位置,0起步
|
|
|
|
|
*/
|
|
|
|
|
public createControlPoint(pos: Cartesian3, index: number) {
|
|
|
|
|
// if (this.geometry) {
|
|
|
|
|
const point = new PointEntity(pos)
|
|
|
|
|
point.parent = this.geometry!
|
|
|
|
|
point.subId = index
|
|
|
|
|
this.entities.add(point)
|
|
|
|
|
this.controlPointsID.splice(index, 0, point.id)
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 移除控制点
|
|
|
|
|
* @param index 控制点下标号
|
|
|
|
|
*/
|
|
|
|
|
public removeControlPoint(index: number) {
|
|
|
|
|
if (index === -1) index = this.controlPointsID.length - 1
|
|
|
|
|
if (this.controlPointsID[index]) {
|
|
|
|
|
this.entities.removeById(this.controlPointsID[index])
|
|
|
|
|
this.controlPointsID.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 清空所有控制点
|
|
|
|
|
*/
|
|
|
|
|
removeControlPoints() {
|
|
|
|
|
this.controlPointsID.forEach((value) => {
|
|
|
|
|
this.entities.removeById(value)
|
|
|
|
|
})
|
|
|
|
|
this.controlPointsID = []
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 设置控制点是否显示
|
|
|
|
|
* @param index 控制点下标号
|
|
|
|
|
* @param bShow 是否显示
|
|
|
|
|
*/
|
|
|
|
|
showControlPoint(index: number, bShow: boolean) {
|
|
|
|
|
if (index === -1) index = this.controlPointsID.length - 1
|
|
|
|
|
if (this.controlPointsID[index]) {
|
|
|
|
|
const point = this.entities.getById(this.controlPointsID[index])
|
|
|
|
|
if (point) point.show = bShow
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|