Tengo una extensión de la barra de herramientas de Autodesk Forge Viewer para la que intento recuperar una lista filtrada de elementos del modelo actual. Estoy tratando de usar getBulkProperties2 para esto, ya que incluye específicamente categoryFilter en el objeto de opciones, lo que (hipotéticamente, al menos) me evitaría tener que extraer todo y filtrar manualmente.
Envolví la llamada a getBulkProperties2 en una promesa para que sea más fácil de manejar:
function getBulkProperties(model, dbIds, options) { return new Promise(function (resolve, reject) { model.getBulkProperties2(dbIds, options, resolve, reject); }); }A partir de ahí, realizo una llamada a esta función una vez que el modelo se ha cargado correctamente agregando un detector de eventos e incluyéndolo en la devolución de llamada:
viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, async function (e) { var props = await getBulkProperties(viewer.model, AllDbIds, { categoryFilter: ["Revit Rooms"] }); }); Desafortunadamente, con la opción categoryFilter configurada de esta manera, el resultado siempre es una matriz vacía. He probado varias configuraciones diferentes de esto pero el resultado es siempre el mismo.
Si realizo la misma solicitud omitiendo la opción categoryFilter y filtro la lista manualmente en la consola del navegador, puedo ver que los elementos que estoy buscando existen, exactamente en la configuración que estoy buscando:
› props.filter(p => p.properties.some(v => v.displayName == 'Category' && v.displayValue == 'Revit Rooms')).length ‹ 113 ¿Significa esto que el filtro de categoryFilter simplemente no funciona? ¿O de alguna manera no lo estoy usando correctamente?
Tenga en cuenta que categoryFilter se refiere a categorías de propiedades (por ejemplo, "Datos de identidad"), no a categorías de Revit (como las "Habitaciones de Revit" en su ejemplo).
Si solo desea obtener las propiedades de "Revit Rooms", probablemente podría intentar encontrar el objeto "Rooms" en el navegador modelo, encontrar los dbID de todos sus elementos secundarios y luego pasar esos dbID al método getBulkProperties2 .