@file-viewer/renderer-3d 2.1.2 → 2.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/model.d.ts +1 -1
- package/dist/model.js +19 -17
- package/package.json +3 -3
package/dist/model.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type FileRenderContext, type FileViewerRenderedInstance } from '@file-viewer/core';
|
|
2
2
|
export default function renderModel(buffer: ArrayBuffer, target: HTMLDivElement, type?: string, context?: FileRenderContext): Promise<FileViewerRenderedInstance>;
|
package/dist/model.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
|
|
3
|
+
import { createFileViewerTranslator, } from '@file-viewer/core';
|
|
3
4
|
import { formatGeometryKernelNotice, inspectGeometryKernelFile, isGeometryKernelFormat, } from '@file-viewer/geometry-engine';
|
|
4
5
|
const modelStyle = `
|
|
5
6
|
.model-viewer{display:flex;height:100%;min-height:100%;flex-direction:column;background:#f8fafc;color:#162333}
|
|
@@ -85,9 +86,10 @@ const disposeObject = (object) => {
|
|
|
85
86
|
export default async function renderModel(buffer, target, type = 'glb', context) {
|
|
86
87
|
const normalizedType = type.toLowerCase();
|
|
87
88
|
const sourceUrl = context?.url;
|
|
89
|
+
const t = createFileViewerTranslator(context?.options);
|
|
88
90
|
let status = 'loading';
|
|
89
91
|
let errorMessage = '';
|
|
90
|
-
let objectSummary = '
|
|
92
|
+
let objectSummary = t('model.state.loadingSummary');
|
|
91
93
|
let autoRotate = false;
|
|
92
94
|
let wireframe = false;
|
|
93
95
|
let showGrid = true;
|
|
@@ -107,17 +109,17 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
107
109
|
const root = createElement('div', 'model-viewer');
|
|
108
110
|
const toolbar = createElement('div', 'model-toolbar');
|
|
109
111
|
const actions = createElement('div', 'model-actions');
|
|
110
|
-
const fitButton = createElement('button', undefined, '
|
|
111
|
-
const rotateButton = createElement('button', undefined, '
|
|
112
|
-
const wireframeButton = createElement('button', undefined, '
|
|
113
|
-
const gridButton = createElement('button', undefined, '
|
|
114
|
-
const axesButton = createElement('button', undefined, '
|
|
112
|
+
const fitButton = createElement('button', undefined, t('model.toolbar.fit'));
|
|
113
|
+
const rotateButton = createElement('button', undefined, t('model.toolbar.rotate'));
|
|
114
|
+
const wireframeButton = createElement('button', undefined, t('model.toolbar.wireframe'));
|
|
115
|
+
const gridButton = createElement('button', undefined, t('model.toolbar.grid'));
|
|
116
|
+
const axesButton = createElement('button', undefined, t('model.toolbar.axes'));
|
|
115
117
|
const meta = createElement('div', 'model-meta');
|
|
116
118
|
const typeText = createElement('strong', undefined, normalizedType.toUpperCase());
|
|
117
119
|
const summaryText = createElement('span', undefined, objectSummary);
|
|
118
120
|
const stage = createElement('div', 'model-stage');
|
|
119
121
|
const canvas = document.createElement('canvas');
|
|
120
|
-
const state = createElement('div', 'model-state', '
|
|
122
|
+
const state = createElement('div', 'model-state', t('model.state.loading'));
|
|
121
123
|
const buttons = [fitButton, rotateButton, wireframeButton, gridButton, axesButton];
|
|
122
124
|
buttons.forEach(button => {
|
|
123
125
|
button.type = 'button';
|
|
@@ -148,10 +150,10 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
148
150
|
state.hidden = status === 'ready';
|
|
149
151
|
state.classList.toggle('error', status === 'error');
|
|
150
152
|
if (status === 'loading') {
|
|
151
|
-
state.textContent = '
|
|
153
|
+
state.textContent = t('model.state.loading');
|
|
152
154
|
}
|
|
153
155
|
else if (status === 'error') {
|
|
154
|
-
state.replaceChildren(createElement('strong', undefined, '
|
|
156
|
+
state.replaceChildren(createElement('strong', undefined, t('model.state.parseFailed')), createElement('span', undefined, errorMessage));
|
|
155
157
|
}
|
|
156
158
|
};
|
|
157
159
|
const updateHelperVisibility = () => {
|
|
@@ -270,12 +272,12 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
270
272
|
const { meshes, points } = countMeshes(object);
|
|
271
273
|
const parts = [];
|
|
272
274
|
if (meshes) {
|
|
273
|
-
parts.push(
|
|
275
|
+
parts.push(t('model.summary.meshes', { count: meshes }));
|
|
274
276
|
}
|
|
275
277
|
if (points) {
|
|
276
|
-
parts.push(
|
|
278
|
+
parts.push(t('model.summary.points', { count: points }));
|
|
277
279
|
}
|
|
278
|
-
objectSummary = parts.length ? parts.join('
|
|
280
|
+
objectSummary = parts.length ? parts.join(' · ') : t('model.state.loaded');
|
|
279
281
|
updateUi();
|
|
280
282
|
};
|
|
281
283
|
const normalizeObject = (object) => {
|
|
@@ -370,7 +372,7 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
370
372
|
const { ColladaLoader } = await import('three/addons/loaders/ColladaLoader.js');
|
|
371
373
|
const result = new ColladaLoader().parse(readText(), getResourcePath(sourceUrl));
|
|
372
374
|
if (!result?.scene) {
|
|
373
|
-
throw new Error('
|
|
375
|
+
throw new Error(t('model.error.daeEmpty'));
|
|
374
376
|
}
|
|
375
377
|
return result.scene;
|
|
376
378
|
};
|
|
@@ -397,7 +399,7 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
397
399
|
const explainEngineeringModel = (modelType) => {
|
|
398
400
|
const inspection = inspectGeometryKernelFile(buffer, modelType);
|
|
399
401
|
const notice = formatGeometryKernelNotice(inspection.format || modelType);
|
|
400
|
-
const signature = inspection.signature ?
|
|
402
|
+
const signature = inspection.signature ? t('model.notice.signature', { signature: inspection.signature }) : '';
|
|
401
403
|
const warnings = inspection.warnings.length ? ` ${inspection.warnings.join(' ')}` : '';
|
|
402
404
|
throw new ModelPreviewNotice(`${signature}${notice}${warnings}`);
|
|
403
405
|
};
|
|
@@ -471,14 +473,14 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
471
473
|
if (isGeometryKernelFormat(modelType)) {
|
|
472
474
|
return explainEngineeringModel(modelType);
|
|
473
475
|
}
|
|
474
|
-
throw new Error(
|
|
476
|
+
throw new Error(t('model.error.unsupported', { type: modelType }));
|
|
475
477
|
}
|
|
476
478
|
};
|
|
477
479
|
const loadModel = async () => {
|
|
478
480
|
const version = ++activeVersion;
|
|
479
481
|
status = 'loading';
|
|
480
482
|
errorMessage = '';
|
|
481
|
-
objectSummary = '
|
|
483
|
+
objectSummary = t('model.state.loadingSummary');
|
|
482
484
|
updateUi();
|
|
483
485
|
ensureScene();
|
|
484
486
|
try {
|
|
@@ -499,7 +501,7 @@ export default async function renderModel(buffer, target, type = 'glb', context)
|
|
|
499
501
|
console.error(reason);
|
|
500
502
|
}
|
|
501
503
|
status = 'error';
|
|
502
|
-
errorMessage = normalizeError(reason) ||
|
|
504
|
+
errorMessage = normalizeError(reason) || t('model.error.parseFailed', { type: normalizedType.toUpperCase() });
|
|
503
505
|
updateUi();
|
|
504
506
|
}
|
|
505
507
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@file-viewer/renderer-3d",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Standalone 3D model renderer plugin for Flyfish File Viewer powered by Three.js loaders and OrbitControls.",
|
|
@@ -57,8 +57,8 @@
|
|
|
57
57
|
"LICENSE"
|
|
58
58
|
],
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@file-viewer/core": "^2.1.
|
|
61
|
-
"@file-viewer/geometry-engine": "^2.1.
|
|
60
|
+
"@file-viewer/core": "^2.1.4",
|
|
61
|
+
"@file-viewer/geometry-engine": "^2.1.4",
|
|
62
62
|
"three": "^0.184.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|