fl-web-component 2.0.0-beta.8 → 2.0.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/dist/fl-web-component.common.js +34645 -1611
- package/dist/fl-web-component.common.js.map +1 -1
- package/dist/fl-web-component.css +1 -1
- package/package.json +4 -15
- package/packages/components/com-card/index.vue +1 -1
- package/packages/components/com-flcanvas/components/bspline.js +31 -34
- package/packages/components/com-flcanvas/components/entityFormatting.js +810 -849
- package/packages/components/com-flcanvas/components/round10.js +17 -17
- package/packages/components/com-flcanvas/index.vue +314 -333
- package/packages/components/com-formDialog/index.vue +6 -4
- package/packages/components/com-graphics/component/ann-tool.vue +263 -208
- package/packages/components/com-graphics/index.vue +366 -773
- package/packages/components/com-graphics/pid.vue +304 -295
- package/packages/components/com-table/column-default.vue +2 -3
- package/packages/components/com-table/column-dynamic.vue +7 -4
- package/packages/components/com-table/column.vue +1 -2
- package/packages/components/com-table/index.vue +6 -5
- package/packages/components/com-tabs/index.vue +1 -2
- package/packages/components/com-tiles/index.vue +134 -136
- package/packages/components/com-treeDynamic/index.vue +1 -1
- package/packages/utils/StreamLoader.js +1548 -1489
- package/packages/utils/StreamLoaderParser.worker.js +9 -14
- package/src/main.js +2 -8
- package/src/utils/cloud.js +28 -28
- package/src/utils/cursor.js +11 -9
- package/src/utils/flgltf-parser.js +257 -245
- package/src/utils/instance-parser.js +20 -22
- package/src/utils/mini-devtool.js +94 -39
- package/src/utils/threejs/measure-angle.js +51 -13
- package/src/utils/threejs/measure-area.js +43 -12
- package/src/utils/threejs/measure-distance.js +43 -12
- package/src/utils/threejs/rain-shader.js +10 -10
- package/src/utils/threejs/snow-shader.js +9 -9
|
@@ -252,8 +252,7 @@ function parseBufferData(buffer, prefixIdKey) {
|
|
|
252
252
|
const primitive = primitives[i];
|
|
253
253
|
_applyPrefixId(primitive, 'id', null, prefixIdKey);
|
|
254
254
|
_applyPrefixId(primitive, 'material', null, prefixIdKey);
|
|
255
|
-
const { position, normal, posindex, nolindex, indices } =
|
|
256
|
-
parsePrimitiveData(primitive);
|
|
255
|
+
const { position, normal, posindex, nolindex, indices } = parsePrimitiveData(primitive);
|
|
257
256
|
const formatted = formatPrimitiveData({ position, normal, posindex, nolindex });
|
|
258
257
|
delete primitive.nolindex;
|
|
259
258
|
delete primitive.posindex;
|
|
@@ -335,8 +334,7 @@ function parsePrimitive(dataView, uint8Array, offset, isFullProps = true) {
|
|
|
335
334
|
offset += 4;
|
|
336
335
|
|
|
337
336
|
if (isFullProps) {
|
|
338
|
-
if (dataView.byteLength < offset + 4)
|
|
339
|
-
throw new Error('Insufficient data for Position length');
|
|
337
|
+
if (dataView.byteLength < offset + 4) throw new Error('Insufficient data for Position length');
|
|
340
338
|
const positionLen = dataView.getUint32(offset, false);
|
|
341
339
|
offset += 4;
|
|
342
340
|
if (positionLen === 0xffffffff) {
|
|
@@ -378,8 +376,7 @@ function parsePrimitive(dataView, uint8Array, offset, isFullProps = true) {
|
|
|
378
376
|
}
|
|
379
377
|
|
|
380
378
|
if (isFullProps) {
|
|
381
|
-
if (dataView.byteLength < offset + 4)
|
|
382
|
-
throw new Error('Insufficient data for Posindex length');
|
|
379
|
+
if (dataView.byteLength < offset + 4) throw new Error('Insufficient data for Posindex length');
|
|
383
380
|
const posindexLen = dataView.getUint32(offset, false);
|
|
384
381
|
offset += 4;
|
|
385
382
|
if (posindexLen === 0xffffffff) {
|
|
@@ -393,8 +390,7 @@ function parsePrimitive(dataView, uint8Array, offset, isFullProps = true) {
|
|
|
393
390
|
}
|
|
394
391
|
|
|
395
392
|
if (isFullProps) {
|
|
396
|
-
if (dataView.byteLength < offset + 4)
|
|
397
|
-
throw new Error('Insufficient data for Nolindex length');
|
|
393
|
+
if (dataView.byteLength < offset + 4) throw new Error('Insufficient data for Nolindex length');
|
|
398
394
|
const nolindexLen = dataView.getUint32(offset, false);
|
|
399
395
|
offset += 4;
|
|
400
396
|
if (nolindexLen === 0xffffffff) {
|
|
@@ -474,18 +470,17 @@ function parsePrimitiveData(primitive) {
|
|
|
474
470
|
const key = keyOrder[i];
|
|
475
471
|
const typeCode = dataTypeString[i];
|
|
476
472
|
const typeInfo = typeMap[typeCode];
|
|
477
|
-
const uint8Array =
|
|
473
|
+
const uint8Array =
|
|
474
|
+
primitive.isCompressed === 1 || primitive.isCompressed === undefined
|
|
475
|
+
? gunzipSync(primitive[key])
|
|
476
|
+
: primitive[key];
|
|
478
477
|
if (!typeInfo || !uint8Array) {
|
|
479
478
|
// console.warn(`无法找到键 "${key}" 或其类型定义,已跳过。`);
|
|
480
479
|
parsedResult[key] = [];
|
|
481
480
|
continue;
|
|
482
481
|
}
|
|
483
482
|
const result_array = [];
|
|
484
|
-
const dataView = new DataView(
|
|
485
|
-
uint8Array.buffer,
|
|
486
|
-
uint8Array.byteOffset,
|
|
487
|
-
uint8Array.byteLength
|
|
488
|
-
);
|
|
483
|
+
const dataView = new DataView(uint8Array.buffer, uint8Array.byteOffset, uint8Array.byteLength);
|
|
489
484
|
const littleEndian = true;
|
|
490
485
|
for (let byteOffset = 0; byteOffset < dataView.byteLength; byteOffset += typeInfo.bytes) {
|
|
491
486
|
if (byteOffset + typeInfo.bytes > dataView.byteLength) {
|
package/src/main.js
CHANGED
|
@@ -2,17 +2,11 @@ import FlModel from '../packages/components/com-graphics/index.vue';
|
|
|
2
2
|
import Fl2dcanvas from '../packages/components/com-flcanvas/index.vue';
|
|
3
3
|
import FLPerControl from '../packages/components/com-graphics/per-control.vue';
|
|
4
4
|
import FlSvg from '../packages/components/com-graphics/pid.vue';
|
|
5
|
-
import FlTiles from '../packages/components/com-tiles/index.vue'
|
|
5
|
+
import FlTiles from '../packages/components/com-tiles/index.vue';
|
|
6
6
|
import * as THREE from 'three';
|
|
7
7
|
import pkg from '../package.json';
|
|
8
8
|
|
|
9
|
-
const components = [
|
|
10
|
-
FlModel,
|
|
11
|
-
Fl2dcanvas,
|
|
12
|
-
FLPerControl,
|
|
13
|
-
FlSvg,
|
|
14
|
-
FlTiles
|
|
15
|
-
];
|
|
9
|
+
const components = [FlModel, Fl2dcanvas, FLPerControl, FlSvg, FlTiles];
|
|
16
10
|
|
|
17
11
|
const install = Vue => {
|
|
18
12
|
Vue.prototype.THREE = THREE;
|
package/src/utils/cloud.js
CHANGED
|
@@ -2,37 +2,37 @@ export function drawCloudWave(path, start, end, arcRadius, density) {
|
|
|
2
2
|
const dx = end.x - start.x;
|
|
3
3
|
const dy = end.y - start.y;
|
|
4
4
|
const length = Math.sqrt(dx * dx + dy * dy);
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
if (length === 0) return;
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
// 计算单位向量
|
|
9
9
|
const unitX = dx / length;
|
|
10
10
|
const unitY = dy / length;
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
// 计算垂直向量
|
|
13
13
|
const perpX = -unitY;
|
|
14
14
|
const perpY = unitX;
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
// 中点
|
|
17
17
|
const midX = (start.x + end.x) / 2;
|
|
18
18
|
const midY = (start.y + end.y) / 2;
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
// 最大弧度点(向外凸)
|
|
21
21
|
const amplitude = arcRadius * density;
|
|
22
|
-
const peakX = midX - perpX * amplitude;
|
|
22
|
+
const peakX = midX - perpX * amplitude; // 向外凸
|
|
23
23
|
const peakY = midY - perpY * amplitude;
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
// 使用三次贝塞尔曲线创建平滑的圆弧效果
|
|
26
26
|
// 控制点稍微向内收缩,创建更自然的S形曲线
|
|
27
27
|
const control1X = start.x + dx * 0.25;
|
|
28
28
|
const control1Y = start.y + dy * 0.25;
|
|
29
29
|
const control2X = end.x - dx * 0.25;
|
|
30
30
|
const control2Y = end.y - dy * 0.25;
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
// 添加弧度偏移
|
|
33
33
|
const arcOffsetX = -perpX * amplitude * 0.3;
|
|
34
34
|
const arcOffsetY = -perpY * amplitude * 0.3;
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
path.bezierCurveTo(
|
|
37
37
|
control1X + arcOffsetX,
|
|
38
38
|
control1Y + arcOffsetY,
|
|
@@ -43,55 +43,55 @@ export function drawCloudWave(path, start, end, arcRadius, density) {
|
|
|
43
43
|
);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
|
|
47
46
|
// // 绘制云线路径
|
|
48
47
|
export function drawCloudPath(path, vertices, config, close) {
|
|
49
48
|
const { radius, density } = config;
|
|
50
|
-
|
|
49
|
+
|
|
51
50
|
if (vertices.length < 3) return;
|
|
52
|
-
|
|
51
|
+
|
|
53
52
|
// 从第一个顶点开始
|
|
54
53
|
path.moveTo(vertices[0].x, vertices[0].y);
|
|
55
|
-
let n = vertices.length
|
|
54
|
+
let n = vertices.length;
|
|
56
55
|
// 如果close为false则不闭合
|
|
57
|
-
if(!close) n
|
|
56
|
+
if (!close) n--;
|
|
58
57
|
// 为每条边绘制云线效果
|
|
59
58
|
for (let i = 0; i < n; i++) {
|
|
60
59
|
const currentVertex = vertices[i];
|
|
61
60
|
const nextVertex = vertices[(i + 1) % vertices.length];
|
|
62
|
-
|
|
61
|
+
|
|
63
62
|
// 在当前边绘制云线效果
|
|
64
63
|
drawCloudWave(path, currentVertex, nextVertex, radius, density);
|
|
65
64
|
}
|
|
66
|
-
|
|
65
|
+
|
|
67
66
|
// if(close) path.closePath();
|
|
68
|
-
path.closePath()
|
|
69
|
-
path.stroke()
|
|
67
|
+
path.closePath();
|
|
68
|
+
path.stroke();
|
|
70
69
|
// path.restore()
|
|
71
70
|
}
|
|
72
71
|
|
|
73
|
-
|
|
74
72
|
// // 基于原始顶点扩充成更多点
|
|
75
73
|
export function expansionHexagonVertices(originalVertices, frequency) {
|
|
76
74
|
const expansionVertices = [];
|
|
77
|
-
let n = originalVertices.length
|
|
75
|
+
let n = originalVertices.length;
|
|
78
76
|
for (let i = 0; i < n; i++) {
|
|
79
77
|
const current = originalVertices[i];
|
|
80
78
|
const next = originalVertices[(i + 1) % originalVertices.length];
|
|
81
|
-
|
|
82
|
-
const len = Math.floor(
|
|
83
|
-
|
|
79
|
+
|
|
80
|
+
const len = Math.floor(
|
|
81
|
+
Math.sqrt((next.x - current.x) ** 2 + (next.y - current.y) ** 2) / 1 / 8
|
|
82
|
+
);
|
|
83
|
+
|
|
84
84
|
for (let j = 0; j < len; j++) {
|
|
85
85
|
const ratio = len === 1 ? 0 : j / (len - 1); // 0 到 1 之间
|
|
86
86
|
const expansionPoint = {
|
|
87
87
|
x: current.x + (next.x - current.x) * ratio,
|
|
88
|
-
y: current.y + (next.y - current.y) * ratio
|
|
88
|
+
y: current.y + (next.y - current.y) * ratio,
|
|
89
89
|
};
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
expansionVertices.push(expansionPoint);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
return expansionVertices;
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -103,8 +103,8 @@ export function drawCloudLines(path, vertices) {
|
|
|
103
103
|
const config = {
|
|
104
104
|
radius: 15,
|
|
105
105
|
outward: true,
|
|
106
|
-
density: 0.8
|
|
106
|
+
density: 0.8,
|
|
107
107
|
};
|
|
108
108
|
|
|
109
109
|
drawCloudPath(path, expansionVertices, config);
|
|
110
|
-
}
|
|
110
|
+
}
|
package/src/utils/cursor.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
trangle:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
let cursors = {
|
|
2
|
+
pen: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACd0lEQVRYR+2WT2gTQRTGv7eb9JLkmPoHvHkQLy2i94o0KMiyMxgRbwrmpigeFBUJFPHiRegpgiLiQZbMTFoR/4AX7UVQCD14EfGcQkGFiia7T0Yq1HWTbLeGgnSOszPv9/HNex9L2ORFm8zHloD/1gHyff8cEZ0EEAIIyuXybKPR6MZ7biQOCCEaAM6shRHRrFLq7MgF+L5/nIgexUHMHOXz+XIQBMt/CPuXY+h53m7Xdd8BKPWpO6m1bo9EQLVaHet2uwtEtL8P/HMul9sRBMG3kQjwff8WEV3sA2cAp7TW90fSA0KIwwCeAInBxsx8wRhzO0nchqdACDEeRVHbcZztCQA7gjWt9d1+vbYhAfV63Wm3208BTCcAekR0Win1YFCjb0iAEOIygJsJgB9EdEIppYdNWWYBUsoDzPwawFgMssLMwhjzfBjcfs8sQAjRBCBjkC9RFB1ttVqv0sBTC6hUKoVisSiZeS8RPVZKLQghbNTayP29lpn5iDHmTVp4KgGrVhsAO1cLv9RaH7LuSSlvMPN5AF8BVOIpl0bIwCeoVqvlXq+3CGDbmmI2VI5prZXdm5qaypVKpbH5+fmVNMB1BZGUcoaZr8UvMXPXcZx7RHSn2Wy+BWBFZVp9HajVavmlpaVPa6xPBBDRdaXUTCZ6vynwPK/kuu4lAFeHFWbmK8aYpCwYdvXX978ckFLuY2Zra9plm+9F2sNDe8COXKFQ+AhgPEXRxYmJicl6vR6lOJv8hEm71oUwDB86jrNnQOH3YRh6c3NzH7LCB+aAbcJOp3OQiKaZeRcRWUe+A+gQ0TPXdXX85yKLkMxRnAWWdGdLwJYDPwFn/dQhz4OkVwAAAABJRU5ErkJggg==',
|
|
3
|
+
line: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA4klEQVRYR+3WTQrCMBCG4fmy8AYeyo2kBS+goAsPJPhzhTEIHso7SEa6EETsXzJjN+m+vE8nhQlo4gcT96kAygRMJ1BV1RrAg5nvbT+7GaCJi8gJwBPAiplvvxAmAO/9hoiOAJyIRCLahhAufwF8fLkjIhGRfQjh8JcjGBtvUGpHkBJXA6TGVQA58WxAbjwLoBFPBmjFkwCa8dEA7fgogEV8MMAqPghgGe8FWMc7Ad8r1Tm3Y+az9i26dRl57xcArkQ061upOajObVjX9TLGOG+7TOSE3++qreNUTAGUCUw+gRcF0dchsIjssQAAAABJRU5ErkJggg==',
|
|
4
|
+
round:
|
|
5
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACpUlEQVRYR+2WPW8TQRCG39mLqUBQuKQiCeJDSiT4DRCFwtk964KQ6BCWoCUfonMJOD1gRAkCjG/ODUmB+AcgpQECCVW6NBFQYecGbbSHEhPfnZ0ijbezduedx7PvzhzhiBcdcX4MAYYV6KsCQRAc29nZMSIyA+ASEZ22JhaRTQCfRCQqFApRo9H4k9fcuQG01mUiegTgTIb4BoAFZg7zQGQCBEHgtdvth0R0r0twTUQ2iMhqjAI427W/NDk5uVitVuM0kEwArfXSnuQdInpGREvNZvPHXuFSqTQ2MjIyLyK3AHhur8bMCwMDuLK/dQLbAMrM/CFN0BhzBUADwEnnDxNFUdQrpmcFrOE6nc4Xd+cdAFNZyZMkWuurRPTOVoKI1j3Pu9jLmD0BfN+/LiKvrCgRPQ7D8G4eUyVnjDF1ALfd71lmtlX5b/UEMMa8BHDDRiilRrvvPAumXC6Px3H8zZ17wcw3+wVYs86O4/hrq9U6n5XwoH1jjAUYB7DGzOf6BfgF4DiAZWa+NgiA1nqFiKYA/GbmE4MCrDDz9CEBfjLz7qvoXmke2L2CtPJlQRljMjVymVBExqIosi0297KNyfO87wObUGs9S0SvncATZr6TOzsA3/efikjFPeMgDMOkoe2TyWpEn12f7yilppvN5vs8EK4bLieNqFgsXqjX6+2+PGAPG2N8AE0XuK2UCrIgXPI3AE65OM3MrV7gmcPIGFMDMOcEbEt+LiK1bk8cNIzs+A7DcDGtapkA1WpVra6uPgAw3yVkm4w1ZjKObcP5t2zyiYmJ+4cex4mi1lorpWr2RaT+I6J1EZlLK/s+0DymSs5UKpXC1taWBjATx/FlpdTuJ1kcx5tKqY9EFBWLxVYvw/Vtwn7gBj2b6YFBhfPGDQGGFfgLW7AHMIfxtKYAAAAASUVORK5CYII=',
|
|
6
|
+
trangle:
|
|
7
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAl0lEQVRYR+2WsQ2DMBBF/w1BaLIIW/gKGJIU31uwCJUzhFGKVIAEjiUr0nd/95+f5DsbGh9rnA8ByIAMnBoIISQz62o805zzO8b4OOp1CuDuuUb4twfJw6wrACuApRBmAPD81P4C8CI5lQC4+wxgFIAMyIAM/L2B5qO4ZArvam7vgprrGEAi2d9ax1WufaGJvmQyIAPNDWzonXsh3WqxKQAAAABJRU5ErkJggg==',
|
|
8
|
+
eraser:
|
|
9
|
+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAA1hJREFUWEfFl09oXUUUxr/vPkzARRFcumhdVGgV8t7MJBFaaC30z0YQMW1AUWyhXVWlYmm7aLWbtiQNFboqoqUFgy1VFBcuuhDRJu2bM0kIRsFkJS7ctC9dNLwQ7pGBtDxe3p9734t04G7uPef7fvfMzJl7iac82I2/c25nzPfe/9ypTscAxphxksOrxlfTNB2ZmpqaywvSEYAx5n2SX9aZVUiOViqV0fn5+WpWkNwAxWLxuUKhcAfAliYmoqojIYRvskDkBrDWngNwop24qkaACCKtYnMBOOcGVDW+faEdwOrzqqqOpmk6Oj09XWmUkxfglqq+mdG8Nuz3CBJCuFqfmxnAGPMOyesdmNem3BSR/bU3MgFYa58BEAC80iUAVPVICOHKY52sAJ8BON2tecxPkmR3uVy+nRmgVCptTZIkvn1vtwAkv/LeH8w1BXUdrxuG+6q6PYTwR2YAa+0bAL7rxrUm96SInM+1C6y1sYmYdQCYXFxc3NmoRTddhM6546p6YR3MQfIt7/2tXI3IGGOTJDmsqoe7hLgmIu8102i5Da21XwN4FsBWAJs7AHkI4DURibuo4WgKYIx5neQPqrqvt7f3l+Xl5XgAnQQQm1LWcUZEzrYKbrUG7qjqX7Xl6+/vfzlN008ANC3pkwZD+mq1umd2dvZBbgBjzEckRwBsF5G79QKxOgA+JrmjaWnJd733bc+ONRUolUobkySZBBAPjg+aGQwNDRUWFhaOkvwQwKa6uBsiciDLPK0BcM5dVtVhVX01hDDfTqRYLG4uFApHAcQrjkcA9orIr+1y4/M1ANbaP1V1PIQQD6BMwzl3XVU3kpxU1VRE2n4xPVkr9Q7WWgWwX0RuZnE3xuwl+ZOqHggh3Ojr63thZmbmnyy5DStgjDlD8tO45ZaWlsbm5uaWW4k5526r6r8i8nZW09q4htvQWvsFgEMAhORF7/14I3Hn3CFV/ZzkLu/9vXUDiELGmH0kjwHYTfJbAGPe+98emwwODm5YWVmZAPC9iJzqxLzhFNQLOeeOqGoEeYnkJZJj5XL579WpGu7p6dk2MTFx/38DiMIDAwPPp2l6bBVkJf4OAoj/hZkXa9OGlYfcOVdK03SY5Iuqei2E8GOe/EaxmT5KuzVplf8fJR1KMBY8k7wAAAAASUVORK5CYII=',
|
|
10
|
+
text: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAA5klEQVRYR+2VPwrCMBSHfwlFvIizq6u7y0vR2Qt4A0dP4AmcLSUUhI6Ozs5epA5NpKBQ1Ni0tAThZUxe8r735Z9A4CYC5wcDsAGngTiOJ8aYRR+HVEp5StP09m0tJwARLQEc+wAAsNJaJ38NsDXGnOsVSCnnAHbPvqbxTgam1tp1lUAIcdBaX+sAb1v0kYCIfs5/rdX5GjYB+J4dBmADbIANsIHWBpRSs7IspeszyrLsAsAO9hQT0R3AyJWgKIpxnudVjFdrbSA4gFJqY62NXOVFUbRPkqT0Kr/66n0Dh4pjADYQ3MADakKSIQVRq+oAAAAASUVORK5CYII=',
|
|
11
|
+
};
|
|
10
12
|
export default cursors;
|