@operato/scene-indoor-map 0.1.1 โ†’ 0.1.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/CHANGELOG.md CHANGED
@@ -3,125 +3,135 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ### [0.1.1](https://github.com/things-scene/operato-scene/compare/v0.1.0...v0.1.1) (2022-01-03)
6
+ ### [0.1.5](https://github.com/things-scene/operato-scene/compare/v0.1.4...v0.1.5) (2022-02-10)
7
7
 
8
8
 
9
- ### :bug: Bug Fix
9
+ ### :rocket: New Features
10
10
 
11
- * [@things-factory](https://github.com/things-factory) 4.0.27 for webpack 5 ([c1b8ce2](https://github.com/things-scene/operato-scene/commit/c1b8ce2a4f069a77b75c82ef8abe2b52974fa5a2))
12
- * @operato/board@0.3.4 ([9f7a868](https://github.com/things-scene/operato-scene/commit/9f7a86820280d24b08dabfd9c9b0f46b4c74feed))
11
+ * move news-ticker to here ([c5e565d](https://github.com/things-scene/operato-scene/commit/c5e565dff6016977766e54b3b74c4f80838f7cd2))
13
12
 
14
13
 
15
14
 
16
- ## [0.1.0](https://github.com/things-scene/operato-scene/compare/v0.0.26...v0.1.0) (2022-01-03)
15
+ ### [0.1.4](https://github.com/things-scene/operato-scene/compare/v0.1.3...v0.1.4) (2022-01-30)
17
16
 
18
17
 
19
18
  ### :rocket: New Features
20
19
 
21
- * applied import.meta.url for native web support ([fe65672](https://github.com/things-scene/operato-scene/commit/fe65672550b15276bd9fa79ab7ac886a8502f8b0))
20
+ * scene-label migrated from things-factory project ([3c9033c](https://github.com/things-scene/operato-scene/commit/3c9033c9af28bdd0377ac4a538ef7d4bfd38d488))
22
21
 
23
22
 
23
+ ### :bug: Bug Fix
24
24
 
25
- ### [0.0.26](https://github.com/things-scene/operato-scene/compare/v0.0.25...v0.0.26) (2022-01-01)
25
+ * applied [@operato](https://github.com/operato) 0.3.24 ([fb4fed0](https://github.com/things-scene/operato-scene/commit/fb4fed0d9fd44d6ae38db6359fdca15fc61f167c))
26
+ * applied [@things-factory](https://github.com/things-factory)@^4.0.40 ([3d4e6cb](https://github.com/things-scene/operato-scene/commit/3d4e6cbe167f605a68333fffe18949adb5247c1d))
27
+ * escape build error ([0258c5f](https://github.com/things-scene/operato-scene/commit/0258c5f6e01fae369607541c63aba64b412b99fe))
28
+ * upgrade [@operato](https://github.com/operato) dependencies ([7d2478e](https://github.com/things-scene/operato-scene/commit/7d2478e72586b662e6c219f0720c78cde5dd7a2d))
29
+ * upgrade [@things-factory](https://github.com/things-factory) and [@operato](https://github.com/operato) ([4d97897](https://github.com/things-scene/operato-scene/commit/4d978970d3c8aba6ecae99e3fa98e431a647e8cb))
26
30
 
27
31
 
28
- ### :bug: Bug Fix
29
32
 
30
- * upgrade [@operato](https://github.com/operato) modules ([ddcb27f](https://github.com/things-scene/operato-scene/commit/ddcb27f7562243d9fc581fed3090c3be42ce1d28))
33
+ ### [0.1.3](https://github.com/things-scene/operato-scene/compare/v0.1.2...v0.1.3) (2022-01-28)
31
34
 
32
35
 
36
+ ### :rocket: New Features
33
37
 
34
- ### [0.0.25](https://github.com/things-scene/operato-scene/compare/v0.0.24...v0.0.25) (2021-12-28)
38
+ * add graphql, mqtt scene component ([e223063](https://github.com/things-scene/operato-scene/commit/e223063b562f6a6a7b6ff12f3e32df30aa920da8))
35
39
 
36
40
 
37
41
  ### :bug: Bug Fix
38
42
 
39
- * @hatiolab/things-scene@2.7.31 ([b0d1706](https://github.com/things-scene/operato-scene/commit/b0d17064bb42ed4a60008a15d48700a328711ab8))
40
- * upgrade [@things-factory](https://github.com/things-factory) dependencies ([0deff8d](https://github.com/things-scene/operato-scene/commit/0deff8dcaba7a7e81061246298b889f6165091d7))
43
+ * applied [@operato](https://github.com/operato)@^0.3.20 ([9a1dcbd](https://github.com/things-scene/operato-scene/commit/9a1dcbd2d1ca7f95b498503c87242b6d57ee3482))
44
+ * applied [@things-factory](https://github.com/things-factory)@^4.0.38 and [@operato](https://github.com/operato)@^0.3.18 ([d506c2d](https://github.com/things-scene/operato-scene/commit/d506c2d8a58341eee235079eff9b79bfa1fe350f))
41
45
 
42
46
 
43
47
 
44
- ### [0.0.24](https://github.com/things-scene/operato-scene/compare/v0.0.23...v0.0.24) (2021-12-21)
45
-
48
+ ### [0.1.2](https://github.com/things-scene/operato-scene/compare/v0.1.1...v0.1.2) (2022-01-13)
46
49
 
47
50
  ### :bug: Bug Fix
48
51
 
49
- * upgrade [@operato](https://github.com/operato) dependencies ([19adafd](https://github.com/things-scene/operato-scene/commit/19adafde63c6a819c905c8b325b8fca6a3ff9e70))
50
-
51
-
52
-
53
- ### [0.0.23](https://github.com/things-scene/operato-scene/compare/v0.0.22...v0.0.23) (2021-12-16)
52
+ - @operato/board upgrade to 0.3.18 ([4c5d232](https://github.com/things-scene/operato-scene/commit/4c5d232d185642624501a369449df21b322384ae))
54
53
 
54
+ ### [0.1.1](https://github.com/things-scene/operato-scene/compare/v0.1.0...v0.1.1) (2022-01-03)
55
55
 
56
56
  ### :bug: Bug Fix
57
57
 
58
- * upgrade dependencies ([3939f9f](https://github.com/things-scene/operato-scene/commit/3939f9f4069f97a5370b616375e3ecf36cf41704))
58
+ - [@things-factory](https://github.com/things-factory) 4.0.38 for webpack 5 ([c1b8ce2](https://github.com/things-scene/operato-scene/commit/c1b8ce2a4f069a77b75c82ef8abe2b52974fa5a2))
59
+ - @operato/board@0.3.4 ([9f7a868](https://github.com/things-scene/operato-scene/commit/9f7a86820280d24b08dabfd9c9b0f46b4c74feed))
59
60
 
61
+ ## [0.1.0](https://github.com/things-scene/operato-scene/compare/v0.0.26...v0.1.0) (2022-01-03)
60
62
 
63
+ ### :rocket: New Features
61
64
 
62
- ### [0.0.22](https://github.com/things-scene/operato-scene/compare/v0.0.21...v0.0.22) (2021-12-14)
65
+ - applied import.meta.url for native web support ([fe65672](https://github.com/things-scene/operato-scene/commit/fe65672550b15276bd9fa79ab7ac886a8502f8b0))
63
66
 
67
+ ### [0.0.26](https://github.com/things-scene/operato-scene/compare/v0.0.25...v0.0.26) (2022-01-01)
64
68
 
65
69
  ### :bug: Bug Fix
66
70
 
67
- * @hatiolab/things-scene upgrade ([7841684](https://github.com/things-scene/operato-scene/commit/78416849b0a336c55450e15f09d3cb58cc5e8e51))
71
+ - upgrade [@operato](https://github.com/operato) modules ([ddcb27f](https://github.com/things-scene/operato-scene/commit/ddcb27f7562243d9fc581fed3090c3be42ce1d28))
68
72
 
73
+ ### [0.0.25](https://github.com/things-scene/operato-scene/compare/v0.0.24...v0.0.25) (2021-12-28)
69
74
 
75
+ ### :bug: Bug Fix
70
76
 
71
- ### [0.0.21](https://github.com/things-scene/operato-scene/compare/v0.0.20...v0.0.21) (2021-12-14)
77
+ - @hatiolab/things-scene@2.7.31 ([b0d1706](https://github.com/things-scene/operato-scene/commit/b0d17064bb42ed4a60008a15d48700a328711ab8))
78
+ - upgrade [@things-factory](https://github.com/things-factory) dependencies ([0deff8d](https://github.com/things-scene/operato-scene/commit/0deff8dcaba7a7e81061246298b889f6165091d7))
72
79
 
80
+ ### [0.0.24](https://github.com/things-scene/operato-scene/compare/v0.0.23...v0.0.24) (2021-12-21)
73
81
 
74
82
  ### :bug: Bug Fix
75
83
 
76
- * @things-factory/operato-board@^4.0.17 ([713a319](https://github.com/things-scene/operato-scene/commit/713a319b55a9d27fca98a1b577898863cf89a765))
84
+ - upgrade [@operato](https://github.com/operato) dependencies ([19adafd](https://github.com/things-scene/operato-scene/commit/19adafde63c6a819c905c8b325b8fca6a3ff9e70))
77
85
 
86
+ ### [0.0.23](https://github.com/things-scene/operato-scene/compare/v0.0.22...v0.0.23) (2021-12-16)
78
87
 
88
+ ### :bug: Bug Fix
79
89
 
80
- ### [0.0.20](https://github.com/things-scene/operato-scene/compare/v0.0.19...v0.0.20) (2021-12-13)
90
+ - upgrade dependencies ([3939f9f](https://github.com/things-scene/operato-scene/commit/3939f9f4069f97a5370b616375e3ecf36cf41704))
81
91
 
92
+ ### [0.0.22](https://github.com/things-scene/operato-scene/compare/v0.0.21...v0.0.22) (2021-12-14)
82
93
 
83
94
  ### :bug: Bug Fix
84
95
 
85
- * upgrade [@operato](https://github.com/operato) version ([fbc79cf](https://github.com/things-scene/operato-scene/commit/fbc79cfcc60f92a5c6c510dc07a42bc92b810777))
96
+ - @hatiolab/things-scene upgrade ([7841684](https://github.com/things-scene/operato-scene/commit/78416849b0a336c55450e15f09d3cb58cc5e8e51))
86
97
 
98
+ ### [0.0.21](https://github.com/things-scene/operato-scene/compare/v0.0.20...v0.0.21) (2021-12-14)
87
99
 
100
+ ### :bug: Bug Fix
88
101
 
89
- ### [0.0.19](https://github.com/things-scene/operato-scene/compare/v0.0.18...v0.0.19) (2021-12-12)
102
+ - @things-factory/operato-board@^4.0.17 ([713a319](https://github.com/things-scene/operato-scene/commit/713a319b55a9d27fca98a1b577898863cf89a765))
90
103
 
104
+ ### [0.0.20](https://github.com/things-scene/operato-scene/compare/v0.0.19...v0.0.20) (2021-12-13)
91
105
 
92
106
  ### :bug: Bug Fix
93
107
 
94
- * upgrade @hatiolab/things-scene, @operato/board,property-editor,data-grist ([e6743bd](https://github.com/things-scene/operato-scene/commit/e6743bda29852fdae779b893a1e825a1cb73f0f9))
108
+ - upgrade [@operato](https://github.com/operato) version ([fbc79cf](https://github.com/things-scene/operato-scene/commit/fbc79cfcc60f92a5c6c510dc07a42bc92b810777))
95
109
 
110
+ ### [0.0.19](https://github.com/things-scene/operato-scene/compare/v0.0.18...v0.0.19) (2021-12-12)
96
111
 
112
+ ### :bug: Bug Fix
97
113
 
98
- ### [0.0.18](https://github.com/things-scene/operato-scene/compare/v0.0.17...v0.0.18) (2021-12-11)
114
+ - upgrade @hatiolab/things-scene, @operato/board,property-editor,data-grist ([e6743bd](https://github.com/things-scene/operato-scene/commit/e6743bda29852fdae779b893a1e825a1cb73f0f9))
99
115
 
116
+ ### [0.0.18](https://github.com/things-scene/operato-scene/compare/v0.0.17...v0.0.18) (2021-12-11)
100
117
 
101
118
  ### :bug: Bug Fix
102
119
 
103
- * indoor-map and table editor interaction pattern ([5447b9b](https://github.com/things-scene/operato-scene/commit/5447b9b36bab108db6845ccd6c82a5c6ece7ffbf))
104
- * upgrade things-factory version ([e7fc142](https://github.com/things-scene/operato-scene/commit/e7fc142a70d3d54b61fdd076522dede8a5908dcd))
105
-
106
-
120
+ - indoor-map and table editor interaction pattern ([5447b9b](https://github.com/things-scene/operato-scene/commit/5447b9b36bab108db6845ccd6c82a5c6ece7ffbf))
121
+ - upgrade things-factory version ([e7fc142](https://github.com/things-scene/operato-scene/commit/e7fc142a70d3d54b61fdd076522dede8a5908dcd))
107
122
 
108
123
  ### [0.0.17](https://github.com/things-scene/operato-scene/compare/v0.0.16...v0.0.17) (2021-12-11)
109
124
 
110
-
111
125
  ### :bug: Bug Fix
112
126
 
113
- * upgrade operato to 0.2.45 ([0032bad](https://github.com/things-scene/operato-scene/commit/0032bad0914e7fd7eae5e8cc1574df20ce7cb851))
114
-
115
-
127
+ - upgrade operato to 0.2.45 ([0032bad](https://github.com/things-scene/operato-scene/commit/0032bad0914e7fd7eae5e8cc1574df20ce7cb851))
116
128
 
117
129
  ### [0.0.16](https://github.com/things-scene/operato-scene/compare/v0.0.15...v0.0.16) (2021-12-09)
118
130
 
119
-
120
131
  ### :rocket: New Features
121
132
 
122
- * add indoor-map and gauge component ([35d8a75](https://github.com/things-scene/operato-scene/commit/35d8a75f7d691dd23ea299fd772b79d19eec5d2f))
123
-
133
+ - add indoor-map and gauge component ([35d8a75](https://github.com/things-scene/operato-scene/commit/35d8a75f7d691dd23ea299fd772b79d19eec5d2f))
124
134
 
125
135
  ### :bug: Bug Fix
126
136
 
127
- * upgrade [@operato](https://github.com/operato) dependencies ([92985c7](https://github.com/things-scene/operato-scene/commit/92985c76d2b7e6d3941c2c809a85b3676a579b0e))
137
+ - upgrade [@operato](https://github.com/operato) dependencies ([92985c7](https://github.com/things-scene/operato-scene/commit/92985c76d2b7e6d3941c2c809a85b3676a579b0e))
package/dist/beacon.d.ts CHANGED
@@ -1,19 +1,9 @@
1
- import { Component } from '@hatiolab/things-scene';
1
+ import { Component, ComponentNature } from '@hatiolab/things-scene';
2
2
  declare const Beacon_base: typeof Component;
3
3
  export default class Beacon extends Beacon_base {
4
4
  render(context: CanvasRenderingContext2D): void;
5
5
  is3dish(): boolean;
6
- get nature(): {
7
- mutable: boolean;
8
- resizable: boolean;
9
- rotatable: boolean;
10
- properties: {
11
- type: string;
12
- label: string;
13
- name: string;
14
- property: string;
15
- }[];
16
- };
6
+ get nature(): ComponentNature;
17
7
  get controls(): never[];
18
8
  }
19
9
  export {};
package/dist/beacon.js CHANGED
@@ -6,37 +6,44 @@ const NATURE = {
6
6
  mutable: false,
7
7
  resizable: true,
8
8
  rotatable: true,
9
- properties: [{
9
+ properties: [
10
+ {
10
11
  type: 'number',
11
12
  label: 'z-pos',
12
13
  name: 'zPos',
13
14
  property: 'zPos'
14
- }, {
15
+ },
16
+ {
15
17
  type: 'string',
16
18
  label: 'mac-address',
17
19
  name: 'macAddr',
18
20
  property: 'macAddress'
19
- }, {
21
+ },
22
+ {
20
23
  type: 'string',
21
24
  label: 'identifier',
22
25
  name: 'identifier',
23
26
  property: 'identifier'
24
- }, {
27
+ },
28
+ {
25
29
  type: 'string',
26
30
  label: 'uuid',
27
31
  name: 'uuid',
28
32
  property: 'uuid'
29
- }, {
33
+ },
34
+ {
30
35
  type: 'number',
31
36
  label: 'major',
32
37
  name: 'major',
33
38
  property: 'major'
34
- }, {
39
+ },
40
+ {
35
41
  type: 'number',
36
42
  label: 'minor',
37
43
  name: 'minor',
38
44
  property: 'minor'
39
- }]
45
+ }
46
+ ]
40
47
  };
41
48
  export default class Beacon extends RectPath(Component) {
42
49
  render(context) {
@@ -1 +1 @@
1
- {"version":3,"file":"beacon.js","sourceRoot":"","sources":["../src/beacon.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE7D,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE,CAAC;YACX,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;SACjB,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,YAAY;SACvB,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,YAAY;SACvB,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;SACjB,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB,EAAE;YACD,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB,CAAC;CACH,CAAA;AAGD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,QAAQ,CAAC,SAAS,CAAC;IAErD,MAAM,CAAC,OAAiC;QACtC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG;YACrB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,g+PAAg+P;SACx+P,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\nimport { Component, RectPath } from '@hatiolab/things-scene';\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [{\n type: 'number',\n label: 'z-pos',\n name: 'zPos',\n property: 'zPos'\n }, {\n type: 'string',\n label: 'mac-address',\n name: 'macAddr',\n property: 'macAddress'\n }, {\n type: 'string',\n label: 'identifier',\n name: 'identifier',\n property: 'identifier'\n }, {\n type: 'string',\n label: 'uuid',\n name: 'uuid',\n property: 'uuid'\n }, {\n type: 'number',\n label: 'major',\n name: 'major',\n property: 'major'\n }, {\n type: 'number',\n label: 'minor',\n name: 'minor',\n property: 'minor'\n }]\n}\n\n\nexport default class Beacon extends RectPath(Component) {\n\n render(context: CanvasRenderingContext2D) {\n this.model.fillStyle = {\n type: 'pattern',\n fitPattern: true,\n image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAF3ZJREFUeJztnXm4nuOZwH852Q4iQkYtEQlSrX1JbEGssVddloyxXKMLM6bFKJ0yGIpOW5RqRy1lCKmOtrax1DYEtTSEppZERYooKokkcrIn55s/7nyXz+k573O/73c/7/t+33f/ruu+uHLO+e77fb7neZ/tXsBxHMdxHMdxHMdxHMdxHMdxHMdxHMdxHMdxHMdxHMdxHMdxSkevog1oMfoBg4G/W/XfAav+rT/QF2gDKsBKYBmwFFgCzANmA3NW/b+TEz5A7OkLfBHYFtgK2AwYDmwCrGvw+UuBd4E/A28D04BXgCnALIPPd2rwAVI/Q4DdV8loZGD0K8iWD4DngWeBZ4DJyEzkOLnRD9gPuAJ4HVkSlVUWAPcC/wxsHKMxHAdk2XQwcAswl+I7flaZBJwFDDVtHadl2QK4CtkgF925LaUTeAI4DjkgcBw1vYFxwNMU35HzkDnAj4BhFo3nNC9rAGcgp0NFd9oiZDnwS2DHehvSaS5WA85GjkiL7JwLgY5VsgRZBhVlz33ADvU0arPQyse8fYBTgAuA9SPpmIPcUUzn03uL95E9zWzk0m8p0il7snENPr1cXBdZCm2ySrYENkeWhdZUgLuBc4A3I3y+U2LGAq9i+9ZdCDwOXAIcAmyY07O0I2/7U4DxyGC0fK5lyJH2wJyexymQIchb0arzvAL8ENgbOQouC0OBk4G7kLsQi2f9K3BCng/h5Ecv5LJsPvV3lFeRZdnmuT5BdtqBI4E7kFmu3uf/LX7p2FQMRc786+kUC4CfAzvlbLs1awGnAi9Tf3ucnLPtTgTGUd/N99vAmcCaOdudB7sBdyKew1nb505gnbwNd+qnHbiR7F/868A/IKdIzc5mwA3IUXOWtnoPcdJ0GoSNgRfJ9mVPRzaibblbXTybIr5mWWaUZcA3c7fYSc1eZLvwm49cFhblpl4mtgeeJNsL5ha8DUvLCXx66ZZGxgOfK8DesjMOudRM254TgbXzN9dJ4gLSf5F/Bg4owtgGYhByepe2baciUZROCbiK9F/gDYgLh6NjLOlnk/eQ0GOnINqQjp7mS5sNHFGEsU3AYNJ7IXwEbFeEsa1OL+Bm0n1Zk/BIOgu+Rboj4Y+Rjb+TIz8j3eC4EY+cs2RvxDcrzUziy62cuAz9F9OJvPEce4aTLmnFXxAXfSciZ6D/QhYBRxVjZsswiHR+btNoMNeURgqY+jLivq255e4ADkMuvMrEIMS1Yxjiej941b+182lmxWpWxYVIwNUsJFHc28jR9Iq8jQ7QH/EU/rLy959CTsU8X5chO6J31Z4L7FKMmZ9hDaQjXAQ8iCwx0uybupMlwB+QA4qTkawrZaAPEs+ufY7bijGzORmMvD01DT8fGFWIlcIQZBn4KNKZ6x0QGpmJXOYdQrFBW23A7ejtPr0YM5uLNuARdA3egaT/zJt2xM1lIsUmWqggR6rXASNjPnACfYB7AjZWZRmwRzFmNg8Xom/ssTnbtj5wKeVNKjcJOJY4CR2S6I/E5mtsfB9JRuFkYDSyIdU09Ek52rUe8GNgsdK2ouUtpH3yHCiD0B8B/2+OdjUNA4EZ6Br44pxsagfOR5ZyRXf6LDIV2afkxXDgQ6Vtp+ZoV1Og9SC9l3yOqseiH7BllwfIL83oGHRuKQuRgC1HwT7ovug/IUkIYjKA+kJ3Q53iLWSvMBE5jHgAeAhZw08G3kH2V9a6O5BTpDxeLmcqbXosB1santWQLH6hxlyCFKqJySilLRqZCtyELCV2J12AVm8kjPgg4DvIZWkaP6gkeZh4WSVruVNpz1dysKWhuRhdQ/5rZDu+Sn33GMuQ/FFfR+5GrOmFeMieR/0pfD4A9oxgYy3rIPEhIVtm49GIPTIM8Z8KNeIjxFsatJEtAKsqf0KcI/M+utxyld0fZ7R7OZJYLyb7obsnujqyHQ3Lrwg33gLiZfXrD/xaYUN3MgnxRSrat20N4DTkdj3Lc1xO3Ge4XmHDcsrjQlMadkX3BZ4WSX87siTKMmNonfTypD+yDM0yo9xMvDuTtdD5pPndSBceJdxovydOvqp+yGY1TSdaDJxL+VPcrIO4nqR1gfkl8QbJUUobdo6kv+EYQ7ixOonjodsb/QlL7XLqCxFsickY0t/j/DfxllsaV5SHI+luOP6PcGPFco/+iUJ3rVxBucocpGEg6bxtK8ieJAbbonMjavmUpjsSbqQlxEm2cKpCd+2S6tgINhTB6aRLuhDLDeQmhe67I+luGDRvtJ9E0Lsr+hvqOTTfm+xA4BN0z78cWaJZM5zwd7AS+HwE3Q3BRoTfZIuwv+ldGwlh1XSOj4BtjPWXhZHoXfU/BDaIYMO1Ct3XRNDbEFxEMY2jXYfPAbaOoL9MbIN+kDyM/aZ9OOG9yCe0YBbM3oTf4iuRBAeWaI8YF9I6x4wj0S+3YoTJ/o9C71cj6C01hxJulLuMdQ5Ed0nVidT0ayUOQrdx78DeVX6UQu9zxjpLzx2EG2V/Y51XKnRWkDDaVuR0dO3zQATdkxR6R0TQW0pWJxyVNx3b9e4IdKdWE2nN6lJVtPsz68jEkxU6zzPWWVrGEW6Mc4x1anI2zSe/SLuyog11noatK8oAwvXcpxjqKzUhr91ObD12t0BXdy+2u3dPrAZshaTAOQhxC98Z2LAge8ag8906yVjvLxQ6m/5OpA8wj+RGeNZY560BfRXgefJzVR8InIiUfptBcmdcgKRPvYh8c11p3NJnYDuLHK7QeYahvlKyJ+FGsIwWXB9d3cLdDHX2xPbABHRBYT3Ja0g12fbItg5G5ypv6X7Tj/DL8yFDfaXkPwk3umWK/AsV+mL7+2yCPtugVj5ANrYxZz1NsoUXjXWGlt+LkSVp0/IsyQ0wzVBXG5IVJPQlx6p+1As4i/pmjJA8S7x0Oe3o4sgtl35fUejbx1BfqWgnvNy5ylDffgFdFSS+PQZrAfcr9FvIfOLVXdTUY7nOUN8GCn3nG+orFXsQfnjL8FVNgc/DDPVVWR8pUZDH4KjKSuK4pQ8gvBeZg22MzNSAvqbdh5xN+Ite10hXG+KJm6RrJvaXgoNJV5bMWmIcVV+t0Huwob5Qor55hrpKxQSSH/wNQ12aJBDfN9QHkijhOYXe2DOJdRKJbRR6rzfUd5JC33BDfaXhjyQ/9ARDXRcEdFWQaEZL/kuhMw+Zh32xzFcCOt811LVlQFcFuTNpKvoS9oX6N0N9oaQA7xjqArkBL3pg1Moz2B4B/4dCp1WZ5z6ED3Ny26jn5Zi3KeGN3B+NdPUGdgr8juXpVTsye5SJ0djmuX1Q8TtW1aJWIBv1JHLLKpPXANFM+a8Z6doSOX1J4nEjXSAbY+vALgsuQfZFFkxGIg+TsIzbfzXw89zqrec1QIYHfr4MCWayQJP1/XkjXf2Q07l6mILc+B+GHC6MQSLoJiCRjVnZELtZpELYR24HI10gRVuTyG2A5MX3SV5TTjfUFXJnmWOo6+iAriR5Azgg8PnrIMesWYuDWrqInxvQtQTZP1jwtYCuTnLKapnXDBLKTGK5aQ5FnoWm7zScmPHvHkRcNEJ7oY+R2+zDET+ktGyLXR2V0B6xP3bxNG8Hft6LdDVWMpPXABkc+PlHhrpCX5LVfUt/slXW/R0S896R4m/uB/4eeXumxcpb4HXF71gtfWYpfifUp0zIa4CE6mWENoBpCBWssTqz35X0nqULgeOQY8y03Ee2NEj7Zvib7piJXEQmYZUBU9MfcqnBktcACVUNstwXhN4s7xvpyXLReA3S0bLyXdIvtawuRFcgbvZJWLkKafpDLpWo8hogoQCfNMuNkJ6Qro+NdG2e4W9uqlPnbNLXzlib/Dqu1bJnKTIgk4gdNAbkN0BCJw7LjPSsrvidT4x0pa09+Bek4E69PJHhb6zqJIYcBTXtryW0DLW640kkrwESehirAaI5+rPStWbK33/LSG+WI/G0tvZEnp22pQZIyC+oMyc9lrrSxkBYDcwsG3yrO4PQssfqHgTCBwKxKmB9hrwGSOhLtVpPajqP1Zsn7b7Jah+wXoa/WWCkO/RSWG6kB8InhEsMdfVIXgMk9DBWA0TTaFa60m72t8BmjZ7lVGqugV4I+7gtMtID4e/JB0gGFhOemq1OWtLuBfoBXzLQe1TK319B+GZayzqBn1sdgPQmvFxrqQFidfpRIXwLa1UIJuSS3R3fpr44jSNI7+r9JnZLn5DLkNWFr6YeSFMNkNDxYJZ1dU98GPi51ZHn0xn+ZiTZa2wMAn6c4e+eyqivKwORbC1JhC4StWj6g9WyMZG8Bkio01qWWQu5zW9hpOc9suXxupz0/lGrI+WqszgDPpbhb7pDczFq5caj6Q+hPmVCXgMk9GaxrH8Xcka0GiAg1ZHS0hcpDnQmuvYfgeTnzeJTtQC7eh6acnRWYQua/mA1WyVSlhnEMpN5yOt0KHau0reS7V6lL1LQZzJwPN1f5G2LVPh9BanClIVfk81NvjtCGRT/ip0bT2iAdFBfMFnpOJ5wcE9ofatFk/LHMhOhpsZeSJYjA3siEu04y+AzV2I7W74Q0GcZ539NQJeFy06p2IXwF7qrka7+yAlHkq4rjXSBLD1ClVqLkNsNn3EtxTN+z1BfKCtNjDJw3ZLXEktzJGr1tlsKvBT4nUONdIFEKJYtq0kHcqRsxVjCrh2WdV1CfSHLEXvpCVWYvdxQ1w8CuirYVitaE9mgFj1rVMU6T+9tAX0rsFsiDwroqtCkZaEfI/mhnzTUtVdAVwVJhmbJSMJLuzzkV8bP1Y5kkE/S+YyhvrEBXRXyKXiUO1eR/NCLsPMG7YNcJCXpe9NIVy3j0NVDjCW/R3cLnYZjFXrPNdR3YUBXJ3Jp2XRUkw4kSSgjYhpCybIr2MVr13IKxQySKcSJ0w5tmCvYZjp8OKDLMitNqRhKuKEtizRq8uXeZ6ivlmPId7n1BHZ7gFo0md0nG+prI1yn8AZDfaVjJskPf7+hrt7IbWuSvk4kVWkMdkCWcTEHRidwGbaBSrVoZuGsvmXdsZtC30mG+kpH6FJtEbZFGkMZHSvAbwz1dWUA8CPkItB6cLwG7B3R9i8QvvtYRNgFPg2XBvRVyDFxdRF8nXADWN5RDCFcdqGT7K4cWrZA3sYWF4ozkH2OZdmz7rhTYcuNxjpfDuizrENSSjYk3OjXGuv8hULnc8QtqVxlKPDvhIsJdZV5yOx7KPGWU7Xsq7CpE1tXlo0UOq37RpA8OkVXXiI5E/gsZCCFEgRo2Ro54Ql5DZwC/NxIp4b1gD2RTvZ5JH/VAGTGW4C407+BbIInE46UtKIdaa+Qe/tdpI9uTOJswpfFh5Gjm0lRXEL4TWFdfVYzi8ynSWvfpeRywm21Eruk2FWmBHRa709LyyjCX4D1bfAIwnuRCnKbn5d/WhnZB90dzq3GerdV6LzXWGepmUZyYyzGPvfqZQGdVfmBsd5GYQPCx+IVZPlnGb8DcIVC7zHGOkvNeYQbxLKoJ4gLRugepirjjHWXnTQlrM8y1r06EmiVpHMeOeXiLQvDCFdNehf7E5vDAzprZ7A9jXWXlTZkSatplxewz2h4qkJvnocnpWEixbzJb1LorSDOjtYb0TLyM/QvDWuvg15IbEdId6u8rD7DMYQbZlIEvQPQx27Mxq6+RtnohQR6adqhAnwjgg1fUui1rLPYUPRGahOGGsgiG2FXtkOC/rUzSbO9wfoiJ1HawXFHBBt6IXdiId1NGRyl5duEG+hl4lxoHqfQXZWlZC/YWTbWJhy81vUNbh1jAnLJGNL9ETmVOSgrg5D46VBDxTri0zjH1crV5FR+OBLbky40+APsKtfW0obEdYT0fzeC7oZDcz8xnXhvkhsV+mvlBWzj2avsh7hvPII4dVrOmr0Qt/Q0MSrzSXYJqodTFPo/IadKtmVnMNIYoQY7P5L+3kiCtTSDZBGyPLQ68vwmf3vsfRs2g2QEuqjAWukg3r5rMHL4EbLhkkj6G5KL0XXKGNM9SEe/XWFDV3ma+iP5dqdn9456IyzHIe2W5pk+AcbUqTeJ6xU2zEWW384q1iJ8m1ohfYXXNLQhF1JpB8mEOvW+mPDZ88kekLQ5criQ5llmYZsXoCu7oPP1irVaaGjOQPcl/mNkO84hfMtfKyvI7jemudm/OONn/zDFM1SQdJ4x9lZVVkfc90N2zCTOqVnD0xtdINF8YOPIthyNOOVpO1fWzexkxWfPJVuam7tS2P8w9s6hXdFeSraUU2Ja9kTXiI8TP9hrc+APSnuyZIvX+oVVkCjEtPxU8bkrgIuI7+I/Ft2s/GhkO5oCTSaNCvLFxqYduftI+nIfzPjZmtmjKrNIX6Zup4DdM4i7Ga8yBCmNEHrGZcAXc7Cn4fkccoMaatBObBM8JLE73cewTEdiqdOi8UHqKt/KoOc7/O0gWYnMLqGKtRb0Q+9G7xvzFByBrlHnApvlZFM7cBpykvYAcg/SXeEbDUknVz3J+2SLiRiNXIY+hHju5ul8eS26Z3seezf6pucWdI37Ora5mWJzGOkHR1VieNTG4hvonmkhuvqHThcGIvW9NY38OxonoD9UqSlJ3iF+PiwLjkSfn7iRBn3pGIXef+huyj9N1zN7VOVruVudjj2Q4CrNs2Qpgup0QZONsSq3UO6sJPXMHlWZTnlfBKMIl52oyqv4haAZaVxAbqOcHehQ6h8cVTkhZ9s17EI4M3tV5uP7DlP6IzXwtB3odso3SCZhN0Bep5ismD0xmnAVqqqsIE6UaMszmHA+rVq5j/JM4ZazR1WOzvUJeuZQdEFvVfmnYsxsDYYh9wHaL+NFYP1CLP0slrNHVV7O9Qm651TSZay/tBgzW4vt0E/nFeSoeKsiDF3FId3YZCXWOYy1tKHL4VsrNxdiaYuyK+kGSQdwfCGWSmHNWAPk+Ryfo8q6iFNhGjsnUL49YdOzM/pTk6pcR75ZMg5OaV8WGZvb08gdR6jefVcZT7mP3puaUegiEWvlJfJbcj2f0rYsYllfvif6IPmU05aSuwkfHIWzLVJsJs0XtxSJsYg57ecxe1QlZmK7rcnmXHkl5TqKbmmGoA9uqpUXiFflNo/ZoyoPR7C/N/ISSRvXvgLJ0uKUjDWB35K+c3Ug+xlLNDXarcU62cJvMtjQgV8Clpo+wFWk/2Kt7xS0QUKWYpnx5cgM+mcQL9GcY8xRpDsGrmCXc6uI2aOCRA5uZ/QM41PqvhfPY9VwjCDdvsSqFkgRs0dVrGo73qPUtxyJrPTNeIPSjtS/CwXvdGBT4uvAgJ7YshKbxAcXKnRNQy5snSZgNMlJy6zywKbxOI4lFhVo1wPm9PD5KxE3k5aqGdgKrIbMJrWXXSuRtD4Wl1kHkM8A0Cx7NjV4np2QjXftZ09FXjZOE7MR4pd1IrCJ4ec+Q/GDoypWRS/7APsDJwF74bfiTkbKMntUZSkwNOoTO04KyjR7VOWnUZ/YcZSMpfjB0J0sRjbbTh24j3793Er8bPNZ6LPqv54Q2imMss4eVenA6/zVhc8g9VHW2aNKP+TY9/GiDXFaj/0pfobQyDzqr6PYsvgMkp3xlHv2qNKOJIh+qmhDnNahUWaPqsymPDnCGgqfQbLRKLNHldWRnLnPFm2I0/zsR/EzQhb5EHcwTI3PIOkZj11wVZ4MQErbTSraEKd52ZfiZ4J65F3k6NdxovAkxXfyeuVk81ZxHBp/9qjKW/jS2olAM8weVTnRuG2cFmcfiu/UljIVD35yDJlI8Z3aWsZZNpDTujTb7FGVKXi6HseARyi+M8eSAw3bqSnxdWgy6yN+V83KMUUbUHZ8gCSzE829DBlZtAFlxwdIMs2eb3ZA0QaUHR8gybxftAGRebdoA8qOD5BknkFKvDUr9xRtgNP4/AvFnzbFkNdx93fHiO9RfIe2lNdoTJd9p8SMQXJMhUoplFlmInUHVzNum6almY8wYzEYOf4dhsR5l3kfV0HS/swCXkFmjkqhFjmO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO4ziO45SO/wfae14WxexiAAAAAABJRU5ErkJggg=='\n }\n\n this.drawFill(context)\n }\n\n is3dish() {\n return true\n }\n\n get nature() {\n return NATURE\n }\n\n get controls() {\n return []\n }\n}\n\nComponent.register('beacon', Beacon)\n"]}
1
+ {"version":3,"file":"beacon.js","sourceRoot":"","sources":["../src/beacon.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAmB,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAE7E,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;SACjB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,YAAY;SACvB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,YAAY;SACvB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,MAAM;SACjB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB;KACF;CACF,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,QAAQ,CAAC,SAAS,CAAC;IACrD,MAAM,CAAC,OAAiC;QACtC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG;YACrB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,IAAI;YAChB,KAAK,EACH,g+PAAg+P;SACn+P,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,EAAE,CAAA;IACX,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, RectPath } from '@hatiolab/things-scene'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'z-pos',\n name: 'zPos',\n property: 'zPos'\n },\n {\n type: 'string',\n label: 'mac-address',\n name: 'macAddr',\n property: 'macAddress'\n },\n {\n type: 'string',\n label: 'identifier',\n name: 'identifier',\n property: 'identifier'\n },\n {\n type: 'string',\n label: 'uuid',\n name: 'uuid',\n property: 'uuid'\n },\n {\n type: 'number',\n label: 'major',\n name: 'major',\n property: 'major'\n },\n {\n type: 'number',\n label: 'minor',\n name: 'minor',\n property: 'minor'\n }\n ]\n}\n\nexport default class Beacon extends RectPath(Component) {\n render(context: CanvasRenderingContext2D) {\n this.model.fillStyle = {\n type: 'pattern',\n fitPattern: true,\n image:\n 'data:image/png;base64,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'\n }\n\n this.drawFill(context)\n }\n\n is3dish() {\n return true\n }\n\n get nature() {\n return NATURE\n }\n\n get controls() {\n return []\n }\n}\n\nComponent.register('beacon', Beacon)\n"]}
package/dist/camera.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Component, POINT, Properties } from '@hatiolab/things-scene';
1
+ import { Component, ComponentNature, POINT, Properties } from '@hatiolab/things-scene';
2
2
  declare const Camera_base: typeof Component;
3
3
  export default class Camera extends Camera_base {
4
4
  render(context: CanvasRenderingContext2D): void;
@@ -10,9 +10,7 @@ export default class Camera extends Camera_base {
10
10
  y: number;
11
11
  z: number;
12
12
  }[];
13
- static get nature(): {
14
- props: never[];
15
- };
13
+ static get nature(): ComponentNature;
16
14
  __drawLines(context: CanvasRenderingContext2D, transformed: POINT[]): void;
17
15
  __drawRect(context: CanvasRenderingContext2D, transformed: POINT[]): void;
18
16
  onchange(after: Properties, before: Properties): void;
package/dist/camera.js CHANGED
@@ -3,9 +3,7 @@ import { Component, RectPath } from '@hatiolab/things-scene';
3
3
  * Copyright ยฉ HatioLab Inc. All rights reserved.
4
4
  */
5
5
  import Quaternion from './quaternion';
6
- const NATURE = {
7
- props: []
8
- };
6
+ const NATURE = {};
9
7
  const points = [
10
8
  { x: 0, y: 0, z: 0 },
11
9
  { x: -50, y: +100, z: -100 },
@@ -21,7 +19,9 @@ function rotate_by_quaternion_axis(points, pitch, roll, yaw) {
21
19
  var qy = Quaternion.fromAxis({ x: 0, y: 1, z: 0 }, roll);
22
20
  var qz = Quaternion.fromAxis({ x: 0, y: 0, z: 1 }, yaw);
23
21
  var q = qz.multiply(qy).multiply(qx);
24
- return points.map(point => { return q.multiVec(point); });
22
+ return points.map(point => {
23
+ return q.multiVec(point);
24
+ });
25
25
  }
26
26
  function rotate_by_euler(points, pitch, roll, yaw) {
27
27
  var cosa = Math.cos(yaw);
@@ -115,9 +115,7 @@ export default class Camera extends RectPath(Component) {
115
115
  onchange(after, before) {
116
116
  if (after.hasOwnProperty('data')) {
117
117
  let data = after.data;
118
- if (!data.hasOwnProperty('yaw')
119
- && !data.hasOwnProperty('pitch')
120
- && !data.hasOwnProperty('roll'))
118
+ if (!data.hasOwnProperty('yaw') && !data.hasOwnProperty('pitch') && !data.hasOwnProperty('roll'))
121
119
  return;
122
120
  this.set({
123
121
  yaw: data.yaw,
@@ -126,9 +124,7 @@ export default class Camera extends RectPath(Component) {
126
124
  });
127
125
  return;
128
126
  }
129
- if (!after.hasOwnProperty('yaw')
130
- && !after.hasOwnProperty('pitch')
131
- && !after.hasOwnProperty('roll'))
127
+ if (!after.hasOwnProperty('yaw') && !after.hasOwnProperty('pitch') && !after.hasOwnProperty('roll'))
132
128
  return;
133
129
  var self = this;
134
130
  var diff_yaw = after.yaw - before.yaw;
@@ -1 +1 @@
1
- {"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, POINT, Properties, RectPath } from '@hatiolab/things-scene';\n\n/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\nimport Quaternion from './quaternion';\n\ntype VEC = { x: number, y: number, z: number}\n\nconst NATURE = {\n props: []\n};\n\nconst points = [\n { x: 0, y: 0, z: 0 },\n { x: -50, y: +100, z: -100 },\n { x: +50, y: +100, z: -100 },\n { x: +50, y: -100, z: -100 },\n { x: -50, y: -100, z: -100 },\n { x: 0, y: 0, z: -100 }, // ๋ Œ์ฆˆ์˜ ์ค‘์‹ฌ์„ ํ‘œํ˜„ํ•˜๋Š” ์ขŒํ‘œ.\n { x: 0, y: +50, z: -100 } // ์นด๋ฉ”๋ผ์˜ ์œ„์ชฝ์„ ํ‘œ์‹œํ•˜๊ธฐ์œ„ํ•œ ์ขŒํ‘œ.\n];\n\n/* rotate_by_euler์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋„๋ก ์ˆœ์„œ๋ฅผ ๋งž์ถค. */\nfunction rotate_by_quaternion_axis(points: VEC[], pitch: number, roll: number, yaw: number) {\n var qx = Quaternion.fromAxis({ x: 1, y: 0, z: 0 }, pitch);\n var qy = Quaternion.fromAxis({ x: 0, y: 1, z: 0 }, roll);\n var qz = Quaternion.fromAxis({ x: 0, y: 0, z: 1 }, yaw);\n\n var q = qz.multiply(qy).multiply(qx);\n\n return points.map(point => { return q.multiVec(point) });\n}\n\nfunction rotate_by_euler(points: VEC[], pitch: number, roll: number, yaw: number) {\n\n var cosa = Math.cos(yaw);\n var sina = Math.sin(yaw);\n\n var cosb = Math.cos(roll);\n var sinb = Math.sin(roll);\n\n var cosc = Math.cos(pitch);\n var sinc = Math.sin(pitch);\n\n var Axx = cosa * cosb;\n var Axy = cosa * sinb * sinc - sina * cosc;\n var Axz = cosa * sinb * cosc + sina * sinc;\n\n var Ayx = sina * cosb;\n var Ayy = sina * sinb * sinc + cosa * cosc;\n var Ayz = sina * sinb * cosc - cosa * sinc;\n\n var Azx = -sinb;\n var Azy = cosb * sinc;\n var Azz = cosb * cosc;\n\n return points.map(point => {\n let { x, y, z } = point;\n\n return {\n x: Axx * x + Axy * y + Axz * z,\n y: Ayx * x + Ayy * y + Ayz * z,\n z: Azx * x + Azy * y + Azz * z\n }\n });\n}\n\nexport default class Camera extends RectPath(Component) {\n\n render(context: CanvasRenderingContext2D) {\n\n var transformed = this.transformed;\n\n if (this.transformed[5].z > 0) {\n this.__drawLines(context, transformed)\n this.__drawRect(context, transformed)\n } else {\n this.__drawRect(context, transformed)\n this.__drawLines(context, transformed)\n }\n\n }\n\n private _anim_alpha_yaw: number = 0\n private _anim_alpha_roll: number = 0\n private _anim_alpha_pitch: number = 0\n\n get transformed() {\n var {\n yaw = 0,\n pitch = 0,\n roll = 0\n } = this.model;\n\n return rotate_by_quaternion_axis(\n points,\n pitch - (this._anim_alpha_pitch || 0),\n roll - (this._anim_alpha_roll || 0),\n yaw - (this._anim_alpha_yaw || 0)\n );\n }\n\n static get nature() {\n return NATURE\n }\n\n __drawLines(context: CanvasRenderingContext2D, transformed: POINT[]) {\n var center = this.center;\n\n context.beginPath();\n\n // 2D์ขŒํ‘œ์—์„œ Y์ถ•์ด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์ด๋ฏ€๋กœ center์—์„œ ๋นผ์ค€๋‹ค.\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y);\n context.lineTo(center.x + transformed[1].x, center.y - transformed[1].y);\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y);\n context.lineTo(center.x + transformed[2].x, center.y - transformed[2].y);\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y);\n context.lineTo(center.x + transformed[3].x, center.y - transformed[3].y);\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y);\n context.lineTo(center.x + transformed[4].x, center.y - transformed[4].y);\n\n context.strokeStyle = this.model.strokeStyle;\n context.stroke();\n context.closePath();\n }\n\n __drawRect(context: CanvasRenderingContext2D, transformed: POINT[]) {\n var center = this.center;\n\n context.beginPath();\n\n // 2D์ขŒํ‘œ์—์„œ Y์ถ•์ด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์ด๋ฏ€๋กœ center์—์„œ ๋นผ์ค€๋‹ค.\n context.moveTo(center.x + transformed[1].x, center.y - transformed[1].y);\n context.lineTo(center.x + transformed[2].x, center.y - transformed[2].y);\n context.lineTo(center.x + transformed[3].x, center.y - transformed[3].y);\n context.lineTo(center.x + transformed[4].x, center.y - transformed[4].y);\n context.lineTo(center.x + transformed[1].x, center.y - transformed[1].y);\n\n context.fillStyle = this.model.fillStyle;\n context.strokeStyle = this.model.strokeStyle;\n context.fill();\n context.stroke();\n\n context.beginPath();\n context.ellipse(center.x + transformed[6].x, center.y - transformed[6].y, 5, 5, 0, 0, Math.PI * 2);\n context.stroke();\n }\n\n /*\n * Performance ๋ฌธ์ œ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ ๋ณด๋ฅ˜\n * ๋งŒ์•ฝ, ์ ์šฉํ•˜๋ ค๋ฉด,\n * - ๋จผ์ €, ์•„๋ž˜ ๋ฉ”์˜๋“œ์˜ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ๋‹ค. (_onchange ==> onchange)\n * - ๊ทธ๋ฆฌ๊ณ , ์•„๋ž˜์˜ Component.memoize(Camera.prototype, 'transformed', false); ๋ถ€๋ถ„์„ ์ฝ”๋ฉ˜ํŠธ ์ฒ˜๋ฆฌํ•œ๋‹ค.\n */\n onchange(after: Properties, before: Properties) {\n if (after.hasOwnProperty('data')) {\n let data = after.data;\n if (!data.hasOwnProperty('yaw')\n && !data.hasOwnProperty('pitch')\n && !data.hasOwnProperty('roll'))\n return;\n\n this.set({\n yaw: data.yaw,\n pitch: data.pitch,\n roll: data.roll\n })\n return;\n }\n\n if (!after.hasOwnProperty('yaw')\n && !after.hasOwnProperty('pitch')\n && !after.hasOwnProperty('roll'))\n return;\n\n var self = this;\n var diff_yaw = after.yaw - before.yaw;\n var diff_pitch = after.pitch - before.pitch;\n var diff_roll = after.roll - before.roll;\n\n this._anim_alpha_yaw = diff_yaw;\n this._anim_alpha_pitch = diff_pitch;\n this._anim_alpha_roll = diff_roll;\n\n this.animate({\n step: function (delta: number) {\n self._anim_alpha_yaw = diff_yaw * (1 - delta);\n self._anim_alpha_pitch = diff_pitch * (1 - delta);\n self._anim_alpha_roll = diff_roll * (1 - delta);\n\n self.invalidate();\n },\n duration: 1000,\n delta: 'circ',\n options: {\n x: 1\n },\n ease: 'inout'\n }).start();\n }\n\n}\n\n// Component.memoize(Camera.prototype, 'transformed', false);\n\nComponent.register('camera', Camera);\n"]}
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentNature, POINT, Properties, RectPath } from '@hatiolab/things-scene'\n\n/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\nimport Quaternion from './quaternion'\n\ntype VEC = { x: number; y: number; z: number }\n\nconst NATURE: ComponentNature = {}\n\nconst points = [\n { x: 0, y: 0, z: 0 },\n { x: -50, y: +100, z: -100 },\n { x: +50, y: +100, z: -100 },\n { x: +50, y: -100, z: -100 },\n { x: -50, y: -100, z: -100 },\n { x: 0, y: 0, z: -100 }, // ๋ Œ์ฆˆ์˜ ์ค‘์‹ฌ์„ ํ‘œํ˜„ํ•˜๋Š” ์ขŒํ‘œ.\n { x: 0, y: +50, z: -100 } // ์นด๋ฉ”๋ผ์˜ ์œ„์ชฝ์„ ํ‘œ์‹œํ•˜๊ธฐ์œ„ํ•œ ์ขŒํ‘œ.\n]\n\n/* rotate_by_euler์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋„๋ก ์ˆœ์„œ๋ฅผ ๋งž์ถค. */\nfunction rotate_by_quaternion_axis(points: VEC[], pitch: number, roll: number, yaw: number) {\n var qx = Quaternion.fromAxis({ x: 1, y: 0, z: 0 }, pitch)\n var qy = Quaternion.fromAxis({ x: 0, y: 1, z: 0 }, roll)\n var qz = Quaternion.fromAxis({ x: 0, y: 0, z: 1 }, yaw)\n\n var q = qz.multiply(qy).multiply(qx)\n\n return points.map(point => {\n return q.multiVec(point)\n })\n}\n\nfunction rotate_by_euler(points: VEC[], pitch: number, roll: number, yaw: number) {\n var cosa = Math.cos(yaw)\n var sina = Math.sin(yaw)\n\n var cosb = Math.cos(roll)\n var sinb = Math.sin(roll)\n\n var cosc = Math.cos(pitch)\n var sinc = Math.sin(pitch)\n\n var Axx = cosa * cosb\n var Axy = cosa * sinb * sinc - sina * cosc\n var Axz = cosa * sinb * cosc + sina * sinc\n\n var Ayx = sina * cosb\n var Ayy = sina * sinb * sinc + cosa * cosc\n var Ayz = sina * sinb * cosc - cosa * sinc\n\n var Azx = -sinb\n var Azy = cosb * sinc\n var Azz = cosb * cosc\n\n return points.map(point => {\n let { x, y, z } = point\n\n return {\n x: Axx * x + Axy * y + Axz * z,\n y: Ayx * x + Ayy * y + Ayz * z,\n z: Azx * x + Azy * y + Azz * z\n }\n })\n}\n\nexport default class Camera extends RectPath(Component) {\n render(context: CanvasRenderingContext2D) {\n var transformed = this.transformed\n\n if (this.transformed[5].z > 0) {\n this.__drawLines(context, transformed)\n this.__drawRect(context, transformed)\n } else {\n this.__drawRect(context, transformed)\n this.__drawLines(context, transformed)\n }\n }\n\n private _anim_alpha_yaw: number = 0\n private _anim_alpha_roll: number = 0\n private _anim_alpha_pitch: number = 0\n\n get transformed() {\n var { yaw = 0, pitch = 0, roll = 0 } = this.model\n\n return rotate_by_quaternion_axis(\n points,\n pitch - (this._anim_alpha_pitch || 0),\n roll - (this._anim_alpha_roll || 0),\n yaw - (this._anim_alpha_yaw || 0)\n )\n }\n\n static get nature() {\n return NATURE\n }\n\n __drawLines(context: CanvasRenderingContext2D, transformed: POINT[]) {\n var center = this.center\n\n context.beginPath()\n\n // 2D์ขŒํ‘œ์—์„œ Y์ถ•์ด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์ด๋ฏ€๋กœ center์—์„œ ๋นผ์ค€๋‹ค.\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y)\n context.lineTo(center.x + transformed[1].x, center.y - transformed[1].y)\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y)\n context.lineTo(center.x + transformed[2].x, center.y - transformed[2].y)\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y)\n context.lineTo(center.x + transformed[3].x, center.y - transformed[3].y)\n context.moveTo(center.x + transformed[0].x, center.y - transformed[0].y)\n context.lineTo(center.x + transformed[4].x, center.y - transformed[4].y)\n\n context.strokeStyle = this.model.strokeStyle\n context.stroke()\n context.closePath()\n }\n\n __drawRect(context: CanvasRenderingContext2D, transformed: POINT[]) {\n var center = this.center\n\n context.beginPath()\n\n // 2D์ขŒํ‘œ์—์„œ Y์ถ•์ด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์ด๋ฏ€๋กœ center์—์„œ ๋นผ์ค€๋‹ค.\n context.moveTo(center.x + transformed[1].x, center.y - transformed[1].y)\n context.lineTo(center.x + transformed[2].x, center.y - transformed[2].y)\n context.lineTo(center.x + transformed[3].x, center.y - transformed[3].y)\n context.lineTo(center.x + transformed[4].x, center.y - transformed[4].y)\n context.lineTo(center.x + transformed[1].x, center.y - transformed[1].y)\n\n context.fillStyle = this.model.fillStyle\n context.strokeStyle = this.model.strokeStyle\n context.fill()\n context.stroke()\n\n context.beginPath()\n context.ellipse(center.x + transformed[6].x, center.y - transformed[6].y, 5, 5, 0, 0, Math.PI * 2)\n context.stroke()\n }\n\n /*\n * Performance ๋ฌธ์ œ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ ๋ณด๋ฅ˜\n * ๋งŒ์•ฝ, ์ ์šฉํ•˜๋ ค๋ฉด,\n * - ๋จผ์ €, ์•„๋ž˜ ๋ฉ”์˜๋“œ์˜ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ๋‹ค. (_onchange ==> onchange)\n * - ๊ทธ๋ฆฌ๊ณ , ์•„๋ž˜์˜ Component.memoize(Camera.prototype, 'transformed', false); ๋ถ€๋ถ„์„ ์ฝ”๋ฉ˜ํŠธ ์ฒ˜๋ฆฌํ•œ๋‹ค.\n */\n onchange(after: Properties, before: Properties) {\n if (after.hasOwnProperty('data')) {\n let data = after.data\n if (!data.hasOwnProperty('yaw') && !data.hasOwnProperty('pitch') && !data.hasOwnProperty('roll')) return\n\n this.set({\n yaw: data.yaw,\n pitch: data.pitch,\n roll: data.roll\n })\n return\n }\n\n if (!after.hasOwnProperty('yaw') && !after.hasOwnProperty('pitch') && !after.hasOwnProperty('roll')) return\n\n var self = this\n var diff_yaw = after.yaw - before.yaw\n var diff_pitch = after.pitch - before.pitch\n var diff_roll = after.roll - before.roll\n\n this._anim_alpha_yaw = diff_yaw\n this._anim_alpha_pitch = diff_pitch\n this._anim_alpha_roll = diff_roll\n\n this.animate({\n step: function (delta: number) {\n self._anim_alpha_yaw = diff_yaw * (1 - delta)\n self._anim_alpha_pitch = diff_pitch * (1 - delta)\n self._anim_alpha_roll = diff_roll * (1 - delta)\n\n self.invalidate()\n },\n duration: 1000,\n delta: 'circ',\n options: {\n x: 1\n },\n ease: 'inout'\n }).start()\n }\n}\n\n// Component.memoize(Camera.prototype, 'transformed', false);\n\nComponent.register('camera', Camera)\n"]}
package/dist/floor.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Container } from '@hatiolab/things-scene';
1
+ import { ComponentNature, Container } from '@hatiolab/things-scene';
2
2
  export default class Floor extends Container {
3
3
  private _clickPoint?;
4
4
  get hasTextProperty(): boolean;
@@ -6,18 +6,5 @@ export default class Floor extends Container {
6
6
  get mutable(): boolean;
7
7
  get resizable(): boolean;
8
8
  get rotatable(): boolean;
9
- get nature(): {
10
- mutable: boolean;
11
- resizable: boolean;
12
- rotatable: boolean;
13
- properties: {
14
- type: string;
15
- label: string;
16
- name: string;
17
- property: {
18
- icon: string;
19
- action: (floor: Floor) => void;
20
- };
21
- }[];
22
- };
9
+ get nature(): ComponentNature;
23
10
  }
package/dist/floor.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"floor.js","sourceRoot":"","sources":["../src/floor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAI7D,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,UAAU,KAAY;oBAC5B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAA;oBACtC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;oBAC7B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;gBAC9B,CAAC;aACF;SACF;KACF;CACF,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS;IAG1C,IAAI,eAAe;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;CAsTF;AAED,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\nimport { Component, Container } from '@hatiolab/things-scene'\n\nimport IndoorMap from './indoor-map'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'action',\n label: 'remove',\n name: 'remove',\n property: {\n icon: 'remove-circle',\n action: function (floor: Floor) {\n let indoor = floor.parent as IndoorMap\n indoor.removeComponent(floor)\n indoor.set('activeIndex', 0)\n }\n }\n }\n ]\n}\n\nexport default class Floor extends Container {\n private _clickPoint?: Component\n\n get hasTextProperty() {\n return false\n }\n\n get showMoveHandle() {\n return false\n }\n\n /*\n * PATH ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.\n *\n * ์ผ๋ฐ˜์ ์œผ๋กœ PATH๋Š” ๋ฐ”์šด๋“œ ์ƒ์„ฑ์„ ์œ„ํ•ด์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.(return false)\n * ๊ทธ๋Ÿฌ๋‚˜, ๊ฐ ๊ผญ์ง€์ ๋“ค์ด ๊ฐœ๋ณ„๋กœ ์›€์ง์ด๋Š” ๋‹ค๊ฐํ˜•๋ฅ˜๋Š” path ๋ผ๋Š” ๋ชจ๋ธ๋ฐ์ดํƒ€๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ์ง์ ‘์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค.(return true)\n *\n * Immutable ์ปดํฌ๋„ŒํŠธ์˜ ํ˜•์ƒ์„ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ”์šด๋“œ๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์‚ฌ์ด์ฆˆ๋‚˜, ํŠน๋ณ„ํ•œ ์ปจํŠธ๋กค์„ ํ†ตํ•ด์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.\n */\n get mutable() {\n return false\n }\n\n /*\n * BOUND๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌ์‚ฌ์ด์ฆˆ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.\n *\n * ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉด์ ์„ ๊ฐ–๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€์ฒด๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.(return true)\n * ๊ทธ๋Ÿฌ๋‚˜, LINE ๋“ฑ ๋ฉด์ ์„ ๊ฐ€์ง€์ง€์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋„๋ก ์ •์˜ํ•œ๋‹ค.(return false)\n */\n get resizable() {\n return false\n }\n\n /*\n * ํšŒ์ „์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.\n *\n * ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.(return true)\n */\n get rotatable() {\n return false\n }\n\n get nature() {\n return NATURE\n }\n\n // drawLocationMarkers(locations) {\n // for (let uuid in locations) {\n // let locInfo = locations[uuid]\n // let props = locInfo.props || {}\n\n // props.width = props.width || 10\n // props.height = props.height || 10\n\n // let currentTime = new Date().getTime()\n // // let diffTime = 500\n // let diffTime = currentTime - locInfo.lastUpdateTime\n\n // if (diffTime < locInfo.updateInterval) {\n // let movingObject = this.findById(uuid)\n // if (movingObject) {\n // // props.yaw = 0;\n // // props.roll = 0;\n\n // movingObject.set(props)\n // for (let key in props) {\n // movingObject[key] = props[key]\n // }\n // } else {\n // // TODO: marker์˜ ์ดˆ๊ธฐ๊ฐ’ ๊ด€๋ จ ๋กœ์ง ์ •๋ฆฌ ํ•„์š”.\n\n // let config = Object.assign(\n // {\n // type: locInfo.type || 'rect',\n // // type: locInfo.type || \"camera\",\n // id: uuid,\n // fillStyle: 'red',\n // left: props.center.x - props.width * 0.5,\n // top: props.center.y - props.height * 0.5,\n // cx: props.center.x,\n // cy: props.center.y\n // },\n // props\n // )\n\n // let marker = Model.compile(config)\n\n // this.addComponent(marker)\n\n // // movingObject = this.findById(uuid)\n // // if(movingObject) {\n // // movingObject.set(props);\n // // }\n // }\n // } else {\n // let movingObject = this.findById(uuid)\n // this.removeComponent(movingObject)\n // }\n\n // this.invalidate()\n // }\n // }\n\n // simulate(point) {\n // // for(let i in this.components) {\n // // if(this.components[i].model.type != 'beacon')\n // // continue;\n // //\n // // let beacon = this.components[i]\n // // let distance = Math.sqrt(Math.pow(beacon.center.x - point.x, 2) + Math.pow(beacon.center.y - point.y, 2)) * 0.01\n // // let rssi = -10 * Math.log10(distance) + (beacon.txPower || -71)\n // //\n // // let randRssi = gaussian(rssi, Math.pow(4.894686948810031, 2))\n // //\n // // rssi = randRssi.ppf(Math.random())\n // //\n // // console.log(rssi);\n // // }\n\n // let beacons: {\n // distance: number;\n // gaussian: number;\n // txPower: number;\n // }[] = []\n\n // for (let i in this.components) {\n // if (this.components[i].model.type != 'beacon') continue\n\n // let beacon = this.components[i]\n\n // beacon.distance = Math.sqrt(\n // Math.pow(beacon.center.x - point.x, 2) +\n // Math.pow(beacon.center.y - point.y, 2)\n // )\n // beacon.gaussian = gaussian(\n // beacon.model.txPower || -71,\n // Math.pow(3.209, 2)\n // )\n // beacon.txPower = beacon.gaussian.ppf(Math.random())\n\n // beacons.push(beacon)\n // }\n\n // beacons = beacons.slice(0)\n\n // this.calculatePosition(beacons, point)\n // }\n\n // calculatePosition(nodeArr, position) {\n // let beacons = nodeArr\n\n // beacons.sort(function(a, b) {\n // let rssiA = -10 * Math.log10(a.distance) + a.txPower\n // let rssiB = -10 * Math.log10(b.distance) + b.txPower\n\n // return Math.abs(rssiA) - Math.abs(rssiB)\n // })\n\n // let beaconCombs = this.k_combinations(beacons.slice(0, 4), 3)\n // let positions = []\n\n // for (let i in beaconCombs) {\n // let beaconComb = beaconCombs[i]\n // let beaconA = beaconComb[0]\n // let beaconB = beaconComb[1]\n // let beaconC = beaconComb[2]\n\n // let xa = beaconA.center.x\n // let ya = beaconA.center.y\n // let xb = beaconB.center.x\n // let yb = beaconB.center.y\n // let xc = beaconC.center.x\n // let yc = beaconC.center.y\n // let ra = beaconA.distance\n // let rb = beaconB.distance\n // let rc = beaconC.distance\n\n // // let ra = Math.sqrt(Math.pow(beaconA.center.x - position.x, 2) + Math.pow(beaconA.center.y - position.y, 2)) * 0.01\n // // let rb = Math.sqrt(Math.pow(beaconB.center.x - position.x, 2) + Math.pow(beaconB.center.y - position.y, 2)) * 0.01\n // // let rc = Math.sqrt(Math.pow(beaconC.center.x - position.x, 2) + Math.pow(beaconC.center.y - position.y, 2)) * 0.01\n\n // let rssiA = -10 * Math.log10(beaconA.distance * 0.01) + beaconA.txPower\n // let rssiB = -10 * Math.log10(beaconB.distance * 0.01) + beaconB.txPower\n // let rssiC = -10 * Math.log10(beaconC.distance * 0.01) + beaconC.txPower\n\n // ra = this.calculateDistance(beaconA.txPower, rssiA) * 100\n // rb = this.calculateDistance(beaconB.txPower, rssiB) * 100\n // rc = this.calculateDistance(beaconC.txPower, rssiC) * 100\n\n // let xaSq = xa * xa,\n // xbSq = xb * xb,\n // xcSq = xc * xc,\n // yaSq = ya * ya,\n // ybSq = yb * yb,\n // ycSq = yc * yc,\n // raSq = ra * ra,\n // rbSq = rb * rb,\n // rcSq = rc * rc\n // let numerator1 =\n // (xb - xa) * (xcSq + ycSq - rcSq) +\n // (xa - xc) * (xbSq + ybSq - rbSq) +\n // (xc - xb) * (xaSq + yaSq - raSq)\n // let denominator1 = 2 * (yc * (xb - xa) + yb * (xa - xc) + ya * (xc - xb))\n // let y = numerator1 / denominator1\n // let numerator2 =\n // rbSq - raSq + xaSq - xbSq + yaSq - ybSq - 2 * (ya - yb) * y\n // let denominator2 = 2 * (xa - xb)\n // let x = numerator2 / denominator2\n\n // if (Number.isFinite(x) && Number.isFinite(y)) {\n // positions.push({\n // x: x,\n // y: y\n // })\n // }\n // }\n\n // let avgPosition = this.averageOfPositions(positions)\n\n // if (this._simPosition) this.removeComponent(this._simPosition)\n\n // this._simPosition = Model.compile({\n // type: 'ellipse',\n // cx: avgPosition.x,\n // cy: avgPosition.y,\n // rx: 10,\n // ry: 10,\n // fillStyle: 'navy'\n // })\n\n // this.addComponent(this._simPosition)\n // }\n\n // calculateDistance(txPower, rssi) {\n // if (rssi == 0) {\n // return -1.0 // if we cannot determine distance, return -1.\n // }\n\n // let ratio = (rssi * 1.0) / txPower\n // if (ratio < 1.0) {\n // return Math.pow(ratio, 10)\n // } else {\n // let accuracy = 0.89976 * Math.pow(ratio, 7.7095) + 0.111\n // return accuracy\n // }\n // }\n\n // calculateAngle(p1, p2, p3) {\n // let l1 = Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2),\n // l2 = Math.pow(p2.x - p3.x, 2) + Math.pow(p2.y - p3.y, 2),\n // l3 = Math.pow(p3.x - p1.x, 2) + Math.pow(p3.y - p1.y, 2)\n\n // return Math.acos((l1 + l2 - l3) / Math.sqrt(4 * l1 * l2))\n // }\n\n // averageOfPositions(p) {\n // let sumOfX = 0\n // let sumOfY = 0\n\n // for (let i in p) {\n // let point = p[i]\n // sumOfX += point.x\n // sumOfY += point.y\n // }\n\n // return {\n // x: sumOfX / p.length,\n // y: sumOfY / p.length\n // }\n // }\n\n // k_combinations(set, k) {\n // var i, j, combs, head, tailcombs\n\n // // There is no way to take e.g. sets of 5 elements from\n // // a set of 4.\n // if (k > set.length || k <= 0) {\n // return []\n // }\n\n // // K-sized set has only one K-sized subset.\n // if (k == set.length) {\n // return [set]\n // }\n\n // // There is N 1-sized subsets in a N-sized set.\n // if (k == 1) {\n // combs = []\n // for (i = 0; i < set.length; i++) {\n // combs.push([set[i]])\n // }\n // return combs\n // }\n\n // // Assert {1 < k < set.length}\n\n // // Algorithm description:\n // // To get k-combinations of a set, we want to join each element\n // // with all (k-1)-combinations of the other elements. The set of\n // // these k-sized sets would be the desired result. However, as we\n // // represent sets with lists, we need to take duplicates into\n // // account. To avoid producing duplicates and also unnecessary\n // // computing, we use the following approach: each element i\n // // divides the list into three: the preceding elements, the\n // // current element i, and the subsequent elements. For the first\n // // element, the list of preceding elements is empty. For element i,\n // // we compute the (k-1)-computations of the subsequent elements,\n // // join each with the element i, and store the joined to the set of\n // // computed k-combinations. We do not need to take the preceding\n // // elements into account, because they have already been the i:th\n // // element so they are already computed and stored. When the length\n // // of the subsequent list drops below (k-1), we cannot find any\n // // (k-1)-combs, hence the upper limit for the iteration:\n // combs = []\n // for (i = 0; i < set.length - k + 1; i++) {\n // // head is a list that includes only our current element.\n // head = set.slice(i, i + 1)\n // // We take smaller combinations from the subsequent elements\n // tailcombs = this.k_combinations(set.slice(i + 1), k - 1)\n // // For each (k-1)-combination we join it with the current\n // // and store it to the set of k-combinations.\n // for (j = 0; j < tailcombs.length; j++) {\n // combs.push(head.concat(tailcombs[j]))\n // }\n // }\n // return combs\n // }\n\n // onclick(e) {\n // return\n\n // let point = this.transcoordC2S(e.offsetX, e.offsetY)\n\n // if (this._clickPoint) {\n // this.removeComponent(this._clickPoint)\n // }\n\n // this._clickPoint = Model.compile({\n // type: 'ellipse',\n // cx: point.x,\n // cy: point.y,\n // rx: 10,\n // ry: 10,\n // fillStyle: 'red'\n // })\n\n // this.addComponent(this._clickPoint)\n // this.simulate(point)\n // // let self = this\n // // setTimeout(function() {\n // // self.simulate(point)\n // // }, 500)\n // this.invalidate()\n // }\n}\n\nComponent.register('floor', Floor)\n"]}
1
+ {"version":3,"file":"floor.js","sourceRoot":"","sources":["../src/floor.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAmB,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAI9E,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,UAAU,KAAY;oBAC5B,IAAI,MAAM,GAAG,KAAK,CAAC,MAAmB,CAAA;oBACtC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;oBAC7B,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;gBAC9B,CAAC;aACF;SACF;KACF;CACF,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS;IAG1C,IAAI,eAAe;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;CAsTF;AAED,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA","sourcesContent":["/*\n * Copyright ยฉ HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, Container } from '@hatiolab/things-scene'\n\nimport IndoorMap from './indoor-map'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'action',\n label: 'remove',\n name: 'remove',\n property: {\n icon: 'remove-circle',\n action: function (floor: Floor) {\n let indoor = floor.parent as IndoorMap\n indoor.removeComponent(floor)\n indoor.set('activeIndex', 0)\n }\n }\n }\n ]\n}\n\nexport default class Floor extends Container {\n private _clickPoint?: Component\n\n get hasTextProperty() {\n return false\n }\n\n get showMoveHandle() {\n return false\n }\n\n /*\n * PATH ๋ฆฌ์ŠคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.\n *\n * ์ผ๋ฐ˜์ ์œผ๋กœ PATH๋Š” ๋ฐ”์šด๋“œ ์ƒ์„ฑ์„ ์œ„ํ•ด์„œ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.(return false)\n * ๊ทธ๋Ÿฌ๋‚˜, ๊ฐ ๊ผญ์ง€์ ๋“ค์ด ๊ฐœ๋ณ„๋กœ ์›€์ง์ด๋Š” ๋‹ค๊ฐํ˜•๋ฅ˜๋Š” path ๋ผ๋Š” ๋ชจ๋ธ๋ฐ์ดํƒ€๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ์ง์ ‘์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค.(return true)\n *\n * Immutable ์ปดํฌ๋„ŒํŠธ์˜ ํ˜•์ƒ์„ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ”์šด๋“œ๋ฅผ ์ด์šฉํ•œ ๋ฆฌ์‚ฌ์ด์ฆˆ๋‚˜, ํŠน๋ณ„ํ•œ ์ปจํŠธ๋กค์„ ํ†ตํ•ด์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.\n */\n get mutable() {\n return false\n }\n\n /*\n * BOUND๋ฅผ ํ†ตํ•ด์„œ ๋ฆฌ์‚ฌ์ด์ฆˆ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.\n *\n * ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉด์ ์„ ๊ฐ–๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€์ฒด๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.(return true)\n * ๊ทธ๋Ÿฌ๋‚˜, LINE ๋“ฑ ๋ฉด์ ์„ ๊ฐ€์ง€์ง€์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋„๋ก ์ •์˜ํ•œ๋‹ค.(return false)\n */\n get resizable() {\n return false\n }\n\n /*\n * ํšŒ์ „์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.\n *\n * ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค.(return true)\n */\n get rotatable() {\n return false\n }\n\n get nature() {\n return NATURE\n }\n\n // drawLocationMarkers(locations) {\n // for (let uuid in locations) {\n // let locInfo = locations[uuid]\n // let props = locInfo.props || {}\n\n // props.width = props.width || 10\n // props.height = props.height || 10\n\n // let currentTime = new Date().getTime()\n // // let diffTime = 500\n // let diffTime = currentTime - locInfo.lastUpdateTime\n\n // if (diffTime < locInfo.updateInterval) {\n // let movingObject = this.findById(uuid)\n // if (movingObject) {\n // // props.yaw = 0;\n // // props.roll = 0;\n\n // movingObject.set(props)\n // for (let key in props) {\n // movingObject[key] = props[key]\n // }\n // } else {\n // // TODO: marker์˜ ์ดˆ๊ธฐ๊ฐ’ ๊ด€๋ จ ๋กœ์ง ์ •๋ฆฌ ํ•„์š”.\n\n // let config = Object.assign(\n // {\n // type: locInfo.type || 'rect',\n // // type: locInfo.type || \"camera\",\n // id: uuid,\n // fillStyle: 'red',\n // left: props.center.x - props.width * 0.5,\n // top: props.center.y - props.height * 0.5,\n // cx: props.center.x,\n // cy: props.center.y\n // },\n // props\n // )\n\n // let marker = Model.compile(config)\n\n // this.addComponent(marker)\n\n // // movingObject = this.findById(uuid)\n // // if(movingObject) {\n // // movingObject.set(props);\n // // }\n // }\n // } else {\n // let movingObject = this.findById(uuid)\n // this.removeComponent(movingObject)\n // }\n\n // this.invalidate()\n // }\n // }\n\n // simulate(point) {\n // // for(let i in this.components) {\n // // if(this.components[i].model.type != 'beacon')\n // // continue;\n // //\n // // let beacon = this.components[i]\n // // let distance = Math.sqrt(Math.pow(beacon.center.x - point.x, 2) + Math.pow(beacon.center.y - point.y, 2)) * 0.01\n // // let rssi = -10 * Math.log10(distance) + (beacon.txPower || -71)\n // //\n // // let randRssi = gaussian(rssi, Math.pow(4.894686948810031, 2))\n // //\n // // rssi = randRssi.ppf(Math.random())\n // //\n // // console.log(rssi);\n // // }\n\n // let beacons: {\n // distance: number;\n // gaussian: number;\n // txPower: number;\n // }[] = []\n\n // for (let i in this.components) {\n // if (this.components[i].model.type != 'beacon') continue\n\n // let beacon = this.components[i]\n\n // beacon.distance = Math.sqrt(\n // Math.pow(beacon.center.x - point.x, 2) +\n // Math.pow(beacon.center.y - point.y, 2)\n // )\n // beacon.gaussian = gaussian(\n // beacon.model.txPower || -71,\n // Math.pow(3.209, 2)\n // )\n // beacon.txPower = beacon.gaussian.ppf(Math.random())\n\n // beacons.push(beacon)\n // }\n\n // beacons = beacons.slice(0)\n\n // this.calculatePosition(beacons, point)\n // }\n\n // calculatePosition(nodeArr, position) {\n // let beacons = nodeArr\n\n // beacons.sort(function(a, b) {\n // let rssiA = -10 * Math.log10(a.distance) + a.txPower\n // let rssiB = -10 * Math.log10(b.distance) + b.txPower\n\n // return Math.abs(rssiA) - Math.abs(rssiB)\n // })\n\n // let beaconCombs = this.k_combinations(beacons.slice(0, 4), 3)\n // let positions = []\n\n // for (let i in beaconCombs) {\n // let beaconComb = beaconCombs[i]\n // let beaconA = beaconComb[0]\n // let beaconB = beaconComb[1]\n // let beaconC = beaconComb[2]\n\n // let xa = beaconA.center.x\n // let ya = beaconA.center.y\n // let xb = beaconB.center.x\n // let yb = beaconB.center.y\n // let xc = beaconC.center.x\n // let yc = beaconC.center.y\n // let ra = beaconA.distance\n // let rb = beaconB.distance\n // let rc = beaconC.distance\n\n // // let ra = Math.sqrt(Math.pow(beaconA.center.x - position.x, 2) + Math.pow(beaconA.center.y - position.y, 2)) * 0.01\n // // let rb = Math.sqrt(Math.pow(beaconB.center.x - position.x, 2) + Math.pow(beaconB.center.y - position.y, 2)) * 0.01\n // // let rc = Math.sqrt(Math.pow(beaconC.center.x - position.x, 2) + Math.pow(beaconC.center.y - position.y, 2)) * 0.01\n\n // let rssiA = -10 * Math.log10(beaconA.distance * 0.01) + beaconA.txPower\n // let rssiB = -10 * Math.log10(beaconB.distance * 0.01) + beaconB.txPower\n // let rssiC = -10 * Math.log10(beaconC.distance * 0.01) + beaconC.txPower\n\n // ra = this.calculateDistance(beaconA.txPower, rssiA) * 100\n // rb = this.calculateDistance(beaconB.txPower, rssiB) * 100\n // rc = this.calculateDistance(beaconC.txPower, rssiC) * 100\n\n // let xaSq = xa * xa,\n // xbSq = xb * xb,\n // xcSq = xc * xc,\n // yaSq = ya * ya,\n // ybSq = yb * yb,\n // ycSq = yc * yc,\n // raSq = ra * ra,\n // rbSq = rb * rb,\n // rcSq = rc * rc\n // let numerator1 =\n // (xb - xa) * (xcSq + ycSq - rcSq) +\n // (xa - xc) * (xbSq + ybSq - rbSq) +\n // (xc - xb) * (xaSq + yaSq - raSq)\n // let denominator1 = 2 * (yc * (xb - xa) + yb * (xa - xc) + ya * (xc - xb))\n // let y = numerator1 / denominator1\n // let numerator2 =\n // rbSq - raSq + xaSq - xbSq + yaSq - ybSq - 2 * (ya - yb) * y\n // let denominator2 = 2 * (xa - xb)\n // let x = numerator2 / denominator2\n\n // if (Number.isFinite(x) && Number.isFinite(y)) {\n // positions.push({\n // x: x,\n // y: y\n // })\n // }\n // }\n\n // let avgPosition = this.averageOfPositions(positions)\n\n // if (this._simPosition) this.removeComponent(this._simPosition)\n\n // this._simPosition = Model.compile({\n // type: 'ellipse',\n // cx: avgPosition.x,\n // cy: avgPosition.y,\n // rx: 10,\n // ry: 10,\n // fillStyle: 'navy'\n // })\n\n // this.addComponent(this._simPosition)\n // }\n\n // calculateDistance(txPower, rssi) {\n // if (rssi == 0) {\n // return -1.0 // if we cannot determine distance, return -1.\n // }\n\n // let ratio = (rssi * 1.0) / txPower\n // if (ratio < 1.0) {\n // return Math.pow(ratio, 10)\n // } else {\n // let accuracy = 0.89976 * Math.pow(ratio, 7.7095) + 0.111\n // return accuracy\n // }\n // }\n\n // calculateAngle(p1, p2, p3) {\n // let l1 = Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2),\n // l2 = Math.pow(p2.x - p3.x, 2) + Math.pow(p2.y - p3.y, 2),\n // l3 = Math.pow(p3.x - p1.x, 2) + Math.pow(p3.y - p1.y, 2)\n\n // return Math.acos((l1 + l2 - l3) / Math.sqrt(4 * l1 * l2))\n // }\n\n // averageOfPositions(p) {\n // let sumOfX = 0\n // let sumOfY = 0\n\n // for (let i in p) {\n // let point = p[i]\n // sumOfX += point.x\n // sumOfY += point.y\n // }\n\n // return {\n // x: sumOfX / p.length,\n // y: sumOfY / p.length\n // }\n // }\n\n // k_combinations(set, k) {\n // var i, j, combs, head, tailcombs\n\n // // There is no way to take e.g. sets of 5 elements from\n // // a set of 4.\n // if (k > set.length || k <= 0) {\n // return []\n // }\n\n // // K-sized set has only one K-sized subset.\n // if (k == set.length) {\n // return [set]\n // }\n\n // // There is N 1-sized subsets in a N-sized set.\n // if (k == 1) {\n // combs = []\n // for (i = 0; i < set.length; i++) {\n // combs.push([set[i]])\n // }\n // return combs\n // }\n\n // // Assert {1 < k < set.length}\n\n // // Algorithm description:\n // // To get k-combinations of a set, we want to join each element\n // // with all (k-1)-combinations of the other elements. The set of\n // // these k-sized sets would be the desired result. However, as we\n // // represent sets with lists, we need to take duplicates into\n // // account. To avoid producing duplicates and also unnecessary\n // // computing, we use the following approach: each element i\n // // divides the list into three: the preceding elements, the\n // // current element i, and the subsequent elements. For the first\n // // element, the list of preceding elements is empty. For element i,\n // // we compute the (k-1)-computations of the subsequent elements,\n // // join each with the element i, and store the joined to the set of\n // // computed k-combinations. We do not need to take the preceding\n // // elements into account, because they have already been the i:th\n // // element so they are already computed and stored. When the length\n // // of the subsequent list drops below (k-1), we cannot find any\n // // (k-1)-combs, hence the upper limit for the iteration:\n // combs = []\n // for (i = 0; i < set.length - k + 1; i++) {\n // // head is a list that includes only our current element.\n // head = set.slice(i, i + 1)\n // // We take smaller combinations from the subsequent elements\n // tailcombs = this.k_combinations(set.slice(i + 1), k - 1)\n // // For each (k-1)-combination we join it with the current\n // // and store it to the set of k-combinations.\n // for (j = 0; j < tailcombs.length; j++) {\n // combs.push(head.concat(tailcombs[j]))\n // }\n // }\n // return combs\n // }\n\n // onclick(e) {\n // return\n\n // let point = this.transcoordC2S(e.offsetX, e.offsetY)\n\n // if (this._clickPoint) {\n // this.removeComponent(this._clickPoint)\n // }\n\n // this._clickPoint = Model.compile({\n // type: 'ellipse',\n // cx: point.x,\n // cy: point.y,\n // rx: 10,\n // ry: 10,\n // fillStyle: 'red'\n // })\n\n // this.addComponent(this._clickPoint)\n // this.simulate(point)\n // // let self = this\n // // setTimeout(function() {\n // // self.simulate(point)\n // // }, 500)\n // this.invalidate()\n // }\n}\n\nComponent.register('floor', Floor)\n"]}
@@ -1,29 +1,9 @@
1
- import { Container, State } from '@hatiolab/things-scene';
1
+ import { ComponentNature, Container, State } from '@hatiolab/things-scene';
2
2
  import Floor from './floor';
3
3
  export default class IndoorMap extends Container {
4
4
  private _focused;
5
5
  private __down_point?;
6
- get nature(): {
7
- mutable: boolean;
8
- resizable: boolean;
9
- rotatable: boolean;
10
- properties: ({
11
- type: string;
12
- label: string;
13
- name: string;
14
- property: {
15
- icon: string;
16
- action: (indoorMap: IndoorMap) => void;
17
- };
18
- } | {
19
- type: string;
20
- label: string;
21
- name: string;
22
- property?: undefined;
23
- })[];
24
- 'value-property': string;
25
- help: string;
26
- };
6
+ get nature(): ComponentNature;
27
7
  get layout(): import("@hatiolab/things-scene").LAYOUT;
28
8
  get layoutConfig(): any;
29
9
  set layoutConfig(config: any);