@sequent-org/ifc-viewer 1.2.4-ci.56.0 → 1.2.4-ci.58.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sequent-org/ifc-viewer",
3
3
  "private": false,
4
- "version": "1.2.4-ci.56.0",
4
+ "version": "1.2.4-ci.58.0",
5
5
  "type": "module",
6
6
  "description": "IFC 3D model viewer component for web applications - fully self-contained with local IFCLoader",
7
7
  "main": "src/index.js",
@@ -182,9 +182,7 @@ export class LabelPlacementController {
182
182
  }
183
183
 
184
184
  #log(event, payload) {
185
- try {
186
- this.logger?.log?.("[LabelPlacement]", event, payload);
187
- } catch (_) {}
185
+ // no-op: debug logging disabled
188
186
  }
189
187
 
190
188
  #dispatchLabelEvent(name, detail, legacyName = null) {
@@ -282,11 +280,16 @@ export class LabelPlacementController {
282
280
  planes?.[1]?.constant,
283
281
  planes?.[2]?.constant,
284
282
  ];
283
+ const clipPlanes = {
284
+ x: this.#getAxisPlaneState('x', planes?.[0]),
285
+ y: this.#getAxisPlaneState('y', planes?.[1]),
286
+ z: this.#getAxisPlaneState('z', planes?.[2]),
287
+ };
285
288
 
286
289
  return {
287
290
  camera: cam,
288
291
  modelTransform,
289
- clipping: { constants: clipConstants },
292
+ clipping: { constants: clipConstants, planes: clipPlanes },
290
293
  };
291
294
  }
292
295
 
@@ -361,17 +364,7 @@ export class LabelPlacementController {
361
364
  } catch (_) {}
362
365
 
363
366
  // 5) Клиппинг (как Home: сначала восстановили камеру+модель, затем planes)
364
- try {
365
- const constants = sceneState?.clipping?.constants || [];
366
- if (typeof viewer.setSection === "function") {
367
- ["x", "y", "z"].forEach((axis, i) => {
368
- const c = constants[i];
369
- const enabled = Number.isFinite(c);
370
- const dist = -Number(c);
371
- viewer.setSection(axis, enabled, enabled ? dist : 0);
372
- });
373
- }
374
- } catch (_) {}
367
+ this.#applyClippingFromState(sceneState);
375
368
 
376
369
  try { camera?.updateProjectionMatrix?.(); } catch (_) {}
377
370
  try { controls?.update?.(); } catch (_) {}
@@ -401,18 +394,65 @@ export class LabelPlacementController {
401
394
  const viewer = this.viewer;
402
395
  if (!viewer || !sceneState) return;
403
396
  try {
397
+ const byAxis = sceneState?.clipping?.planes || null;
398
+ if (byAxis && typeof viewer.setSection === "function") {
399
+ ["x", "y", "z"].forEach((axis) => {
400
+ const s = byAxis?.[axis] || null;
401
+ const enabled = !!s?.enabled;
402
+ const dist = Number(s?.distance);
403
+ viewer.setSection(axis, enabled, (enabled && Number.isFinite(dist)) ? dist : 0);
404
+ });
405
+ return;
406
+ }
404
407
  const constants = sceneState?.clipping?.constants || [];
405
408
  if (typeof viewer.setSection === "function") {
406
409
  ["x", "y", "z"].forEach((axis, i) => {
407
410
  const c = constants[i];
408
411
  const enabled = Number.isFinite(c);
409
- const dist = -Number(c);
410
- viewer.setSection(axis, enabled, enabled ? dist : 0);
412
+ const dist = this.#getAxisDistanceFromConstant(axis, c);
413
+ viewer.setSection(axis, enabled, (enabled && Number.isFinite(dist)) ? dist : 0);
411
414
  });
412
415
  }
413
416
  } catch (_) {}
414
417
  }
415
418
 
419
+ #getAxisPlaneState(axis, plane) {
420
+ if (!plane) return { enabled: false, distance: null };
421
+ const constant = plane.constant;
422
+ const enabled = Number.isFinite(constant);
423
+ if (!enabled) return { enabled: false, distance: null };
424
+ const distance = this.#getAxisDistanceFromPlane(axis, plane);
425
+ return { enabled: true, distance };
426
+ }
427
+
428
+ #getAxisDistanceFromPlane(axis, plane) {
429
+ if (!plane || !Number.isFinite(plane.constant)) return null;
430
+ const n = plane.normal || null;
431
+ const nx = Number(n?.x ?? 1);
432
+ const ny = Number(n?.y ?? 1);
433
+ const nz = Number(n?.z ?? 1);
434
+ const sign = (axis === 'x') ? (nx >= 0 ? 1 : -1)
435
+ : (axis === 'y') ? (ny >= 0 ? 1 : -1)
436
+ : (nz >= 0 ? 1 : -1);
437
+ return (sign > 0) ? -Number(plane.constant) : Number(plane.constant);
438
+ }
439
+
440
+ #getAxisDistanceFromConstant(axis, constant) {
441
+ if (!Number.isFinite(constant)) return null;
442
+ const viewer = this.viewer;
443
+ const planes = viewer?.clipping?.planes || [];
444
+ const idx = axis === 'x' ? 0 : axis === 'y' ? 1 : 2;
445
+ const plane = planes[idx] || null;
446
+ const n = plane?.normal || null;
447
+ const nx = Number(n?.x ?? 1);
448
+ const ny = Number(n?.y ?? 1);
449
+ const nz = Number(n?.z ?? 1);
450
+ const sign = (axis === 'x') ? (nx >= 0 ? 1 : -1)
451
+ : (axis === 'y') ? (ny >= 0 ? 1 : -1)
452
+ : (nz >= 0 ? 1 : -1);
453
+ return (sign > 0) ? -Number(constant) : Number(constant);
454
+ }
455
+
416
456
  #applyViewOffset(camera, viewOffset) {
417
457
  if (!camera || !viewOffset) return;
418
458
  try {
@@ -755,21 +795,7 @@ export class LabelPlacementController {
755
795
  ? target.closest(".ifc-label-marker")
756
796
  : null;
757
797
  if (!closestMarker) return;
758
- const payload = {
759
- type: e?.type,
760
- target,
761
- closestMarker,
762
- button: e?.button,
763
- buttons: e?.buttons,
764
- clientX: e?.clientX,
765
- clientY: e?.clientY,
766
- defaultPrevented: !!e?.defaultPrevented,
767
- };
768
- try {
769
- this.logger?.log?.("[LabelDnD]", scope, payload);
770
- } catch (_) {
771
- try { console.log("[LabelDnD]", scope, payload); } catch (_) {}
772
- }
798
+ // debug logging disabled
773
799
  };
774
800
 
775
801
  this._onDbgDocPointerDown = (e) => logDnDEvent("document", e);
@@ -1241,18 +1267,6 @@ export class LabelPlacementController {
1241
1267
  try { e.preventDefault(); } catch (_) {}
1242
1268
  try { e.stopPropagation(); } catch (_) {}
1243
1269
  try { e.stopImmediatePropagation?.(); } catch (_) {}
1244
- try {
1245
- this.logger?.log?.("[LabelDnD]", "marker", {
1246
- type: e?.type,
1247
- target: e?.target || null,
1248
- closestMarker: e?.target?.closest?.(".ifc-label-marker") || null,
1249
- button: e?.button,
1250
- buttons: e?.buttons,
1251
- clientX: e?.clientX,
1252
- clientY: e?.clientY,
1253
- defaultPrevented: !!e?.defaultPrevented,
1254
- });
1255
- } catch (_) {}
1256
1270
  // если были в режиме постановки — выходим
1257
1271
  try { this.cancelPlacement(); } catch (_) {}
1258
1272
 
@@ -1267,49 +1281,13 @@ export class LabelPlacementController {
1267
1281
  try { marker.el.addEventListener("pointerdown", onMarkerPointerDown); } catch (_) {}
1268
1282
  }
1269
1283
  const onMarkerPointerUp = (e) => {
1270
- try {
1271
- this.logger?.log?.("[LabelDnD]", "marker", {
1272
- type: e?.type,
1273
- target: e?.target || null,
1274
- closestMarker: e?.target?.closest?.(".ifc-label-marker") || null,
1275
- button: e?.button,
1276
- buttons: e?.buttons,
1277
- clientX: e?.clientX,
1278
- clientY: e?.clientY,
1279
- defaultPrevented: !!e?.defaultPrevented,
1280
- });
1281
- } catch (_) {}
1282
1284
  };
1283
1285
  try { marker.el.addEventListener("pointerup", onMarkerPointerUp, { capture: true, passive: true }); } catch (_) {
1284
1286
  try { marker.el.addEventListener("pointerup", onMarkerPointerUp); } catch (_) {}
1285
1287
  }
1286
1288
  const onMarkerDragStart = (e) => {
1287
- try {
1288
- this.logger?.log?.("[LabelDnD]", "marker", {
1289
- type: e?.type,
1290
- target: e?.target || null,
1291
- closestMarker: e?.target?.closest?.(".ifc-label-marker") || null,
1292
- button: e?.button,
1293
- buttons: e?.buttons,
1294
- clientX: e?.clientX,
1295
- clientY: e?.clientY,
1296
- defaultPrevented: !!e?.defaultPrevented,
1297
- });
1298
- } catch (_) {}
1299
1289
  };
1300
1290
  const onMarkerDragEnd = (e) => {
1301
- try {
1302
- this.logger?.log?.("[LabelDnD]", "marker", {
1303
- type: e?.type,
1304
- target: e?.target || null,
1305
- closestMarker: e?.target?.closest?.(".ifc-label-marker") || null,
1306
- button: e?.button,
1307
- buttons: e?.buttons,
1308
- clientX: e?.clientX,
1309
- clientY: e?.clientY,
1310
- defaultPrevented: !!e?.defaultPrevented,
1311
- });
1312
- } catch (_) {}
1313
1291
  };
1314
1292
  try { marker.el.addEventListener("dragstart", onMarkerDragStart); } catch (_) {}
1315
1293
  try { marker.el.addEventListener("dragend", onMarkerDragEnd); } catch (_) {}
@@ -1372,7 +1350,6 @@ export class LabelPlacementController {
1372
1350
  * @deprecated используйте setLabelMarkers
1373
1351
  */
1374
1352
  setCardMarkers(items) {
1375
- try { this.logger?.warn?.("[LabelPlacement] setCardMarkers is deprecated, use setLabelMarkers"); } catch (_) {}
1376
1353
  this.setLabelMarkers(items);
1377
1354
  }
1378
1355
 
@@ -1380,7 +1357,6 @@ export class LabelPlacementController {
1380
1357
  * @deprecated используйте getLabelMarkers
1381
1358
  */
1382
1359
  getCardMarkers() {
1383
- try { this.logger?.warn?.("[LabelPlacement] getCardMarkers is deprecated, use getLabelMarkers"); } catch (_) {}
1384
1360
  return this.getLabelMarkers();
1385
1361
  }
1386
1362
 
@@ -3464,7 +3464,7 @@ export class Viewer {
3464
3464
  const s = plane.normal.dot(c) + plane.constant;
3465
3465
  if (s < minSigned) minSigned = s;
3466
3466
  }
3467
- if (minSigned < 0) {
3467
+ if (minSigned < 0 && minSigned >= -1e-3) {
3468
3468
  plane.constant -= (minSigned - (-1e-4)); // сдвинем чуть так, чтобы все вершины имели s >= -1e-4
3469
3469
  }
3470
3470
  }