geomui 0.5.52 → 0.5.56

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 (40) hide show
  1. package/dist/Drawing.svelte +275 -262
  2. package/dist/Drawing.svelte.d.ts +8 -24
  3. package/dist/DrawingList.svelte +38 -33
  4. package/dist/DrawingList.svelte.d.ts +5 -18
  5. package/dist/InputParams.svelte +338 -283
  6. package/dist/InputParams.svelte.d.ts +7 -25
  7. package/dist/LabelCheckbox.svelte +12 -11
  8. package/dist/LabelCheckbox.svelte.d.ts +16 -14
  9. package/dist/LocStorRead.svelte +29 -17
  10. package/dist/LocStorRead.svelte.d.ts +6 -19
  11. package/dist/LocStorTable.svelte +88 -68
  12. package/dist/LocStorTable.svelte.d.ts +7 -20
  13. package/dist/LocStorWrite.svelte +28 -22
  14. package/dist/LocStorWrite.svelte.d.ts +6 -19
  15. package/dist/ModalDiag.svelte +33 -15
  16. package/dist/ModalDiag.svelte.d.ts +10 -22
  17. package/dist/ModalImg.svelte +11 -6
  18. package/dist/ModalImg.svelte.d.ts +6 -19
  19. package/dist/OneDesign.svelte +15 -6
  20. package/dist/OneDesign.svelte.d.ts +6 -19
  21. package/dist/ParamDrawExport.svelte +220 -134
  22. package/dist/ParamDrawExport.svelte.d.ts +7 -20
  23. package/dist/SimpleDrawing.svelte +82 -49
  24. package/dist/SimpleDrawing.svelte.d.ts +7 -23
  25. package/dist/SubDesign.svelte +64 -45
  26. package/dist/SubDesign.svelte.d.ts +8 -21
  27. package/dist/TimeControl.svelte +84 -69
  28. package/dist/TimeControl.svelte.d.ts +8 -21
  29. package/dist/ZoomControl.svelte +21 -14
  30. package/dist/ZoomControl.svelte.d.ts +5 -18
  31. package/dist/initStore.js +12 -11
  32. package/dist/stateDrawing.svelte.d.ts +8 -0
  33. package/dist/stateDrawing.svelte.js +8 -0
  34. package/dist/stateParams.svelte.d.ts +5 -0
  35. package/dist/stateParams.svelte.js +3 -0
  36. package/package.json +21 -21
  37. package/dist/drawingLayers.d.ts +0 -2
  38. package/dist/drawingLayers.js +0 -6
  39. package/dist/storePVal.d.ts +0 -5
  40. package/dist/storePVal.js +0 -4
@@ -1,235 +1,269 @@
1
- <script>import TimeControl from "./TimeControl.svelte";
2
- import ZoomControl from "./ZoomControl.svelte";
3
- import LabelCheckbox from "./LabelCheckbox.svelte";
4
- import {
5
- colors,
6
- canvas2point,
7
- adjustCenter,
8
- adjustRect,
9
- adjustScale,
10
- adjustTranslate,
11
- mergeFaces
12
- } from "geometrix";
13
- import { storePV } from "./storePVal";
14
- import { dLayers } from "./drawingLayers";
15
- import { onMount } from "svelte";
16
- export let pDef;
17
- export let fgeom;
18
- export let optFaces;
19
- export let selFace;
20
- export let zAdjust;
21
- export let simTime = 0;
22
- const c_ParametrixAll = "ParametrixAll";
23
- let windowWidth;
24
- let canvasFull;
25
- let canvasZoom;
26
- const canvas_size_min = 400;
27
- let aFigure;
28
- let cAdjust;
29
- function canvasRedrawFull(iLayers) {
30
- const ctx1 = canvasFull.getContext("2d");
31
- ctx1.clearRect(0, 0, ctx1.canvas.width, ctx1.canvas.height);
32
- try {
33
- cAdjust = aFigure.getAdjustFull(ctx1.canvas.width, ctx1.canvas.height);
34
- aFigure.draw(ctx1, cAdjust, iLayers);
35
- } catch (emsg) {
36
- console.log(emsg);
37
- }
38
- }
39
- function canvasRedrawZoom(iLayers) {
40
- const ctx2 = canvasZoom.getContext("2d");
41
- ctx2.clearRect(0, 0, ctx2.canvas.width, ctx2.canvas.height);
42
- try {
43
- if (zAdjust === void 0 || zAdjust.init === 0) {
44
- zAdjust = aFigure.getAdjustZoom(ctx2.canvas.width, ctx2.canvas.height);
45
- }
46
- aFigure.draw(ctx2, zAdjust, iLayers);
47
- } catch (emsg) {
48
- console.log(emsg);
49
- }
50
- }
51
- function canvasSetSize() {
52
- const ctx1 = canvasFull.getContext("2d");
53
- const canvas_size = Math.max(0.4 * windowWidth, canvas_size_min);
54
- ctx1.canvas.width = canvas_size;
55
- ctx1.canvas.height = canvas_size;
56
- }
57
- function canvasResize() {
58
- canvasSetSize();
59
- canvasRedrawFull($dLayers);
60
- canvasRedrawZoom($dLayers);
61
- }
62
- let domInit = 0;
63
- function checkFace(iFaces, iFace) {
64
- let rFace = iFace;
65
- if (iFaces.length === 0) {
66
- console.log(`warn404: Drawing has an empty face list`);
67
- } else {
68
- const FaceList2 = iFaces.slice();
69
- FaceList2.push(c_ParametrixAll);
70
- if (!FaceList2.includes(rFace)) {
71
- rFace = iFaces[0];
72
- }
73
- }
74
- return rFace;
75
- }
76
- function geomRedrawSub(iSimTime, pVal, iFace, iLayers) {
77
- const FigList = fgeom(iSimTime, pVal).fig;
78
- const FigListKeys = Object.keys(FigList);
79
- const sFace = checkFace(FigListKeys, iFace);
80
- selFace = sFace;
81
- if (FigListKeys.includes(sFace)) {
82
- aFigure = FigList[sFace];
83
- } else {
84
- aFigure = mergeFaces(FigList);
85
- }
86
- canvasRedrawFull(iLayers);
87
- canvasRedrawZoom(iLayers);
88
- }
89
- function geomRedraw(iSimTime, iFace) {
90
- geomRedrawSub(iSimTime, $storePV[pDef.partName], iFace, $dLayers);
91
- }
92
- onMount(() => {
93
- canvasSetSize();
94
- geomRedraw(simTime, selFace);
95
- domInit = 1;
96
- });
97
- $: {
98
- if (domInit === 1) {
99
- geomRedrawSub(simTime, $storePV[pDef.partName], selFace, $dLayers);
100
- }
101
- }
102
- function zoomClick(event) {
103
- switch (event.detail.action) {
104
- case "zoomInit":
105
- zAdjust.init = 0;
106
- break;
107
- case "zoomIn":
108
- zAdjust = adjustScale(0.7, zAdjust);
109
- break;
110
- case "zoomOut":
111
- zAdjust = adjustScale(1.3, zAdjust);
112
- break;
113
- case "moveLeft":
114
- zAdjust.xMin += -0.2 * zAdjust.xyDiff;
115
- break;
116
- case "moveRight":
117
- zAdjust.xMin += 0.2 * zAdjust.xyDiff;
118
- break;
119
- case "moveUp":
120
- zAdjust.yMin += 0.2 * zAdjust.xyDiff;
121
- break;
122
- case "moveDown":
123
- zAdjust.yMin += -0.2 * zAdjust.xyDiff;
124
- break;
125
- default:
126
- console.log(`ERR423: ${event.detail.action} has no case!`);
127
- }
128
- canvasRedrawZoom($dLayers);
129
- }
130
- const mouseDelayMax = 3e3;
131
- const mouseDiffClick = 10;
132
- const mouseDiffRatioSelect = 3;
133
- let mouseF = { timestamp: 0, offsetX: 0, offsetY: 0 };
134
- function cFullMouseDn(eve) {
135
- if (eve.button === 0) {
136
- mouseF.timestamp = Date.now();
137
- mouseF.offsetX = eve.offsetX;
138
- mouseF.offsetY = eve.offsetY;
139
- }
140
- }
141
- function cFullMouseUp(eve) {
142
- if (eve.button === 0) {
143
- if (Date.now() - mouseF.timestamp < mouseDelayMax) {
144
- const diffX = Math.abs(mouseF.offsetX - eve.offsetX);
145
- const diffY = Math.abs(mouseF.offsetY - eve.offsetY);
146
- if (diffX < mouseDiffClick && diffY < mouseDiffClick) {
147
- const [px, py] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
148
- zAdjust = adjustCenter(px, py, zAdjust);
149
- geomRedraw(simTime, selFace);
150
- }
151
- if (diffX > mouseDiffClick && diffY > mouseDiffClick) {
152
- const diffRatio1 = diffX / diffY;
153
- const diffRatio2 = 1 / diffRatio1;
154
- if (diffRatio1 < mouseDiffRatioSelect && diffRatio2 < mouseDiffRatioSelect) {
155
- const [p1x, p1y] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
156
- const [p2x, p2y] = canvas2point(mouseF.offsetX, mouseF.offsetY, cAdjust);
157
- zAdjust = adjustRect(p1x, p1y, p2x, p2y, canvas_size_min, canvas_size_min);
158
- geomRedraw(simTime, selFace);
159
- }
160
- }
161
- } else {
162
- console.log(`Warn205: ignore ${eve.offsetX} ${eve.offsetY} because too slow`);
163
- }
164
- }
165
- }
166
- function cFullMouseMove(eve) {
167
- const ctx1 = canvasFull.getContext("2d");
168
- if (eve.buttons === 1) {
169
- const diffX = eve.offsetX - mouseF.offsetX;
170
- const diffY = eve.offsetY - mouseF.offsetY;
171
- canvasRedrawFull($dLayers);
172
- ctx1.beginPath();
173
- ctx1.rect(mouseF.offsetX, mouseF.offsetY, diffX, diffY);
174
- ctx1.strokeStyle = colors.mouse;
175
- ctx1.stroke();
176
- }
177
- if ($dLayers.ruler) {
178
- const [p1x, p1y] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
179
- ctx1.clearRect(5, 5, 200, 25);
180
- ctx1.font = "15px Arial";
181
- ctx1.fillStyle = colors.ruler;
182
- ctx1.fillText(`x: ${p1x.toFixed(4)} y: ${p1y.toFixed(4)}`, 5, 20);
183
- }
184
- }
185
- let mouseZx;
186
- let mouseZy;
187
- let mouseZadjust;
188
- function cZoomMouseDn(eve) {
189
- if (eve.button === 0) {
190
- const [p1x, p1y] = canvas2point(eve.offsetX, eve.offsetY, zAdjust);
191
- mouseZx = p1x;
192
- mouseZy = p1y;
193
- mouseZadjust = structuredClone(zAdjust);
194
- }
195
- }
196
- function cZoomMouseMove(eve) {
197
- if (eve.buttons === 1) {
198
- const [p2x, p2y] = canvas2point(eve.offsetX, eve.offsetY, mouseZadjust);
199
- zAdjust = adjustTranslate(mouseZx, mouseZy, p2x, p2y, mouseZadjust);
200
- canvasRedrawZoom($dLayers);
201
- } else {
202
- if ($dLayers.ruler) {
203
- const ctx2 = canvasZoom.getContext("2d");
204
- const [p2x, p2y] = canvas2point(eve.offsetX, eve.offsetY, zAdjust);
205
- ctx2.clearRect(5, 5, 200, 25);
206
- ctx2.font = "15px Arial";
207
- ctx2.fillStyle = colors.ruler;
208
- ctx2.fillText(`x: ${p2x.toFixed(4)} y: ${p2y.toFixed(4)}`, 5, 20);
209
- }
210
- }
211
- }
212
- function cZoomWheel(eve) {
213
- if (eve.deltaY > 0) {
214
- zAdjust = adjustScale(0.7, zAdjust);
215
- } else {
216
- zAdjust = adjustScale(1.3, zAdjust);
217
- }
218
- canvasRedrawZoom($dLayers);
219
- }
1
+ <script lang="ts">
2
+ import TimeControl from './TimeControl.svelte';
3
+ import ZoomControl from './ZoomControl.svelte';
4
+ import LabelCheckbox from './LabelCheckbox.svelte';
5
+ import type { tCanvasAdjust, tLayers, Figure, tSimTime } from 'geometrix';
6
+ import {
7
+ colors,
8
+ canvas2point,
9
+ adjustCopy,
10
+ adjustCenter,
11
+ adjustRect,
12
+ adjustScale,
13
+ adjustTranslate
14
+ } from 'geometrix';
15
+ import { sDraw } from './stateDrawing.svelte';
16
+ import { onMount } from 'svelte';
17
+
18
+ // props
19
+ interface Props {
20
+ pDefSim: tSimTime;
21
+ pFig: Figure;
22
+ simTime?: number;
23
+ }
24
+ let { pDefSim, pFig, simTime = $bindable(0) }: Props = $props();
25
+
26
+ // const
27
+ const canvas_size_min = 400;
28
+ const canvas_size_max = 1200;
29
+
30
+ // state
31
+ let windowWidth: number = $state(canvas_size_min); // TODO5: $state is not needed, but otherwise svelte complains
32
+ // those internal states are bound: no need of $state
33
+ let canvasFull: HTMLCanvasElement;
34
+ let canvasZoom: HTMLCanvasElement;
35
+
36
+ // Canavas Figures
37
+ let cAdjust: tCanvasAdjust;
38
+ function canvasRedrawFull(iFig: Figure, iLayers: tLayers) {
39
+ if (canvasFull) {
40
+ const ctx1 = canvasFull.getContext('2d')!;
41
+ ctx1.clearRect(0, 0, ctx1.canvas.width, ctx1.canvas.height);
42
+ try {
43
+ cAdjust = iFig.getAdjustFull(ctx1.canvas.width, ctx1.canvas.height);
44
+ iFig.draw(ctx1, cAdjust, iLayers);
45
+ } catch (emsg) {
46
+ //rGeome.logstr += emsg;
47
+ console.log(emsg);
48
+ }
49
+ // extra drawing
50
+ //point(5, 5).draw(ctx1, cAdjust, 'green');
51
+ //point(5, 15).draw(ctx1, cAdjust, 'blue', 'rectangle');
52
+ }
53
+ }
54
+ function canvasRedrawZoom(iFig: Figure, iZAdjust: tCanvasAdjust, iLayers: tLayers) {
55
+ if (canvasZoom) {
56
+ const ctx2 = canvasZoom.getContext('2d')!;
57
+ ctx2.clearRect(0, 0, ctx2.canvas.width, ctx2.canvas.height);
58
+ try {
59
+ if (iZAdjust === undefined || iZAdjust.init === 0) {
60
+ iZAdjust = iFig.getAdjustZoom(ctx2.canvas.width, ctx2.canvas.height);
61
+ //console.log(`dbg047: init iZAdjust: ${iZAdjust.xMin} ${iZAdjust.yMin}`);
62
+ }
63
+ iFig.draw(ctx2, iZAdjust, iLayers);
64
+ } catch (emsg) {
65
+ //rGeome.logstr += emsg;
66
+ console.log(emsg);
67
+ }
68
+ }
69
+ }
70
+ function canvasSetSize() {
71
+ //console.log(`windowWidth: ${windowWidth}`);
72
+ const ctxF = canvasFull.getContext('2d')!;
73
+ const ctxZ = canvasZoom.getContext('2d')!;
74
+ const canvas_size = Math.min(Math.max(0.4 * windowWidth, canvas_size_min), canvas_size_max);
75
+ ctxF.canvas.width = canvas_size;
76
+ ctxF.canvas.height = canvas_size;
77
+ ctxZ.canvas.width = canvas_size;
78
+ ctxZ.canvas.height = canvas_size;
79
+ // initialize zAdjust
80
+ sDraw.canvasZWidth = canvas_size;
81
+ if (sDraw.zAdjust.init === 0) {
82
+ sDraw.zAdjust = pFig.getAdjustZoom(ctxZ.canvas.width, ctxZ.canvas.height);
83
+ }
84
+ }
85
+ function canvasResize() {
86
+ canvasSetSize();
87
+ canvasRedrawFull(pFig, sDraw.dLayers);
88
+ canvasRedrawZoom(pFig, sDraw.zAdjust, sDraw.dLayers);
89
+ }
90
+ function geomRedraw(iFig: Figure, iZAdjust: tCanvasAdjust, iLayers: tLayers) {
91
+ canvasRedrawFull(iFig, iLayers);
92
+ canvasRedrawZoom(iFig, iZAdjust, iLayers);
93
+ }
94
+ // initialization
95
+ onMount(() => {
96
+ canvasSetSize();
97
+ });
98
+ // reactivity on pFig, zAdjust and dLayers
99
+ $effect(() => {
100
+ geomRedraw(pFig, sDraw.zAdjust, sDraw.dLayers);
101
+ });
102
+
103
+ // actions
104
+ // Zoom stories
105
+ function zoomClick(action: string) {
106
+ //console.log(`dbg094: ${action}`);
107
+ const ctx2 = canvasZoom.getContext('2d')!;
108
+ switch (action) {
109
+ case 'zoomInit':
110
+ sDraw.zAdjust = pFig.getAdjustZoom(ctx2.canvas.width, ctx2.canvas.height);
111
+ break;
112
+ case 'zoomIn':
113
+ sDraw.zAdjust = adjustScale(0.7, sDraw.zAdjust);
114
+ break;
115
+ case 'zoomOut':
116
+ sDraw.zAdjust = adjustScale(1.3, sDraw.zAdjust);
117
+ break;
118
+ case 'moveLeft':
119
+ sDraw.zAdjust.xMin += -0.2 * sDraw.zAdjust.xyDiff;
120
+ break;
121
+ case 'moveRight':
122
+ sDraw.zAdjust.xMin += 0.2 * sDraw.zAdjust.xyDiff;
123
+ break;
124
+ case 'moveUp':
125
+ sDraw.zAdjust.yMin += 0.2 * sDraw.zAdjust.xyDiff;
126
+ break;
127
+ case 'moveDown':
128
+ sDraw.zAdjust.yMin += -0.2 * sDraw.zAdjust.xyDiff;
129
+ break;
130
+ default:
131
+ console.log(`ERR423: ${action} has no case!`);
132
+ }
133
+ canvasRedrawZoom(pFig, sDraw.zAdjust, sDraw.dLayers);
134
+ }
135
+ // zoom functions on the canvasFull
136
+ interface tMouse {
137
+ timestamp: number;
138
+ offsetX: number;
139
+ offsetY: number;
140
+ }
141
+ const mouseDelayMax = 3000; // only action if mouse-up occurs less than 3000 ms after mouse-down
142
+ const mouseDiffClick = 10; // if diffX and diffY are smaller than 10 pixel then it's a click
143
+ const mouseDiffRatioSelect = 3; // The selection must be more or less a square
144
+ let mouseF: tMouse = { timestamp: 0, offsetX: 0, offsetY: 0 };
145
+ function cFullMouseDn(eve: MouseEvent) {
146
+ //console.log(`dbg131: cFullMouseDn ${eve.offsetX} ${eve.offsetY} ${eve.button}`);
147
+ // left click
148
+ if (eve.button === 0) {
149
+ mouseF.timestamp = Date.now();
150
+ mouseF.offsetX = eve.offsetX;
151
+ mouseF.offsetY = eve.offsetY;
152
+ //const ctx1 = canvasFull.getContext('2d') as CanvasRenderingContext2D;
153
+ //const [px, py] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
154
+ //point(px, py).draw(ctx1, cAdjust, colors.mouse, 'rectangle');
155
+ }
156
+ }
157
+ function cFullMouseUp(eve: MouseEvent) {
158
+ //console.log(`dbg139: cFullMouseUp ${eve.offsetX} ${eve.offsetY} ${eve.button}`);
159
+ // left click
160
+ if (eve.button === 0) {
161
+ //const ctx1 = canvasFull.getContext('2d') as CanvasRenderingContext2D;
162
+ //const [px, py] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
163
+ //point(px, py).draw(ctx1, cAdjust, colors.mouse, 'circle');
164
+ if (Date.now() - mouseF.timestamp < mouseDelayMax) {
165
+ const diffX = Math.abs(mouseF.offsetX - eve.offsetX);
166
+ const diffY = Math.abs(mouseF.offsetY - eve.offsetY);
167
+ if (diffX < mouseDiffClick && diffY < mouseDiffClick) {
168
+ //console.log(`dbg160: a click at ${eve.offsetX} ${eve.offsetY}`);
169
+ const [px, py] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
170
+ sDraw.zAdjust = adjustCenter(px, py, sDraw.zAdjust);
171
+ geomRedraw(pFig, sDraw.zAdjust, sDraw.dLayers);
172
+ }
173
+ if (diffX > mouseDiffClick && diffY > mouseDiffClick) {
174
+ const diffRatio1 = diffX / diffY;
175
+ const diffRatio2 = 1.0 / diffRatio1;
176
+ if (diffRatio1 < mouseDiffRatioSelect && diffRatio2 < mouseDiffRatioSelect) {
177
+ //console.log(`dbg160: a selection at ${eve.offsetX} ${eve.offsetY}`);
178
+ const [p1x, p1y] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
179
+ const [p2x, p2y] = canvas2point(mouseF.offsetX, mouseF.offsetY, cAdjust);
180
+ const ctx2 = canvasZoom.getContext('2d')!;
181
+ const w2 = ctx2.canvas.width;
182
+ sDraw.zAdjust = adjustRect(p1x, p1y, p2x, p2y, w2, w2);
183
+ geomRedraw(pFig, sDraw.zAdjust, sDraw.dLayers);
184
+ }
185
+ }
186
+ } else {
187
+ console.log(`Warn205: ignore ${eve.offsetX} ${eve.offsetY} because too slow`);
188
+ }
189
+ }
190
+ }
191
+ // just drawing a rectangle to help zooming
192
+ function cFullMouseMove(eve: MouseEvent) {
193
+ //console.log(`dbg179: cFullMouseMove ${eve.offsetX} ${eve.offsetY} ${eve.buttons}`);
194
+ if (canvasFull) {
195
+ const ctx1 = canvasFull.getContext('2d')!;
196
+ // left click
197
+ if (eve.buttons === 1) {
198
+ const diffX = eve.offsetX - mouseF.offsetX;
199
+ const diffY = eve.offsetY - mouseF.offsetY;
200
+ canvasRedrawFull(pFig, sDraw.dLayers);
201
+ //const ctx1 = canvasFull.getContext('2d') as CanvasRenderingContext2D;
202
+ ctx1.beginPath();
203
+ ctx1.rect(mouseF.offsetX, mouseF.offsetY, diffX, diffY);
204
+ ctx1.strokeStyle = colors.mouse;
205
+ ctx1.stroke();
206
+ }
207
+ // mouse position
208
+ if (sDraw.dLayers.ruler) {
209
+ const [p1x, p1y] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
210
+ ctx1.clearRect(5, 5, 200, 25);
211
+ ctx1.font = '15px Arial';
212
+ ctx1.fillStyle = colors.ruler;
213
+ ctx1.fillText(`x: ${p1x.toFixed(4)} y: ${p1y.toFixed(4)}`, 5, 20);
214
+ }
215
+ }
216
+ }
217
+ // translate Zoom drawing
218
+ let mouseZx: number;
219
+ let mouseZy: number;
220
+ let mouseZadjust: tCanvasAdjust;
221
+ function cZoomMouseDn(eve: MouseEvent) {
222
+ //console.log(`dbg231: cZoomMouseDn ${eve.offsetX} ${eve.offsetY} ${eve.button}`);
223
+ // left click
224
+ if (eve.button === 0) {
225
+ const [p1x, p1y] = canvas2point(eve.offsetX, eve.offsetY, sDraw.zAdjust);
226
+ mouseZx = p1x; // point
227
+ mouseZy = p1y;
228
+ mouseZadjust = adjustCopy(sDraw.zAdjust); // deepCopy
229
+ //const ctx2 = canvasZoom.getContext('2d') as CanvasRenderingContext2D;
230
+ //const [px, py] = canvas2point(eve.offsetX, eve.offsetY, cAdjust);
231
+ //point(px, py).draw(ctx2, cAdjust, colors.mouse, 'rectangle');
232
+ }
233
+ }
234
+ function cZoomMouseMove(eve: MouseEvent) {
235
+ //console.log(`dbg202: cZoomMouseMove ${eve.offsetX} ${eve.offsetY} ${eve.buttons}`);
236
+ // left click
237
+ if (eve.buttons === 1) {
238
+ const [p2x, p2y] = canvas2point(eve.offsetX, eve.offsetY, mouseZadjust);
239
+ sDraw.zAdjust = adjustTranslate(mouseZx, mouseZy, p2x, p2y, mouseZadjust);
240
+ canvasRedrawZoom(pFig, sDraw.zAdjust, sDraw.dLayers);
241
+ } else {
242
+ // mouse position
243
+ if (sDraw.dLayers.ruler && canvasZoom) {
244
+ const ctx2 = canvasZoom.getContext('2d')!;
245
+ const [p2x, p2y] = canvas2point(eve.offsetX, eve.offsetY, sDraw.zAdjust);
246
+ ctx2.clearRect(5, 5, 200, 25);
247
+ ctx2.font = '15px Arial';
248
+ ctx2.fillStyle = colors.ruler;
249
+ ctx2.fillText(`x: ${p2x.toFixed(4)} y: ${p2y.toFixed(4)}`, 5, 20);
250
+ }
251
+ }
252
+ }
253
+ function cZoomWheel(eve: WheelEvent) {
254
+ eve.preventDefault();
255
+ if (eve.deltaY > 0) {
256
+ sDraw.zAdjust = adjustScale(0.7, sDraw.zAdjust);
257
+ } else {
258
+ sDraw.zAdjust = adjustScale(1.3, sDraw.zAdjust);
259
+ }
260
+ canvasRedrawZoom(pFig, sDraw.zAdjust, sDraw.dLayers);
261
+ }
220
262
  </script>
221
263
 
222
- <svelte:window bind:innerWidth={windowWidth} on:resize={canvasResize} />
264
+ // TODO: onresize is not triggered when the window is maximized
265
+ <svelte:window bind:innerWidth={windowWidth} onresize={canvasResize} />
223
266
  <section>
224
- <h2>
225
- Drawing
226
- <select bind:value={selFace}>
227
- {#each optFaces as optFace}
228
- <option value={optFace}>{optFace}</option>
229
- {/each}
230
- <option value={c_ParametrixAll}>All faces merged</option>
231
- </select>
232
- </h2>
233
267
  <LabelCheckbox />
234
268
  <div class="rack">
235
269
  <canvas
@@ -237,14 +271,14 @@ function cZoomWheel(eve) {
237
271
  width={canvas_size_min}
238
272
  height={canvas_size_min}
239
273
  bind:this={canvasFull}
240
- on:mousedown={cFullMouseDn}
241
- on:mouseup={cFullMouseUp}
242
- on:mousemove={cFullMouseMove}
243
- />
274
+ onmousedown={cFullMouseDn}
275
+ onmouseup={cFullMouseUp}
276
+ onmousemove={cFullMouseMove}
277
+ ></canvas>
244
278
  <TimeControl
245
- tMax={pDef.sim.tMax}
246
- tStep={pDef.sim.tStep}
247
- tUpdate={pDef.sim.tUpdate}
279
+ tMax={pDefSim.tMax}
280
+ tStep={pDefSim.tStep}
281
+ tUpdate={pDefSim.tUpdate}
248
282
  bind:simTime
249
283
  />
250
284
  </div>
@@ -254,11 +288,11 @@ function cZoomWheel(eve) {
254
288
  width={canvas_size_min}
255
289
  height={canvas_size_min}
256
290
  bind:this={canvasZoom}
257
- on:mousedown={cZoomMouseDn}
258
- on:mousemove={cZoomMouseMove}
259
- on:wheel|preventDefault={cZoomWheel}
260
- />
261
- <ZoomControl on:myevent={zoomClick} />
291
+ onmousedown={cZoomMouseDn}
292
+ onmousemove={cZoomMouseMove}
293
+ onwheel={cZoomWheel}
294
+ ></canvas>
295
+ <ZoomControl {zoomClick} />
262
296
  </div>
263
297
  </section>
264
298
 
@@ -270,27 +304,6 @@ $canvas-point: grey;
270
304
  colorCanvasPoint: $canvas-point;
271
305
  }
272
306
  */
273
- section > h2 {
274
- color: grey;
275
- margin: 1rem 0.5rem 0;
276
- }
277
-
278
- section > h2 > select {
279
- /*display: inline-block;*/
280
- height: 1.6rem;
281
- /*width: 1.6rem;*/
282
- color: darkBlue;
283
- font-size: 0.8rem;
284
- font-weight: 400;
285
- padding: 0.2rem 0.4rem 0.2rem;
286
- border-style: solid;
287
- border-width: 0.1rem;
288
- border-radius: 0.2rem;
289
- border-color: darkBlue;
290
- margin: 0.5rem;
291
- background-color: lightBlue;
292
- }
293
-
294
307
  section > div.rack {
295
308
  display: inline-block;
296
309
  margin: 0 1rem 0;
@@ -1,24 +1,8 @@
1
- import { SvelteComponent } from "svelte";
2
- import type { tCanvasAdjust, tParamDef, tGeomFunc } from 'geometrix';
3
- declare const __propDef: {
4
- props: {
5
- pDef: tParamDef;
6
- fgeom: tGeomFunc;
7
- optFaces: string[];
8
- selFace: string;
9
- zAdjust: tCanvasAdjust;
10
- simTime?: number;
11
- };
12
- events: {
13
- [evt: string]: CustomEvent<any>;
14
- };
15
- slots: {};
16
- exports?: {} | undefined;
17
- bindings?: string | undefined;
18
- };
19
- export type DrawingProps = typeof __propDef.props;
20
- export type DrawingEvents = typeof __propDef.events;
21
- export type DrawingSlots = typeof __propDef.slots;
22
- export default class Drawing extends SvelteComponent<DrawingProps, DrawingEvents, DrawingSlots> {
23
- }
24
- export {};
1
+ import type { Figure, tSimTime } from 'geometrix';
2
+ declare const Drawing: import("svelte").Component<{
3
+ pDefSim: tSimTime;
4
+ pFig: Figure;
5
+ simTime?: number;
6
+ }, {}, "simTime">;
7
+ type Drawing = ReturnType<typeof Drawing>;
8
+ export default Drawing;