@kimap/indoor-positioning-sdk-vue2 3.1.7 → 3.1.10

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 (2) hide show
  1. package/package.json +1 -1
  2. package/src/KimapCore.js +87 -13
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kimap/indoor-positioning-sdk-vue2",
3
- "version": "3.1.7",
3
+ "version": "3.1.10",
4
4
  "description": "Vue2自包含室内定位SDK - 完全兼容Webpack3+Babel6 | Vue2 Self-Contained Indoor Positioning SDK",
5
5
  "main": "index.js",
6
6
  "files": [
package/src/KimapCore.js CHANGED
@@ -303,6 +303,15 @@ SceneCore.prototype.setCameraPosition = function() {
303
303
  var maxX = this.coordinateSystem.maxX;
304
304
  var maxY = this.coordinateSystem.maxY;
305
305
 
306
+ // 如果 maxX 或 maxY 未定义,使用默认值(稍后会根据实际模型尺寸重新调整)
307
+ if (maxX === undefined || maxY === undefined) {
308
+ console.log('⚠️ 坐标系统尺寸未定义,使用默认相机位置(将在模型加载后自动调整)');
309
+ // 使用一个合理的默认位置:从斜上方俯视原点
310
+ this.camera.position.set(origin.x, 15, origin.z + 10);
311
+ this.camera.lookAt(origin.x, 0, origin.z);
312
+ return;
313
+ }
314
+
306
315
  var centerX = origin.x + maxX / 2;
307
316
  var centerZ = origin.z;
308
317
  var distance = Math.max(maxX, maxY) * 1.5;
@@ -497,19 +506,47 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
497
506
  self.mapModel = object;
498
507
  self.scene.add(self.mapModel);
499
508
 
500
- // 计算包围盒并调整模型位置,使其居中对齐
509
+ // 计算包围盒
501
510
  var box = new THREE.Box3().setFromObject(self.mapModel);
502
511
  var center = new THREE.Vector3();
503
512
  box.getCenter(center);
504
513
 
514
+ console.log('📦 模型原始包围盒:', {
515
+ min: { x: box.min.x.toFixed(2), y: box.min.y.toFixed(2), z: box.min.z.toFixed(2) },
516
+ max: { x: box.max.x.toFixed(2), y: box.max.y.toFixed(2), z: box.max.z.toFixed(2) },
517
+ center: { x: center.x.toFixed(2), y: center.y.toFixed(2), z: center.z.toFixed(2) }
518
+ });
519
+
520
+ // 如果有边界信息,使用边界信息来定位模型
521
+ // 目标:让模型的 min 点对齐到边界的 min 点
505
522
  var origin = self.coordinateSystem.origin;
506
- self.mapModel.position.set(
507
- origin.x - center.x, // X方向居中
508
- origin.y - box.min.y, // Y方向:底部对齐地面
509
- origin.z - center.z // Z方向居中
510
- );
523
+ var offsetX, offsetY, offsetZ;
524
+
525
+ if (border) {
526
+ // 计算需要的偏移量:将模型的 min 点移动到边界的 min 点
527
+ offsetX = origin.x + border.min.x - box.min.x;
528
+ offsetY = origin.y + border.min.y - box.min.y;
529
+ offsetZ = origin.z + border.min.z - box.min.z;
530
+
531
+ console.log('✅ 使用边界信息定位模型');
532
+ console.log('🎯 目标边界:', border);
533
+ } else {
534
+ // 没有边界信息,使用传统的居中对齐方式
535
+ offsetX = origin.x - center.x;
536
+ offsetY = origin.y - box.min.y;
537
+ offsetZ = origin.z - center.z;
538
+
539
+ console.log('⚠️ 未找到边界信息,使用居中对齐方式');
540
+ }
511
541
 
512
- console.log('✅ 模型已居中对齐到原点');
542
+ self.mapModel.position.set(offsetX, offsetY, offsetZ);
543
+
544
+ console.log('📍 模型位置偏移:', {
545
+ x: offsetX.toFixed(2),
546
+ y: offsetY.toFixed(2),
547
+ z: offsetZ.toFixed(2)
548
+ });
549
+ console.log('✅ 模型已对齐');
513
550
 
514
551
  // 统计模型信息
515
552
  var meshCount = 0;
@@ -618,37 +655,74 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
618
655
 
619
656
  // 基于模型包围盒自动调整相机位置和控制器目标,避免依赖配置中的 maxX/maxY
620
657
  try {
658
+ console.log('=== 开始自动调整相机位置 ===');
659
+
621
660
  // 使用模型当前位置重新计算包围盒和中心
622
661
  var finalBox = new THREE.Box3().setFromObject(self.mapModel);
623
662
  var finalCenter = new THREE.Vector3();
624
663
  finalBox.getCenter(finalCenter);
664
+
665
+ console.log('📦 模型最终包围盒:', {
666
+ min: { x: finalBox.min.x.toFixed(2), y: finalBox.min.y.toFixed(2), z: finalBox.min.z.toFixed(2) },
667
+ max: { x: finalBox.max.x.toFixed(2), y: finalBox.max.y.toFixed(2), z: finalBox.max.z.toFixed(2) }
668
+ });
669
+ console.log('🎯 模型中心:', {
670
+ x: finalCenter.x.toFixed(2),
671
+ y: finalCenter.y.toFixed(2),
672
+ z: finalCenter.z.toFixed(2)
673
+ });
625
674
 
626
675
  var finalSize = new THREE.Vector3();
627
676
  finalBox.getSize(finalSize);
628
677
  var maxSize = Math.max(finalSize.x, finalSize.z);
678
+
679
+ console.log('📏 模型尺寸:', {
680
+ x: finalSize.x.toFixed(2),
681
+ y: finalSize.y.toFixed(2),
682
+ z: finalSize.z.toFixed(2),
683
+ maxSize: maxSize.toFixed(2)
684
+ });
629
685
 
630
686
  // 根据模型尺寸计算一个合理的视距
631
687
  var distance = maxSize * 1.5;
688
+
689
+ console.log('📹 计算相机距离:', distance.toFixed(2));
632
690
 
633
691
  // 相机从斜上方俯视模型中心
634
- self.camera.position.set(
635
- finalCenter.x,
636
- finalCenter.y + distance,
637
- finalCenter.z + distance * 0.5
638
- );
692
+ var cameraX = finalCenter.x;
693
+ var cameraY = finalCenter.y + distance;
694
+ var cameraZ = finalCenter.z + distance * 0.5;
695
+
696
+ self.camera.position.set(cameraX, cameraY, cameraZ);
639
697
  self.camera.lookAt(finalCenter.x, finalCenter.y, finalCenter.z);
698
+
699
+ console.log('📹 相机位置:', {
700
+ x: cameraX.toFixed(2),
701
+ y: cameraY.toFixed(2),
702
+ z: cameraZ.toFixed(2)
703
+ });
704
+ console.log('👀 相机朝向:', {
705
+ x: finalCenter.x.toFixed(2),
706
+ y: finalCenter.y.toFixed(2),
707
+ z: finalCenter.z.toFixed(2)
708
+ });
640
709
 
641
710
  // 更新控制器目标为模型中心
642
711
  if (self.controls) {
643
712
  self.controls.target.copy(finalCenter);
644
713
  self.controls.update();
714
+ console.log('🎮 控制器目标已更新');
645
715
  }
646
716
 
647
717
  // 更新坐标系范围为模型的实际尺寸,供其它功能使用
648
718
  self.coordinateSystem.maxX = finalSize.x;
649
719
  self.coordinateSystem.maxY = finalSize.z;
720
+
721
+ console.log('✅ 相机自动调整完成');
722
+ console.log('=========================');
650
723
  } catch (e) {
651
- console.warn('根据模型自动调整相机位置失败:', e && e.message ? e.message : e);
724
+ console.error('根据模型自动调整相机位置失败:', e && e.message ? e.message : e);
725
+ console.error('错误堆栈:', e.stack);
652
726
  }
653
727
 
654
728
  resolve();