Forger 查看器 setThemingColor()
Forger Viewer setThemingColor()
目的是为所选元素着色。
为制作作品创建服务文件 (viewer-service.js):
import { Vector4 } from "three";
class ViewerService {
/*
Get all depended elements
*/
getLeafNodes(model, dbIds) {
return new Promise((resolve, reject) => {
try {
const instanceTree = model.getData().instanceTree;
dbIds = dbIds || instanceTree.getRootId();
const dbIdArray = Array.isArray(dbIds) ? dbIds : [dbIds];
let leafIds = [];
const getLeafNodesRec = (id) => {
let childCount = 0;
instanceTree.enumNodeChildren(id, (childId) => {
getLeafNodesRec(childId);
++childCount;
});
if (childCount == 0) {
leafIds.push(id);
}
};
for (let i = 0; i < dbIdArray.length; ++i) {
getLeafNodesRec(dbIdArray[i]);
}
return resolve(leafIds);
} catch (ex) {
return reject(ex);
}
});
}
/*
Color element
*/
add(viewer, dbids) {
let red = new Vector4(1, 0, 0, 0.5);
this.getLeafNodes(viewer.model, dbids)
.then((leafNodes) => {
for (let i = 0; i < leafNodes.length; i++) {
console.log(leafNodes[i]);
console.log(red);
viewer.setThemingColor(leafNodes[i], red, viewer.model, true);
}
})
.catch((error) => console.warn(error));
}
}
export default new ViewerService();
并在 vue 组件中使用此服务:
<script>
import viewerService from "@/services/viewer-service";
export default {
data() {
return {
viewer: null,
options: {
env: "Local",
document: this.url,
},
dbids: null,
};
},
props: {
url: {
type: String,
required: true,
},
},
mounted() {
this.loadViewer();
},
methods: {
loadViewer() {
let config3d = {};
this.viewer = new Autodesk.Viewing.Private.GuiViewer3D(
this.$refs.forgeViewer,
config3d
);
Autodesk.Viewing.Initializer(this.options, () => {
this.viewer.initialize();
this.viewer.addEventListener(
Autodesk.Viewing.SELECTION_CHANGED_EVENT,
this.onSelectionChanged
);
this.viewer.start(this.url, this.options);
});
},
onSelectionChanged(event) {
this.dbids = event.dbIdArray;
console.log(this.dbids);
},
add() {
viewerService.add(this.viewer, this.dbids);
}
},
};
</script>
当我执行方法 add() 时,它执行操作但元素的颜色没有改变。
The console log 我使用的是最新版本的 Viewer。这段代码有什么问题?
我也试过:
viewer.setThemingColor(leafNodes[i], red);
viewer.setThemingColor(leafNodes[i], red, null, true);
终于找到问题了。我正在为这个项目使用 Vue.js 和 npm 包管理器,并确保我从包管理器安装了最新版本的 'three.js'。但是 Forge Viewer 需要另一个,所以我开始在项目中使用全局变量并得到结果。
目的是为所选元素着色。 为制作作品创建服务文件 (viewer-service.js):
import { Vector4 } from "three";
class ViewerService {
/*
Get all depended elements
*/
getLeafNodes(model, dbIds) {
return new Promise((resolve, reject) => {
try {
const instanceTree = model.getData().instanceTree;
dbIds = dbIds || instanceTree.getRootId();
const dbIdArray = Array.isArray(dbIds) ? dbIds : [dbIds];
let leafIds = [];
const getLeafNodesRec = (id) => {
let childCount = 0;
instanceTree.enumNodeChildren(id, (childId) => {
getLeafNodesRec(childId);
++childCount;
});
if (childCount == 0) {
leafIds.push(id);
}
};
for (let i = 0; i < dbIdArray.length; ++i) {
getLeafNodesRec(dbIdArray[i]);
}
return resolve(leafIds);
} catch (ex) {
return reject(ex);
}
});
}
/*
Color element
*/
add(viewer, dbids) {
let red = new Vector4(1, 0, 0, 0.5);
this.getLeafNodes(viewer.model, dbids)
.then((leafNodes) => {
for (let i = 0; i < leafNodes.length; i++) {
console.log(leafNodes[i]);
console.log(red);
viewer.setThemingColor(leafNodes[i], red, viewer.model, true);
}
})
.catch((error) => console.warn(error));
}
}
export default new ViewerService();
并在 vue 组件中使用此服务:
<script>
import viewerService from "@/services/viewer-service";
export default {
data() {
return {
viewer: null,
options: {
env: "Local",
document: this.url,
},
dbids: null,
};
},
props: {
url: {
type: String,
required: true,
},
},
mounted() {
this.loadViewer();
},
methods: {
loadViewer() {
let config3d = {};
this.viewer = new Autodesk.Viewing.Private.GuiViewer3D(
this.$refs.forgeViewer,
config3d
);
Autodesk.Viewing.Initializer(this.options, () => {
this.viewer.initialize();
this.viewer.addEventListener(
Autodesk.Viewing.SELECTION_CHANGED_EVENT,
this.onSelectionChanged
);
this.viewer.start(this.url, this.options);
});
},
onSelectionChanged(event) {
this.dbids = event.dbIdArray;
console.log(this.dbids);
},
add() {
viewerService.add(this.viewer, this.dbids);
}
},
};
</script>
当我执行方法 add() 时,它执行操作但元素的颜色没有改变。 The console log 我使用的是最新版本的 Viewer。这段代码有什么问题?
我也试过:
viewer.setThemingColor(leafNodes[i], red);
viewer.setThemingColor(leafNodes[i], red, null, true);
终于找到问题了。我正在为这个项目使用 Vue.js 和 npm 包管理器,并确保我从包管理器安装了最新版本的 'three.js'。但是 Forge Viewer 需要另一个,所以我开始在项目中使用全局变量并得到结果。