@kimap/indoor-positioning-sdk-vue2 5.2.2 → 5.2.4
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/core/KimapSDK.js +0 -7
- package/src/core/SceneCore.js +2 -70
- package/src/core/crypto.js +0 -30
- package/src/core/loaders.js +0 -2
- package/src/core/parsers.js +0 -5
package/package.json
CHANGED
package/src/core/KimapSDK.js
CHANGED
|
@@ -660,9 +660,6 @@ KimapSDK.prototype.autoAdjustCamera = function(options) {
|
|
|
660
660
|
KimapSDK.prototype.getConfig = function() {
|
|
661
661
|
var config = {};
|
|
662
662
|
|
|
663
|
-
console.log('[getConfig] _mapConfig:', this._mapConfig);
|
|
664
|
-
console.log('[getConfig] _borderInfo:', this._borderInfo);
|
|
665
|
-
|
|
666
663
|
// 从coordinateSystem获取scale
|
|
667
664
|
if (this.core && this.core.coordinateSystem) {
|
|
668
665
|
var coordSys = this.core.coordinateSystem;
|
|
@@ -692,16 +689,13 @@ KimapSDK.prototype.getConfig = function() {
|
|
|
692
689
|
// modelToRealScale: 模型尺寸与真实尺寸的比例
|
|
693
690
|
if (this._mapConfig.modelToRealScale) {
|
|
694
691
|
config.modelToRealScale = this._mapConfig.modelToRealScale;
|
|
695
|
-
console.log('[getConfig] 使用_mapConfig中的modelToRealScale:', config.modelToRealScale);
|
|
696
692
|
} else if (config.mapX && this._mapConfig.realWidth) {
|
|
697
693
|
// 如果没有直接提供modelToRealScale,根据模型尺寸和真实尺寸计算
|
|
698
694
|
// modelToRealScale = 模型宽度(米) / 真实宽度(米)
|
|
699
695
|
config.modelToRealScale = config.mapX / (this._mapConfig.realWidth / 100);
|
|
700
|
-
console.log('[getConfig] 计算modelToRealScale:', config.modelToRealScale, '= mapX:', config.mapX, '/ realWidth:', this._mapConfig.realWidth / 100);
|
|
701
696
|
} else {
|
|
702
697
|
// 默认值
|
|
703
698
|
config.modelToRealScale = 1.0;
|
|
704
|
-
console.log('[getConfig] 使用默认modelToRealScale: 1.0');
|
|
705
699
|
}
|
|
706
700
|
|
|
707
701
|
// 添加完整的mapConfig数据
|
|
@@ -712,7 +706,6 @@ KimapSDK.prototype.getConfig = function() {
|
|
|
712
706
|
config.isCalibrated = false;
|
|
713
707
|
// 默认modelToRealScale为1.0(模型单位=真实单位)
|
|
714
708
|
config.modelToRealScale = 1.0;
|
|
715
|
-
console.log('[getConfig] 没有校准数据,使用默认modelToRealScale: 1.0');
|
|
716
709
|
}
|
|
717
710
|
|
|
718
711
|
return config;
|
package/src/core/SceneCore.js
CHANGED
|
@@ -267,30 +267,17 @@ SceneCore.prototype.loadMap = function(OBJLoader, MTLLoader) {
|
|
|
267
267
|
SceneCore.prototype._loadKimapFile = function(kimapUrl, themeUrl, objLoader, mtlLoader, resolve, reject) {
|
|
268
268
|
var self = this;
|
|
269
269
|
|
|
270
|
-
console.log('[SceneCore] 开始加载Kimap加密文件');
|
|
271
|
-
console.log('[SceneCore] Kimap URL:', kimapUrl);
|
|
272
|
-
console.log('[SceneCore] Theme URL:', themeUrl);
|
|
273
|
-
|
|
274
|
-
// 先尝试加载theme材质文件
|
|
275
270
|
var loadTheme = function(callback) {
|
|
276
271
|
if (!mtlLoader) {
|
|
277
|
-
console.log('[SceneCore] ⚠️ MTLLoader未加载,跳过材质文件');
|
|
278
272
|
callback(null);
|
|
279
273
|
return;
|
|
280
274
|
}
|
|
281
275
|
|
|
282
|
-
console.log('[SceneCore] 开始加载Theme材质文件...');
|
|
283
276
|
var themeLoader = new THREE.FileLoader();
|
|
284
|
-
themeLoader.setResponseType('text');
|
|
285
|
-
console.log('[SceneCore] FileLoader配置: responseType=text');
|
|
286
277
|
|
|
287
278
|
themeLoader.load(
|
|
288
279
|
themeUrl,
|
|
289
280
|
function(themeContent) {
|
|
290
|
-
console.log('[SceneCore] ✓ Theme文件下载完成');
|
|
291
|
-
console.log('[SceneCore] 内容类型:', typeof themeContent);
|
|
292
|
-
console.log('[SceneCore] 内容长度:', themeContent ? themeContent.length : 0);
|
|
293
|
-
|
|
294
281
|
try {
|
|
295
282
|
// 验证内容类型
|
|
296
283
|
if (typeof themeContent !== 'string') {
|
|
@@ -300,7 +287,6 @@ SceneCore.prototype._loadKimapFile = function(kimapUrl, themeUrl, objLoader, mtl
|
|
|
300
287
|
var mtlContent = decryptTheme(themeContent);
|
|
301
288
|
var materials = mtlLoader.parse(mtlContent);
|
|
302
289
|
materials.preload();
|
|
303
|
-
console.log('[SceneCore] ✅ 材质文件加载成功');
|
|
304
290
|
callback(materials);
|
|
305
291
|
} catch (error) {
|
|
306
292
|
console.warn('[SceneCore] Theme材质解析失败:', error.message);
|
|
@@ -309,14 +295,9 @@ SceneCore.prototype._loadKimapFile = function(kimapUrl, themeUrl, objLoader, mtl
|
|
|
309
295
|
}
|
|
310
296
|
},
|
|
311
297
|
function(progress) {
|
|
312
|
-
|
|
313
|
-
var percent = (progress.loaded / progress.total * 100).toFixed(2);
|
|
314
|
-
console.log('[SceneCore] Theme下载进度:', percent + '%');
|
|
315
|
-
}
|
|
298
|
+
// 加载进度
|
|
316
299
|
},
|
|
317
300
|
function(error) {
|
|
318
|
-
console.log('[SceneCore] ℹ️ 未找到材质文件,使用默认材质');
|
|
319
|
-
console.log('[SceneCore] Theme加载错误:', error);
|
|
320
301
|
callback(null);
|
|
321
302
|
}
|
|
322
303
|
);
|
|
@@ -328,75 +309,56 @@ SceneCore.prototype._loadKimapFile = function(kimapUrl, themeUrl, objLoader, mtl
|
|
|
328
309
|
}
|
|
329
310
|
|
|
330
311
|
// 使用FileLoader加载Kimap文本内容
|
|
331
|
-
console.log('[SceneCore] 开始加载Kimap文件...');
|
|
332
312
|
var fileLoader = new THREE.FileLoader();
|
|
333
313
|
fileLoader.setResponseType('text');
|
|
334
|
-
console.log('[SceneCore] FileLoader配置: responseType=text');
|
|
335
314
|
|
|
336
315
|
fileLoader.load(
|
|
337
316
|
kimapUrl,
|
|
338
317
|
function(kimapContent) {
|
|
339
|
-
console.log('[SceneCore] ✓ Kimap文件下载完成');
|
|
340
|
-
console.log('[SceneCore] 内容类型:', typeof kimapContent);
|
|
341
|
-
console.log('[SceneCore] 内容长度:', kimapContent ? kimapContent.length : 0);
|
|
342
|
-
|
|
343
318
|
try {
|
|
344
319
|
// 验证内容类型
|
|
345
320
|
if (typeof kimapContent !== 'string') {
|
|
346
321
|
throw new Error('Kimap文件内容不是字符串类型: ' + typeof kimapContent);
|
|
347
322
|
}
|
|
348
323
|
|
|
349
|
-
console.log('[SceneCore] 开始解密Kimap内容...');
|
|
350
|
-
|
|
351
324
|
// 解密Kimap内容为OBJ
|
|
352
325
|
var objContent = decryptKimap(kimapContent);
|
|
353
326
|
|
|
354
|
-
console.log('[SceneCore] ✓ 解密成功,开始解析OBJ模型...');
|
|
355
|
-
|
|
356
327
|
// 提取边界信息
|
|
357
328
|
var borderInfo = extractBorderFromOBJ(objContent);
|
|
358
329
|
if (borderInfo) {
|
|
359
|
-
console.log('[SceneCore] ✅ 提取到边界信息:', borderInfo);
|
|
360
330
|
self._borderInfo = borderInfo;
|
|
361
331
|
}
|
|
362
332
|
|
|
363
333
|
// 提取地图配置信息(校准数据)
|
|
364
334
|
var mapConfig = extractMapConfigFromOBJ(objContent);
|
|
365
335
|
if (mapConfig && mapConfig.isCalibrated) {
|
|
366
|
-
console.log('[SceneCore] ✅ 提取到校准数据:', mapConfig);
|
|
367
336
|
self._mapConfig = mapConfig;
|
|
368
337
|
}
|
|
369
338
|
|
|
370
339
|
// 提取颜色信息(作为备用)
|
|
371
340
|
var colorMap = materials ? {} : extractColorsFromOBJ(objContent);
|
|
372
|
-
if (!materials) {
|
|
373
|
-
console.log('[SceneCore] 提取到颜色信息:', colorMap);
|
|
374
|
-
}
|
|
375
341
|
|
|
376
342
|
// 提取文本元素
|
|
377
343
|
var textElements = extractTextElementsFromOBJ(objContent);
|
|
378
344
|
if (textElements && textElements.length > 0) {
|
|
379
|
-
console.log('[SceneCore] ✅ 从OBJ提取到文本元素:', textElements.length, '个');
|
|
380
345
|
self._textElements = textElements;
|
|
381
346
|
}
|
|
382
347
|
|
|
383
348
|
// 提取墙体透明度信息
|
|
384
349
|
var wallOpacity = extractWallOpacityFromOBJ(objContent);
|
|
385
350
|
if (wallOpacity && Object.keys(wallOpacity).length > 0) {
|
|
386
|
-
console.log('[SceneCore] ✅ 从OBJ提取到墙体透明度:', Object.keys(wallOpacity).length, '个墙体');
|
|
387
351
|
self._wallOpacity = wallOpacity;
|
|
388
352
|
}
|
|
389
353
|
|
|
390
354
|
// 提取形状透明度信息(矩形、圆形、多边形)
|
|
391
355
|
var shapeOpacity = extractShapeOpacityFromOBJ(objContent);
|
|
392
356
|
if (shapeOpacity && Object.keys(shapeOpacity).length > 0) {
|
|
393
|
-
console.log('[SceneCore] ✅ 从OBJ提取到形状透明度:', Object.keys(shapeOpacity).length, '个形状');
|
|
394
357
|
self._shapeOpacity = shapeOpacity;
|
|
395
358
|
}
|
|
396
359
|
|
|
397
360
|
// 解析OBJ内容
|
|
398
361
|
var object = objLoader.parse(objContent);
|
|
399
|
-
console.log('[SceneCore] ✓ OBJ解析完成,处理模型...');
|
|
400
362
|
|
|
401
363
|
self._processLoadedModel(object, materials, colorMap);
|
|
402
364
|
|
|
@@ -413,15 +375,9 @@ SceneCore.prototype._loadKimapFile = function(kimapUrl, themeUrl, objLoader, mtl
|
|
|
413
375
|
}
|
|
414
376
|
},
|
|
415
377
|
function(progress) {
|
|
416
|
-
|
|
417
|
-
var percent = (progress.loaded / progress.total * 100).toFixed(2);
|
|
418
|
-
console.log('[SceneCore] Kimap下载进度:', percent + '%');
|
|
419
|
-
}
|
|
378
|
+
// 加载进度
|
|
420
379
|
},
|
|
421
380
|
function(error) {
|
|
422
|
-
console.error('[SceneCore] ✗ Kimap文件加载失败');
|
|
423
|
-
console.error('[SceneCore] URL:', kimapUrl);
|
|
424
|
-
console.error('[SceneCore] 错误详情:', error);
|
|
425
381
|
reject(error);
|
|
426
382
|
}
|
|
427
383
|
);
|
|
@@ -550,8 +506,6 @@ SceneCore.prototype._processLoadedModel = function(object, materials, colorMap)
|
|
|
550
506
|
// - ID哈希偏移: 0~0.0005m
|
|
551
507
|
// =====================================================
|
|
552
508
|
|
|
553
|
-
console.log('[SceneCore] 🏁 开始处理区域层级,数量:', areaMeshes.length);
|
|
554
|
-
|
|
555
509
|
areaMeshes.forEach(function(areaMesh, index) {
|
|
556
510
|
// 计算层级偏移:每个区域增加 0.001m(1mm)
|
|
557
511
|
var levelYOffset = areaLevel * 0.001;
|
|
@@ -571,20 +525,9 @@ SceneCore.prototype._processLoadedModel = function(object, materials, colorMap)
|
|
|
571
525
|
// 设置渲染层级(层级越高越晚渲染,在上面)
|
|
572
526
|
areaMesh.renderOrder = areaLevel * 1000;
|
|
573
527
|
|
|
574
|
-
console.log('[SceneCore] ✅ 区域层级设置:', {
|
|
575
|
-
name: areaMesh.material.name,
|
|
576
|
-
areaLevel: areaLevel,
|
|
577
|
-
renderOrder: areaMesh.renderOrder,
|
|
578
|
-
yOffset: totalYOffset.toFixed(6) + 'm'
|
|
579
|
-
});
|
|
580
|
-
|
|
581
528
|
areaLevel++;
|
|
582
529
|
});
|
|
583
530
|
|
|
584
|
-
console.log('=== 模型加载成功 ===');
|
|
585
|
-
console.log('网格数量:', meshCount);
|
|
586
|
-
console.log('总顶点数:', vertexCount);
|
|
587
|
-
|
|
588
531
|
// 自动调整相机位置
|
|
589
532
|
self._adjustCameraToModel();
|
|
590
533
|
};
|
|
@@ -629,7 +572,6 @@ SceneCore.prototype._processMaterial = function(child, materials, colorMap) {
|
|
|
629
572
|
transparent = opacity < 1.0;
|
|
630
573
|
// 高透明度时关闭depthWrite
|
|
631
574
|
depthWrite = opacity >= 0.8;
|
|
632
|
-
console.log('[SceneCore] 应用墙体透明度:', wallId, '=', opacity);
|
|
633
575
|
}
|
|
634
576
|
}
|
|
635
577
|
} else if (child.material.name.startsWith('Shape_') || child.material.name.startsWith('Stair_')) {
|
|
@@ -643,7 +585,6 @@ SceneCore.prototype._processMaterial = function(child, materials, colorMap) {
|
|
|
643
585
|
transparent = opacity < 1.0;
|
|
644
586
|
// 高透明度时关闭depthWrite
|
|
645
587
|
depthWrite = opacity >= 0.8;
|
|
646
|
-
console.log('[SceneCore] 应用形状透明度:', shapeId, '=', opacity);
|
|
647
588
|
}
|
|
648
589
|
}
|
|
649
590
|
// 混合10%白色,让颜色更浅一点
|
|
@@ -880,13 +821,6 @@ SceneCore.prototype.renderTextElements = function(textElements) {
|
|
|
880
821
|
var elevationMm = textEl.elevation || 8500; // 默认8500mm(850cm)
|
|
881
822
|
var y = (elevationMm / LOGICAL_WALL_HEIGHT) * RENDER_WALL_HEIGHT;
|
|
882
823
|
|
|
883
|
-
console.log('[SceneCore] 文本元素属性:', {
|
|
884
|
-
content: textEl.content,
|
|
885
|
-
backgroundColor: textEl.backgroundColor,
|
|
886
|
-
borderColor: textEl.borderColor,
|
|
887
|
-
color: textEl.color
|
|
888
|
-
});
|
|
889
|
-
|
|
890
824
|
// 文本缩放因子:3D场景中需要放大字体才能看清
|
|
891
825
|
var TEXT_SCALE_FACTOR = 2.52;
|
|
892
826
|
|
|
@@ -907,8 +841,6 @@ SceneCore.prototype.renderTextElements = function(textElements) {
|
|
|
907
841
|
sprite.userData = { type: 'text', elementId: textEl.id };
|
|
908
842
|
self.textGroup.add(sprite);
|
|
909
843
|
});
|
|
910
|
-
|
|
911
|
-
console.log('[SceneCore] ✅ 文本元素渲染完成:', textElements.length, '个');
|
|
912
844
|
};
|
|
913
845
|
|
|
914
846
|
/**
|
package/src/core/crypto.js
CHANGED
|
@@ -49,20 +49,11 @@ function base64Decode(base64) {
|
|
|
49
49
|
*/
|
|
50
50
|
function decryptKimap(kimapContent) {
|
|
51
51
|
try {
|
|
52
|
-
// 诊断日志
|
|
53
|
-
console.log('[Crypto] 开始解密Kimap文件');
|
|
54
|
-
console.log('[Crypto] 内容类型:', typeof kimapContent);
|
|
55
|
-
console.log('[Crypto] 内容长度:', kimapContent ? kimapContent.length : 0);
|
|
56
|
-
|
|
57
52
|
// 验证内容不为空
|
|
58
53
|
if (!kimapContent) {
|
|
59
54
|
throw new Error('文件内容为空');
|
|
60
55
|
}
|
|
61
56
|
|
|
62
|
-
// 显示前50个字符用于调试
|
|
63
|
-
var preview = kimapContent.substring(0, Math.min(50, kimapContent.length));
|
|
64
|
-
console.log('[Crypto] 内容预览:', preview);
|
|
65
|
-
|
|
66
57
|
// 1. 检查文件头 - 支持新旧两种格式
|
|
67
58
|
var newHeader = 'KIMAP_ENCRYPTED_V1';
|
|
68
59
|
var oldHeader = 'KIMAP_V1';
|
|
@@ -80,25 +71,20 @@ function decryptKimap(kimapContent) {
|
|
|
80
71
|
}
|
|
81
72
|
|
|
82
73
|
var headerUsed = isNewFormat ? newHeader : oldHeader;
|
|
83
|
-
console.log('[Crypto] ✓ 文件头验证通过 (格式: ' + headerUsed + ')');
|
|
84
74
|
|
|
85
75
|
// 2. 提取加密内容(去掉文件头)
|
|
86
76
|
var headerLength = headerUsed.length + 1; // +1 for newline
|
|
87
77
|
var encryptedBase64 = kimapContent.substring(headerLength);
|
|
88
|
-
console.log('[Crypto] Base64内容长度:', encryptedBase64.length);
|
|
89
78
|
|
|
90
79
|
// 3. Base64解码
|
|
91
80
|
var encryptedBytes = base64Decode(encryptedBase64);
|
|
92
|
-
console.log('[Crypto] ✓ Base64解码完成, 字节数:', encryptedBytes.length);
|
|
93
81
|
|
|
94
82
|
// 4. XOR解密
|
|
95
83
|
var ENCRYPTION_KEY = 'KIMAP_3D_MODEL_2024';
|
|
96
84
|
var decryptedBytes = xorCipher(encryptedBytes, ENCRYPTION_KEY);
|
|
97
|
-
console.log('[Crypto] ✓ XOR解密完成');
|
|
98
85
|
|
|
99
86
|
// 5. 转换为字符串
|
|
100
87
|
var objContent = bytesToString(decryptedBytes);
|
|
101
|
-
console.log('[Crypto] ✓ 解密成功, OBJ内容长度:', objContent.length);
|
|
102
88
|
|
|
103
89
|
return objContent;
|
|
104
90
|
} catch (error) {
|
|
@@ -122,20 +108,11 @@ function decryptTheme(themeContent) {
|
|
|
122
108
|
var ENCRYPTION_KEY = 'KIMAP_3D_MODEL_2024';
|
|
123
109
|
|
|
124
110
|
try {
|
|
125
|
-
// 诊断日志
|
|
126
|
-
console.log('[Crypto] 开始解密Theme文件');
|
|
127
|
-
console.log('[Crypto] 内容类型:', typeof themeContent);
|
|
128
|
-
console.log('[Crypto] 内容长度:', themeContent ? themeContent.length : 0);
|
|
129
|
-
|
|
130
111
|
// 验证内容不为空
|
|
131
112
|
if (!themeContent) {
|
|
132
113
|
throw new Error('文件内容为空');
|
|
133
114
|
}
|
|
134
115
|
|
|
135
|
-
// 显示前50个字符用于调试
|
|
136
|
-
var preview = themeContent.substring(0, Math.min(50, themeContent.length));
|
|
137
|
-
console.log('[Crypto] 内容预览:', preview);
|
|
138
|
-
|
|
139
116
|
// 1. 检查文件头 - 支持新旧两种格式
|
|
140
117
|
var newHeader = 'KITHEME_ENCRYPTED_V1';
|
|
141
118
|
var oldHeader = 'THEME_V1';
|
|
@@ -153,29 +130,22 @@ function decryptTheme(themeContent) {
|
|
|
153
130
|
}
|
|
154
131
|
|
|
155
132
|
var headerUsed = isNewFormat ? newHeader : oldHeader;
|
|
156
|
-
console.log('[Crypto] ✓ 文件头验证通过 (格式: ' + headerUsed + ')');
|
|
157
133
|
|
|
158
134
|
// 2. 提取加密内容
|
|
159
135
|
var headerLength = headerUsed.length + 1; // +1 for newline
|
|
160
136
|
var encryptedBase64 = themeContent.substring(headerLength);
|
|
161
|
-
console.log('[Crypto] Base64内容长度:', encryptedBase64.length);
|
|
162
137
|
|
|
163
138
|
// 3. Base64解码
|
|
164
139
|
var encryptedBytes = base64Decode(encryptedBase64);
|
|
165
|
-
console.log('[Crypto] ✓ Base64解码完成, 字节数:', encryptedBytes.length);
|
|
166
140
|
|
|
167
141
|
// 4. XOR解密
|
|
168
142
|
var decryptedBytes = xorCipher(encryptedBytes, ENCRYPTION_KEY);
|
|
169
|
-
console.log('[Crypto] ✓ XOR解密完成');
|
|
170
143
|
|
|
171
144
|
// 5. 转换为字符串
|
|
172
145
|
var mtlContent = bytesToString(decryptedBytes);
|
|
173
|
-
console.log('[Crypto] ✓ 解密成功, MTL内容长度:', mtlContent.length);
|
|
174
146
|
|
|
175
147
|
return mtlContent;
|
|
176
148
|
} catch (error) {
|
|
177
|
-
console.error('[Crypto] ✗ Theme解密失败:', error.message);
|
|
178
|
-
console.error('[Crypto] 错误堆栈:', error.stack);
|
|
179
149
|
throw new Error('Theme解密失败: ' + (error.message || '未知错误'));
|
|
180
150
|
}
|
|
181
151
|
}
|
package/src/core/loaders.js
CHANGED
|
@@ -13,7 +13,6 @@ function setThreeInstance(threeInstance) {
|
|
|
13
13
|
throw new Error('Three.js instance is required');
|
|
14
14
|
}
|
|
15
15
|
THREE = threeInstance;
|
|
16
|
-
console.log('[Loaders] Three.js实例已设置');
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
/**
|
|
@@ -24,7 +23,6 @@ function loadThree() {
|
|
|
24
23
|
// 尝试从require加载(用于npm环境)
|
|
25
24
|
try {
|
|
26
25
|
THREE = require('three');
|
|
27
|
-
console.log('[Loaders] Three.js从require加载');
|
|
28
26
|
} catch (error) {
|
|
29
27
|
throw new Error('Three.js未设置且无法加载。请确保Three.js已安装: npm install three');
|
|
30
28
|
}
|
package/src/core/parsers.js
CHANGED
|
@@ -80,8 +80,6 @@ function extractMapConfigFromOBJ(objContent) {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
console.log('[Parsers] 提取到的地图配置:', config);
|
|
84
|
-
|
|
85
83
|
return foundConfig ? config : null;
|
|
86
84
|
}
|
|
87
85
|
|
|
@@ -169,7 +167,6 @@ function extractTextElementsFromOBJ(objContent) {
|
|
|
169
167
|
}
|
|
170
168
|
}
|
|
171
169
|
|
|
172
|
-
console.log('[Parsers] 提取到的文本元素:', textElements.length, '个');
|
|
173
170
|
return textElements;
|
|
174
171
|
}
|
|
175
172
|
|
|
@@ -209,7 +206,6 @@ function extractWallOpacityFromOBJ(objContent) {
|
|
|
209
206
|
}
|
|
210
207
|
}
|
|
211
208
|
|
|
212
|
-
console.log('[Parsers] 提取到的墙体透明度:', Object.keys(wallOpacity).length, '个墙体');
|
|
213
209
|
return wallOpacity;
|
|
214
210
|
}
|
|
215
211
|
|
|
@@ -243,7 +239,6 @@ function extractShapeOpacityFromOBJ(objContent) {
|
|
|
243
239
|
}
|
|
244
240
|
}
|
|
245
241
|
|
|
246
|
-
console.log('[Parsers] 提取到的形状透明度:', Object.keys(shapeOpacity).length, '个形状');
|
|
247
242
|
return shapeOpacity;
|
|
248
243
|
}
|
|
249
244
|
|