71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
function useForgeFloor() {
|
|
const findLevels = (viewer) => {
|
|
return new Promise((resolve, reject) => {
|
|
viewer.model.search(
|
|
"layer",
|
|
(nodeIds) => {
|
|
let levels = [];
|
|
const tree = viewer.model.getInstanceTree();
|
|
for (let i = 0; i < nodeIds.length; i++) {
|
|
const dbId = nodeIds[i];
|
|
const name = tree.getNodeName(dbId);
|
|
if (!name || name.includes("<沒有層級>")) continue;
|
|
levels.push({
|
|
guid: dbId,
|
|
name,
|
|
dbId,
|
|
extension: {
|
|
buildingStory: true,
|
|
structure: false,
|
|
computationHeight: 0,
|
|
groundPlane: false,
|
|
hasAssociatedViewPlans: false,
|
|
},
|
|
});
|
|
}
|
|
levels = levels.sort((a, b) => b.elevation - a.elevation);
|
|
resolve(levels);
|
|
},
|
|
(e) => {
|
|
reject(e);
|
|
}
|
|
);
|
|
});
|
|
};
|
|
|
|
// function getCutPlaneParam(idx, n, viewer, levels) {
|
|
// if (idx < 0 || !n) return;
|
|
|
|
// const level = levels[idx];
|
|
// if (!level) return;
|
|
|
|
// const model = viewer.model;
|
|
// const globalOffset = model.getData().globalOffset;
|
|
// const units = model.getUnitString();
|
|
// const elevRaw = Autodesk.Viewing.Private.convertUnits(
|
|
// "ft",
|
|
// units,
|
|
// 1,
|
|
// level.elevation
|
|
// );
|
|
// let d = elevRaw - globalOffset.z - 0.5;
|
|
// if (n == 1) d = -1 * d;
|
|
|
|
// return new THREE.Vector4(0, 0, n, d);
|
|
// }
|
|
|
|
// function profile(viewer, levels) {
|
|
// //const upperIdx = 6;
|
|
// const upperCutPlaneParam = getCutPlaneParam(2, 1, viewer, levels);
|
|
// //const lowerIdx = 7;
|
|
// const lowerCutPlaneParam = getCutPlaneParam(3, -1, viewer, levels);
|
|
// viewer.setCutPlanes([upperCutPlaneParam, lowerCutPlaneParam]);
|
|
// }
|
|
|
|
|
|
|
|
return { findLevels, profile };
|
|
}
|
|
|
|
export default useForgeFloor;
|