Преобразование точки из координат модели DWG в координаты средства просмотра Autodesk Forge - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь отобразить точку на модели, отображаемую в программе просмотра кузницы Autodesk.Однако я не могу понять, как преобразовать точку.

Ответ Выравнивание систем координат в Autodesk Forge Viewer не работает для меня, потому что viewer.model.getData() не имеет globalOffset собственность.

Я загрузил пример кода вместе с оригинальным файлом DWG здесь https://github.com/umarmohammed/forgeviewerdemo

1 Ответ

0 голосов
/ 07 июня 2018

Извините, я не получил никаких ответов от нашей команды инженеров.Кажется, что нет другого способа получить viewportId текущего 2d-представления, и здесь может возникнуть проблема с плавающей точностью, это проблема, о которой я упоминал выше.Я буду продолжать просить их.Итак, вот как я нашел способ сделать точечное преобразование из системы координат DWG в средства просмотра.

  1. Получить текущий идентификатор окна просмотра через VertexBufferReader, но вы должны указать 2d элемент(dbId) в загруженном виде для чтения viewportId из него.

    var viewportId = null;
    function GeometryCallback(viewer) {
        this.viewer = viewer;
    }
    
    GeometryCallback.prototype.onLineSegment = function(x1, y1, x2, y2, vpId) {
        viewportId = vpId;
    }
    
    var fragId = 0;
    var m = viewer.impl.getRenderProxy(viewer.model, fragId);
    var vbr = new Autodesk.Viewing.Private.VertexBufferReader(m.geometry, viewer.impl.use2dInstancing);
    vbr.enumGeomsForObject(dbId, new GeometryCallback());
    
  2. Проецируйте точку DWG обратно в систему координат Viewer.

    var vpXform = viewer.model.getPageToModelTransform(viewportId).clone();
    var invVpXform = new WGS.LmvMatrix4(true);
    
    invVpXform.getInverse(vpXform, true);
    
    var ptInCadX = ...;
    var ptInCadY = ...;
    var verticesInViewer = new THREE.Vector3().set(ptInCadX, ptInCadY, 0).applyMatrix4(invVpXform);
    

Надеюсь, это поможет.

...