@ifc-lite/renderer 1.0.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/LICENSE +373 -0
- package/dist/camera.d.ts +178 -0
- package/dist/camera.d.ts.map +1 -0
- package/dist/camera.js +921 -0
- package/dist/camera.js.map +1 -0
- package/dist/device.d.ts +46 -0
- package/dist/device.d.ts.map +1 -0
- package/dist/device.js +135 -0
- package/dist/device.js.map +1 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +397 -0
- package/dist/index.js.map +1 -0
- package/dist/math.d.ts +23 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +102 -0
- package/dist/math.js.map +1 -0
- package/dist/picker.d.ts +22 -0
- package/dist/picker.d.ts.map +1 -0
- package/dist/picker.js +215 -0
- package/dist/picker.js.map +1 -0
- package/dist/pipeline.d.ts +40 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +266 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/post-processor.d.ts +32 -0
- package/dist/post-processor.d.ts.map +1 -0
- package/dist/post-processor.js +42 -0
- package/dist/post-processor.js.map +1 -0
- package/dist/scene.d.ts +35 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +46 -0
- package/dist/scene.js.map +1 -0
- package/dist/section-plane.d.ts +34 -0
- package/dist/section-plane.d.ts.map +1 -0
- package/dist/section-plane.js +232 -0
- package/dist/section-plane.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +47 -0
package/dist/scene.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export class Scene {
|
|
5
|
+
meshes = [];
|
|
6
|
+
/**
|
|
7
|
+
* Add mesh to scene
|
|
8
|
+
*/
|
|
9
|
+
addMesh(mesh) {
|
|
10
|
+
this.meshes.push(mesh);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get all meshes
|
|
14
|
+
*/
|
|
15
|
+
getMeshes() {
|
|
16
|
+
return this.meshes;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Clear scene
|
|
20
|
+
*/
|
|
21
|
+
clear() {
|
|
22
|
+
for (const mesh of this.meshes) {
|
|
23
|
+
mesh.vertexBuffer.destroy();
|
|
24
|
+
mesh.indexBuffer.destroy();
|
|
25
|
+
// Destroy per-mesh uniform buffer if it exists
|
|
26
|
+
if (mesh.uniformBuffer) {
|
|
27
|
+
mesh.uniformBuffer.destroy();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
this.meshes = [];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Calculate bounding box
|
|
34
|
+
*/
|
|
35
|
+
getBounds() {
|
|
36
|
+
if (this.meshes.length === 0)
|
|
37
|
+
return null;
|
|
38
|
+
// For MVP, return a simple bounding box
|
|
39
|
+
// In production, this would compute from actual vertex data
|
|
40
|
+
return {
|
|
41
|
+
min: { x: -10, y: -10, z: -10 },
|
|
42
|
+
max: { x: 10, y: 10, z: 10 },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,MAAM,OAAO,KAAK;IACR,MAAM,GAAW,EAAE,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,IAAU;QAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3B,+CAA+C;YAC/C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,wCAAwC;QACxC,4DAA4D;QAC5D,OAAO;YACL,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YAC/B,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SAC7B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section plane renderer - renders a visible plane at the section cut location
|
|
3
|
+
*/
|
|
4
|
+
export interface SectionPlaneRenderOptions {
|
|
5
|
+
axis: 'x' | 'y' | 'z';
|
|
6
|
+
position: number;
|
|
7
|
+
bounds: {
|
|
8
|
+
min: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
z: number;
|
|
12
|
+
};
|
|
13
|
+
max: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
z: number;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
viewProj: Float32Array;
|
|
20
|
+
}
|
|
21
|
+
export declare class SectionPlaneRenderer {
|
|
22
|
+
private device;
|
|
23
|
+
private pipeline;
|
|
24
|
+
private vertexBuffer;
|
|
25
|
+
private uniformBuffer;
|
|
26
|
+
private bindGroup;
|
|
27
|
+
private format;
|
|
28
|
+
private initialized;
|
|
29
|
+
constructor(device: GPUDevice, format: GPUTextureFormat);
|
|
30
|
+
private init;
|
|
31
|
+
render(encoder: GPUCommandEncoder, textureView: GPUTextureView, depthView: GPUTextureView, options: SectionPlaneRenderOptions): void;
|
|
32
|
+
private calculatePlaneVertices;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=section-plane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-plane.d.ts","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB;IAKvD,OAAO,CAAC,IAAI;IAyHZ,MAAM,CACJ,OAAO,EAAE,iBAAiB,EAC1B,WAAW,EAAE,cAAc,EAC3B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,yBAAyB,GACjC,IAAI;IA4CP,OAAO,CAAC,sBAAsB;CAsE/B"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
|
+
export class SectionPlaneRenderer {
|
|
5
|
+
device;
|
|
6
|
+
pipeline = null;
|
|
7
|
+
vertexBuffer = null;
|
|
8
|
+
uniformBuffer = null;
|
|
9
|
+
bindGroup = null;
|
|
10
|
+
format;
|
|
11
|
+
initialized = false;
|
|
12
|
+
constructor(device, format) {
|
|
13
|
+
this.device = device;
|
|
14
|
+
this.format = format;
|
|
15
|
+
}
|
|
16
|
+
init() {
|
|
17
|
+
if (this.initialized)
|
|
18
|
+
return;
|
|
19
|
+
// Create shader for section plane rendering
|
|
20
|
+
const shaderModule = this.device.createShaderModule({
|
|
21
|
+
code: `
|
|
22
|
+
struct Uniforms {
|
|
23
|
+
viewProj: mat4x4<f32>,
|
|
24
|
+
planeColor: vec4<f32>,
|
|
25
|
+
}
|
|
26
|
+
@binding(0) @group(0) var<uniform> uniforms: Uniforms;
|
|
27
|
+
|
|
28
|
+
struct VertexOutput {
|
|
29
|
+
@builtin(position) position: vec4<f32>,
|
|
30
|
+
@location(0) uv: vec2<f32>,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@vertex
|
|
34
|
+
fn vs_main(@location(0) position: vec3<f32>, @location(1) uv: vec2<f32>) -> VertexOutput {
|
|
35
|
+
var output: VertexOutput;
|
|
36
|
+
output.position = uniforms.viewProj * vec4<f32>(position, 1.0);
|
|
37
|
+
output.uv = uv;
|
|
38
|
+
return output;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@fragment
|
|
42
|
+
fn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {
|
|
43
|
+
// Create a grid pattern on the plane
|
|
44
|
+
let gridSize = 0.05;
|
|
45
|
+
let lineWidth = 0.02;
|
|
46
|
+
|
|
47
|
+
let gridX = abs(fract(input.uv.x / gridSize + 0.5) - 0.5);
|
|
48
|
+
let gridY = abs(fract(input.uv.y / gridSize + 0.5) - 0.5);
|
|
49
|
+
|
|
50
|
+
let gridLine = min(gridX, gridY);
|
|
51
|
+
let isGridLine = gridLine < lineWidth;
|
|
52
|
+
|
|
53
|
+
// Edge fade for softer appearance
|
|
54
|
+
let edgeFade = smoothstep(0.0, 0.1, min(input.uv.x, min(input.uv.y, min(1.0 - input.uv.x, 1.0 - input.uv.y))));
|
|
55
|
+
|
|
56
|
+
var color = uniforms.planeColor;
|
|
57
|
+
if (isGridLine) {
|
|
58
|
+
color = vec4<f32>(color.rgb * 1.3, color.a * 1.5);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
color.a *= edgeFade;
|
|
62
|
+
|
|
63
|
+
return color;
|
|
64
|
+
}
|
|
65
|
+
`,
|
|
66
|
+
});
|
|
67
|
+
// Create render pipeline with alpha blending
|
|
68
|
+
this.pipeline = this.device.createRenderPipeline({
|
|
69
|
+
layout: 'auto',
|
|
70
|
+
vertex: {
|
|
71
|
+
module: shaderModule,
|
|
72
|
+
entryPoint: 'vs_main',
|
|
73
|
+
buffers: [
|
|
74
|
+
{
|
|
75
|
+
arrayStride: 20, // 3 position + 2 uv = 5 floats
|
|
76
|
+
attributes: [
|
|
77
|
+
{ shaderLocation: 0, offset: 0, format: 'float32x3' },
|
|
78
|
+
{ shaderLocation: 1, offset: 12, format: 'float32x2' },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
fragment: {
|
|
84
|
+
module: shaderModule,
|
|
85
|
+
entryPoint: 'fs_main',
|
|
86
|
+
targets: [{
|
|
87
|
+
format: this.format,
|
|
88
|
+
blend: {
|
|
89
|
+
color: {
|
|
90
|
+
srcFactor: 'src-alpha',
|
|
91
|
+
dstFactor: 'one-minus-src-alpha',
|
|
92
|
+
operation: 'add',
|
|
93
|
+
},
|
|
94
|
+
alpha: {
|
|
95
|
+
srcFactor: 'one',
|
|
96
|
+
dstFactor: 'one-minus-src-alpha',
|
|
97
|
+
operation: 'add',
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
}],
|
|
101
|
+
},
|
|
102
|
+
primitive: {
|
|
103
|
+
topology: 'triangle-list',
|
|
104
|
+
cullMode: 'none',
|
|
105
|
+
},
|
|
106
|
+
depthStencil: {
|
|
107
|
+
format: 'depth24plus',
|
|
108
|
+
depthWriteEnabled: false, // Don't write to depth buffer (transparent)
|
|
109
|
+
depthCompare: 'less-equal',
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
// Create vertex buffer (6 vertices for 2 triangles)
|
|
113
|
+
this.vertexBuffer = this.device.createBuffer({
|
|
114
|
+
size: 6 * 5 * 4, // 6 vertices * 5 floats * 4 bytes
|
|
115
|
+
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
|
|
116
|
+
});
|
|
117
|
+
// Create uniform buffer
|
|
118
|
+
this.uniformBuffer = this.device.createBuffer({
|
|
119
|
+
size: 80, // mat4x4 (64) + vec4 (16) = 80 bytes
|
|
120
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
121
|
+
});
|
|
122
|
+
// Create bind group
|
|
123
|
+
this.bindGroup = this.device.createBindGroup({
|
|
124
|
+
layout: this.pipeline.getBindGroupLayout(0),
|
|
125
|
+
entries: [
|
|
126
|
+
{ binding: 0, resource: { buffer: this.uniformBuffer } },
|
|
127
|
+
],
|
|
128
|
+
});
|
|
129
|
+
this.initialized = true;
|
|
130
|
+
}
|
|
131
|
+
render(encoder, textureView, depthView, options) {
|
|
132
|
+
this.init();
|
|
133
|
+
if (!this.pipeline || !this.vertexBuffer || !this.uniformBuffer || !this.bindGroup) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const { axis, position, bounds, viewProj } = options;
|
|
137
|
+
// Calculate plane vertices based on axis and bounds
|
|
138
|
+
const vertices = this.calculatePlaneVertices(axis, position, bounds);
|
|
139
|
+
this.device.queue.writeBuffer(this.vertexBuffer, 0, vertices);
|
|
140
|
+
// Update uniforms
|
|
141
|
+
const uniforms = new Float32Array(20);
|
|
142
|
+
uniforms.set(viewProj, 0);
|
|
143
|
+
// Plane color - semi-transparent blue/cyan
|
|
144
|
+
uniforms[16] = 0.2; // R
|
|
145
|
+
uniforms[17] = 0.6; // G
|
|
146
|
+
uniforms[18] = 0.9; // B
|
|
147
|
+
uniforms[19] = 0.3; // A (transparency)
|
|
148
|
+
this.device.queue.writeBuffer(this.uniformBuffer, 0, uniforms);
|
|
149
|
+
// Render the section plane
|
|
150
|
+
const pass = encoder.beginRenderPass({
|
|
151
|
+
colorAttachments: [{
|
|
152
|
+
view: textureView,
|
|
153
|
+
loadOp: 'load', // Keep existing content
|
|
154
|
+
storeOp: 'store',
|
|
155
|
+
}],
|
|
156
|
+
depthStencilAttachment: {
|
|
157
|
+
view: depthView,
|
|
158
|
+
depthLoadOp: 'load',
|
|
159
|
+
depthStoreOp: 'store',
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
pass.setPipeline(this.pipeline);
|
|
163
|
+
pass.setBindGroup(0, this.bindGroup);
|
|
164
|
+
pass.setVertexBuffer(0, this.vertexBuffer);
|
|
165
|
+
pass.draw(6); // 2 triangles
|
|
166
|
+
pass.end();
|
|
167
|
+
}
|
|
168
|
+
calculatePlaneVertices(axis, position, bounds) {
|
|
169
|
+
const { min, max } = bounds;
|
|
170
|
+
// Add some padding to make the plane slightly larger than the model
|
|
171
|
+
const padding = 0.1;
|
|
172
|
+
const sizeX = (max.x - min.x) * (1 + padding);
|
|
173
|
+
const sizeY = (max.y - min.y) * (1 + padding);
|
|
174
|
+
const sizeZ = (max.z - min.z) * (1 + padding);
|
|
175
|
+
const centerX = (min.x + max.x) / 2;
|
|
176
|
+
const centerY = (min.y + max.y) / 2;
|
|
177
|
+
const centerZ = (min.z + max.z) / 2;
|
|
178
|
+
// Calculate the plane position along the axis
|
|
179
|
+
const t = position / 100;
|
|
180
|
+
let vertices = [];
|
|
181
|
+
if (axis === 'x') {
|
|
182
|
+
const x = min.x + t * (max.x - min.x);
|
|
183
|
+
const halfY = sizeY / 2;
|
|
184
|
+
const halfZ = sizeZ / 2;
|
|
185
|
+
// Quad facing X axis (vertices in YZ plane)
|
|
186
|
+
vertices = [
|
|
187
|
+
// Triangle 1
|
|
188
|
+
x, centerY - halfY, centerZ - halfZ, 0, 0,
|
|
189
|
+
x, centerY + halfY, centerZ - halfZ, 1, 0,
|
|
190
|
+
x, centerY + halfY, centerZ + halfZ, 1, 1,
|
|
191
|
+
// Triangle 2
|
|
192
|
+
x, centerY - halfY, centerZ - halfZ, 0, 0,
|
|
193
|
+
x, centerY + halfY, centerZ + halfZ, 1, 1,
|
|
194
|
+
x, centerY - halfY, centerZ + halfZ, 0, 1,
|
|
195
|
+
];
|
|
196
|
+
}
|
|
197
|
+
else if (axis === 'y') {
|
|
198
|
+
const y = min.y + t * (max.y - min.y);
|
|
199
|
+
const halfX = sizeX / 2;
|
|
200
|
+
const halfZ = sizeZ / 2;
|
|
201
|
+
// Quad facing Y axis (vertices in XZ plane)
|
|
202
|
+
vertices = [
|
|
203
|
+
// Triangle 1
|
|
204
|
+
centerX - halfX, y, centerZ - halfZ, 0, 0,
|
|
205
|
+
centerX + halfX, y, centerZ - halfZ, 1, 0,
|
|
206
|
+
centerX + halfX, y, centerZ + halfZ, 1, 1,
|
|
207
|
+
// Triangle 2
|
|
208
|
+
centerX - halfX, y, centerZ - halfZ, 0, 0,
|
|
209
|
+
centerX + halfX, y, centerZ + halfZ, 1, 1,
|
|
210
|
+
centerX - halfX, y, centerZ + halfZ, 0, 1,
|
|
211
|
+
];
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
const z = min.z + t * (max.z - min.z);
|
|
215
|
+
const halfX = sizeX / 2;
|
|
216
|
+
const halfY = sizeY / 2;
|
|
217
|
+
// Quad facing Z axis (vertices in XY plane)
|
|
218
|
+
vertices = [
|
|
219
|
+
// Triangle 1
|
|
220
|
+
centerX - halfX, centerY - halfY, z, 0, 0,
|
|
221
|
+
centerX + halfX, centerY - halfY, z, 1, 0,
|
|
222
|
+
centerX + halfX, centerY + halfY, z, 1, 1,
|
|
223
|
+
// Triangle 2
|
|
224
|
+
centerX - halfX, centerY - halfY, z, 0, 0,
|
|
225
|
+
centerX + halfX, centerY + halfY, z, 1, 1,
|
|
226
|
+
centerX - halfX, centerY + halfY, z, 0, 1,
|
|
227
|
+
];
|
|
228
|
+
}
|
|
229
|
+
return new Float32Array(vertices);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=section-plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-plane.js","sourceRoot":"","sources":["../src/section-plane.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderer types for IFC-Lite
|
|
3
|
+
*/
|
|
4
|
+
export interface Vec3 {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
z: number;
|
|
8
|
+
}
|
|
9
|
+
export interface Mat4 {
|
|
10
|
+
m: Float32Array;
|
|
11
|
+
}
|
|
12
|
+
export interface Camera {
|
|
13
|
+
position: Vec3;
|
|
14
|
+
target: Vec3;
|
|
15
|
+
up: Vec3;
|
|
16
|
+
fov: number;
|
|
17
|
+
aspect: number;
|
|
18
|
+
near: number;
|
|
19
|
+
far: number;
|
|
20
|
+
}
|
|
21
|
+
export interface Material {
|
|
22
|
+
baseColor: [number, number, number, number];
|
|
23
|
+
metallic: number;
|
|
24
|
+
roughness: number;
|
|
25
|
+
transparency?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface Mesh {
|
|
28
|
+
expressId: number;
|
|
29
|
+
vertexBuffer: GPUBuffer;
|
|
30
|
+
indexBuffer: GPUBuffer;
|
|
31
|
+
indexCount: number;
|
|
32
|
+
transform: Mat4;
|
|
33
|
+
color: [number, number, number, number];
|
|
34
|
+
material?: Material;
|
|
35
|
+
uniformBuffer?: GPUBuffer;
|
|
36
|
+
bindGroup?: GPUBindGroup;
|
|
37
|
+
bounds?: {
|
|
38
|
+
min: [number, number, number];
|
|
39
|
+
max: [number, number, number];
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface SectionPlane {
|
|
43
|
+
axis: 'x' | 'y' | 'z';
|
|
44
|
+
position: number;
|
|
45
|
+
enabled: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface RenderOptions {
|
|
48
|
+
clearColor?: [number, number, number, number];
|
|
49
|
+
enableDepthTest?: boolean;
|
|
50
|
+
enableFrustumCulling?: boolean;
|
|
51
|
+
spatialIndex?: import('@ifc-lite/spatial').SpatialIndex;
|
|
52
|
+
hiddenIds?: Set<number>;
|
|
53
|
+
isolatedIds?: Set<number> | null;
|
|
54
|
+
selectedId?: number | null;
|
|
55
|
+
selectedIds?: Set<number>;
|
|
56
|
+
sectionPlane?: SectionPlane;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,YAAY,CAAC;CACjB;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;IACb,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,YAAY,CAAC;IAEzB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAC3E;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,mBAAmB,EAAE,YAAY,CAAC;IAExD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAE1B,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ifc-lite/renderer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "WebGPU renderer for IFC-Lite",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@ifc-lite/spatial": "1.0.0"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"typescript": "^5.3.0"
|
|
19
|
+
},
|
|
20
|
+
"license": "MPL-2.0",
|
|
21
|
+
"author": "Louis True",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://github.com/louistrue/ifc-lite.git",
|
|
25
|
+
"directory": "packages/renderer"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://louistrue.github.io/ifc-lite/",
|
|
28
|
+
"bugs": "https://github.com/louistrue/ifc-lite/issues",
|
|
29
|
+
"keywords": [
|
|
30
|
+
"ifc",
|
|
31
|
+
"bim",
|
|
32
|
+
"renderer",
|
|
33
|
+
"webgpu",
|
|
34
|
+
"aec"
|
|
35
|
+
],
|
|
36
|
+
"publishConfig": {
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"README.md"
|
|
42
|
+
],
|
|
43
|
+
"scripts": {
|
|
44
|
+
"build": "tsc",
|
|
45
|
+
"dev": "tsc --watch"
|
|
46
|
+
}
|
|
47
|
+
}
|