@x-viewer/core 0.21.7 → 0.21.9

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.
Files changed (30) hide show
  1. package/README.md +2 -2
  2. package/dist/chunks/libredwg-web-CN6Seddu.js +9 -0
  3. package/dist/index.esm.js +1001 -991
  4. package/dist/types/core/compare/BaseDxfCompareHelper.d.ts +7 -19
  5. package/dist/types/core/compare/DxfCompareHelper.d.ts +3 -7
  6. package/dist/types/core/helpers/index.d.ts +0 -1
  7. package/dist/types/core/index.d.ts +1 -0
  8. package/dist/types/core/loaders/DaeLoader.d.ts +13 -0
  9. package/dist/types/core/loaders/DxfModelLoader.d.ts +21 -0
  10. package/dist/types/core/loaders/FbxLoader.d.ts +17 -0
  11. package/dist/types/core/loaders/GltfLoader.d.ts +26 -0
  12. package/dist/types/core/loaders/ModelLoader.d.ts +49 -0
  13. package/dist/types/core/loaders/ModelLoaderManager.d.ts +33 -0
  14. package/dist/types/core/loaders/ObjLoader.d.ts +15 -0
  15. package/dist/types/core/loaders/PlyLoader.d.ts +22 -0
  16. package/dist/types/core/loaders/RasterLoader.d.ts +13 -0
  17. package/dist/types/core/loaders/StlLoader.d.ts +15 -0
  18. package/dist/types/core/loaders/index.d.ts +11 -0
  19. package/dist/types/core/model/Model2d.d.ts +1 -1
  20. package/dist/types/core/utils/CoordinateUtils.d.ts +3 -9
  21. package/dist/types/core/viewers/BaseViewer.d.ts +17 -7
  22. package/dist/types/core/viewers/Viewer2d.d.ts +20 -50
  23. package/package.json +2 -1
  24. package/dist/chunks/libredwg-web-DR0Rasye.js +0 -9
  25. package/dist/types/core/helpers/LoadingHelper.d.ts +0 -130
  26. package/dist/types/core/shp-js/BitView.d.ts +0 -12
  27. package/dist/types/core/shp-js/SHPLoader.d.ts +0 -12
  28. package/dist/types/core/shp-js/Shp.d.ts +0 -10
  29. package/dist/types/core/shp-js/ShpThree.d.ts +0 -23
  30. package/dist/types/core/shp-js/index.d.ts +0 -4
@@ -43,15 +43,9 @@ export declare class BaseDxfCompareHelper {
43
43
  constructor(viewerCfg: Viewer2dConfig);
44
44
  protected initSpinner(): void;
45
45
  /**
46
- * @description {en} Sets font.
47
- * This needs to be called before loading a dxf, it won't affect any loaded text.
48
- * It accepts shx or typeface formats. For typeface, it only support passing in 1 font file in the array for now.
49
- * @description {zh} 设置字体。
50
- * 需要在加载dxf之前调用,不会影响已加载的文字。
51
- * 支持shx或typeface格式。对于typeface,目前只支持传入1个字体文件。
52
- * @param urls
53
- * - {en} font file urls.
54
- * - {zh} 字体文件链接。
46
+ * Loads fonts used when parsing DXF text. Call before loading a DXF; does not affect text that is already loaded.
47
+ * Supports SHX or typeface bundles; for typeface, only a single file in the array is supported for now.
48
+ * @param urls Font file URLs.
55
49
  * @example
56
50
  * ```typescript
57
51
  * compareHelper.setFont(["https://example.com/xxx.shx"]);
@@ -68,11 +62,8 @@ export declare class BaseDxfCompareHelper {
68
62
  */
69
63
  compare(modelCfg1: Model2dConfig, modelCfg2: Model2dConfig, compareCfg?: DxfCompareConfig, onProgress?: (event: ProgressEvent) => void): Promise<void>;
70
64
  /**
71
- * @description {en} Gets compare changes.
72
- * @description {zh} 获取对比变动.
73
- * @returns
74
- * - {en} Compare changes.
75
- * - {zh} 对比变动列表。
65
+ * Returns the comparison diff (per-change records) from the last successful `compare`.
66
+ * @returns Compare changes keyed by id, or undefined if not yet compared.
76
67
  * @example
77
68
  * ``` typescript
78
69
  * const changes = compareHelper.getChanges();
@@ -81,11 +72,8 @@ export declare class BaseDxfCompareHelper {
81
72
  */
82
73
  getChanges(): Record<number, DxfChange> | undefined;
83
74
  /**
84
- * @description {en} Zooms to a compare change.
85
- * @description {zh} 聚焦到图纸的一处变动。
86
- * @param changeId
87
- * - {en} Change id, which is an incremental integer starts from 1.
88
- * - {zh} 变动id,该id是从数字1开始自增的整数。
75
+ * Zooms the camera to the bounding box of a single compare change (with padding).
76
+ * @param changeId Change id: positive integer, starting at 1.
89
77
  * @example
90
78
  * ``` typescript
91
79
  * const changeId = 1;
@@ -39,8 +39,7 @@ export declare class DxfCompareHelper extends BaseDxfCompareHelper {
39
39
  constructor(viewerCfg1: Viewer2dConfig, viewerCfg2: Viewer2dConfig);
40
40
  protected initSyncCameraEvent(): void;
41
41
  /**
42
- * @description {en} Enables to synchronize camera position when another camera is moved.
43
- * @description {zh} 设置开启或关闭同步相机视角。
42
+ * Enables or disables synchronizing the two viewers' cameras when either one moves.
44
43
  * @example
45
44
  * ```typescript
46
45
  * compareHelper.enableSyncCamera(true);
@@ -57,11 +56,8 @@ export declare class DxfCompareHelper extends BaseDxfCompareHelper {
57
56
  */
58
57
  compare(modelCfg1: Model2dConfig, modelCfg2: Model2dConfig, compareCfg?: DxfCompareConfig, onProgress?: (event: ProgressEvent) => void): Promise<void>;
59
58
  /**
60
- * @description {en} Zooms to a compare change.
61
- * @description {zh} 聚焦到图纸的一处变动。
62
- * @param changeId
63
- * - {en} Change id, which is an incremental integer starts from 1.
64
- * - {zh} 变动id,该id是从数字1开始自增的整数。
59
+ * Zooms both viewers to the bounding box of one compare change (with padding).
60
+ * @param changeId Change id: positive integer starting at 1.
65
61
  * @example
66
62
  * ``` typescript
67
63
  * const changeId = 1;
@@ -1,7 +1,6 @@
1
1
  export * from "./InstantiateHelper";
2
2
  export * from "./RafHelper";
3
3
  export * from "./BinaryReader";
4
- export * from "./LoadingHelper";
5
4
  export * from "./MeshBvhHelper";
6
5
  export * from "./ObjectPixelSizeHelper";
7
6
  export * from "./OSnapHelper";
@@ -8,6 +8,7 @@ export * from "./dxf-parser";
8
8
  export * from "./effect";
9
9
  export * from "./geometry-offset";
10
10
  export * from "./helpers";
11
+ export * from "./loaders";
11
12
  export * from "./input-manager";
12
13
  export * from "./interactions";
13
14
  export * from "./text-texture";
@@ -0,0 +1,13 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ export declare class DaeLoader extends BaseModelLoader {
5
+ private readonly manager?;
6
+ readonly id = "loader.builtin.dae";
7
+ readonly priority = 0;
8
+ readonly formats: readonly ["dae"];
9
+ constructor(manager?: THREE.LoadingManager | undefined);
10
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
11
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
12
+ private applyRequestHeader;
13
+ }
@@ -0,0 +1,21 @@
1
+ import type * as THREE from "three";
2
+ import { BaseModelLoader } from "./ModelLoader";
3
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
4
+ import type { DxfData, DxfLoaderConfig } from "../../core/dxf";
5
+ import type { FontManager } from "../../core/font";
6
+ export declare class DxfModelLoader extends BaseModelLoader {
7
+ private readonly manager?;
8
+ readonly id = "loader.builtin.dxf";
9
+ readonly priority = 0;
10
+ readonly formats: readonly ["dxf", "dwg"];
11
+ private font?;
12
+ constructor(manager?: THREE.LoadingManager | undefined);
13
+ setFont(font?: FontManager): void;
14
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
15
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
16
+ loadEx(url: string, dxfDataId?: string, onProgress?: (event: ProgressEvent) => void, onLoad?: () => void, cfg?: DxfLoaderConfig, requestHeader?: {
17
+ [header: string]: string;
18
+ }): Promise<DxfData>;
19
+ loadExFromBuffer(data: ArrayBuffer | Uint8Array, dxfDataId?: string, onProgress?: (event: ProgressEvent) => void, onLoad?: () => void, cfg?: DxfLoaderConfig): Promise<DxfData>;
20
+ private applyRequestHeader;
21
+ }
@@ -0,0 +1,17 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ export declare class FbxLoader extends BaseModelLoader {
5
+ private readonly manager?;
6
+ readonly id = "loader.builtin.fbx";
7
+ readonly priority = 0;
8
+ readonly formats: readonly ["fbx"];
9
+ constructor(manager?: THREE.LoadingManager | undefined);
10
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
11
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
12
+ private static toArrayBuffer;
13
+ private applyRequestHeader;
14
+ private applyUnitScaleToMeters;
15
+ private fixMaterials;
16
+ private hasSuspiciousDarkVertexColors;
17
+ }
@@ -0,0 +1,26 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ /**
5
+ * glTF / GLB model loader wrapping GLTFLoader, DRACO path, and progress handling.
6
+ */
7
+ export declare class GltfLoader extends BaseModelLoader {
8
+ private readonly manager?;
9
+ readonly id = "loader.builtin.gltf";
10
+ readonly priority = 0;
11
+ readonly formats: readonly ["gltf", "glb"];
12
+ private static dracoDecoderPath;
13
+ static setDracoDecoderPath(path: string): void;
14
+ private gltfLoader?;
15
+ constructor(manager?: THREE.LoadingManager | undefined);
16
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
17
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
18
+ parseToScene(data: ArrayBuffer | string, path: string, onLoad: (object: THREE.Object3D) => void, onError?: (event: ErrorEvent) => void): void;
19
+ private obtainLoader;
20
+ private applyRequestHeader;
21
+ private sanitizeUrlForLoad;
22
+ /**
23
+ * Filter invalid early progress events from three.js loadAsync.
24
+ */
25
+ private wrapProgress;
26
+ }
@@ -0,0 +1,49 @@
1
+ import type * as THREE from "three";
2
+ /**
3
+ * Shared fields for one model load request.
4
+ */
5
+ interface BaseModelLoadContext {
6
+ /** Normalized lowercase format token; same semantics as historical `endsWith` checks. */
7
+ readonly format: string;
8
+ readonly onProgress?: (event: ProgressEvent) => void;
9
+ }
10
+ /**
11
+ * Context for model loading from URL.
12
+ */
13
+ export interface ModelLoadContext extends BaseModelLoadContext {
14
+ readonly url: string;
15
+ readonly requestHeader?: {
16
+ [header: string]: string;
17
+ };
18
+ }
19
+ export interface ObjLoadContext extends ModelLoadContext {
20
+ readonly mtlUrls?: string[];
21
+ }
22
+ /**
23
+ * Context for model loading from memory buffer.
24
+ */
25
+ export interface ModelLoadFromBufferContext extends BaseModelLoadContext {
26
+ readonly data: ArrayBuffer | Uint8Array;
27
+ }
28
+ /**
29
+ * Pluggable model loader (strategy). Built-ins and extensions share this contract.
30
+ */
31
+ export declare abstract class BaseModelLoader {
32
+ /** Stable id for unregister and diagnostics. */
33
+ abstract readonly id: string;
34
+ /** Higher runs first; use a value above built-in `0` to override built-ins. */
35
+ readonly priority?: number;
36
+ /**
37
+ * Lowercase extension tokens without a leading dot (e.g. `glb`, `gltf`).
38
+ * Aggregated by `ModelLoaderManager.getSupportedModelFormats`; default {@link match} uses suffix checks on these entries.
39
+ */
40
+ abstract readonly formats: readonly string[];
41
+ /**
42
+ * True when `format` (often a lowercased filename or extension token) ends with one of {@link formats}.
43
+ * Override for non-suffix matching.
44
+ */
45
+ match(format: string): boolean;
46
+ load?(ctx: ModelLoadContext): Promise<THREE.Object3D | void>;
47
+ loadFromBuffer?(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D | void>;
48
+ }
49
+ export {};
@@ -0,0 +1,33 @@
1
+ import * as THREE from "three";
2
+ import type { BaseModelLoader } from "./ModelLoader";
3
+ import type { FontManager } from "../../core/font";
4
+ export declare class ModelLoaderManager {
5
+ private font?;
6
+ private manager?;
7
+ /** Built-in loaders; rebuilt when {@link setLoadManager} / {@link setFont} runs. */
8
+ private readonly builtinLoaders;
9
+ /** Extension loaders (e.g. from plugins); preserved across builtin rebuilds. */
10
+ private readonly extensionLoaders;
11
+ constructor(manager?: THREE.LoadingManager);
12
+ register(loader: BaseModelLoader): void;
13
+ unregister(id: string): void;
14
+ private unregisterFromList;
15
+ private rebuildBuiltinLoaders;
16
+ private allLoaders;
17
+ /**
18
+ * Unique extension tokens from all registered loaders (extensions first, then built-ins), sorted.
19
+ */
20
+ getSupportedModelFormats(): string[];
21
+ private createBuiltinModelLoaders;
22
+ private resolveModelLoader;
23
+ private computeUrlModelFormat;
24
+ private loadModelInternal;
25
+ private loadModelFromBufferInternal;
26
+ setLoadManager(manager?: THREE.LoadingManager): void;
27
+ loadLocalModel(url: string, src: string, onProgress?: (event: ProgressEvent) => void, mtlUrls?: string[]): Promise<THREE.Object3D>;
28
+ loadModel(src: string, fileFormat?: string, onProgress?: (event: ProgressEvent) => void, requestHeader?: {
29
+ [header: string]: string;
30
+ }): Promise<THREE.Object3D | void>;
31
+ loadModelFromBuffer(data: ArrayBuffer | Uint8Array, fileFormat: string, onProgress?: (event: ProgressEvent) => void): Promise<THREE.Object3D | void>;
32
+ setFont(font: FontManager): void;
33
+ }
@@ -0,0 +1,15 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadFromBufferContext, ObjLoadContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ export declare class ObjLoader extends BaseModelLoader {
5
+ private readonly manager?;
6
+ readonly id = "loader.builtin.obj";
7
+ readonly priority = 0;
8
+ readonly formats: readonly ["obj"];
9
+ constructor(manager?: THREE.LoadingManager | undefined);
10
+ load(ctx: ObjLoadContext): Promise<THREE.Object3D>;
11
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
12
+ private static toArrayBuffer;
13
+ private applyRequestHeader;
14
+ private parseMtlUrlsFromObj;
15
+ }
@@ -0,0 +1,22 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ export declare class PlyLoader extends BaseModelLoader {
5
+ private readonly manager?;
6
+ readonly id = "loader.builtin.ply";
7
+ readonly priority = 0;
8
+ readonly formats: readonly ["ply"];
9
+ constructor(manager?: THREE.LoadingManager | undefined);
10
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
11
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
12
+ private static toArrayBuffer;
13
+ private applyRequestHeader;
14
+ /**
15
+ * PLYLoader always does `channel / 255` for vertex rgb. Float colors already in 0..1 become ~0.004 (near black).
16
+ * Also ensure normals exist so MeshStandardMaterial is lit correctly.
17
+ */
18
+ private static preparePlyGeometry;
19
+ private static ensureVertexNormals;
20
+ private static fixVertexColorEncoding;
21
+ private finalizeLoadedObject;
22
+ }
@@ -0,0 +1,13 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ export declare class RasterLoader extends BaseModelLoader {
5
+ private readonly manager?;
6
+ readonly id = "loader.builtin.raster";
7
+ readonly priority = 0;
8
+ readonly formats: readonly ["jpg", "jpeg", "png"];
9
+ constructor(manager?: THREE.LoadingManager | undefined);
10
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
11
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
12
+ private applyRequestHeader;
13
+ }
@@ -0,0 +1,15 @@
1
+ import * as THREE from "three";
2
+ import type { ModelLoadContext, ModelLoadFromBufferContext } from "./ModelLoader";
3
+ import { BaseModelLoader } from "./ModelLoader";
4
+ export declare class StlLoader extends BaseModelLoader {
5
+ private readonly manager?;
6
+ readonly id = "loader.builtin.stl";
7
+ readonly priority = 0;
8
+ readonly formats: readonly ["stl"];
9
+ constructor(manager?: THREE.LoadingManager | undefined);
10
+ load(ctx: ModelLoadContext): Promise<THREE.Object3D>;
11
+ loadFromBuffer(ctx: ModelLoadFromBufferContext): Promise<THREE.Object3D>;
12
+ private static toArrayBuffer;
13
+ private applyRequestHeader;
14
+ private meshFromGeometry;
15
+ }
@@ -0,0 +1,11 @@
1
+ export { BaseModelLoader } from "./ModelLoader";
2
+ export type { ModelLoadContext, ModelLoadFromBufferContext, ObjLoadContext } from "./ModelLoader";
3
+ export { ModelLoaderManager } from "./ModelLoaderManager";
4
+ export { DaeLoader } from "./DaeLoader";
5
+ export { DxfModelLoader } from "./DxfModelLoader";
6
+ export { FbxLoader } from "./FbxLoader";
7
+ export { GltfLoader } from "./GltfLoader";
8
+ export { ObjLoader } from "./ObjLoader";
9
+ export { PlyLoader } from "./PlyLoader";
10
+ export { RasterLoader } from "./RasterLoader";
11
+ export { StlLoader } from "./StlLoader";
@@ -95,7 +95,7 @@ export declare class Model2d extends Model {
95
95
  /**
96
96
  * Sets layer visibility.
97
97
  */
98
- setLayerVisible(layerName: string, visible: boolean, enableHideVisuallySmallObjects?: boolean, cameraZoom?: number): void;
98
+ setLayerVisible(layerName: string, visible: boolean, enableSmallFeatureCulling?: boolean, cameraZoom?: number): void;
99
99
  /**
100
100
  * Sets layer opacity.
101
101
  */
@@ -64,18 +64,12 @@ export declare class CoordinateUtils {
64
64
  */
65
65
  static screen2World(vector: THREE.Vector2, camera: THREE.Camera, container: HTMLElement): THREE.Vector3;
66
66
  /**
67
- * Converts screen point to NDC coordinate.
68
- * @description {en} Normalized screen coordinate: bottom-left(-1, -1), top-right(1, 1).
69
- * @description {zh} 标准化屏幕坐标:左下角(-1, -1), 右上角(1, 1)。
70
- * @description {en} World coordinate to normalized screen coordinate(0-1).
71
- * @description {zh} 世界坐标转标准化屏幕坐标(0-1)。
67
+ * Converts a screen pixel point to NDC: bottom-left (-1, -1), top-right (1, 1).
68
+ * (Related: {@link world2NormalizedScreen} maps world to 0–1 screen space.)
72
69
  */
73
70
  static screen2Ndc(vector: THREE.Vector2, camera: THREE.Camera, container: HTMLElement): THREE.Vector2;
74
71
  /**
75
- * @description {en} Normalized screen coordinate: top-left(0, 0), bottom-right(1, 1).
76
- * @description {zh} 标准化屏幕坐标:左上角(0, 0), 右下角(1, 1)。
77
- * @description {en} World coordinate to normalized screen coordinate(0-1).
78
- * @description {zh} 世界坐标转标准化屏幕坐标(0-1)。
72
+ * Maps a world point to normalized screen coordinates: top-left (0, 0), bottom-right (1, 1).
79
73
  */
80
74
  static world2NormalizedScreen(worldCoord: THREE.Vector2 | THREE.Vector3, camera: THREE.Camera, container: HTMLElement): THREE.Vector2;
81
75
  }
@@ -10,9 +10,9 @@ import { CanvasRender } from "../../core/canvas";
10
10
  import { Container } from "../../core/components/Container";
11
11
  import { FontManager } from "../../core/font";
12
12
  import { ZoomToRectHelper } from "../../core/helpers";
13
- import { LoadingHelper } from "../../core/helpers/LoadingHelper";
14
13
  import { InputManager } from "../../core/input-manager";
15
14
  import { Interaction } from "../../core/interactions/Interaction";
15
+ import { BaseModelLoader, ModelLoaderManager } from "../../core/loaders";
16
16
  import { Model } from "../../core/model";
17
17
  import { PickManager } from "../../core/pick";
18
18
  import { SceneManager } from "../../core/scene/SceneManager";
@@ -45,7 +45,7 @@ export declare abstract class BaseViewer<BaseViewerEvents extends ViewerEvents =
45
45
  protected spinner: Spinner;
46
46
  protected progressBar?: ProgressBar;
47
47
  protected watermark?: Watermark;
48
- protected loaderHelper: LoadingHelper;
48
+ protected loaderManager: ModelLoaderManager;
49
49
  protected zoomToRectHelper?: ZoomToRectHelper;
50
50
  protected interaction?: Interaction;
51
51
  /**
@@ -103,9 +103,7 @@ export declare abstract class BaseViewer<BaseViewerEvents extends ViewerEvents =
103
103
  protected animate(timeStamp?: number): void;
104
104
  resize(): void;
105
105
  /**
106
- * Sets decoder path for draco loader.
107
- * Draco decoder will be used if a model is draco encoded.
108
- * @param decoderPath e.g., "libs/draco/gltf/"
106
+ * @deprecated use GltfLoader.setDracoDecoderPath instead
109
107
  * @hidden
110
108
  */
111
109
  setDracoDecoderPath(path: string): void;
@@ -127,8 +125,7 @@ export declare abstract class BaseViewer<BaseViewerEvents extends ViewerEvents =
127
125
  */
128
126
  getPixelSizeInWorldCoord(): number;
129
127
  /**
130
- * @description {en} Asks user to select a box area, and zooms to it.
131
- * @description {zh} 询问用户选择一个框选区域,然后缩放到该区域。
128
+ * Lets the user box-select a region on screen, then zooms the camera to that region.
132
129
  * @example
133
130
  * ``` typescript
134
131
  * viewer.zoomToRect();
@@ -243,5 +240,18 @@ export declare abstract class BaseViewer<BaseViewerEvents extends ViewerEvents =
243
240
  * Finds a Plugin.
244
241
  */
245
242
  findPlugin(id: string): Plugin | undefined;
243
+ /**
244
+ * Adds a model format loader (typically from a plugin).
245
+ * Extension loaders are kept when the viewer refreshes built-in loaders (font / loading manager changes).
246
+ */
247
+ addModelLoader(loader: BaseModelLoader): void;
248
+ /**
249
+ * Removes a previously added extension loader by id.
250
+ */
251
+ removeModelLoader(id: string): void;
252
+ /**
253
+ * Extension tokens (e.g. `glb`, `dxf`) supported by the current model loader stack, including plugins.
254
+ */
255
+ getSupportedModelFormats(): string[];
246
256
  }
247
257
  export {};
@@ -166,23 +166,14 @@ export declare class Viewer2d extends BaseViewer {
166
166
  constructor(viewerCfg: Viewer2dConfig);
167
167
  get camera(): THREE.OrthographicCamera;
168
168
  /**
169
- * @description {en} Loads a dxf file.
170
- * The first loaded file will be taken as a "master" model.
169
+ * Loads a DXF/DWG model.
170
+ * The first loaded file becomes the "master" model.
171
171
  * Any other files are non-master, we call "overlay" model.
172
172
  * We'll load everything of a master model, including model and paper space.
173
173
  * For an overlay model, we'll only load its model space. And its model space can only
174
174
  * overly to master model's model space.
175
- * @description {zh} 加载 dxf 文件。
176
- * 第一个加载的文件将被视为“主”模型。
177
- * 任何其他文件都是非主文件,我们称之为“叠加”模型。
178
- * 我们将加载主模型的所有内容,包括模型和图纸空间。
179
- * 对于叠加模型,我们只会加载其模型空间。并且它的模型空间只能叠加到主模型的模型空间上。
180
- * @param modelCfg
181
- * - {en} The configuration of the model to be loaded.
182
- * - {zh} 要加载的模型的配置。
183
- * @param onProgress
184
- * - {en} A callback function to indicate the loading progress.
185
- * - {zh} 用于指示加载进度的回调函数。
175
+ * @param modelCfg Configuration of the model to load.
176
+ * @param onProgress Optional callback for loading progress.
186
177
  * @example
187
178
  * ``` typescript
188
179
  * const viewerCfg = {
@@ -209,6 +200,7 @@ export declare class Viewer2d extends BaseViewer {
209
200
  */
210
201
  parseFile(modelCfg: Model2dConfig, onProgress?: ((event: ProgressEvent<EventTarget>) => void) | undefined): Promise<DxfData>;
211
202
  addModel(model: Model2d): void;
203
+ private createDxfModelLoader;
212
204
  setObjectHighlight(object: THREE.Object3D): void;
213
205
  setObjectUnHighlight(object: THREE.Object3D): void;
214
206
  clearHighlight(): void;
@@ -227,11 +219,8 @@ export declare class Viewer2d extends BaseViewer {
227
219
  */
228
220
  getWorldPositionByMousePick(mousePosition: THREE.Vector2): THREE.Vector3 | undefined;
229
221
  /**
230
- * @description {en} Activates a layout.
231
- * @description {zh} 激活布局。
232
- * @param layoutName
233
- * - {en} The name of the layout to be activated.
234
- * - {zh} 要激活的布局名称。
222
+ * Activates a layout tab (model or paper space).
223
+ * @param layoutName Layout name to activate.
235
224
  * @example
236
225
  * ```typescript
237
226
  * viewer.activateLayout('Layout1');
@@ -257,10 +246,8 @@ export declare class Viewer2d extends BaseViewer {
257
246
  goToHomeView(): void;
258
247
  zoomToBBox(bbox: THREE.Box3): void;
259
248
  /**
260
- * @description {en} Gets current view extent.
261
- * This is useful for user to save this value as a viewpoint, and jump to this viewpoint next time.
262
- * @description {zh} 获取当前视图范围。
263
- * 用户可使用该接口获取当前视口范围,并在适当的场景下跳转到该视口范围。
249
+ * Returns the current view extent in world XY (from NDC corners).
250
+ * Useful to save as a viewpoint and restore the same framing later.
264
251
  * @example
265
252
  * ``` typescript
266
253
  * const box = viewer.getCurrentViewExtent();
@@ -290,11 +277,7 @@ export declare class Viewer2d extends BaseViewer {
290
277
  */
291
278
  getHitResult(event: MouseEvent | PointerEvent | EventInfo): THREE.Vector2 | undefined;
292
279
  /**
293
- * @description {en} Gets active layout.
294
- * @description {zh} 获取当前布局。
295
- * @returns
296
- * - {en} Active layout name or undefined.
297
- * - {zh} 当前激活的布局名称或undefined。
280
+ * Returns the active layout name, or undefined if none.
298
281
  * @example
299
282
  * ``` typescript
300
283
  * const activeLayout = viewer.getActiveLayoutName();
@@ -305,11 +288,7 @@ export declare class Viewer2d extends BaseViewer {
305
288
  zoomIn(step?: number): void;
306
289
  zoomOut(step?: number): void;
307
290
  /**
308
- * @description {en} Gets dxf layers.
309
- * @description {zh} 获取dxf图层。
310
- * @returns
311
- * - {en} Dxf layers.
312
- * - {zh} dxf图层。
291
+ * Returns layer tables grouped by loaded model (master first, then overlays).
313
292
  * @example
314
293
  * ``` typescript
315
294
  * const dxfLayers = viewer.getLayers();
@@ -328,20 +307,11 @@ export declare class Viewer2d extends BaseViewer {
328
307
  */
329
308
  setModelVisibility(modelId: string, visible: boolean): void;
330
309
  /**
331
- * @description {en} Sets layer's visibility.
332
- * @description {zh} 设置图层的可见性。
333
- * @param layerName
334
- * - {en} Layer's name to show or hide.
335
- * - {zh} 要显示或隐藏的图层名称。
336
- * @param visible
337
- * - {en} Layer's target visibility.
338
- * - {zh} 图层的目标可见性。
339
- * @param modelId
340
- * - {en} Useful when more than one model is loaded, if not specified, will use the master model.
341
- * - {zh} 当加载了多个模型时有用,如果未指定,将使用主模型。
342
- * @throws Error
343
- * - {en}: Throws exception if given modelId doesn't exist.
344
- * - {zh} 如果给定的modelId不存在,则抛出异常。
310
+ * Sets visibility of a layer by name.
311
+ * @param layerName Layer to show or hide.
312
+ * @param visible Target visibility.
313
+ * @param modelId When multiple models are loaded, target model; defaults to the master model.
314
+ * @throws If `modelId` does not match any loaded model.
345
315
  * @example
346
316
  * ``` typescript
347
317
  * // Hides layer "0"
@@ -366,11 +336,11 @@ export declare class Viewer2d extends BaseViewer {
366
336
  */
367
337
  resetLayerColor(layerName: string, modelId?: string): void;
368
338
  /**
369
- * Enables to hide visually small objects in order to improve performance.
339
+ * Enables small feature culling in order to improve performance.
370
340
  */
371
- enableHidingVisuallySmallObjects(enable: boolean): void;
341
+ enableSmallFeatureCulling(enable: boolean): void;
372
342
  /**
373
- * If it enabled to hide visually small objects.
343
+ * If small feature culling is enabled.
374
344
  */
375
- isHidingVisuallySmallObjectsEnabled(): boolean;
345
+ isSmallFeatureCullingEnabled(): boolean;
376
346
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x-viewer/core",
3
- "version": "0.21.7",
3
+ "version": "0.21.9",
4
4
  "homepage": "https://dwg.thingraph.site/",
5
5
  "description": "WebGL-based 2D/3D viewer engine built on Three.js. View DWG/DXF/PDF files in the browser with no server required. Supports glTF, OBJ, FBX, IFC, STL and BimTiles formats.",
6
6
  "author": "thingraph",
@@ -56,6 +56,7 @@
56
56
  "types": "dist/types/index.d.ts",
57
57
  "scripts": {
58
58
  "build": "pnpm run clean:build && pnpm run data-type && rollup -c --environment BUILD:production",
59
+ "build:dev": "cross-env OBFUSCATE=false pnpm run build",
59
60
  "clean:build": "rimraf ./dist",
60
61
  "data-type": "tsc --project tsconfig.bundle.json && tsc-alias -p tsconfig.bundle.json",
61
62
  "dev": "pnpm run data-type && rollup -c -w",