У меня есть разгибание измерения, и я могу установить калибровку, это переносится на расширение Edit2d и позволяет мне иметь правильные значения при получении одного из притяженных форм и выполнения getarea () с помощью
Обратите внимание, что это грубое представление о настройке. В действительности у меня есть зритель, связанный в классе, называемый apsviewermanager , и у меня есть экземпляр, назначенный объекту окна. APSViewerManager поддерживает загрузку из PDF , которая загружается из другого API или загрузку из APS API . Я постараюсь разделить вещи до минимума того, что необходимо для «локальной» PDF загрузки.
Код: Выделить всё
const url = "some-url" // in reality this is pointing to a get endpoint on an external api that returns the pdf content
const page = 1 // you can only load 1 pdf page at a time
const localManager = this; // this is an instance of the APSViewerManager
const options = {
accessToken: "",
useCredentials: false
env: 'Local'
}
await Autodesk.Viewing.Initializer(options, async function () {
const htmlDiv = document.querySelector(localManager.containerSelector);
localManager.viewer = new Autodesk.Viewing.GuiViewer3D(htmlDiv);
attachViewerEvents.call(localManager); // I have my events handling setup in a separate module called as if part of the APSViewerManager
const startedCode = localManager.viewer.start(null, options);
if (startedCode > 0) {
localManager.report_error('Failed to create Viewer', {startCode: startedCode});
return;
}
// setup the edit2d extension from 'Autodesk.Edit2d'
localManager.edit2d = await localManager.viewer.loadExtension('Autodesk.Edit2D', {enableArcs: true});
// setup the inhouse extension to add edit2d controls as toolbar buttons + inhouse functionality consuming edit2d
localManager.rlb2dTakeOff = await localManager.viewer.loadExtension(
'RLB2DTakeOffExtension',
{
manager: localManager,
filename: localManager.shapesFilename,
}
);
// setup for loading the pdf extension from 'Autodesk.PDF'
await localManager.viewer.loadExtension('Autodesk.PDF')
// URL parameter page will override value passed to loadModel
localManager.viewer.loadModel(url, {page: page});
});
< /code>
Задача заключается в том, что у меня есть dbid < /code> из события выбора, я не могу запросить базу данных свойств, используя этот идентификатор.const dbid = 2900 //the dbid for a wall I selected on the pdf - obtained from viewer selection event
const db = apsViewerManager.viewer.model.getPropertyDb();
db.getProperties2(
dbid,
function(x){
console.log("Promise resolved")
console.dir(x)
},
function(x){
console.log("Promise rejected")
console.dir(x)
}
)
< /code>
Обещание отвергает, и у меня остался следующий объект: < /p>
{
"err": undefined,
"instanceTree": null,
"maxTreeDepth": 0
}
< /code>
Я подумал, что, может быть, мой DB был фрагментирован-я не совсем уверен, что это значит, но я вижу свойства в объекте DB, полном «фрагментов».const frags = apsViewerManager.viewer.model.getFragmentList();
console.dir(frags);

I wanted to try the following script to retrieve the props from there:
I am not sure the exact source об этом комбинации сценария, но я вижу, что она была получена из этого блога APS: https://aps.autodesk.com/blog/working-2 ... азноviewer = apsViewerManager.viewer;
viewer.addEventListener(
Autodesk.Viewing.SELECTION_CHANGED_EVENT,
function () {
const tree = viewer.model.getInstanceTree();
const frags = viewer.model.getFragmentList();
function listFragmentProperties(fragId) {
console.log('Fragment ID:', fragId);
// Get IDs of all objects linked to this fragment
const objectIds = frags.getDbIds(fragId);
console.log('Linked object IDs:', objectIds);
// Get the fragment's world matrix
let matrix = new THREE.Matrix4();
frags.getWorldMatrix(fragId, matrix);
console.log('World matrix:', JSON.stringify(matrix));
// Get the fragment's world bounds
let bbox = new THREE.Box3();
frags.getWorldBounds(fragId, bbox);
console.log('World bounds:', JSON.stringify(bbox));
}
if (tree) { // Could be null if the tree hasn't been loaded yet
const selectedIds = viewer.getSelection();
for (const dbId of selectedIds) {
const fragIds = [];
tree.enumNodeFragments(
dbId,
listFragmentProperties,
false
);
}
}
else {
console.log("No tree!");
}
}
);
< /code>
К сожалению, дерево всегда ноль, поэтому мой браузер выплевывает «Нет дерева!» Выбранная стена (линия) в pdf.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ement-from