@chemistry/crystalview 1.0.9 → 3.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.
Files changed (88) hide show
  1. package/README.md +24 -20
  2. package/dist/{src/camera → camera}/Camera.d.ts +69 -63
  3. package/dist/camera/Camera.d.ts.map +1 -0
  4. package/dist/camera/Camera.js +225 -0
  5. package/dist/camera/Camera.js.map +1 -0
  6. package/dist/camera/ICamera.d.ts +9 -0
  7. package/dist/camera/ICamera.d.ts.map +1 -0
  8. package/dist/camera/ICamera.js +2 -0
  9. package/dist/camera/ICamera.js.map +1 -0
  10. package/dist/{src/crystal-view.d.ts → crystal-view.d.ts} +25 -24
  11. package/dist/crystal-view.d.ts.map +1 -0
  12. package/dist/crystal-view.js +169 -0
  13. package/dist/crystal-view.js.map +1 -0
  14. package/dist/crystalview.css +47 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +2 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/{src/molecule3d → molecule3d}/Atom.d.ts +14 -13
  20. package/dist/molecule3d/Atom.d.ts.map +1 -0
  21. package/dist/molecule3d/Atom.js +15 -0
  22. package/dist/molecule3d/Atom.js.map +1 -0
  23. package/dist/{src/molecule3d → molecule3d}/Bond.d.ts +8 -7
  24. package/dist/molecule3d/Bond.d.ts.map +1 -0
  25. package/dist/molecule3d/Bond.js +8 -0
  26. package/dist/molecule3d/Bond.js.map +1 -0
  27. package/dist/{src/molecule3d → molecule3d}/CellAtom.d.ts +96 -96
  28. package/dist/molecule3d/CellAtom.d.ts.map +1 -0
  29. package/dist/molecule3d/CellAtom.js +83 -0
  30. package/dist/molecule3d/CellAtom.js.map +1 -0
  31. package/dist/{src/molecule3d → molecule3d}/Link.d.ts +15 -14
  32. package/dist/molecule3d/Link.d.ts.map +1 -0
  33. package/dist/molecule3d/Link.js +9 -0
  34. package/dist/molecule3d/Link.js.map +1 -0
  35. package/dist/{src/molecule3d → molecule3d}/Marker.d.ts +9 -8
  36. package/dist/molecule3d/Marker.d.ts.map +1 -0
  37. package/dist/molecule3d/Marker.js +8 -0
  38. package/dist/molecule3d/Marker.js.map +1 -0
  39. package/dist/{src/molecule3d → molecule3d}/MarkerContact.d.ts +7 -6
  40. package/dist/molecule3d/MarkerContact.d.ts.map +1 -0
  41. package/dist/molecule3d/MarkerContact.js +7 -0
  42. package/dist/molecule3d/MarkerContact.js.map +1 -0
  43. package/dist/{src/molecule3d → molecule3d}/Molecule3D.d.ts +45 -44
  44. package/dist/molecule3d/Molecule3D.d.ts.map +1 -0
  45. package/dist/molecule3d/Molecule3D.js +126 -0
  46. package/dist/molecule3d/Molecule3D.js.map +1 -0
  47. package/dist/{src/molecule3d → molecule3d}/MoleculeBuilder.d.ts +20 -19
  48. package/dist/molecule3d/MoleculeBuilder.d.ts.map +1 -0
  49. package/dist/molecule3d/MoleculeBuilder.js +130 -0
  50. package/dist/molecule3d/MoleculeBuilder.js.map +1 -0
  51. package/dist/molecule3d/MoleculeConnector.d.ts +10 -0
  52. package/dist/molecule3d/MoleculeConnector.d.ts.map +1 -0
  53. package/dist/molecule3d/MoleculeConnector.js +106 -0
  54. package/dist/molecule3d/MoleculeConnector.js.map +1 -0
  55. package/dist/{src/molecule3d → molecule3d}/UnitCell.d.ts +36 -35
  56. package/dist/molecule3d/UnitCell.d.ts.map +1 -0
  57. package/dist/molecule3d/UnitCell.js +227 -0
  58. package/dist/molecule3d/UnitCell.js.map +1 -0
  59. package/dist/molecule3d/io/IMoleculeReader.d.ts +8 -0
  60. package/dist/molecule3d/io/IMoleculeReader.d.ts.map +1 -0
  61. package/dist/molecule3d/io/IMoleculeReader.js +2 -0
  62. package/dist/molecule3d/io/IMoleculeReader.js.map +1 -0
  63. package/dist/{src/molecule3d → molecule3d}/io/MoleculeReaderJCIF.d.ts +12 -11
  64. package/dist/molecule3d/io/MoleculeReaderJCIF.d.ts.map +1 -0
  65. package/dist/molecule3d/io/MoleculeReaderJCIF.js +112 -0
  66. package/dist/molecule3d/io/MoleculeReaderJCIF.js.map +1 -0
  67. package/dist/{src/painter → painter}/CanvasContext.d.ts +15 -14
  68. package/dist/painter/CanvasContext.d.ts.map +1 -0
  69. package/dist/painter/CanvasContext.js +67 -0
  70. package/dist/painter/CanvasContext.js.map +1 -0
  71. package/dist/painter/Painter.d.ts +36 -0
  72. package/dist/painter/Painter.d.ts.map +1 -0
  73. package/dist/painter/Painter.js +235 -0
  74. package/dist/painter/Painter.js.map +1 -0
  75. package/dist/ui/ContextMenu.d.ts +24 -0
  76. package/dist/ui/ContextMenu.d.ts.map +1 -0
  77. package/dist/ui/ContextMenu.js +140 -0
  78. package/dist/ui/ContextMenu.js.map +1 -0
  79. package/dist/{src/ui → ui}/ContextMenuItem.d.ts +18 -17
  80. package/dist/ui/ContextMenuItem.d.ts.map +1 -0
  81. package/dist/ui/ContextMenuItem.js +66 -0
  82. package/dist/ui/ContextMenuItem.js.map +1 -0
  83. package/package.json +68 -87
  84. package/dist/crystal-view.min.js +0 -24
  85. package/dist/src/molecule3d/MoleculeConnector.d.ts +0 -9
  86. package/dist/src/painter/Painter.d.ts +0 -35
  87. package/dist/src/ui/ContextMenu.d.ts +0 -24
  88. package/package-lock.json +0 -9410
package/README.md CHANGED
@@ -1,42 +1,46 @@
1
1
  # CrystalView
2
+
2
3
  [![GitHub Build Status](https://github.com/chemistry/crystalview/workflows/CI/badge.svg)](https://github.com/chemistry/crystalview/actions?query=workflow%3ACI)
3
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-gren.svg)](https://opensource.org/licenses/MIT)
4
5
 
5
- Simple Crystal Viewer - v1
6
+ ![CrystalView](https://github.com/chemistry/crystalview/blob/master/crystalview.png?raw=true)
6
7
 
7
8
  ## How to use
9
+
8
10
  ```javascript
9
- import { Mol3DView } from '@chemistry/crystalview';
11
+ import { Mol3DView } from '@chemistry/crystalview';
10
12
  import structure from './1000004';
11
13
 
12
14
  $(() => {
13
- let viewer = new Mol3DView({
14
- bgcolor: "#2b303b"
15
- });
16
- var element = document.getElementById('app');
17
- viewer.append(element);
18
- viewer.onInit();
19
-
20
- try {
21
- viewer.load(structure);
22
- } catch(e) {
23
- }
15
+ let viewer = new Mol3DView({
16
+ bgcolor: '#2b303b',
17
+ });
18
+ var element = document.getElementById('app');
19
+ viewer.append(element);
20
+ viewer.onInit();
21
+
22
+ try {
23
+ viewer.load(structure);
24
+ } catch (e) {}
24
25
  });
25
26
  ```
26
27
 
27
28
  ## Quick start:
28
- * Run unit tests: `npm run test`
29
- * Start TDD flow: `npm run tdd`
30
- * Run linter verification: `npm run lint`
31
- * Run linter verification & fix: `npm run lintfix`
32
- * Build project: `npm run build`
29
+
30
+ - Run unit tests: `npm run test`
31
+ - Start TDD flow: `npm run tdd`
32
+ - Run linter verification: `npm run lint`
33
+ - Run linter verification & fix: `npm run lintfix`
34
+ - Build project: `npm run build`
33
35
 
34
36
  ## Release
37
+
35
38
  ```bash
36
39
  git tag v1.0.0
37
40
  git push --tags
38
41
  ```
39
42
 
40
43
  ## License
41
- This project is licensed under the MIT license, Copyright (c) 2020 Volodymyr Vreshch.
42
- For more information see [LICENSE.md](https://github.com/chemistry/crystalview/blob/master/LICENSE).
44
+
45
+ This project is licensed under the MIT license, Copyright (c) 2020 Volodymyr Vreshch.
46
+ For more information see [LICENSE.md](https://github.com/chemistry/crystalview/blob/master/LICENSE).
@@ -1,63 +1,69 @@
1
- import { Vec3 } from "@chemistry/math";
2
- import { ICamera } from "./ICamera";
3
- export declare class Camera implements ICamera {
4
- private element;
5
- /**
6
- * RootationMatrix
7
- */
8
- private rootation;
9
- /**
10
- * TranSlation Matrix
11
- */
12
- private translation;
13
- private projectionMatrix;
14
- private unprojectionMatrix;
15
- private mouseCapture;
16
- private mouseBegin;
17
- private mouseLast;
18
- private mouseCurrent;
19
- private mouseClick;
20
- private width;
21
- private height;
22
- private onRedrawCallBack;
23
- private onClickCallBack;
24
- constructor(options: {
25
- element: HTMLElement;
26
- onRedraw: () => void;
27
- onClick: (x: number, y: number) => void;
28
- });
29
- onInit(): void;
30
- onDestroy(): void;
31
- /**
32
- * Transform from 3D coordinates to Screen coordinates
33
- */
34
- project(position: Vec3): Vec3;
35
- /**
36
- * Transform screen coordinates to 3D coords
37
- */
38
- unproject(position: Vec3): Vec3;
39
- extractScale(): number;
40
- /**
41
- * Set Transformation scale and Rootation center
42
- */
43
- setCameraView(scale: number, center: Vec3): void;
44
- private attachLiseners();
45
- private _mousedown(event);
46
- private _mouseup(event);
47
- private _mouseleave(event);
48
- private _mousemove(event);
49
- private _mousewheel(event);
50
- private processMouseClick(offsetX, offsetY, which);
51
- private processMouseMove(shiftKey, ctrlKey, which);
52
- private mouseRootate_XYZ();
53
- private mouseRootateXY();
54
- private mouseTranslate();
55
- private mouseZoom(event);
56
- private whellZoom(event);
57
- private detachLiseners();
58
- private onRedraw();
59
- /**
60
- * Init projection Matrixes
61
- */
62
- private initMatrixes();
63
- }
1
+ import { Vec3 } from '@chemistry/math';
2
+ import { ICamera } from './ICamera.js';
3
+ export declare class Camera implements ICamera {
4
+ private element;
5
+ /**
6
+ * RootationMatrix
7
+ */
8
+ private rootation;
9
+ /**
10
+ * TranSlation Matrix
11
+ */
12
+ private translation;
13
+ private projectionMatrix;
14
+ private unprojectionMatrix;
15
+ private mouseCapture;
16
+ private mouseBegin;
17
+ private mouseLast;
18
+ private mouseCurrent;
19
+ private mouseClick;
20
+ private width;
21
+ private height;
22
+ private onRedrawCallBack;
23
+ private onClickCallBack;
24
+ private boundMouseDown;
25
+ private boundMouseUp;
26
+ private boundMouseLeave;
27
+ private boundMouseMove;
28
+ private boundWheel;
29
+ constructor(options: {
30
+ element: HTMLElement;
31
+ onRedraw: () => void;
32
+ onClick: (x: number, y: number) => void;
33
+ });
34
+ onInit(): void;
35
+ onDestroy(): void;
36
+ /**
37
+ * Transform from 3D coordinates to Screen coordinates
38
+ */
39
+ project(position: Vec3): Vec3;
40
+ /**
41
+ * Transform screen coordinates to 3D coords
42
+ */
43
+ unproject(position: Vec3): Vec3;
44
+ extractScale(): number;
45
+ /**
46
+ * Set Transformation scale and Rootation center
47
+ */
48
+ setCameraView(scale: number, center: Vec3): void;
49
+ private attachLiseners;
50
+ private _mousedown;
51
+ private _mouseup;
52
+ private _mouseleave;
53
+ private _mousemove;
54
+ private _mousewheel;
55
+ private processMouseClick;
56
+ private processMouseMove;
57
+ private mouseRootate_XYZ;
58
+ private mouseRootateXY;
59
+ private mouseTranslate;
60
+ private mouseZoom;
61
+ private whellZoom;
62
+ private detachLiseners;
63
+ private onRedraw;
64
+ /**
65
+ * Init projection Matrixes
66
+ */
67
+ private initMatrixes;
68
+ }
69
+ //# sourceMappingURL=Camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../src/camera/Camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,OAAO,CAAc;IAC7B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAc;IAE/B;;OAEG;IACH,OAAO,CAAC,WAAW,CAAc;IAGjC,OAAO,CAAC,gBAAgB,CAAe;IAEvC,OAAO,CAAC,kBAAkB,CAAe;IAGzC,OAAO,CAAC,YAAY,CAAU;IAE9B,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,YAAY,CAAY;IAEhC,OAAO,CAAC,UAAU,CAAU;IAE5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,eAAe,CAAiC;IAExD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,UAAU,CAA8B;gBAEpC,OAAO,EAAE;QACnB,OAAO,EAAE,WAAW,CAAC;QACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;KACzC;IAwCM,MAAM,IAAI,IAAI;IAMd,SAAS,IAAI,IAAI;IAIxB;;OAEG;IACI,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAIpC;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI;IAI/B,YAAY,IAAI,MAAM;IAI7B;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI;IAQhD,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,gBAAgB;IAqCxB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,QAAQ;IAMhB;;OAEG;IACH,OAAO,CAAC,YAAY;CAIrB"}
@@ -0,0 +1,225 @@
1
+ import { Transform3D, Vec3 } from '@chemistry/math';
2
+ const radStep = 0.012;
3
+ export class Camera {
4
+ constructor(options) {
5
+ this.element = options.element;
6
+ const scale = 20;
7
+ const center = new Vec3(0, 0, 0);
8
+ this.mouseCapture = false;
9
+ this.mouseClick = false;
10
+ this.rootation = Transform3D.fromScale(scale);
11
+ this.translation = Transform3D.fromTranslation(center);
12
+ // viewport size
13
+ this.width = this.element.clientWidth;
14
+ this.height = this.element.clientHeight;
15
+ this.onRedrawCallBack = options.onRedraw;
16
+ this.onClickCallBack = options.onClick;
17
+ // Create bound handlers for proper cleanup
18
+ this.boundMouseDown = (event) => {
19
+ this._mousedown(event);
20
+ };
21
+ this.boundMouseUp = (event) => {
22
+ this._mouseup(event);
23
+ };
24
+ this.boundMouseLeave = (event) => {
25
+ this._mouseleave(event);
26
+ };
27
+ this.boundMouseMove = (event) => {
28
+ this._mousemove(event);
29
+ };
30
+ this.boundWheel = (event) => {
31
+ this._mousewheel(event);
32
+ };
33
+ // Attach liseners
34
+ this.attachLiseners();
35
+ this.initMatrixes();
36
+ }
37
+ onInit() {
38
+ // Attach liseners
39
+ this.attachLiseners();
40
+ this.initMatrixes();
41
+ }
42
+ onDestroy() {
43
+ this.detachLiseners();
44
+ }
45
+ /**
46
+ * Transform from 3D coordinates to Screen coordinates
47
+ */
48
+ project(position) {
49
+ return this.projectionMatrix.project(position);
50
+ }
51
+ /**
52
+ * Transform screen coordinates to 3D coords
53
+ */
54
+ unproject(position) {
55
+ return this.unprojectionMatrix.project(position);
56
+ }
57
+ extractScale() {
58
+ return this.rootation.extractScale();
59
+ }
60
+ /**
61
+ * Set Transformation scale and Rootation center
62
+ */
63
+ setCameraView(scale, center) {
64
+ this.rootation = Transform3D.fromScale(scale);
65
+ this.translation = Transform3D.fromTranslation(center.scale(-1));
66
+ // reset projection matrix
67
+ this.initMatrixes();
68
+ }
69
+ attachLiseners() {
70
+ this.element.addEventListener('mousedown', this.boundMouseDown);
71
+ this.element.addEventListener('mouseup', this.boundMouseUp);
72
+ this.element.addEventListener('mouseleave', this.boundMouseLeave);
73
+ this.element.addEventListener('mousemove', this.boundMouseMove);
74
+ this.element.addEventListener('wheel', this.boundWheel);
75
+ }
76
+ _mousedown(event) {
77
+ this.mouseCapture = true;
78
+ this.mouseClick = true;
79
+ this.mouseBegin = [event.offsetX, event.offsetY];
80
+ this.mouseCurrent = [event.offsetX, event.offsetY];
81
+ this.mouseLast = [event.offsetX, event.offsetY];
82
+ }
83
+ _mouseup(event) {
84
+ if (!this.mouseCapture) {
85
+ return;
86
+ }
87
+ this.mouseCapture = false;
88
+ this.mouseCurrent = [event.offsetX, event.offsetY];
89
+ if (this.mouseClick) {
90
+ this.processMouseClick(event.offsetX, event.offsetY, event.which);
91
+ }
92
+ else {
93
+ this.processMouseMove(event.shiftKey, event.ctrlKey, event.which);
94
+ }
95
+ this.mouseLast = [event.offsetX, event.offsetY];
96
+ this.mouseClick = false;
97
+ }
98
+ _mouseleave(event) {
99
+ if (!this.mouseCapture) {
100
+ return;
101
+ }
102
+ this.mouseCapture = false;
103
+ this.mouseCurrent = [event.offsetX, event.offsetY];
104
+ this.processMouseMove(event.shiftKey, event.ctrlKey, event.which);
105
+ this.mouseLast = [event.offsetX, event.offsetY];
106
+ }
107
+ _mousemove(event) {
108
+ if (!this.mouseCapture) {
109
+ return;
110
+ }
111
+ this.mouseCurrent = [event.offsetX, event.offsetY];
112
+ this.processMouseMove(event.shiftKey, event.ctrlKey, event.which);
113
+ this.mouseLast = [event.offsetX, event.offsetY];
114
+ event.preventDefault();
115
+ }
116
+ _mousewheel(event) {
117
+ this.whellZoom(event);
118
+ this.initMatrixes();
119
+ this.onRedraw();
120
+ event.preventDefault();
121
+ }
122
+ processMouseClick(offsetX, offsetY, which) {
123
+ if (which === 1 && this.onClickCallBack) {
124
+ this.onClickCallBack(offsetX, offsetY);
125
+ }
126
+ }
127
+ processMouseMove(shiftKey, ctrlKey, which) {
128
+ if (this.mouseCurrent[1] === this.mouseCurrent[0] &&
129
+ this.mouseLast[1] === this.mouseCurrent[1]) {
130
+ return;
131
+ }
132
+ // skeep if it's mouse Click
133
+ if (Math.abs(this.mouseBegin[0] - this.mouseCurrent[0]) < 6 &&
134
+ Math.abs(this.mouseBegin[2] - this.mouseCurrent[2]) < 6 &&
135
+ this.mouseClick) {
136
+ return;
137
+ }
138
+ this.mouseClick = false;
139
+ switch (true) {
140
+ case shiftKey || which === 2:
141
+ // Translate
142
+ this.mouseTranslate();
143
+ break;
144
+ case ctrlKey || which === 3:
145
+ // zoom
146
+ // mouseZoom.call(this);
147
+ break;
148
+ default:
149
+ // Rotate 3D
150
+ this.mouseRootate_XYZ();
151
+ // callDefaultAction.call(this);
152
+ }
153
+ this.initMatrixes();
154
+ this.onRedraw();
155
+ }
156
+ mouseRootate_XYZ() {
157
+ const dx = this.mouseLast[0] - this.mouseCurrent[0]; // = [0,0];
158
+ const dy = this.mouseLast[1] - this.mouseCurrent[1];
159
+ let t = Transform3D.fromScale(1);
160
+ let axis = new Vec3(0, 1, 0);
161
+ t = t.rotate(axis, dx * radStep);
162
+ axis = new Vec3(1, 0, 0);
163
+ t = t.rotate(axis, -dy * radStep);
164
+ const m = Transform3D.fromMultiplication(this.rootation, t);
165
+ this.rootation = m;
166
+ }
167
+ mouseRootateXY() {
168
+ const dy = this.mouseLast[1] - this.mouseCurrent[1];
169
+ let t = Transform3D.fromScale(1);
170
+ const axis = new Vec3(0, 0, 1);
171
+ t = t.rotate(axis, dy * radStep);
172
+ const m = Transform3D.fromMultiplication(this.rootation, t);
173
+ this.rootation = m;
174
+ }
175
+ mouseTranslate() {
176
+ const u1 = this.unproject(new Vec3(this.mouseLast[0], this.mouseLast[1], 0));
177
+ const u2 = this.unproject(new Vec3(this.mouseCurrent[0], this.mouseCurrent[1], 0));
178
+ const tr = Vec3.sub(u2, u1);
179
+ this.translation = this.translation.translate(tr);
180
+ }
181
+ mouseZoom() {
182
+ const dy = this.mouseLast[1] - this.mouseCurrent[1];
183
+ let scale;
184
+ if (dy > 0) {
185
+ scale = 1 + (dy / this.height) * 4;
186
+ }
187
+ else {
188
+ scale = 1 / (1 - (dy / this.height) * 4);
189
+ }
190
+ const t = Transform3D.fromScale(scale);
191
+ this.rootation = Transform3D.fromMultiplication(this.rootation, t);
192
+ }
193
+ whellZoom(event) {
194
+ const dy = (-event.deltaY / 120) * (this.height / 16);
195
+ let scale;
196
+ if (dy > 0) {
197
+ scale = 1 + (dy / this.height) * 4;
198
+ }
199
+ else {
200
+ scale = 1 / (1 - (dy / this.height) * 4);
201
+ }
202
+ const t = Transform3D.fromScale(scale);
203
+ this.rootation = Transform3D.fromMultiplication(this.rootation, t);
204
+ }
205
+ detachLiseners() {
206
+ this.element.removeEventListener('mousedown', this.boundMouseDown);
207
+ this.element.removeEventListener('mouseup', this.boundMouseUp);
208
+ this.element.removeEventListener('mouseleave', this.boundMouseLeave);
209
+ this.element.removeEventListener('mousemove', this.boundMouseMove);
210
+ this.element.removeEventListener('wheel', this.boundWheel);
211
+ }
212
+ onRedraw() {
213
+ if (this.onRedrawCallBack) {
214
+ this.onRedrawCallBack();
215
+ }
216
+ }
217
+ /**
218
+ * Init projection Matrixes
219
+ */
220
+ initMatrixes() {
221
+ this.projectionMatrix = Transform3D.fromMultiplication(this.translation, this.rootation);
222
+ this.unprojectionMatrix = this.projectionMatrix.inverse();
223
+ }
224
+ }
225
+ //# sourceMappingURL=Camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Camera.js","sourceRoot":"","sources":["../../src/camera/Camera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Vec3 } from '@chemistry/math';
2
+ export interface ICamera {
3
+ onInit(): void;
4
+ onDestroy(): void;
5
+ project(position: Vec3): Vec3;
6
+ unproject(position: Vec3): Vec3;
7
+ extractScale(): number;
8
+ }
9
+ //# sourceMappingURL=ICamera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICamera.d.ts","sourceRoot":"","sources":["../../src/camera/ICamera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,WAAW,OAAO;IACtB,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,IAAI,IAAI,CAAC;IAElB,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAEhC,YAAY,IAAI,MAAM,CAAC;CASxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ICamera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICamera.js","sourceRoot":"","sources":["../../src/camera/ICamera.ts"],"names":[],"mappings":""}
@@ -1,24 +1,25 @@
1
- export declare class Mol3DView {
2
- private View;
3
- private canvasElement;
4
- private context;
5
- private initDone;
6
- private width;
7
- private height;
8
- private subscriptions;
9
- private molecule;
10
- private painer;
11
- private camera;
12
- private contextMenu;
13
- private options;
14
- constructor(options: {
15
- bgcolor?: string;
16
- });
17
- append(element: HTMLElement): void;
18
- load(jcif: object): void;
19
- center(): void;
20
- onInit(): void;
21
- onDestroy(): void;
22
- private redraw();
23
- private resizeCanvas();
24
- }
1
+ export declare class Mol3DView {
2
+ private viewElement;
3
+ private canvasElement;
4
+ private context;
5
+ private initDone;
6
+ private width;
7
+ private height;
8
+ private subscriptions;
9
+ private molecule;
10
+ private painer;
11
+ private camera;
12
+ private contextMenu;
13
+ private options;
14
+ constructor(options: {
15
+ bgcolor?: string;
16
+ });
17
+ append(element: HTMLElement): void;
18
+ load(jcif: object): void;
19
+ center(): void;
20
+ onInit(): void;
21
+ onDestroy(): void;
22
+ private redraw;
23
+ private resizeCanvas;
24
+ }
25
+ //# sourceMappingURL=crystal-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crystal-view.d.ts","sourceRoot":"","sources":["../src/crystal-view.ts"],"names":[],"mappings":"AAMA,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAa;IAE7B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,WAAW,CAAe;IAElC,OAAO,CAAC,OAAO,CAKb;gBAEU,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAYlC,MAAM,CAAC,OAAO,EAAE,WAAW;IA+F3B,IAAI,CAAC,IAAI,EAAE,MAAM;IAMjB,MAAM;IAcN,MAAM;IA4BN,SAAS;IAOhB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,YAAY;CAarB"}