@kimap/indoor-positioning-sdk-vue2 3.0.0 → 3.1.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 +1 -1
- package/src/KimapCore.js +65 -0
package/package.json
CHANGED
package/src/KimapCore.js
CHANGED
|
@@ -545,6 +545,41 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
|
|
|
545
545
|
boundingBox.getSize(size);
|
|
546
546
|
console.log('模型尺寸 (长x宽x高):', size.x.toFixed(2), 'x', size.y.toFixed(2), 'x', size.z.toFixed(2));
|
|
547
547
|
|
|
548
|
+
// 基于模型包围盒自动调整相机位置和控制器目标,避免依赖配置中的 maxX/maxY
|
|
549
|
+
try {
|
|
550
|
+
// 使用模型当前位置重新计算包围盒和中心
|
|
551
|
+
var finalBox = new THREE.Box3().setFromObject(self.mapModel);
|
|
552
|
+
var finalCenter = new THREE.Vector3();
|
|
553
|
+
finalBox.getCenter(finalCenter);
|
|
554
|
+
|
|
555
|
+
var finalSize = new THREE.Vector3();
|
|
556
|
+
finalBox.getSize(finalSize);
|
|
557
|
+
var maxSize = Math.max(finalSize.x, finalSize.z);
|
|
558
|
+
|
|
559
|
+
// 根据模型尺寸计算一个合理的视距
|
|
560
|
+
var distance = maxSize * 1.5;
|
|
561
|
+
|
|
562
|
+
// 相机从斜上方俯视模型中心
|
|
563
|
+
self.camera.position.set(
|
|
564
|
+
finalCenter.x,
|
|
565
|
+
finalCenter.y + distance,
|
|
566
|
+
finalCenter.z + distance * 0.5
|
|
567
|
+
);
|
|
568
|
+
self.camera.lookAt(finalCenter.x, finalCenter.y, finalCenter.z);
|
|
569
|
+
|
|
570
|
+
// 更新控制器目标为模型中心
|
|
571
|
+
if (self.controls) {
|
|
572
|
+
self.controls.target.copy(finalCenter);
|
|
573
|
+
self.controls.update();
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// 更新坐标系范围为模型的实际尺寸,供其它功能使用
|
|
577
|
+
self.coordinateSystem.maxX = finalSize.x;
|
|
578
|
+
self.coordinateSystem.maxY = finalSize.z;
|
|
579
|
+
} catch (e) {
|
|
580
|
+
console.warn('根据模型自动调整相机位置失败:', e && e.message ? e.message : e);
|
|
581
|
+
}
|
|
582
|
+
|
|
548
583
|
resolve();
|
|
549
584
|
} catch (error) {
|
|
550
585
|
console.error('Kimap解析失败:', error);
|
|
@@ -664,6 +699,36 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
|
|
|
664
699
|
boundingBox.getSize(size);
|
|
665
700
|
console.log('模型尺寸 (长x宽x高):', size.x.toFixed(2), 'x', size.y.toFixed(2), 'x', size.z.toFixed(2));
|
|
666
701
|
|
|
702
|
+
// 基于模型包围盒自动调整相机位置和控制器目标,避免依赖配置中的 maxX/maxY
|
|
703
|
+
try {
|
|
704
|
+
var finalBox = new THREE.Box3().setFromObject(self.mapModel);
|
|
705
|
+
var finalCenter = new THREE.Vector3();
|
|
706
|
+
finalBox.getCenter(finalCenter);
|
|
707
|
+
|
|
708
|
+
var finalSize = new THREE.Vector3();
|
|
709
|
+
finalBox.getSize(finalSize);
|
|
710
|
+
var maxSize = Math.max(finalSize.x, finalSize.z);
|
|
711
|
+
|
|
712
|
+
var distance = maxSize * 1.5;
|
|
713
|
+
|
|
714
|
+
self.camera.position.set(
|
|
715
|
+
finalCenter.x,
|
|
716
|
+
finalCenter.y + distance,
|
|
717
|
+
finalCenter.z + distance * 0.5
|
|
718
|
+
);
|
|
719
|
+
self.camera.lookAt(finalCenter.x, finalCenter.y, finalCenter.z);
|
|
720
|
+
|
|
721
|
+
if (self.controls) {
|
|
722
|
+
self.controls.target.copy(finalCenter);
|
|
723
|
+
self.controls.update();
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
self.coordinateSystem.maxX = finalSize.x;
|
|
727
|
+
self.coordinateSystem.maxY = finalSize.z;
|
|
728
|
+
} catch (e) {
|
|
729
|
+
console.warn('根据模型自动调整相机位置失败:', e && e.message ? e.message : e);
|
|
730
|
+
}
|
|
731
|
+
|
|
667
732
|
resolve();
|
|
668
733
|
},
|
|
669
734
|
function(progress) {
|