198 lines
4.9 KiB
JavaScript
198 lines
4.9 KiB
JavaScript
import { modelTreeAllChild } from "@/api/bim/bim";
|
|
function selectFeature(that, featureId) {
|
|
let api = bimSelectionDlgApi;
|
|
if (that.selectItems.includes(featureId)) {
|
|
api.Feature.setColor(featureId, "rgba(255,255,255,1)");
|
|
let index = that.selectItems.indexOf(featureId);
|
|
if (index > -1) {
|
|
that.selectItems.splice(index, 1);
|
|
}
|
|
} else {
|
|
api.Feature.setColor(featureId, "rgba(255,0,255,1)");
|
|
that.selectItems.push(featureId);
|
|
}
|
|
}
|
|
function hideFeatures(that) {
|
|
let tmps = that.allBimData.filter((it) => it.id != that.plan.id);
|
|
tmps.forEach((it) => {
|
|
console.log("hide-->", it.bim);
|
|
it.bim.forEach((it) => {
|
|
hideFeature(that, it);
|
|
});
|
|
});
|
|
}
|
|
|
|
function hideFeature(that, featureId) {
|
|
let api = bimSelectionDlgApi;
|
|
api.Feature.setVisible(featureId, false);
|
|
}
|
|
|
|
function selectSingle(that) {
|
|
let api = bimSelectionDlgApi;
|
|
api.Public.clearHandler();
|
|
api.Feature.getByEvent(true, (n) => {
|
|
if (n && n["id"]) {
|
|
let featureId = n.id;
|
|
let modelId = featureId.split("^")[0];
|
|
selectFeature(that, featureId);
|
|
}
|
|
});
|
|
}
|
|
|
|
function clearAllSelection(that) {
|
|
let api = bimSelectionDlgApi;
|
|
api.Public.clearHandler();
|
|
that.selectItems.forEach((it) => {
|
|
selectFeature(that, it);
|
|
});
|
|
}
|
|
|
|
function initBim(that) {
|
|
console.log("initBim");
|
|
let tmps = that.allBimData.filter((it) => it.id == that.plan.id);
|
|
if (tmps.length > 0) {
|
|
console.log("selected-->", tmps[0].bim);
|
|
tmps[0].bim.forEach((it) => {
|
|
selectFeature(that, it);
|
|
});
|
|
}
|
|
}
|
|
|
|
function getSelectFeatureIds(that) {
|
|
let tmps = that.allBimData.filter((it) => it.id == that.plan.id);
|
|
if (tmps.length > 0) {
|
|
return tmps[0].bim || [];
|
|
}
|
|
return [];
|
|
}
|
|
|
|
// 加载部分模型(计划中绑定的模型)
|
|
function partLoadModel(that) {
|
|
let featureIds = getSelectFeatureIds(that);
|
|
let api = bimSelectionDlgApi;
|
|
let obj = {};
|
|
for (let i = 0; i < featureIds.length; i++) {
|
|
let it = featureIds[i];
|
|
let tmps = it.split("^");
|
|
let modelId = tmps[0];
|
|
if (!obj[modelId]) {
|
|
obj[modelId] = [];
|
|
}
|
|
obj[modelId].push(it);
|
|
}
|
|
for (let modelId in obj) {
|
|
let tmps = that.models.filter((it) => it.modelId == modelId);
|
|
setTimeout(() => {
|
|
that.$refs.tree.setChecked(modelId, true, true);
|
|
}, 1000);
|
|
if (tmps.length > 0) {
|
|
let url = `${window.config.modelUrl}/Tools/output/model/${modelId}/root.glt`;
|
|
that.partLoad = true;
|
|
api.Model.addPart(
|
|
url,
|
|
modelId,
|
|
obj[modelId].join("#"),
|
|
(res) => {},
|
|
(res) => {
|
|
console.log("load part success", res);
|
|
that.viewPoint = p;
|
|
that.$message.info("模型加载完成");
|
|
that.doMenu(2);
|
|
initBim(that);
|
|
},
|
|
{
|
|
FlyTo: true,
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
//构建树形数据
|
|
function buildTreeData(that) {
|
|
that.modelTrees = [
|
|
{
|
|
title: "项目模型",
|
|
level: 0,
|
|
type: "root",
|
|
key: "root",
|
|
children: [],
|
|
hadLoad: true,
|
|
},
|
|
];
|
|
that.models.forEach((d) => {
|
|
let node = {
|
|
title: d.modelName,
|
|
level: 1,
|
|
type: "model",
|
|
hasLoad: false,
|
|
modelId: d.lightweightName,
|
|
key: d.lightweightName,
|
|
externalId: "0",
|
|
glid: "",
|
|
children: [],
|
|
data: d,
|
|
};
|
|
that.modelTrees[0].children.push(node);
|
|
getModelFeatures(that, d.lightweightName, node);
|
|
});
|
|
that.treeExpendedKeys.push("root");
|
|
}
|
|
|
|
//获取模型所有构件
|
|
function getModelFeatures(that, modelId, node) {
|
|
let tmps = that.allBimData.filter((it) => it.id != that.plan.id);
|
|
tmps.forEach((it) => {
|
|
console.log("hide-->", it.bim);
|
|
it.bim.forEach((it) => {
|
|
if (!that.readlyParts.includes(it)) {
|
|
that.readlyParts.push(it);
|
|
}
|
|
});
|
|
});
|
|
//获取模型构件
|
|
modelTreeAllChild(modelId, "").then((res) => {
|
|
let objs = res.data || []
|
|
|
|
objs.forEach((o) => {
|
|
o.modelId=modelId
|
|
o.featureId=o.modelId+"^"+o.externalId
|
|
o.name=o.name||'';
|
|
o.name=o.name.replaceAll('"',"").replaceAll("'","").replaceAll('\\','');
|
|
o.info=`[${o.externalId}]${o.groupname}-${o.name}`
|
|
if(o.externalId == "0"){
|
|
return;
|
|
}
|
|
let featureId=o.modelId+"^"+o.externalId;
|
|
if (!that.allParts.includes(featureId)) {
|
|
that.allParts.push(featureId);
|
|
}
|
|
});
|
|
that.allFeatures = objs;
|
|
let makeTree = (tmps) => {
|
|
tmps.forEach((item) => {
|
|
item.children = objs.filter((it) => it.pglid == item.glid);
|
|
if (item.children.length > 0) {
|
|
makeTree(item.children);
|
|
}
|
|
item.hasLoad = true;
|
|
item.title = item.name;
|
|
item.key = item.glid;
|
|
item.modelId = node.modelId;
|
|
});
|
|
return tmps;
|
|
};
|
|
|
|
node.children = makeTree(objs.filter((item) => item.level == 0));
|
|
that.treeKey++;
|
|
});
|
|
that.showParts = that.allParts.filter((it) => !that.hideParts.includes(it));
|
|
}
|
|
export default {
|
|
selectSingle,
|
|
initBim,
|
|
clearAllSelection,
|
|
partLoadModel,
|
|
buildTreeData,
|
|
};
|