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

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 +34 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kimap/indoor-positioning-sdk-vue2",
3
- "version": "3.1.10",
3
+ "version": "3.1.12",
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
@@ -522,14 +522,14 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
522
522
  var origin = self.coordinateSystem.origin;
523
523
  var offsetX, offsetY, offsetZ;
524
524
 
525
- if (border) {
525
+ if (borderInfo) {
526
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;
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
530
 
531
531
  console.log('✅ 使用边界信息定位模型');
532
- console.log('🎯 目标边界:', border);
532
+ console.log('🎯 目标边界:', borderInfo);
533
533
  } else {
534
534
  // 没有边界信息,使用传统的居中对齐方式
535
535
  offsetX = origin.x - center.x;
@@ -657,16 +657,34 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
657
657
  try {
658
658
  console.log('=== 开始自动调整相机位置 ===');
659
659
 
660
- // 使用模型当前位置重新计算包围盒和中心
661
- var finalBox = new THREE.Box3().setFromObject(self.mapModel);
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
+
662
680
  var finalCenter = new THREE.Vector3();
663
681
  finalBox.getCenter(finalCenter);
664
682
 
665
- console.log('📦 模型最终包围盒:', {
683
+ console.log('📦 可见模型包围盒:', {
666
684
  min: { x: finalBox.min.x.toFixed(2), y: finalBox.min.y.toFixed(2), z: finalBox.min.z.toFixed(2) },
667
685
  max: { x: finalBox.max.x.toFixed(2), y: finalBox.max.y.toFixed(2), z: finalBox.max.z.toFixed(2) }
668
686
  });
669
- console.log('🎯 模型中心:', {
687
+ console.log('🎯 可见模型中心:', {
670
688
  x: finalCenter.x.toFixed(2),
671
689
  y: finalCenter.y.toFixed(2),
672
690
  z: finalCenter.z.toFixed(2)
@@ -676,7 +694,7 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
676
694
  finalBox.getSize(finalSize);
677
695
  var maxSize = Math.max(finalSize.x, finalSize.z);
678
696
 
679
- console.log('📏 模型尺寸:', {
697
+ console.log('📏 可见模型尺寸:', {
680
698
  x: finalSize.x.toFixed(2),
681
699
  y: finalSize.y.toFixed(2),
682
700
  z: finalSize.z.toFixed(2),
@@ -686,6 +704,12 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
686
704
  // 根据模型尺寸计算一个合理的视距
687
705
  var distance = maxSize * 1.5;
688
706
 
707
+ // 确保最小距离,避免相机太近
708
+ if (distance < 10) {
709
+ distance = 10;
710
+ console.log('⚠️ 相机距离太近,调整为最小值: 10');
711
+ }
712
+
689
713
  console.log('📹 计算相机距离:', distance.toFixed(2));
690
714
 
691
715
  // 相机从斜上方俯视模型中心