Кажется, я нашел взлом, который работает довольно хорошо. Моя проблема была связана со временем, когда я хотел получить доступ к геометрии для объекта (т. Е. Gltf), а именно, после того, как контент был загружен. Я обнаружил, что я могу получить доступ к геометрии во время загрузки, хотя. Таким образом, вся проблема превратилась в: «Как я могу перехватить процесс загрузки, чтобы я мог сделать свой собственный анализ геометрии во время загрузки».
Справочная информация: геометрия хранится в content._model.gltf. Если content._model.releaseGltf Json имеет значение true, Cesium удаляет content._model.gltf (или запись в кэше, на которую ссылается этот метод получения) после загрузки.
Мой перехват был:
// HACK!
const oldB3dmFactory = Cesium.Cesium3DTileContentFactory.b3dm
Cesium.Cesium3DTileContentFactory.b3dm = function(tileset, tile, url, arrayBuffer,
byteOffset) {
const content = oldB3dmFactory(tileset, tile, url, arrayBuffer, byteOffset)
console.log("Cesium3DTileContentFactory.b3dm intercepted, so we can access the content with the GLTF")
const gltf = content._model.gltf
content.readyPromise.then(()=>{
// _model.gltf is undefined because
// releaseGltfJson === true
content.log(content._model.gltf)
})
return content
}
Предостережение: это работает только для пакетных наборов трехмерных плиток (b3dm). Вам нужно будет заменить Cesium.Cesium3DTileContentFactory.b3dm
на pnts
, i3dm
, cmpt
или json
, чтобы этот фрагмент работал с другими типами геометрии.