Forge Viewer: Поворот листов
Повернуть лист в Forge Viewer достаточно просто. Вы можете это сделать до или после загрузки листа во Viewer:
До загрузки:
- var mx = new THREE.Matrix4();
- mx.makeRotationZ(90 * Math.PI / 180);
- viewer.loadModel("TestSheet.pdf", {page: 1, placementTransform: mx});
После загрузки:
- viewer.loadModel("TestSheet.pdf", {page: 1}, (model) => {
- var mx = new THREE.Matrix4();
- mx.makeRotationZ(90 * Math.PI / 180);
- model.setPlacementTransform(mx);
- });
Однако, если Вы хотите загрузить несколько листов (один вертикально, другой горизонтально), повернуть один из них и, например, выровнять их, чтобы можно было сравнить их с помощью расширения PixelCompare
Мы уже рассказывали о разнице между PdfLoader и LeafletLoader (см. перевод на нашем сайте). Эти загрузчики по-разному работают с размерами и позиционированием листов.
Допустим, мы хотим повернуть вертикальную страницу, сделав её горизонтальной, повернув на +90º (PI/2 радиан).
В случае использования PdfLoader, нижний левый угол листа всегда находится в начале координат (0, 0), его ширина откладывается по оcи X, а высота - по оси Y в координатах самого листа.
Поворот всегда осуществляется вокруг начала координат, но матрица так же может содержать смещение до нужной нам позиции.
После поворота, новый левый нижний угол будет находиться в координатах (-y, 0), поэтому нам нужно добавить вектор смещения (y, 0) к матрице преобразования для того, чтобы сместить левый нижний угол в начало координат (0, 0)
- viewer.loadModel("TestSheet.pdf", {}, (model) => {
- var bb = model.getBoundingBox();
- var mx = new THREE.Matrix4();
- mx.makeRotationZ(90 * Math.PI / 180);
- // translation along X axis
- mx.elements[12] = bb.max.y;
- model.setPlacementTransform(mx);
- });
В случае использования LeafletLoader, верхний левый угол листа всегда находится в (0, 1), его ширина откладывается по оси X, а высота - всегда 1 по оси Y.
После поворота новый верхний угол будет в (-1, x), поэтому добавим вектор смещений (1, 1-x) к нашей матрице чтобы переместить угол листа обратно в позицию (0, 1)
- viewer.loadModel("TestSheet.pdf", {}, (model) => {
- var bb = model.getBoundingBox();
- var mx = new THREE.Matrix4();
- mx.makeRotationZ(90 * Math.PI / 180);
- // translation along X and Y axes
- mx.elements[12] = 1;
- mx.elements[13] = 1 - bb.max.x;
- model.setPlacementTransform(mx);
- });
Источник: https://forge.autodesk.com/blog/rotate-sheets-viewer
Опубликовано 31.01.2021