@nebula-spatial/cad-loader 0.1.0
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/README.md +46 -0
- package/dist/core/cad-types.d.ts +26 -0
- package/dist/core/errors.d.ts +5 -0
- package/dist/core/index.d.ts +24 -0
- package/dist/core/index.js +2262 -0
- package/dist/core/parser/bin-group-reader.d.ts +9 -0
- package/dist/core/parser/bin-parser.d.ts +65 -0
- package/dist/core/parser/dxbs-sidecar.d.ts +24 -0
- package/dist/core/parser/geometry-segments.d.ts +20 -0
- package/dist/core/parser/text-roundtrip.d.ts +4 -0
- package/dist/core/parser/types.d.ts +80 -0
- package/dist/core/runtime-text-decoder.d.ts +8 -0
- package/dist/core/types.d.ts +147 -0
- package/dist/core/utils/insert-bbox.d.ts +10 -0
- package/dist/core/utils/viewport-rect.d.ts +21 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +4435 -0
- package/dist/loader/geo-loader.d.ts +56 -0
- package/dist/loader/internal/external-variant-sidecar-fetch.d.ts +13 -0
- package/dist/loader/internal/flow-control.d.ts +29 -0
- package/dist/loader/internal/frame-budget-scheduler.d.ts +21 -0
- package/dist/loader/internal/geo-compact-executor.d.ts +19 -0
- package/dist/loader/internal/geo-loader-local-adapter.d.ts +2 -0
- package/dist/loader/internal/geo-loader-pipeline.d.ts +81 -0
- package/dist/loader/internal/geo-loader-worker-adapter.d.ts +7 -0
- package/dist/loader/internal/geo-node-builder.d.ts +29 -0
- package/dist/loader/internal/geo-node-load-sink.d.ts +28 -0
- package/dist/loader/internal/geo-node.d.ts +284 -0
- package/dist/loader/internal/geo-prepare-worker-types.d.ts +87 -0
- package/dist/loader/internal/geo-prepare.d.ts +38 -0
- package/dist/loader/internal/geo-prepare.worker.d.ts +1 -0
- package/dist/loader/internal/insert-model-builder.d.ts +10 -0
- package/dist/loader/internal/insert-runtime-geometry.d.ts +15 -0
- package/dist/loader/internal/line-canonical.d.ts +37 -0
- package/dist/loader/internal/line-quality.d.ts +9 -0
- package/dist/loader/internal/prepare-credit-gate.d.ts +20 -0
- package/dist/loader/internal/transport.d.ts +2 -0
- package/dist/scene/geo-cad-line-geometry.d.ts +28 -0
- package/dist/scene/geo-cad-line-material.d.ts +18 -0
- package/dist/scene/instancing/block-geometry-registry.d.ts +35 -0
- package/dist/scene/instancing/insert-instance-table.d.ts +23 -0
- package/dist/scene/instancing/viewport-instance-presenter.d.ts +66 -0
- package/dist/selection/cad-insert-selection.d.ts +35 -0
- package/dist/session/load-session.d.ts +90 -0
- package/dist/shared/abort.d.ts +3 -0
- package/dist/shared/cad-display-color.d.ts +55 -0
- package/dist/shared/cad-load-source.d.ts +8 -0
- package/dist/shared/color-buffer.d.ts +6 -0
- package/dist/shared/constants.d.ts +11 -0
- package/dist/shared/display-color-buffer.d.ts +27 -0
- package/dist/shared/errors.d.ts +2 -0
- package/dist/shared/text-font.d.ts +12 -0
- package/dist/shared/types.d.ts +57 -0
- package/dist/shared/utils/insert-bbox.d.ts +1 -0
- package/dist/shared/utils/timing.d.ts +2 -0
- package/dist/shared/utils/viewport-rect.d.ts +1 -0
- package/dist/shared/viewer-theme.d.ts +2 -0
- package/dist/workers/geo-prepare.worker.js +2166 -0
- package/package.json +61 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { GeoGeometryChunk, GroupLayerEncoding, InsertRuntimeGeometry } from './types';
|
|
2
|
+
export declare const STREAM_VERTEX_WINDOW = 4096;
|
|
3
|
+
export declare function captureGroupSnapshot(buf: ArrayBuffer, startOffset: number, endOffset: number, count: number, groupLayerEncoding?: GroupLayerEncoding): InsertRuntimeGeometry;
|
|
4
|
+
export declare function groupLayerEncodingForV3Minor(versionMinor: number): GroupLayerEncoding;
|
|
5
|
+
export declare function readGroup(buf: ArrayBuffer, view: DataView, startOffset: number, count: number, endOffset?: number, groupLayerEncoding?: GroupLayerEncoding): {
|
|
6
|
+
chunk: GeoGeometryChunk;
|
|
7
|
+
offset: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function streamGroupChunks(buf: ArrayBuffer, view: DataView, startOffset: number, count: number, groupLayerEncoding?: GroupLayerEncoding): Generator<GeoGeometryChunk, number, void>;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { BlockInstanceBBox, ExternalAnnotationsManifest, ExternalBlockVariantManifestEntry, GeoMeta, GeoGroup } from '../types';
|
|
2
|
+
import type { GeoChunk, GeoGeometryChunk, GroupLayerEncoding, ParsedHeader, InsertRuntimeGeometry } from './types';
|
|
3
|
+
import { type DecodedAnnotationSidecar } from './dxbs-sidecar';
|
|
4
|
+
export type ParseBinOptions = {
|
|
5
|
+
hiddenInstanceIds?: ReadonlySet<number>;
|
|
6
|
+
keepTextsForHiddenInstances?: boolean;
|
|
7
|
+
loadBlocks?: boolean;
|
|
8
|
+
suppressExpandedInsertGeometry?: boolean;
|
|
9
|
+
maxExpandedInstanceVertices?: number;
|
|
10
|
+
externalVariantBuffers?: ReadonlyMap<number, ArrayBuffer>;
|
|
11
|
+
requiredExternalVariantIds?: ReadonlySet<number>;
|
|
12
|
+
externalVariantDeltaOnly?: boolean;
|
|
13
|
+
deferExternalVariantGeometry?: boolean;
|
|
14
|
+
};
|
|
15
|
+
export interface ExternalVariantDependencyPlan {
|
|
16
|
+
readonly manifest: readonly ExternalBlockVariantManifestEntry[];
|
|
17
|
+
readonly requiredVariantIds: readonly number[];
|
|
18
|
+
readonly requiredNormalBytes: number;
|
|
19
|
+
readonly totalManifestBytes: number;
|
|
20
|
+
readonly skippedVariantIds: readonly number[];
|
|
21
|
+
readonly viewport?: BlockInstanceBBox | null;
|
|
22
|
+
readonly includedSceneInstanceIds?: readonly number[];
|
|
23
|
+
}
|
|
24
|
+
export interface ExternalVariantDependencyOptions {
|
|
25
|
+
readonly loadBlocks?: boolean;
|
|
26
|
+
readonly hiddenInstanceIds?: ReadonlySet<number>;
|
|
27
|
+
readonly viewport?: BlockInstanceBBox | null;
|
|
28
|
+
readonly viewportPaddingRatio?: number;
|
|
29
|
+
readonly worldUnitsPerPixel?: number;
|
|
30
|
+
readonly minViewportPixelSize?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function readExternalVariantManifest(buf: ArrayBuffer): readonly ExternalBlockVariantManifestEntry[];
|
|
33
|
+
export declare function readExternalVariantDependencyPlan(buf: ArrayBuffer, options?: ExternalVariantDependencyOptions): ExternalVariantDependencyPlan;
|
|
34
|
+
export declare function readExternalAnnotationManifest(buf: ArrayBuffer): ExternalAnnotationsManifest | null;
|
|
35
|
+
export declare function readExternalVariantGeometrySidecar(entry: ExternalBlockVariantManifestEntry, sidecar: ArrayBuffer, fallbackGroupLayerEncoding?: GroupLayerEncoding): {
|
|
36
|
+
line: {
|
|
37
|
+
chunk: GeoGeometryChunk;
|
|
38
|
+
snapshot: InsertRuntimeGeometry;
|
|
39
|
+
};
|
|
40
|
+
fill: {
|
|
41
|
+
chunk: GeoGeometryChunk;
|
|
42
|
+
snapshot: InsertRuntimeGeometry;
|
|
43
|
+
};
|
|
44
|
+
dot: {
|
|
45
|
+
chunk: GeoGeometryChunk;
|
|
46
|
+
snapshot: InsertRuntimeGeometry;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export declare function readExternalBlockAnnotations(buf: ArrayBuffer, options?: {
|
|
50
|
+
externalVariantBuffers?: ReadonlyMap<number, ArrayBuffer>;
|
|
51
|
+
hiddenInstanceIds?: ReadonlySet<number>;
|
|
52
|
+
}): DecodedAnnotationSidecar | null;
|
|
53
|
+
export declare function parseBinStreaming(buf: ArrayBuffer, options?: ParseBinOptions): {
|
|
54
|
+
header: ParsedHeader;
|
|
55
|
+
chunks: Generator<GeoChunk, void, void>;
|
|
56
|
+
};
|
|
57
|
+
export declare function parseBinBounds(buf: ArrayBuffer): ParsedHeader['bounds'];
|
|
58
|
+
export declare function parseBinToChunks(buf: ArrayBuffer, options?: ParseBinOptions): Generator<GeoChunk, ParsedHeader, void>;
|
|
59
|
+
export declare function parseBinPayload(buf: ArrayBuffer, options?: ParseBinOptions): {
|
|
60
|
+
meta: GeoMeta;
|
|
61
|
+
line: GeoGroup;
|
|
62
|
+
fill: GeoGroup;
|
|
63
|
+
dot: GeoGroup;
|
|
64
|
+
rawBytes: number;
|
|
65
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { TextEntity } from '../types';
|
|
2
|
+
import type { GeoGeometryChunk } from './types';
|
|
3
|
+
export type DxbsSectionEntry = {
|
|
4
|
+
type: number;
|
|
5
|
+
flags: number;
|
|
6
|
+
offset: number;
|
|
7
|
+
length: number;
|
|
8
|
+
};
|
|
9
|
+
export type DxbsContainer = {
|
|
10
|
+
versionMajor: number;
|
|
11
|
+
versionMinor: number;
|
|
12
|
+
sections: ReadonlyMap<number, DxbsSectionEntry>;
|
|
13
|
+
};
|
|
14
|
+
export declare function isDxbsPayload(buf: ArrayBuffer): boolean;
|
|
15
|
+
export declare function readDxbsContainer(buf: ArrayBuffer): DxbsContainer;
|
|
16
|
+
export declare function getDxbsSection(container: DxbsContainer, type: number, name: string): DxbsSectionEntry;
|
|
17
|
+
export type DecodedAnnotationSidecar = {
|
|
18
|
+
line: GeoGeometryChunk;
|
|
19
|
+
fill: GeoGeometryChunk;
|
|
20
|
+
dot: GeoGeometryChunk;
|
|
21
|
+
texts: readonly TextEntity[];
|
|
22
|
+
};
|
|
23
|
+
export declare function readSceneAnnotationSidecar(buf: ArrayBuffer): DecodedAnnotationSidecar;
|
|
24
|
+
export declare function readBlockAnnotationSidecar(buf: ArrayBuffer): DecodedAnnotationSidecar;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GeoGeometryChunk, GeoGeometrySegment } from './types';
|
|
2
|
+
export interface GeometrySegmentSource {
|
|
3
|
+
readonly pos: Float32Array;
|
|
4
|
+
readonly col?: Uint8Array;
|
|
5
|
+
readonly lay?: Uint8Array | Uint16Array;
|
|
6
|
+
readonly count: number;
|
|
7
|
+
readonly segments?: readonly GeoGeometrySegment[];
|
|
8
|
+
}
|
|
9
|
+
export interface ExpandedGeometryMetadata {
|
|
10
|
+
/** Live references when expanded metadata already exists; newly allocated arrays when derived from segments. */
|
|
11
|
+
readonly col: Uint8Array;
|
|
12
|
+
readonly lay: Uint8Array | Uint16Array;
|
|
13
|
+
}
|
|
14
|
+
export declare function emptyGeometryChunk(): GeoGeometryChunk;
|
|
15
|
+
export declare function normalizeGeometrySegments(chunk: GeometrySegmentSource): readonly GeoGeometrySegment[];
|
|
16
|
+
export declare function expandGeometryChunkMetadata(chunk: GeometrySegmentSource): ExpandedGeometryMetadata;
|
|
17
|
+
export declare function offsetGeometrySegments(segments: readonly GeoGeometrySegment[], vertexOffset: number): GeoGeometrySegment[];
|
|
18
|
+
export declare function remapGeometrySegmentLayers(segments: readonly GeoGeometrySegment[], remap: (layerIndex: number) => number): GeoGeometrySegment[];
|
|
19
|
+
export declare function sliceGeometrySegments(segments: readonly GeoGeometrySegment[], startVertex: number, vertexCount: number): GeoGeometrySegment[];
|
|
20
|
+
export declare function mergeAdjacentSegments(segments: readonly GeoGeometrySegment[]): GeoGeometrySegment[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { TextEntity } from '../types';
|
|
2
|
+
export declare function isStrictTextRoundtripEnabled(): boolean;
|
|
3
|
+
export declare function shouldAssertStrictTextRoundtrip(strictTextRoundtrip: boolean): strictTextRoundtrip is true;
|
|
4
|
+
export declare function assertStrictTextRoundtrip(stage: string, expected: readonly TextEntity[], actual: readonly TextEntity[]): void;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { GeoMetaSnapshot, LayerBlockUsage, LayerSnapshot, TextEntity } from '../types';
|
|
2
|
+
type ParsedHeaderCounts = Pick<GeoMetaSnapshot, 'entityCount' | 'lineCount' | 'fillCount' | 'dotCount' | 'textCount'>;
|
|
3
|
+
export interface InsertRuntimeGeometry {
|
|
4
|
+
readonly count: number;
|
|
5
|
+
readonly raw: Uint8Array;
|
|
6
|
+
readonly groupLayerEncoding?: GroupLayerEncoding;
|
|
7
|
+
}
|
|
8
|
+
export interface InsertRuntimeVariant {
|
|
9
|
+
readonly id: number;
|
|
10
|
+
readonly blockName: string;
|
|
11
|
+
readonly line: InsertRuntimeGeometry;
|
|
12
|
+
readonly fill: InsertRuntimeGeometry;
|
|
13
|
+
readonly dot: InsertRuntimeGeometry;
|
|
14
|
+
readonly texts: readonly TextEntity[];
|
|
15
|
+
}
|
|
16
|
+
export interface InsertRuntimeInstance {
|
|
17
|
+
readonly instanceId: number;
|
|
18
|
+
readonly variantId: number;
|
|
19
|
+
readonly matA: number;
|
|
20
|
+
readonly matB: number;
|
|
21
|
+
readonly matC: number;
|
|
22
|
+
readonly matD: number;
|
|
23
|
+
readonly tx: number;
|
|
24
|
+
readonly ty: number;
|
|
25
|
+
readonly insLayerIdx: number;
|
|
26
|
+
}
|
|
27
|
+
export interface InsertRuntime {
|
|
28
|
+
readonly layer0Index: number;
|
|
29
|
+
readonly variants: readonly InsertRuntimeVariant[];
|
|
30
|
+
readonly instances: readonly InsertRuntimeInstance[];
|
|
31
|
+
readonly textIndexesByInstanceId: ReadonlyMap<number, readonly number[]>;
|
|
32
|
+
readonly ownerInstanceIdByVariantOrdinal?: ReadonlyMap<string, number>;
|
|
33
|
+
}
|
|
34
|
+
export interface ParsedHeader {
|
|
35
|
+
readonly bounds: GeoMetaSnapshot['bounds'];
|
|
36
|
+
readonly entityCount: ParsedHeaderCounts['entityCount'];
|
|
37
|
+
readonly lineCount: ParsedHeaderCounts['lineCount'];
|
|
38
|
+
readonly fillCount: ParsedHeaderCounts['fillCount'];
|
|
39
|
+
readonly dotCount: ParsedHeaderCounts['dotCount'];
|
|
40
|
+
readonly textCount: ParsedHeaderCounts['textCount'];
|
|
41
|
+
readonly layers: readonly LayerSnapshot[];
|
|
42
|
+
readonly texts: readonly TextEntity[];
|
|
43
|
+
readonly layerBlockUsages?: ReadonlyMap<number, readonly LayerBlockUsage[]>;
|
|
44
|
+
readonly insertRuntime?: InsertRuntime;
|
|
45
|
+
readonly promotedInsertInstanceIds?: readonly number[];
|
|
46
|
+
}
|
|
47
|
+
export interface GeoGeometrySegment {
|
|
48
|
+
readonly startVertex: number;
|
|
49
|
+
readonly vertexCount: number;
|
|
50
|
+
readonly color: readonly [number, number, number];
|
|
51
|
+
readonly layerIndex: number;
|
|
52
|
+
readonly lineweightPx?: number;
|
|
53
|
+
}
|
|
54
|
+
export interface GeoGeometryChunk {
|
|
55
|
+
readonly pos: Float32Array;
|
|
56
|
+
readonly col?: Uint8Array;
|
|
57
|
+
readonly lay?: Uint8Array | Uint16Array;
|
|
58
|
+
readonly count: number;
|
|
59
|
+
readonly segments?: readonly GeoGeometrySegment[];
|
|
60
|
+
}
|
|
61
|
+
export type GroupLayerEncoding = 'u8' | 'u16' | 'u8_lw' | 'u16_lw';
|
|
62
|
+
export type GeoChunkKind = 'line' | 'fill' | 'dot' | 'text';
|
|
63
|
+
export interface LineGeoChunk {
|
|
64
|
+
readonly kind: 'line';
|
|
65
|
+
readonly payload: GeoGeometryChunk;
|
|
66
|
+
}
|
|
67
|
+
export interface FillGeoChunk {
|
|
68
|
+
readonly kind: 'fill';
|
|
69
|
+
readonly payload: GeoGeometryChunk;
|
|
70
|
+
}
|
|
71
|
+
export interface DotGeoChunk {
|
|
72
|
+
readonly kind: 'dot';
|
|
73
|
+
readonly payload: GeoGeometryChunk;
|
|
74
|
+
}
|
|
75
|
+
export interface TextGeoChunk {
|
|
76
|
+
readonly kind: 'text';
|
|
77
|
+
readonly payload: TextEntity;
|
|
78
|
+
}
|
|
79
|
+
export type GeoChunk = LineGeoChunk | FillGeoChunk | DotGeoChunk | TextGeoChunk;
|
|
80
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface RuntimeTextDecoder {
|
|
2
|
+
decode(input?: Uint8Array): string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the standard Encoding API without importing DOM or Node typings.
|
|
6
|
+
* Browsers, Web Workers and supported Node runtimes all provide this global.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createRuntimeTextDecoder(): RuntimeTextDecoder;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
export interface LayerMeta {
|
|
2
|
+
name: string;
|
|
3
|
+
color: [number, number, number];
|
|
4
|
+
lw_px: number;
|
|
5
|
+
visible?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Axis-aligned renderer-neutral bounds: [minX, minY, maxX, maxY]. */
|
|
8
|
+
export type CadBounds = readonly [number, number, number, number];
|
|
9
|
+
export interface LayerSnapshot {
|
|
10
|
+
readonly index: number;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly color: readonly [number, number, number];
|
|
13
|
+
readonly lw_px: number;
|
|
14
|
+
readonly visible: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface TextEntity {
|
|
17
|
+
t: string;
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
h: number;
|
|
21
|
+
r: number;
|
|
22
|
+
c: [number, number, number];
|
|
23
|
+
li: number;
|
|
24
|
+
iv?: number;
|
|
25
|
+
io?: number;
|
|
26
|
+
ha: 'left' | 'center' | 'right';
|
|
27
|
+
va: 'top' | 'middle' | 'bottom' | 'alphabetic';
|
|
28
|
+
lh: number;
|
|
29
|
+
w?: number;
|
|
30
|
+
wf?: number;
|
|
31
|
+
mx?: true;
|
|
32
|
+
my?: true;
|
|
33
|
+
}
|
|
34
|
+
export interface BlockVariantMeta {
|
|
35
|
+
id: number;
|
|
36
|
+
line_count: number;
|
|
37
|
+
fill_count: number;
|
|
38
|
+
dot_count: number;
|
|
39
|
+
name?: string;
|
|
40
|
+
block_name?: string;
|
|
41
|
+
blockName?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface ExternalGeometryStats {
|
|
44
|
+
line_count: number;
|
|
45
|
+
fill_count: number;
|
|
46
|
+
dot_count: number;
|
|
47
|
+
bbox: [number, number, number, number] | null;
|
|
48
|
+
own_bbox?: [number, number, number, number] | null;
|
|
49
|
+
}
|
|
50
|
+
export interface ExternalAnnotationStats extends ExternalGeometryStats {
|
|
51
|
+
text_count: number;
|
|
52
|
+
}
|
|
53
|
+
export type ExternalBlockVariantManifestEntry = {
|
|
54
|
+
id: number;
|
|
55
|
+
href: string;
|
|
56
|
+
raw_size: number;
|
|
57
|
+
line_count: number;
|
|
58
|
+
fill_count: number;
|
|
59
|
+
dot_count: number;
|
|
60
|
+
} | {
|
|
61
|
+
id: number;
|
|
62
|
+
href: string;
|
|
63
|
+
raw_size: number;
|
|
64
|
+
normal: ExternalGeometryStats;
|
|
65
|
+
annotation: ExternalAnnotationStats;
|
|
66
|
+
};
|
|
67
|
+
export interface ExternalSceneAnnotationManifestEntry extends ExternalAnnotationStats {
|
|
68
|
+
href: string;
|
|
69
|
+
raw_size: number;
|
|
70
|
+
}
|
|
71
|
+
export interface ExternalAnnotationsManifest {
|
|
72
|
+
scene?: ExternalSceneAnnotationManifestEntry;
|
|
73
|
+
}
|
|
74
|
+
export interface GeoMetaFeatures {
|
|
75
|
+
has_external_variant_geometry?: boolean;
|
|
76
|
+
has_external_annotations?: boolean;
|
|
77
|
+
has_variant_texts_in_sidecar?: boolean;
|
|
78
|
+
[key: string]: unknown;
|
|
79
|
+
}
|
|
80
|
+
export interface BlockInstanceBBox {
|
|
81
|
+
minX: number;
|
|
82
|
+
minY: number;
|
|
83
|
+
maxX: number;
|
|
84
|
+
maxY: number;
|
|
85
|
+
}
|
|
86
|
+
export interface InsertUsage {
|
|
87
|
+
instanceId: number;
|
|
88
|
+
variantId: number;
|
|
89
|
+
label: string;
|
|
90
|
+
tx: number;
|
|
91
|
+
ty: number;
|
|
92
|
+
canHighlight: boolean;
|
|
93
|
+
bbox?: BlockInstanceBBox;
|
|
94
|
+
}
|
|
95
|
+
export interface LayerBlockUsage {
|
|
96
|
+
variantId: number;
|
|
97
|
+
blockName: string;
|
|
98
|
+
instanceCount: number;
|
|
99
|
+
bboxes: BlockInstanceBBox[];
|
|
100
|
+
inserts: InsertUsage[];
|
|
101
|
+
}
|
|
102
|
+
export interface GeoMeta {
|
|
103
|
+
bounds: [number, number, number, number];
|
|
104
|
+
entity_count: number;
|
|
105
|
+
line_count: number;
|
|
106
|
+
fill_count: number;
|
|
107
|
+
dot_count?: number;
|
|
108
|
+
version?: number;
|
|
109
|
+
version_minor?: number;
|
|
110
|
+
encoding?: string;
|
|
111
|
+
features?: GeoMetaFeatures;
|
|
112
|
+
external_variants?: ExternalBlockVariantManifestEntry[];
|
|
113
|
+
external_annotations?: ExternalAnnotationsManifest;
|
|
114
|
+
layer0_index?: number;
|
|
115
|
+
block_variants?: BlockVariantMeta[];
|
|
116
|
+
instance_count?: number;
|
|
117
|
+
layers: LayerMeta[];
|
|
118
|
+
texts: readonly TextEntity[];
|
|
119
|
+
}
|
|
120
|
+
export type PackEncoding = 'flat' | 'instanced' | 'nested_instanced' | 'nested_instanced_external' | 'nested_instanced_external_annotations';
|
|
121
|
+
export interface GeoMetaSnapshot {
|
|
122
|
+
readonly bounds: readonly [number, number, number, number];
|
|
123
|
+
readonly entityCount: number;
|
|
124
|
+
readonly lineCount: number;
|
|
125
|
+
readonly fillCount: number;
|
|
126
|
+
readonly dotCount: number;
|
|
127
|
+
readonly textCount: number;
|
|
128
|
+
}
|
|
129
|
+
export interface GeoGroup {
|
|
130
|
+
pos: Float32Array;
|
|
131
|
+
col: Uint8Array;
|
|
132
|
+
lay: Uint8Array | Uint16Array;
|
|
133
|
+
count: number;
|
|
134
|
+
}
|
|
135
|
+
export interface ParsedGeoPayload {
|
|
136
|
+
meta: GeoMeta;
|
|
137
|
+
line: GeoGroup;
|
|
138
|
+
fill: GeoGroup;
|
|
139
|
+
dot: GeoGroup;
|
|
140
|
+
rawBytes: number;
|
|
141
|
+
}
|
|
142
|
+
export interface ViewportRect {
|
|
143
|
+
minX: number;
|
|
144
|
+
minY: number;
|
|
145
|
+
maxX: number;
|
|
146
|
+
maxY: number;
|
|
147
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ViewportRect } from '../types';
|
|
2
|
+
export interface InsertInstanceTransform {
|
|
3
|
+
readonly matA: number;
|
|
4
|
+
readonly matB: number;
|
|
5
|
+
readonly matC: number;
|
|
6
|
+
readonly matD: number;
|
|
7
|
+
readonly tx: number;
|
|
8
|
+
readonly ty: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function transformBBoxByInstance(localBBox: ViewportRect | null, instance: InsertInstanceTransform): ViewportRect | null;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ViewportRect } from '../types';
|
|
2
|
+
export interface ViewportRectTransform {
|
|
3
|
+
matA: number;
|
|
4
|
+
matB: number;
|
|
5
|
+
matC: number;
|
|
6
|
+
matD: number;
|
|
7
|
+
tx: number;
|
|
8
|
+
ty: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function cloneViewportRect(rect: ViewportRect | null | undefined): ViewportRect | null;
|
|
11
|
+
export declare function normalizeViewportRect(rect: ViewportRect | null | undefined): ViewportRect | null;
|
|
12
|
+
export declare function mergeViewportRects(current: ViewportRect | null | undefined, next: ViewportRect | null | undefined): ViewportRect | null;
|
|
13
|
+
export declare function viewportRectIntersects(a: ViewportRect, b: ViewportRect): boolean;
|
|
14
|
+
export declare function viewportRectContains(outer: ViewportRect, inner: ViewportRect): boolean;
|
|
15
|
+
export declare function viewportRectEquals(a: ViewportRect | null, b: ViewportRect | null): boolean;
|
|
16
|
+
export declare function intersectViewportRects(a: ViewportRect, b: ViewportRect): ViewportRect | null;
|
|
17
|
+
export declare function expandViewportRect(rect: ViewportRect, ratio: number): ViewportRect;
|
|
18
|
+
export declare function computeViewportRectFromPositions(positions: ArrayLike<number>, count: number, stride: number, xOffset?: number, yOffset?: number): ViewportRect | null;
|
|
19
|
+
export declare function transformViewportRect(rect: ViewportRect, transform: ViewportRectTransform): ViewportRect;
|
|
20
|
+
export declare function viewportRectDiagonal(rect: ViewportRect): number;
|
|
21
|
+
export declare function viewportRectCenterDistance(a: ViewportRect, b: ViewportRect): number;
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public CAD loading entry point.
|
|
3
|
+
*
|
|
4
|
+
* The package owns the complete browser loading lifecycle and returns a
|
|
5
|
+
* mountable Three.js GeoNode. Protocol-only consumers should import from
|
|
6
|
+
* `@nebula-spatial/cad-loader/core`.
|
|
7
|
+
*/
|
|
8
|
+
export { createLoadSession } from './session/load-session';
|
|
9
|
+
export type { CadExternalVariantFetchSource, CadLoadErrorEvent, CadLoadEvent, CadLoadFlowControlOptions, CadLoadGeometryEvent, CadLoadInsertEvent, CadLoadMetaEvent, CadLoadReadyEvent, CadLoadSession, CadLoadSessionOptions, CadLoadSource, CadLoadTextEvent, CadLoadVariantGeometry, CadLoadVariantGeometryChunk, CadLoadVariantRequestEvent, } from './session/load-session';
|
|
10
|
+
export { appendExternalVariantDeltaToGeoNode, assertValidSourceOrThrow, loadExternalVariantDeltaFromBuffer, loadGeo, normalizeGeoError, parseBuffer, parseBufferBounds, parseBufferHeader, readBufferExternalAnnotationManifest, readBufferExternalBlockAnnotations, readBufferExternalVariantDependencyPlan, readBufferExternalVariantManifest, } from './loader/geo-loader';
|
|
11
|
+
export type { ExternalVariantDependencyOptions, ExternalVariantDependencyPlan, ExternalVariantFetchSource, LoadExternalVariantDeltaFetchSourceOptions, LoadExternalVariantDeltaOptions, LoadGeoOptions, } from './loader/geo-loader';
|
|
12
|
+
export { GEO_NODE_STRUCTURE_CHANGE, GEO_NODE_VISUAL_CHANGE, GeoNode, } from './loader/internal/geo-node';
|
|
13
|
+
export type { ColorPipelineStatsSnapshot, GeoNodeInternalChange, GeoNodeInternalChangeKind, InsertInstanceMatrix2D, } from './loader/internal/geo-node';
|
|
14
|
+
export type { LineMemoryStatsSnapshot, LineCanonicalMemoryStats, } from './loader/internal/line-canonical';
|
|
15
|
+
export { readBlockAnnotationSidecar, readSceneAnnotationSidecar, } from './core';
|
|
16
|
+
export type { DecodedAnnotationSidecar, DxbsContainer, DxbsSectionEntry, ParsedHeader, } from './core';
|
|
17
|
+
export type { BlockInstanceBBox, BlockVariantMeta, ExternalAnnotationsManifest, ExternalAnnotationStats, ExternalBlockVariantManifestEntry, ExternalGeometryStats, ExternalSceneAnnotationManifestEntry, GeoGroup, GeoMeta, GeoMetaFeatures, GeoMetaSnapshot, GeoLoadSource, InsertUsage, LayerBlockUsage, LayerMeta, LayerSnapshot, LayerVertexChunk, LayerVertexStat, LineRenderMode, PackEncoding, ParsedGeoPayload, RenderDebugBreakdownEntry, SceneStats, SplitBlockLayerDetail, TextEntity, ViewportRect, } from './shared/types';
|
|
18
|
+
export { expandViewportRect, mergeViewportRects, viewportRectContains, viewportRectIntersects, } from './shared/utils/viewport-rect';
|
|
19
|
+
export { transformBBoxByInstance } from './shared/utils/insert-bbox';
|
|
20
|
+
export type { InsertInstanceTransform } from './shared/utils/insert-bbox';
|
|
21
|
+
export { GeoLoaderError } from './shared/errors';
|
|
22
|
+
export type { ResolveTextFont, ResolvedTextFont } from './shared/text-font';
|
|
23
|
+
export type { BlockGeometryKind, VariantGeometry, } from './scene/instancing/block-geometry-registry';
|
|
24
|
+
export type { InsertInstanceRecord } from './scene/instancing/insert-instance-table';
|
|
25
|
+
export { cadInsertSelectionEquals, pickCadInsertAtPoint, resolveCadInsertDetails, } from './selection/cad-insert-selection';
|
|
26
|
+
export type { CadInsertDetails, CadInsertPickOptions, CadInsertSelectionId, CadPoint2D, } from './selection/cad-insert-selection';
|