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;