|
@@ -57,6 +57,7 @@ export class VtkModel {
|
|
|
this.isSelectPipe = false;
|
|
|
|
|
|
this.isSelectSensor = false;
|
|
|
+ this.isSelectJC = false;
|
|
|
//管道节点选择对象
|
|
|
this.selectObj = null;
|
|
|
//X,Y
|
|
@@ -343,11 +344,11 @@ delpump(){
|
|
|
this.removepump();
|
|
|
this.pmpActors=[];
|
|
|
}
|
|
|
-addSensor(pid,site){
|
|
|
- let pipe =this.pipeByPid(pid,site);
|
|
|
+addSensor(val){
|
|
|
+ let pipe =this.pipeByPid(val.pid,val.site);
|
|
|
let point1 = this.pointByPipeNodeId(pipe.snId);
|
|
|
let point2 = this.pointByPipeNodeId(pipe.enId);
|
|
|
- let py = site/(1-site);
|
|
|
+ let py = val.site/(1-val.site);
|
|
|
let pipsite_point=[
|
|
|
(point1[0]+py*point2[0])/(1+py),
|
|
|
(point1[1]+py*point2[1])/(1+py),
|
|
@@ -364,7 +365,8 @@ addSensor(pid,site){
|
|
|
// actor.rotateY(90);// 绕y轴旋转
|
|
|
// 存储传感器信息(结构化存储)
|
|
|
const sensor = {
|
|
|
- id: pid,
|
|
|
+ id: val.seid,
|
|
|
+ info: val,
|
|
|
actor: actor, // VTK Actor对象
|
|
|
};
|
|
|
this.cgqActors.push(sensor);
|
|
@@ -442,10 +444,10 @@ initCheckNodes(checkNodes){
|
|
|
(point1[1]+py*point2[1])/(1+py),
|
|
|
(point1[2]+py*point2[2])/(1+py),
|
|
|
]
|
|
|
- this.initjc(pipsite_point[0],pipsite_point[1],pipsite_point[2]);
|
|
|
+ this.initjc(checkNode,pipsite_point[0],pipsite_point[1],pipsite_point[2]);
|
|
|
});
|
|
|
}
|
|
|
-initjc(x,y,z) {
|
|
|
+initjc(info,x,y,z) {
|
|
|
const mapper = vtkMapper.newInstance();
|
|
|
mapper.setInputConnection(this.jcreader.getOutputPort());
|
|
|
const actor = vtkActor.newInstance();
|
|
@@ -453,20 +455,25 @@ initjc(x,y,z) {
|
|
|
actor.getProperty().setColor(JCDCOLOR);
|
|
|
actor.setMapper(mapper);
|
|
|
actor.setScale(0.2,0.2,0.2);//放大
|
|
|
- this.jcdActors.push(actor);
|
|
|
+ const jc = {
|
|
|
+ id: info.cid,
|
|
|
+ info: info ,
|
|
|
+ actor: actor,
|
|
|
+ }
|
|
|
+ this.jcdActors.push(jc);
|
|
|
}
|
|
|
//显示监测点
|
|
|
showjc(){
|
|
|
- this.jcdActors.forEach((actor)=>{
|
|
|
+ this.jcdActors.forEach((jc) => {
|
|
|
|
|
|
- this.renderer.addActor(actor);
|
|
|
+ this.renderer.addActor(jc.actor);
|
|
|
});
|
|
|
this.renderWindow.render();
|
|
|
}
|
|
|
//隐藏监测点
|
|
|
removejc(){
|
|
|
- this.jcdActors.forEach((actor)=>{
|
|
|
- this.renderer.removeActor(actor);
|
|
|
+ this.jcdActors.forEach((jc) => {
|
|
|
+ this.renderer.removeActor(jc.actor);
|
|
|
});
|
|
|
this.renderWindow.render();
|
|
|
}
|
|
@@ -972,6 +979,10 @@ safetypathremove(){
|
|
|
this.cgqActors.forEach((sensor) => {
|
|
|
this.renderer.removeActor(sensor.actor);
|
|
|
});
|
|
|
+ this.jcdActors.forEach((jc) => {
|
|
|
+ this.renderer.removeActor(jc.actor);
|
|
|
+ });
|
|
|
+
|
|
|
}
|
|
|
wayClearShow(){
|
|
|
this.wayActors.forEach((wayAcotor) => {
|
|
@@ -1002,6 +1013,11 @@ safetypathremove(){
|
|
|
this.renderer.addActor(sensor.actor);
|
|
|
});
|
|
|
}
|
|
|
+ if(this.isSelectJC) {
|
|
|
+ this.jcdActors.forEach((jc) => {
|
|
|
+ this.renderer.addActor(jc.actor);
|
|
|
+ });
|
|
|
+ }
|
|
|
// this.addjc(495530.903,5403828.821,432.40);
|
|
|
// this.addpname(495530.903,5403829.821,432.40);
|
|
|
// this.addSoure(495530.903,5403829.821,432.40);
|
|
@@ -1016,6 +1032,7 @@ safetypathremove(){
|
|
|
this.isSelectNode = true;
|
|
|
this.isSelectPipe = false;
|
|
|
this.isSelectSensor = false;
|
|
|
+ this.isSelectJC = false;
|
|
|
this.modelShow();
|
|
|
document.addEventListener("mousemove", throttleMouseHandler);
|
|
|
this.renderWindow.render();
|
|
@@ -1024,6 +1041,7 @@ safetypathremove(){
|
|
|
this.isSelectNode = false;
|
|
|
this.isSelectPipe = true;
|
|
|
this.isSelectSensor = false;
|
|
|
+ this.isSelectJC = false;
|
|
|
document.addEventListener("mousemove", throttleMouseHandler);
|
|
|
this.modelShow();
|
|
|
this.renderWindow.render();
|
|
@@ -1032,6 +1050,16 @@ safetypathremove(){
|
|
|
this.isSelectNode = false;
|
|
|
this.isSelectPipe = false;
|
|
|
this.isSelectSensor = true;
|
|
|
+ this.isSelectJC = false;
|
|
|
+ document.addEventListener("mousemove", throttleMouseHandler);
|
|
|
+ this.modelShow();
|
|
|
+ this.renderWindow.render();
|
|
|
+ }
|
|
|
+ selectJCs() {
|
|
|
+ this.isSelectNode = false;
|
|
|
+ this.isSelectPipe = false;
|
|
|
+ this.isSelectSensor = false;
|
|
|
+ this.isSelectJC = true;
|
|
|
document.addEventListener("mousemove", throttleMouseHandler);
|
|
|
this.modelShow();
|
|
|
this.renderWindow.render();
|
|
@@ -1040,6 +1068,9 @@ safetypathremove(){
|
|
|
this.isSelectNode = false;
|
|
|
this.isSelectPipe = false;
|
|
|
this.isSelectSensor = false;
|
|
|
+ this.isSelectJC = false;
|
|
|
+ this.selectObj = null;
|
|
|
+ document.removeEventListener("mousemove", throttleMouseHandler);
|
|
|
this.modelShow();
|
|
|
this.renderWindow.render();
|
|
|
}
|
|
@@ -1164,34 +1195,83 @@ safetypathremove(){
|
|
|
|
|
|
// 选中指定传感器
|
|
|
selectBySensorId(sid) {
|
|
|
- console.log("selectBySensorId", sid);
|
|
|
+ console.log("[selectBySensorId] Selecting sensor:", sid);
|
|
|
+
|
|
|
+ // 1. 清除上一次选中的 Actor(严格检查)
|
|
|
+ if (this.lastActor) {
|
|
|
+ // console.log("Last actor to remove:", this.lastActor);
|
|
|
+ const currentActors = this.renderer.getActors();
|
|
|
+ if (currentActors.includes(this.lastActor)) {
|
|
|
+ this.renderer.removeActor(this.lastActor);
|
|
|
+ // console.log("Actor removed. Current actors:", this.renderer.getActors());
|
|
|
+ } else {
|
|
|
+ // console.log("LastActor not found in renderer.");
|
|
|
+ }
|
|
|
+ this.renderWindow.render(); // 强制刷新
|
|
|
+ }
|
|
|
|
|
|
- // 1. 清除上一次选中的 Actor(如果有)
|
|
|
- console.log("Last actor before remove:", this.lastActor);
|
|
|
- if (this.lastActor != null) {
|
|
|
- console.log("Removing actor:", this.lastActor);
|
|
|
- this.renderer.removeActor(this.lastActor);
|
|
|
+ // 2. 查找目标传感器
|
|
|
+ const targetSensor = this.cgqActors.find(sensor => sid === sensor.id);
|
|
|
+ if (!targetSensor) {
|
|
|
+ console.error(`Sensor ${sid} not found!`);
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- // 2. 遍历传感器数组,查找匹配的传感器
|
|
|
-
|
|
|
- this.cgqActors.forEach(sensor => {
|
|
|
- if (sid === sensor.id) {
|
|
|
- // 3. 设置选中颜色
|
|
|
- sensor.actor.getProperty().setColor(REA);
|
|
|
- console.log("找到了")
|
|
|
- // 4. 记录当前选中的 Actor 和传感器对象
|
|
|
- this.lastActor = sensor.actor;
|
|
|
- this.selectObj = { id: sid, type: "sensor" }; // 存储选中对象信息
|
|
|
-
|
|
|
- // 5. 重新添加 Actor 并渲染
|
|
|
- this.renderer.addActor(this.lastActor);
|
|
|
- this.renderWindow.render();
|
|
|
- return; // 找到后退出循环
|
|
|
- }
|
|
|
- });
|
|
|
+ // 3. 确保 targetSensor.actor 不在渲染器中(避免重复添加)
|
|
|
+ const currentActors = this.renderer.getActors();
|
|
|
+ if (!currentActors.includes(targetSensor.actor)) {
|
|
|
+ this.renderer.addActor(targetSensor.actor);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 高亮选中
|
|
|
+ targetSensor.actor.getProperty().setColor(CYAN);
|
|
|
+ this.lastActor = targetSensor.actor; // 更新引用
|
|
|
+ this.selectObj = targetSensor.info;
|
|
|
+
|
|
|
+ // 5. 触发渲染
|
|
|
+ this.renderWindow.render();
|
|
|
+ // console.log(`Sensor ${sid} selected. Current actors:`, this.renderer.getActors());
|
|
|
}
|
|
|
|
|
|
+ // 选中指定监测点
|
|
|
+ selectByJCId(cid) {
|
|
|
+ console.log("Selecting JC:", cid);
|
|
|
+
|
|
|
+ // 1. 清除上一次选中的 Actor(严格检查)
|
|
|
+ if (this.lastActor) {
|
|
|
+ // console.log("Last actor to remove:", this.lastActor);
|
|
|
+ const currentActors = this.renderer.getActors();
|
|
|
+ if (currentActors.includes(this.lastActor)) {
|
|
|
+ this.renderer.removeActor(this.lastActor);
|
|
|
+ // console.log("Actor removed. Current actors:", this.renderer.getActors());
|
|
|
+ } else {
|
|
|
+ // console.log("LastActor not found in renderer.");
|
|
|
+ }
|
|
|
+ this.renderWindow.render(); // 强制刷新
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 查找目标传感器
|
|
|
+ const targetSensor = this.jcdActors.find(jc => cid === jc.id);
|
|
|
+ if (!targetSensor) {
|
|
|
+ console.error(`JC ${cid} not found!`);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 确保 targetSensor.actor 不在渲染器中(避免重复添加)
|
|
|
+ const currentActors = this.renderer.getActors();
|
|
|
+ if (!currentActors.includes(targetSensor.actor)) {
|
|
|
+ this.renderer.addActor(targetSensor.actor);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 4. 高亮选中
|
|
|
+ targetSensor.actor.getProperty().setColor(BROWN);
|
|
|
+ this.lastActor = targetSensor.actor; // 更新引用
|
|
|
+ this.selectObj = targetSensor.info;
|
|
|
+
|
|
|
+ // 5. 触发渲染
|
|
|
+ this.renderWindow.render();
|
|
|
+ // console.log(`Sensor ${sid} selected. Current actors:`, this.renderer.getActors());
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
function createRGBStringFromRGBValues(rgb) {
|
|
@@ -1264,7 +1344,16 @@ function processSelections(selections) {
|
|
|
attributeID,
|
|
|
} = selections[0].getProperties();
|
|
|
if (vtkmodel.lastActor != null) {
|
|
|
- vtkmodel.lastActor.getProperty().setColor(WHITE);
|
|
|
+ const lastSensor = vtkmodel.cgqActors.find(s => s.actor === vtkmodel.lastActor);
|
|
|
+ const lastJC = vtkmodel.jcdActors.find(j => j.actor === vtkmodel.lastActor);
|
|
|
+ if(lastSensor){
|
|
|
+ vtkmodel.lastActor.getProperty().setColor(SOURECOLOR);
|
|
|
+ }else if(lastJC){
|
|
|
+ vtkmodel.lastActor.getProperty().setColor(JCDCOLOR);
|
|
|
+ }else {
|
|
|
+ vtkmodel.lastActor.getProperty().setColor(WHITE);
|
|
|
+ }
|
|
|
+
|
|
|
vtkmodel.renderWindow.render();
|
|
|
}
|
|
|
vtkmodel.nodeActors.forEach((nodeActor) => {
|
|
@@ -1284,6 +1373,24 @@ function processSelections(selections) {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
+ vtkmodel.cgqActors.forEach((sensor) => {
|
|
|
+ if (prop == sensor.actor) {
|
|
|
+ vtkmodel.selectObj = sensor.info;
|
|
|
+ prop.getProperty().setColor(REA);
|
|
|
+ vtkmodel.lastActor = prop;
|
|
|
+ // console.log(vtkmodel.selectObj );
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ vtkmodel.jcdActors.forEach((jc) => {
|
|
|
+ if (prop == jc.actor) {
|
|
|
+ vtkmodel.selectObj = jc.info;
|
|
|
+ prop.getProperty().setColor(REA);
|
|
|
+ vtkmodel.lastActor = prop;
|
|
|
+ // console.log(vtkmodel.selectObj );
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
if (vtkmodel.isJg) {//结果数据选择cell
|
|
|
if (vtkmodel.hardwareSelector.getFieldAssociation() ===
|
|
|
FieldAssociations.FIELD_ASSOCIATION_POINTS) {//选择点
|
|
@@ -1354,6 +1461,11 @@ const throttleMouseHandler = throttle(pickOnMouseEvent, 20);
|
|
|
const WHITE = [1, 0.2, 1];
|
|
|
const GREEN = [0.1, 0.8, 0.1];
|
|
|
const REA = [1, 0, 0];
|
|
|
+const YELLOW = [1, 1, 0];
|
|
|
+const CYAN = [0, 1, 1];
|
|
|
+const MAGENTA = [1, 0, 1];
|
|
|
+const GRAY = [0.5, 0.5, 0.5];
|
|
|
+const BROWN = [0.6, 0.4, 0.2];
|
|
|
|
|
|
const JCDCOLOR = [0.5, 0.2, 0.1];
|
|
|
const SOURECOLOR = [0.2, 0.5, 0];
|