@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.
- package/package.json +1 -1
- package/src/KimapCore.js +34 -10
package/package.json
CHANGED
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 (
|
|
525
|
+
if (borderInfo) {
|
|
526
526
|
// 计算需要的偏移量:将模型的 min 点移动到边界的 min 点
|
|
527
|
-
offsetX = origin.x +
|
|
528
|
-
offsetY = origin.y +
|
|
529
|
-
offsetZ = origin.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('🎯 目标边界:',
|
|
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()
|
|
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
|
// 相机从斜上方俯视模型中心
|