fl-web-component 1.0.7 → 1.0.8

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.
@@ -16109,7 +16109,7 @@ if (typeof window !== 'undefined') {
16109
16109
  // Indicate to webpack that this file can be concatenated
16110
16110
  /* harmony default export */ var setPublicPath = (null);
16111
16111
 
16112
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"fc389ef8-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/index.vue?vue&type=template&id=5b13dc9d&scoped=true
16112
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"537c0758-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/index.vue?vue&type=template&id=5b13dc9d&scoped=true
16113
16113
  var com_graphicsvue_type_template_id_5b13dc9d_scoped_true_render = function render() {
16114
16114
  var _vm = this,
16115
16115
  _c = _vm._self._c;
@@ -42745,7 +42745,7 @@ var component = normalizeComponent(
42745
42745
  )
42746
42746
 
42747
42747
  /* harmony default export */ var com_graphics = (component.exports);
42748
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"fc389ef8-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-flcanvas/index.vue?vue&type=template&id=83d38700&scoped=true
42748
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"537c0758-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-flcanvas/index.vue?vue&type=template&id=83d38700&scoped=true
42749
42749
  var com_flcanvasvue_type_template_id_83d38700_scoped_true_render = function render() {
42750
42750
  var _vm = this,
42751
42751
  _c = _vm._self._c;
@@ -16118,7 +16118,7 @@ if (typeof window !== 'undefined') {
16118
16118
  // Indicate to webpack that this file can be concatenated
16119
16119
  /* harmony default export */ var setPublicPath = (null);
16120
16120
 
16121
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"fc389ef8-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/index.vue?vue&type=template&id=5b13dc9d&scoped=true
16121
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"537c0758-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/index.vue?vue&type=template&id=5b13dc9d&scoped=true
16122
16122
  var com_graphicsvue_type_template_id_5b13dc9d_scoped_true_render = function render() {
16123
16123
  var _vm = this,
16124
16124
  _c = _vm._self._c;
@@ -42754,7 +42754,7 @@ var component = normalizeComponent(
42754
42754
  )
42755
42755
 
42756
42756
  /* harmony default export */ var com_graphics = (component.exports);
42757
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"fc389ef8-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-flcanvas/index.vue?vue&type=template&id=83d38700&scoped=true
42757
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"537c0758-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-flcanvas/index.vue?vue&type=template&id=83d38700&scoped=true
42758
42758
  var com_flcanvasvue_type_template_id_83d38700_scoped_true_render = function render() {
42759
42759
  var _vm = this,
42760
42760
  _c = _vm._self._c;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fl-web-component",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "scripts": {
5
5
  "dev": "vue-cli-service serve",
6
6
  "lint": "eslint \"{src,packages}/**/*.{vue,js}\" --fix",
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div id="instructions"></div>
2
+ <div id="fl-model"></div>
3
3
  </template>
4
4
  <script>
5
5
  var [
@@ -49,7 +49,11 @@
49
49
  var removeSpeed = 200,
50
50
  upSpeed = 200; //控制器移动速度 , //控制跳起时的速度
51
51
  var modelGroup;
52
-
52
+ var roamConfig = {
53
+ loop: false,
54
+ speed: 0, // 最大值为3
55
+ name: ''
56
+ }
53
57
  // 绘制对象映射实例表
54
58
  let drawObjMapInstance = {};
55
59
  import CameraControls from 'camera-controls';
@@ -75,10 +79,6 @@
75
79
  },
76
80
  data() {
77
81
  return {
78
- roamConfig: {
79
- loop: false,
80
- speed: 0, // 最大值为3
81
- },
82
82
  };
83
83
  },
84
84
  created() {
@@ -88,7 +88,7 @@
88
88
  mouse = new this.THREE.Vector2();
89
89
  },
90
90
  mounted() {
91
- instructions = document.getElementById('instructions');
91
+ instructions = document.getElementById('fl-model');
92
92
  this.initRender();
93
93
  this.initScene();
94
94
  this.initCamera();
@@ -165,14 +165,15 @@
165
165
  /*
166
166
  参数:data 模型数据
167
167
  color: '' 初始化模型的颜色 在业务方 有这个需求
168
+ meshNameConfig: {}
168
169
  */
169
- drawModel(data, color = '') {
170
+ drawModel(data, color = '', meshNameConfig) {
170
171
  if (Object.keys(data).length === 0) {
171
172
  return;
172
173
  }
173
174
  const { instances, drawObjs } = parseData(data);
174
175
  if (instances.length > 0) {
175
- modelGroup = handleInstancedMeshModel(instances, drawObjs, '', scene, color);
176
+ modelGroup = handleInstancedMeshModel(instances, drawObjs, '', scene, color, meshNameConfig);
176
177
  scene.add(modelGroup);
177
178
  // this.compileShader();
178
179
  // cameraControls.fitToSphere(scene, true); // TODO 待处理,先用 setModelCenter 进行定位
@@ -355,6 +356,11 @@
355
356
  obj.material.opacity = ele.attr[key];
356
357
  obj.material.transparent = true;
357
358
  break;
359
+ case 'position':
360
+ targetObj.forEach(children => {
361
+ children.position.set(ele.attr[key].x, ele.attr[key].y, ele.attr[key].z)
362
+ })
363
+ break;
358
364
  }
359
365
  }
360
366
  // obj.material.needsUpdate = true;
@@ -497,6 +503,39 @@
497
503
  }
498
504
  });
499
505
  },
506
+ // 删除场景中所有的实体
507
+ removeAll() {
508
+ if (scene) {
509
+ scene.traverse(item => {
510
+ item.material && item.material.dispose();
511
+ item.geometry && item.geometry.dispose();
512
+ if (item instanceof this.THREE.Mesh) {
513
+ item.clear();
514
+ }
515
+ scene.remove(item);
516
+ })
517
+ scene.clear()
518
+ }
519
+ },
520
+ // 销毁场景 释放内存
521
+ destroyScene() {
522
+ cancelAnimationFrame(animateId)
523
+ if (scene) {
524
+ scene.traverse(child => {
525
+ child.material && child.material.dispose()
526
+ child.geometry && child.geometry.dispose()
527
+ child = null
528
+ })
529
+ scene.clear()
530
+ scene = null
531
+ }
532
+ renderer.forceContextLoss()
533
+ renderer.dispose()
534
+ camera = null
535
+ cameraControls = null
536
+ renderer.domElement = null
537
+ renderer = null
538
+ },
500
539
  // 绘制曲线
501
540
  /*
502
541
  参数声明:Object
@@ -526,6 +565,13 @@
526
565
  }
527
566
  },
528
567
  // 绘制贴图曲线
568
+ /*
569
+ 参数声明:Object
570
+ {
571
+ path: [{x:0, y: 0, z: 0}], 坐标点信息
572
+ name: '', // 线条的名字, 用来清除时使用的
573
+ }
574
+ */
529
575
  drawTextureCurve(params) {
530
576
  this.removeObjectByName(params.name);
531
577
  const route = [];
@@ -552,8 +598,10 @@
552
598
  let line = new this.THREE.Line(geometry, material);
553
599
  line.name = params.name;
554
600
  scene.add(line);
601
+ clock = new this.THREE.Clock();
555
602
  }
556
603
  },
604
+ //
557
605
  // 开启漫游
558
606
  /*
559
607
  参数为Object
@@ -564,37 +612,38 @@
564
612
  */
565
613
  startRoam(params) {
566
614
  progress = 0;
567
- this.roamConfig = Object.assign(
568
- {},
569
- {
570
- loop: params.loop,
571
- speed: params.speed,
572
- roamName: params.name,
573
- }
574
- );
615
+ roamConfig = {
616
+ loop: params.loop,
617
+ speed: params.speed,
618
+ }
575
619
  this.drawTextureCurve({
576
620
  name: params.name,
577
621
  path: params.path,
578
622
  });
623
+ roaming = true
579
624
  clock = new this.THREE.Clock();
580
625
  },
581
- // 暂停漫游
582
- pauseRoaming() {
583
- this.$set(this.roamConfig, 'speed', 0);
626
+ // 更新漫游的配置
627
+ /*
628
+ 参数为Object
629
+ */
630
+ updateRoamConfig(params) {
631
+ for (let key in params) {
632
+ roamConfig[key] = key === 'speed' ? params[key] / 300 : params[key]
633
+ }
584
634
  },
585
635
  // 结束/退出漫游
586
636
  endRoam() {
587
637
  roaming = false;
588
638
  progress = 0;
589
- this.removeObjectByName(this.roamConfig.roamName);
590
- this.roamConfig = Object.assign(
591
- {},
592
- {
593
- loop: false,
594
- speed: 0,
595
- roamName: '',
596
- }
597
- );
639
+ this.removeObjectByName(this.roamConfig.name);
640
+ roamConfig = {
641
+ loop: false,
642
+ speed: 0,
643
+ name: '',
644
+ }
645
+ roaming = false
646
+ lineTexture = null
598
647
  },
599
648
  // 相机跟随轨道
600
649
  cameraTrack() {
@@ -611,16 +660,16 @@
611
660
  camera.lookAt(pointBox.x, pointBox.y + 5, pointBox.z);
612
661
  cameraControls.setPosition(point.x, point.y + 5, point.z, false);
613
662
  cameraControls.setTarget(pointBox.x, pointBox.y + 5, pointBox.z, false);
614
- progress += this.roamConfig.speed / 300;
663
+ progress += roamConfig.speed / 300;
615
664
  } else {
616
665
  // 循环漫游
617
- if (this.roamConfig.loop) {
666
+ if (roamConfig.loop) {
618
667
  progress = 0;
619
668
  }
620
669
  }
621
670
  } else {
622
671
  lineTexture = null;
623
- this.roamConfig.progress = 0;
672
+ progress = 0;
624
673
  }
625
674
  },
626
675
  // 全局整体炸开
@@ -1065,7 +1114,7 @@
1065
1114
  };
1066
1115
  </script>
1067
1116
  <style lang="scss" scoped>
1068
- #instructions {
1117
+ #fl-model {
1069
1118
  width: 100%;
1070
1119
  height: 100%;
1071
1120
  cursor: pointer;
@@ -25,7 +25,7 @@ let drawObjMapInstance = {};
25
25
  * @param {Object} instance - 实例对象,包含绘制对象ID和实例ID等数据
26
26
  * @param {Array} drawObjs - 绘制对象数组,包含几何数据
27
27
  */
28
- function handleInstancedMeshModel(instances, drawObjs, type, scene, customColor) {
28
+ function handleInstancedMeshModel(instances, drawObjs, type, scene, customColor, meshNameConfig) {
29
29
  // 第一阶段:构建实例映射表
30
30
  let modelGroup = new THREE.Group();
31
31
  for (let i = 0; i < instances.length; i++) {
@@ -68,10 +68,15 @@ function handleInstancedMeshModel(instances, drawObjs, type, scene, customColor)
68
68
  if (!model) {
69
69
  return;
70
70
  }
71
+ let meshName = ''
72
+ for (const key in meshNameConfig) {
73
+ model.userData[key] = meshNameConfig[key]
74
+ meshName += ':' + meshNameConfig[key]
75
+ }
71
76
  drawObj.MapInstance.forEach((instance, index) => {
72
77
  if (instance.instanceId == instances[i].instanceId) {
73
78
  model.userData.instanceIndex = index;
74
- model.name = instances[i].instanceId;
79
+ model.name = meshName !== '' ? (instances[i].instanceId + meshName) : instances[i].instanceId;
75
80
  const matrixVal = instance.matrix?.val;
76
81
  if (matrixVal) {
77
82
  const m4 = new THREE.Matrix4();
package/src/utils/mock.js CHANGED
@@ -46,7 +46,7 @@ function mockRequest(options = {}) {
46
46
  }
47
47
  }
48
48
 
49
- // openMock = 1;
49
+ openMock = 1;
50
50
 
51
51
  openMock && setTimeout(() => {
52
52
  console.log(`%c已加载本地模型数据`, "color:red;font-size:3em;");