@kimap/indoor-positioning-sdk-vue2 5.7.3 → 5.7.5

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kimap/indoor-positioning-sdk-vue2",
3
- "version": "5.7.3",
3
+ "version": "5.7.5",
4
4
  "description": "Vue2自包含室内定位SDK - 完全兼容Webpack3+Babel6 | Vue2 Self-Contained Indoor Positioning SDK",
5
5
  "main": "index.js",
6
6
  "files": [
@@ -742,11 +742,6 @@ KimapSDK.prototype.getCoordinateSystem = function() {
742
742
  */
743
743
  KimapSDK.prototype.autoAdjustCamera = function(options) {
744
744
  var self = this;
745
-
746
- if (!self.core || !self.core.mapModel) {
747
- console.warn('KimapSDK: 地图模型未加载,无法调整相机');
748
- return;
749
- }
750
745
 
751
746
  var opts = options || {};
752
747
  var distanceFactor = opts.distanceFactor !== undefined ? opts.distanceFactor : 1.0;
@@ -754,6 +749,43 @@ KimapSDK.prototype.autoAdjustCamera = function(options) {
754
749
  var yFactor = opts.yFactor !== undefined ? opts.yFactor : 0.4;
755
750
  var zFactor = opts.zFactor !== undefined ? opts.zFactor : 0.5;
756
751
 
752
+ // 多楼层模式:基于 floorGroups 计算包围盒
753
+ if (self.isMultiFloor && self.floorGroups && self.floorGroups.length > 0) {
754
+ var allMeshes = [];
755
+ self.floorGroups.forEach(function(group) {
756
+ group.traverse(function(child) {
757
+ if (child.isMesh) allMeshes.push(child);
758
+ });
759
+ });
760
+ if (allMeshes.length === 0) return;
761
+
762
+ var box = new THREE.Box3();
763
+ allMeshes.forEach(function(mesh) { box.expandByObject(mesh); });
764
+ var center = new THREE.Vector3();
765
+ var size = new THREE.Vector3();
766
+ box.getCenter(center);
767
+ box.getSize(size);
768
+
769
+ var maxDim = Math.max(size.x, size.z);
770
+ var distance = maxDim * distanceFactor * 2;
771
+
772
+ self.core.camera.position.set(center.x, center.y + distance * 1.5, center.z + distance);
773
+ self.core.camera.lookAt(center);
774
+ if (self.core.controls) {
775
+ self.core.controls.target.copy(center);
776
+ self.core.controls.update();
777
+ }
778
+
779
+ console.log('KimapSDK: 相机已自动调整(多楼层模式)', { center: center, distance: distance, size: size });
780
+ return self;
781
+ }
782
+
783
+ // 单楼层模式
784
+ if (!self.core || !self.core.mapModel) {
785
+ console.warn('KimapSDK: 地图模型未加载,无法调整相机');
786
+ return;
787
+ }
788
+
757
789
  var box = new THREE.Box3().setFromObject(self.core.mapModel);
758
790
  var center = new THREE.Vector3();
759
791
  var size = new THREE.Vector3();
@@ -771,7 +803,7 @@ KimapSDK.prototype.autoAdjustCamera = function(options) {
771
803
  );
772
804
 
773
805
  self.core.camera.lookAt(center);
774
-
806
+
775
807
  if (self.core.controls) {
776
808
  self.core.controls.target.copy(center);
777
809
  self.core.controls.update();
@@ -782,7 +814,7 @@ KimapSDK.prototype.autoAdjustCamera = function(options) {
782
814
  distance: distance,
783
815
  size: size
784
816
  });
785
-
817
+
786
818
  return self;
787
819
  };
788
820
 
@@ -363,8 +363,6 @@ SceneCore.prototype._loadKimapFileToGroup = function(kimapUrl, themeUrl, objLoad
363
363
  if (borderInfo) self._borderInfo = borderInfo;
364
364
  var mapConfig = extractMapConfigFromOBJ(objContent);
365
365
  if (mapConfig && mapConfig.isCalibrated) self._mapConfig = mapConfig;
366
- var textElements = extractTextElementsFromOBJ(objContent);
367
- if (textElements && textElements.length > 0) self._textElements = textElements;
368
366
  var wallOpacity = extractWallOpacityFromOBJ(objContent);
369
367
  if (wallOpacity && Object.keys(wallOpacity).length > 0) self._wallOpacity = wallOpacity;
370
368
  var shapeOpacity = extractShapeOpacityFromOBJ(objContent);
@@ -373,6 +371,16 @@ SceneCore.prototype._loadKimapFileToGroup = function(kimapUrl, themeUrl, objLoad
373
371
  var colorMap = materials ? {} : extractColorsFromOBJ(objContent);
374
372
  var object = objLoader.parse(objContent);
375
373
  self._processLoadedModelToGroup(object, materials, colorMap, floorGroup, floorIndex);
374
+
375
+ // 提取文字元素(每个楼层都提取,以第一个楼层为准)
376
+ if (!self._textElements || self._textElements.length === 0) {
377
+ var textElements = extractTextElementsFromOBJ(objContent);
378
+ if (textElements && textElements.length > 0) {
379
+ self._textElements = textElements;
380
+ self.renderTextElements(self._textElements);
381
+ }
382
+ }
383
+
376
384
  resolve();
377
385
  } catch (error) {
378
386
  reject(error);
@@ -410,8 +418,21 @@ SceneCore.prototype._processLoadedModelToGroup = function(object, materials, col
410
418
  floorGroup.add(object);
411
419
 
412
420
  var box = new THREE.Box3().setFromObject(object);
413
- var floorY = floorIndex * self.floorHeight;
414
- object.position.set(-box.min.x, -box.min.y + floorY, -box.min.z);
421
+ var boxHeight = box.max.y - box.min.y;
422
+
423
+ // 逐层累积高度:每个楼层的地面 = 前几个楼层的总高度
424
+ var floorY = 0;
425
+ for (var i = 0; i < floorIndex; i++) {
426
+ var prevGroup = self.floorGroups[i];
427
+ if (prevGroup) {
428
+ var prevBox = new THREE.Box3().setFromObject(prevGroup);
429
+ floorY += (prevBox.max.y - prevBox.min.y);
430
+ }
431
+ }
432
+
433
+ // 修正当前楼层的 Y 偏移:使用 box.max.y(顶面高度)作为该楼层占据的高度基准,
434
+ // 这样每个楼层的地面(min.y)都对齐到正确的世界高度
435
+ object.position.set(-box.min.x, floorY - box.min.y, -box.min.z);
415
436
 
416
437
  // 复用 backup 的材质处理策略,不改渲染风格
417
438
  object.traverse(function(child) {