我运行这段代码的时候,点击部件就会出现
Uncaught TypeError: Cannot read properties of undefined (reading 'position')at VertexEnumerator.js:87:28
这样的错误
const options = {
env: "AutodeskProduction",
api: "derivativeV2",
getAccessToken: (callback) => {
fetch("http://localhost:8080/api/auth/token")
.then((response) => response.json())
.then((json) => {
const auth = json.access_token;
callback(auth, 3600);
});
},
language: 'en'
};
Autodesk.Viewing.Initializer(options, () => {
const urn = "dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6ZmRzaGZqc19mZHNrZmxzal8xMjM0NTY2Ni8lRTQlQkElOTQlRTglQkQlQjQlRTYlOTYlOUMlRTclQkElQkYlRTYlQTglQTElRTUlOUUlOEIlMjB2My5mM2Q";
let htmlDiv = document.getElementById("MyViewerDiv");
viewer = new Autodesk.Viewing.GuiViewer3D(htmlDiv);
viewer.start();
loadModel(urn);
});
let loadModel = (urn) => {
return new Promise((resolve, reject) => {
function onDocumentLoadSuccess(doc) {
const node = doc.getRoot().getDefaultGeometry();
viewer.loadDocumentNode(doc, node).then(() => {
viewer.addEventListener(
Autodesk.Viewing.GEOMETRY_LOADED_EVENT,
setupModelInteraction
);
});
resolve();
}
Autodesk.Viewing.Document.load("urn:" + urn, onDocumentLoadSuccess, reject);
});
};
const getModelNodeIds = (names, tree) => {
const nodeIds = {};
names.forEach(name => {
nodeIds[`${name}NodeId`] = findNodeIdbyName(name, tree);
});
return nodeIds;
};
const setupModelInteraction = () => {
const partNames = ["T1", "X1", "Z1", "Z2"];
let tree = viewer.model.getData().instanceTree;
let nodeIds = getModelNodeIds(partNames, tree);
console.log(nodeIds)
setUpPiovt(nodeIds, tree)
}
const setUpPiovt = (nodeIds, tree) => {
baseRodPivot(nodeIds.T1NodeId, tree)
}
const baseRodPivot = (ID_BaseRod, tree) => {
let Pivot_BaseRod = new THREE.Mesh(new THREE.BoxGeometry(5, 5, 5), new THREE.MeshBasicMaterial({ color: 0xff0000 }));
let Position_BaseRod = getFragmentWorldMatrixByNodeId(ID_BaseRod, tree).matrix[0].getPosition().clone();
Pivot_BaseRod.position.x = Position_BaseRod.x;
Pivot_BaseRod.position.y = Position_BaseRod.y;
Pivot_BaseRod.position.z = Position_BaseRod.z;
viewer.impl.scene.add(Pivot_BaseRod);
}
1.Position_BaseRod 不存在时,赋值必然失败.
2.Position_BaseRod 存在, 但没有position属性 先给position赋值