@kimap/indoor-positioning-sdk-vue2 3.1.12 → 3.1.13

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 +15 -113
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kimap/indoor-positioning-sdk-vue2",
3
- "version": "3.1.12",
3
+ "version": "3.1.13",
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,15 +303,6 @@ 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
-
315
306
  var centerX = origin.x + maxX / 2;
316
307
  var centerZ = origin.z;
317
308
  var distance = Math.max(maxX, maxY) * 1.5;
@@ -506,47 +497,19 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
506
497
  self.mapModel = object;
507
498
  self.scene.add(self.mapModel);
508
499
 
509
- // 计算包围盒
500
+ // 计算包围盒并调整模型位置,使其居中对齐
510
501
  var box = new THREE.Box3().setFromObject(self.mapModel);
511
502
  var center = new THREE.Vector3();
512
503
  box.getCenter(center);
513
504
 
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 点
522
505
  var origin = self.coordinateSystem.origin;
523
- var offsetX, offsetY, offsetZ;
524
-
525
- if (borderInfo) {
526
- // 计算需要的偏移量:将模型的 min 点移动到边界的 min 点
527
- offsetX = origin.x + borderInfo.min.x - box.min.x;
528
- offsetY = origin.y + borderInfo.min.y - box.min.y;
529
- offsetZ = origin.z + borderInfo.min.z - box.min.z;
530
-
531
- console.log('✅ 使用边界信息定位模型');
532
- console.log('🎯 目标边界:', borderInfo);
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
- }
541
-
542
- self.mapModel.position.set(offsetX, offsetY, offsetZ);
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
+ );
543
511
 
544
- console.log('📍 模型位置偏移:', {
545
- x: offsetX.toFixed(2),
546
- y: offsetY.toFixed(2),
547
- z: offsetZ.toFixed(2)
548
- });
549
- console.log('✅ 模型已对齐');
512
+ console.log(' 模型已居中对齐到原点');
550
513
 
551
514
  // 统计模型信息
552
515
  var meshCount = 0;
@@ -655,98 +618,37 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
655
618
 
656
619
  // 基于模型包围盒自动调整相机位置和控制器目标,避免依赖配置中的 maxX/maxY
657
620
  try {
658
- console.log('=== 开始自动调整相机位置 ===');
659
-
660
- // 🔧 修复:只计算可见mesh的包围盒,排除隐藏的地平面
661
- var finalBox = new THREE.Box3();
662
- var visibleMeshCount = 0;
663
-
664
- self.mapModel.traverse(function(child) {
665
- if (child instanceof THREE.Mesh && child.visible) {
666
- // 排除隐藏的交互层
667
- if (child.name === 'HiddenGroundPlane' || child.name.includes('InteractionLayer')) {
668
- return;
669
- }
670
-
671
- // 计算该mesh的包围盒并扩展总包围盒
672
- var meshBox = new THREE.Box3().setFromObject(child);
673
- finalBox.union(meshBox);
674
- visibleMeshCount++;
675
- }
676
- });
677
-
678
- console.log('✅ 计算了 ' + visibleMeshCount + ' 个可见mesh的包围盒');
679
-
621
+ // 使用模型当前位置重新计算包围盒和中心
622
+ var finalBox = new THREE.Box3().setFromObject(self.mapModel);
680
623
  var finalCenter = new THREE.Vector3();
681
624
  finalBox.getCenter(finalCenter);
682
-
683
- console.log('📦 可见模型包围盒:', {
684
- min: { x: finalBox.min.x.toFixed(2), y: finalBox.min.y.toFixed(2), z: finalBox.min.z.toFixed(2) },
685
- max: { x: finalBox.max.x.toFixed(2), y: finalBox.max.y.toFixed(2), z: finalBox.max.z.toFixed(2) }
686
- });
687
- console.log('🎯 可见模型中心:', {
688
- x: finalCenter.x.toFixed(2),
689
- y: finalCenter.y.toFixed(2),
690
- z: finalCenter.z.toFixed(2)
691
- });
692
625
 
693
626
  var finalSize = new THREE.Vector3();
694
627
  finalBox.getSize(finalSize);
695
628
  var maxSize = Math.max(finalSize.x, finalSize.z);
696
-
697
- console.log('📏 可见模型尺寸:', {
698
- x: finalSize.x.toFixed(2),
699
- y: finalSize.y.toFixed(2),
700
- z: finalSize.z.toFixed(2),
701
- maxSize: maxSize.toFixed(2)
702
- });
703
629
 
704
630
  // 根据模型尺寸计算一个合理的视距
705
631
  var distance = maxSize * 1.5;
706
-
707
- // 确保最小距离,避免相机太近
708
- if (distance < 10) {
709
- distance = 10;
710
- console.log('⚠️ 相机距离太近,调整为最小值: 10');
711
- }
712
-
713
- console.log('📹 计算相机距离:', distance.toFixed(2));
714
632
 
715
633
  // 相机从斜上方俯视模型中心
716
- var cameraX = finalCenter.x;
717
- var cameraY = finalCenter.y + distance;
718
- var cameraZ = finalCenter.z + distance * 0.5;
719
-
720
- self.camera.position.set(cameraX, cameraY, cameraZ);
634
+ self.camera.position.set(
635
+ finalCenter.x,
636
+ finalCenter.y + distance,
637
+ finalCenter.z + distance * 0.5
638
+ );
721
639
  self.camera.lookAt(finalCenter.x, finalCenter.y, finalCenter.z);
722
-
723
- console.log('📹 相机位置:', {
724
- x: cameraX.toFixed(2),
725
- y: cameraY.toFixed(2),
726
- z: cameraZ.toFixed(2)
727
- });
728
- console.log('👀 相机朝向:', {
729
- x: finalCenter.x.toFixed(2),
730
- y: finalCenter.y.toFixed(2),
731
- z: finalCenter.z.toFixed(2)
732
- });
733
640
 
734
641
  // 更新控制器目标为模型中心
735
642
  if (self.controls) {
736
643
  self.controls.target.copy(finalCenter);
737
644
  self.controls.update();
738
- console.log('🎮 控制器目标已更新');
739
645
  }
740
646
 
741
647
  // 更新坐标系范围为模型的实际尺寸,供其它功能使用
742
648
  self.coordinateSystem.maxX = finalSize.x;
743
649
  self.coordinateSystem.maxY = finalSize.z;
744
-
745
- console.log('✅ 相机自动调整完成');
746
- console.log('=========================');
747
650
  } catch (e) {
748
- console.error('根据模型自动调整相机位置失败:', e && e.message ? e.message : e);
749
- console.error('错误堆栈:', e.stack);
651
+ console.warn('根据模型自动调整相机位置失败:', e && e.message ? e.message : e);
750
652
  }
751
653
 
752
654
  resolve();