我遇到一个问题,无法在 Forge Viewer 中访问 Revit 模型室。 我初始化 forge,当它加载几何体时,我将其保存在一个对象中
updateViewerState(prevProps) {
if (
!prevProps ||
(this.props.urn && this.props.urn !== prevProps.urn)
) {
Autodesk.Viewing.Document.load(
this.props.urn,
(doc) => this.viewer
.loadDocumentNode(doc, doc.getRoot().getDefaultGeometry())
.then((i) => {
getAllProperties(this.viewer, this.props.setData);
}),
(code, message, errors) => {
console.log(code, message, errors);
console.log(code);
console.log(message)
console.log(errors)
toast.error("ERROR loading model")
toast.error("Go back and reload the page")
}
);
我的函数 getAllProperties 是这个>
export function getAllProperties(viewer, setData) {
var tree = viewer.model.getInstanceTree()
if (tree === undefined) {
setTimeout(() => {
getAllProperties(viewer, setData)
}, 500)
return
}
var categories = {}
var promises = []
tree.enumNodeChildren(tree.getRootId(),function (dbId) {
if (tree.getChildCount(dbId) === 0) {
var promise = new Promise(function (resolve, reject) {
viewer.getProperties(dbId, function (props) {
var elementData = {
dbId: dbId,
name: props.name,
externalId: props.externalId,
}
for (var i = 0; i < props.properties.length; i++) {
var propDisplayName =
props.properties[i].displayName
var propDisplayValue =
props.properties[i].displayValue
// Si el valor es null, no lo procese
if (propDisplayValue === null) continue
switch (propDisplayName) {
case 'Category':
elementData.categoryValue =
props.properties[i].displayValue
// console.log(props.properties[i].displayValue)
为什么没有出现“Revit Rooms”类别?
我做错了什么吗?
Revit 房间仅在查看器的 Revit 主视图中可见,因此请确保使用查看器加载主视图,而不是普通的 Revit 视图。
// Method 1:
const root = viewerDocument.getRoot() ;
const viewables = root.search({'type': 'geometry', 'role': '3d'});
console.log ('Viewables:' , viewables);
const phaseViews = viewables.filter (v => v.data.name === v.data.phaseNames
&& v.getViewableRootPath().includes('08f99ae5-b8be-4f8d-881b-128675723c10')); // pass the guid
console.log('Master Views:', phaseViews);
// Method 2: if you just have one master view (phase) inside your model.
viewerDocument.getRoot().getDefaultGeometry(true);
参考: