@operato/scene-gauge 9.1.1 → 10.0.0-beta.14

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.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { registerRealObjectFactory, RealObjectPlane2D } from '@hatiolab/things-scene';
2
+ const plane2D = (component) => new RealObjectPlane2D(component);
3
+ registerRealObjectFactory('gauge-circle', plane2D);
4
+ registerRealObjectFactory('gauge-horizon', plane2D);
5
+ registerRealObjectFactory('gauge-vertical', plane2D);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAErF,MAAM,OAAO,GAAG,CAAC,SAAc,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAA;AACpE,yBAAyB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAClD,yBAAyB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;AACnD,yBAAyB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA","sourcesContent":["import { registerRealObjectFactory, RealObjectPlane2D } from '@hatiolab/things-scene'\n\nconst plane2D = (component: any) => new RealObjectPlane2D(component)\nregisterRealObjectFactory('gauge-circle', plane2D)\nregisterRealObjectFactory('gauge-horizon', plane2D)\nregisterRealObjectFactory('gauge-vertical', plane2D)\n"]}
@@ -1,8 +1,235 @@
1
- import { ComponentNature, Donut } from '@hatiolab/things-scene';
1
+ import { Component, ComponentNature, Donut } from '@hatiolab/things-scene';
2
2
  declare const GaugeCircle_base: (new (...args: any[]) => {
3
- value: number;
4
- animValue: number;
5
- animOnValueChange(value: number, animFromBase: boolean, base: number): void;
3
+ _lastValue: number;
4
+ _anim_alpha: number;
5
+ _value_substitutor: any;
6
+ animOnValueChange(value: any, animFromBase: boolean | undefined, base: any): void;
7
+ dispose(): void;
8
+ onchange(after: any, before: any): void;
9
+ get animAlpha(): number;
10
+ get animValue(): number;
11
+ defaultValueSubstitutor(): any;
12
+ get valueSubstitutor(): any;
13
+ get value(): number;
14
+ set value(value: number): any;
15
+ _app: any;
16
+ _model: any;
17
+ _state: any;
18
+ _delta: any;
19
+ _animation: any;
20
+ _animate: any;
21
+ _parent: any;
22
+ _disposed: any;
23
+ _textHidden: any;
24
+ _text_substitutor: any;
25
+ _mappings: any;
26
+ _realObject: import("@hatiolab/things-scene").IRealObject | undefined;
27
+ _cachedState: any;
28
+ updatedAt: any;
29
+ fontSize: any;
30
+ __cache__: any;
31
+ created(): void;
32
+ added(parent: any): void;
33
+ removed(parent: any): void;
34
+ ready(): Promise<void>;
35
+ touch(): void;
36
+ clearCache(...attrs: any[]): void;
37
+ removeSelf(completely: any): void;
38
+ resetAnimation(): void;
39
+ get nature(): import("@hatiolab/things-scene").ComponentNature;
40
+ get disposed(): boolean;
41
+ isLayer(): boolean;
42
+ isGroup(): boolean;
43
+ isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component.js").Container;
44
+ isLine(): boolean;
45
+ isRoot(): boolean;
46
+ isRootModel(): boolean;
47
+ is3dish(): boolean;
48
+ get is3dMode(): boolean;
49
+ isIn3DSpace(): boolean;
50
+ isTemplate(): boolean;
51
+ isHTMLElement(): boolean;
52
+ isConnectable(): boolean;
53
+ isIdentifiable(): boolean;
54
+ isPositionable(): boolean;
55
+ replaceRefids(replaceMap: any): void;
56
+ get(property: any): any;
57
+ set(props: any, propval?: any): any;
58
+ getState(property: any): any;
59
+ setState(props: any, propval?: any): any;
60
+ get model(): any;
61
+ get state(): any;
62
+ get hierarchy(): any;
63
+ get volatile(): never[];
64
+ _applyProps(target: any, props: any, options: any): any;
65
+ contains(x: number, y: number): boolean;
66
+ move(offset: {
67
+ x: number;
68
+ y: number;
69
+ }, ...args: boolean[]): void;
70
+ symmetryX(x?: number): void;
71
+ symmetryY(y: number): void;
72
+ adjustResize(bounds: import("@hatiolab/things-scene").BOUNDS, origin_bounds: import("@hatiolab/things-scene").BOUNDS, diagonal: boolean): {
73
+ left: any;
74
+ top: any;
75
+ width: any;
76
+ height: any;
77
+ };
78
+ adjustRotation(rotation: number, step: boolean): number;
79
+ outline(progress: number): any;
80
+ get bounds(): import("@hatiolab/things-scene").BOUNDS;
81
+ set bounds(b: import("@hatiolab/things-scene").BOUNDS): any;
82
+ get center(): import("@hatiolab/things-scene").POINT;
83
+ set center(p: import("@hatiolab/things-scene").POINT): any;
84
+ get location(): import("@hatiolab/things-scene").POINT;
85
+ set location(l: import("@hatiolab/things-scene").POINT): any;
86
+ get rotate(): import("@hatiolab/things-scene").POINT;
87
+ set rotate(r: import("@hatiolab/things-scene").POINT): any;
88
+ get dimension(): import("@hatiolab/things-scene").DIMENSION;
89
+ set dimension(d: import("@hatiolab/things-scene").DIMENSION): any;
90
+ get path(): import("@hatiolab/things-scene").POINT[];
91
+ set path(p: import("@hatiolab/things-scene").POINT[]): any;
92
+ get drawPath(): import("@hatiolab/things-scene").POINT[];
93
+ get rotatePoint(): import("@hatiolab/things-scene").POINT;
94
+ get mutable(): boolean;
95
+ get resizable(): boolean;
96
+ get rotatable(): boolean;
97
+ buildRealObject(): import("@hatiolab/things-scene").IRealObject | undefined;
98
+ get realObject(): import("@hatiolab/things-scene").IRealObject | undefined;
99
+ draw(context?: import("@hatiolab/things-scene").SceneRenderContext): void;
100
+ prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
101
+ render(context: import("@hatiolab/things-scene").SceneRenderContext): void;
102
+ postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
103
+ prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
104
+ prepareIf(condition: boolean): void;
105
+ drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
106
+ drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
107
+ drawFill(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
108
+ get strokeStyle(): any;
109
+ set strokeStyle(v: any): any;
110
+ get fillStyle(): any;
111
+ set fillStyle(v: any): any;
112
+ get fontColor(): string;
113
+ set fontColor(v: string): any;
114
+ get rotation(): number;
115
+ set rotation(v: number): any;
116
+ get decorators(): string[];
117
+ get decotag(): string;
118
+ get hidden(): boolean;
119
+ set hidden(v: boolean): any;
120
+ get tag(): string;
121
+ set tag(v: string): any;
122
+ get appendum(): any;
123
+ set appendum(v: any): any;
124
+ defaultTextSubstitutor(): string;
125
+ textLines(context?: import("@hatiolab/things-scene").SceneRenderContext): any[][];
126
+ get font(): string;
127
+ get lineHeight(): number;
128
+ get textSubstitutor(): () => string;
129
+ get text(): string;
130
+ set text(v: string): any;
131
+ get textBounds(): import("@hatiolab/things-scene").BOUNDS;
132
+ get textRotation(): number;
133
+ get textHidden(): boolean;
134
+ set textHidden(v: boolean): any;
135
+ get hasTextProperty(): boolean;
136
+ animate(opts: import("@hatiolab/things-scene").AnimationConfig): any;
137
+ effect(context: import("@hatiolab/things-scene").SceneRenderContext, model: any): void;
138
+ serialize(...others: any[]): string;
139
+ trim(): void;
140
+ closeScene(data: any): void;
141
+ delta(attr?: string | object, value?: any): any;
142
+ invalidate(): void;
143
+ get data(): any;
144
+ set data(v: any): any;
145
+ set tap(v: any): any;
146
+ get mappings(): any[];
147
+ get retention(): number;
148
+ get animation(): import("@hatiolab/things-scene").AnimationController | undefined;
149
+ get started(): boolean;
150
+ set started(v: boolean): any;
151
+ get controls(): import("@hatiolab/things-scene").Control[] | undefined;
152
+ findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): Component | undefined;
153
+ findAll(s: string | ((c: Component) => boolean), ...others: any[]): any[] | undefined;
154
+ capture(x: number, y: number, except?: (c: Component) => boolean): any;
155
+ findAnchor(name: string): any;
156
+ isDescendible(container: Component): boolean;
157
+ getContext(component?: unknown): any;
158
+ get root(): Component;
159
+ get rootModel(): Component;
160
+ get parent(): Component;
161
+ set parent(v: Component): any;
162
+ get anchors(): import("@hatiolab/things-scene").Anchor[];
163
+ get scalable(): boolean;
164
+ get stuck(): boolean;
165
+ get capturable(): boolean;
166
+ get position(): string;
167
+ get origin(): string;
168
+ get offset(): import("@hatiolab/things-scene").POINT;
169
+ get app(): import("@hatiolab/things-scene").ApplicationContext;
170
+ drawEffect(context: import("@hatiolab/things-scene").SceneRenderContext): void;
171
+ prepareFill(resolve: Function, reject: Function): void;
172
+ prepareFillIf(condition: boolean): void;
173
+ onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
174
+ drawImage(context: import("@hatiolab/things-scene").SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
175
+ mutateBounds(logic: ((bounds: import("@hatiolab/things-scene").BOUNDS) => import("@hatiolab/things-scene").BOUNDS | void) | null, context?: any): void;
176
+ mutatePath(beforeLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, afterLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, context?: any): void;
177
+ access(accessor: string): any;
178
+ substitute(template: string, data: any): string | undefined;
179
+ onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
180
+ onchangeData(after: Record<string, any>, before: Record<string, any>): void;
181
+ buildMappings(): void;
182
+ executeMappings(force?: boolean): void;
183
+ disposeMappings(): void;
184
+ ondropfile(transfered: FileList, files: string[]): void;
185
+ transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
186
+ transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
187
+ transcoordS2T(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
188
+ transcoordT2P(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
189
+ transcoordT2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
190
+ transcoordS2TR(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
191
+ transcoordS2O(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
192
+ transcoordC2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
193
+ transcoordS2C(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
194
+ toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
195
+ fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
196
+ toScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
197
+ fromScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
198
+ toLocal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
199
+ toGlobal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
200
+ toOther(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
201
+ on(name: string | object, callback: Function, context?: any): any;
202
+ off(name?: string | object, callback?: Function, context?: any): any;
203
+ once(name: string | object, callback: Function, context?: any): any;
204
+ trigger(name: string, ...args: any[]): any;
205
+ delegate_on(delegator: any): any;
206
+ delegate_off(delegator: any): any;
207
+ calculateBounds?(): void;
208
+ oncreate_element?(element: HTMLElement): void;
209
+ removeComponent(component: Component, ghost?: boolean): void;
210
+ addComponent(component: Component, ghost?: boolean): void;
211
+ insertComponentAt(component: Component, index: number, ghost?: boolean): void;
212
+ getOverlay(component: Component): HTMLElement | undefined;
213
+ findById(id: string): Component | undefined;
214
+ findByRefid(ref: string | number): Component | undefined;
215
+ findAllById(id: string): Component[];
216
+ resize(): void;
217
+ fit(type?: string): void;
218
+ get components(): Component[] | undefined;
219
+ get layout(): any;
220
+ get auxOverlay(): HTMLElement | undefined;
221
+ get isReady(): boolean;
222
+ get unitScale(): number;
223
+ get selected(): Component[];
224
+ set selected(_v: Component[]): any;
225
+ get focused(): Component | null;
226
+ set focused(_v: Component | null): any;
227
+ get hasSameParentForAllSelected(): boolean;
228
+ set hasSameParentForAllSelected(_v: boolean): any;
229
+ get fitMode(): string | undefined;
230
+ set fitMode(_v: string | undefined): any;
231
+ get element(): HTMLElement | null;
232
+ set element(_v: HTMLElement | null): any;
6
233
  }) & typeof Donut;
7
234
  export default class GaugeCircle extends GaugeCircle_base {
8
235
  render(context: CanvasRenderingContext2D): void;
@@ -1 +1 @@
1
- {"version":3,"file":"gauge-circle.js","sourceRoot":"","sources":["../src/gauge-circle.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, ComponentNature, Donut, sceneComponent, ValueHolder } from '@hatiolab/things-scene'\n\nimport { PROPERTIES } from './gauge-properties.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n ...PROPERTIES,\n {\n type: 'number',\n label: 'start-angle',\n name: 'startAngle',\n property: 'startAngle'\n },\n {\n type: 'number',\n label: 'end-angle',\n name: 'endAngle',\n property: 'endAngle'\n },\n {\n type: 'color',\n label: 'text-fill-style',\n name: 'textFillStyle',\n property: 'textFillStyle'\n },\n {\n type: 'color',\n label: 'needle-fill-style',\n name: 'needleFillStyle',\n property: 'needleFillStyle'\n },\n {\n type: 'color',\n label: 'inner-circle-fill-style',\n name: 'innerCircleFillStyle',\n property: 'innerCircleFillStyle'\n },\n {\n type: 'checkbox',\n label: 'in-text',\n name: 'inText',\n property: 'inText'\n }\n ],\n help: 'scene/component/gauge-circle'\n}\n\nfunction countSignificantFigures(number: number) {\n const numStr = number.toString()\n const parts = numStr.split('.')\n\n // 소수점 이하 부분을 분석\n if (parts.length === 2) {\n const decimalPart = parts[1]\n let significantFigures = 0\n\n for (let i = 0; i < decimalPart.length; i++) {\n if (decimalPart[i] !== '0') {\n significantFigures = decimalPart.length - i\n break\n }\n }\n\n return significantFigures\n }\n\n // 정수인 경우 유효 자릿수 없음\n return 0\n}\n\nfunction drawStepLine(context: CanvasRenderingContext2D, ang: number, rx: number, stepNeedleSize: number) {\n context.rotate(ang)\n context.translate(0, -rx)\n\n context.fillRect(0, -rx * 0.14, stepNeedleSize, rx * 0.175)\n context.translate(0, rx)\n context.rotate(-ang)\n}\n\nfunction drawSubStepLine(context: CanvasRenderingContext2D, ang: number, rx: number, stepNeedleSize: number) {\n context.rotate(ang)\n context.translate(0, -rx)\n\n context.fillRect(0, -rx * 0.04, stepNeedleSize, rx * 0.075)\n context.translate(0, rx)\n context.rotate(-ang)\n}\n\nfunction drawStepText(context: CanvasRenderingContext2D, text: string, ang: number, rx: number) {\n context.rotate(ang)\n context.translate(0, -rx * 0.83)\n context.rotate(-ang)\n\n context.fillText(text, 0, 0)\n context.rotate(ang)\n context.translate(0, rx * 0.83)\n context.rotate(-ang)\n}\n\nfunction drawNeedle(context: CanvasRenderingContext2D, rx: number, ang: number) {\n context.rotate(ang)\n\n context.beginPath()\n\n context.moveTo(rx * 0.035, 0) // 중앙 두께\n\n context.lineTo(0, rx * 0.8) // 끝 점\n\n context.lineTo(-rx * 0.035, 0) // 중앙 두께\n\n context.lineTo(-rx * 0.015, -rx * 0.2) // 뒷쪽 두께\n context.lineTo(rx * 0.015, -rx * 0.2) // 뒷쪽 두께\n\n context.rotate(-ang)\n}\n\n@sceneComponent('gauge-circle')\nexport default class GaugeCircle extends ValueHolder(Donut) {\n render(context: CanvasRenderingContext2D) {\n var {\n lineWidth = 20,\n startValue,\n endValue,\n step,\n subStep,\n startAngle = 0,\n endAngle = 180,\n fontColor = 'black',\n showStepText = true,\n showStartValue = true,\n showEndValue = true,\n showStepLine = true,\n showSubStep = true,\n inText = true,\n colorStops, // 스텝별 각각 다른 색\n fillStyle,\n textFillStyle = 'black',\n needleFillStyle = 'black',\n innerCircleFillStyle = 'gray',\n stepNeedleSize = 2,\n stepFillStyle,\n stepTextSize,\n cx,\n cy,\n rx,\n ry,\n ratio,\n animFromBase = false\n } = this.state\n\n startValue = Number(startValue)\n\n this.animOnValueChange(this.value, animFromBase, startValue)\n\n const RADIAN = 0.0174533 / Math.PI\n const rxRatio = (rx / 100) * ratio // 원 안에 지워지는 비율을 계산한 rx - ratio의 비율에 따라 크기가 변함\n const ryRatio = (ry / 100) * ratio // 원 안에 지워지는 비율을 계산한 ry - ratio의 비율에 따라 크기가 변함\n const circleSize = (endAngle - startAngle) / 180 // 원의 총 길이. - PI * 2가 원이므로 (360도 = 2, 180도 = 1)\n const totalValue = endValue - startValue // 게이지의 시작과 끝 값의 크기\n\n startAngle = startAngle * RADIAN - 0.5 // 맨 위쪽을 중심으로 앵글의 범위에 따라 왼쪽으로 넓어짐\n endAngle = endAngle * RADIAN - 0.5 // 맨 위쪽을 중심으로 앵글의 범위에 따라 오른쪽으로 넓어짐\n\n context.translate(cx, cy)\n\n //// 메인 게이지 원 그리기 ////\n context.beginPath()\n\n context.ellipse(0, 0, Math.abs(rx), Math.abs(ry), 0, startAngle * Math.PI, endAngle * Math.PI)\n this.drawStroke(context)\n context.ellipse(0, 0, Math.abs(rxRatio), Math.abs(ryRatio), 0, endAngle * Math.PI, startAngle * Math.PI, true) // 반대로 그리며 원을 지움.\n // this.drawFill(context)\n\n context.closePath()\n\n //// 스텝별 색 칠하기 ////\n if (colorStops) {\n let beforeValue = 0\n let endStepAngle = 0\n context.moveTo(0, 0)\n\n colorStops.forEach(function (\n v: { position: number; color: string },\n idx: number,\n arr: { position: number; color: string }[]\n ) {\n context.beginPath()\n\n let value = Math.max(Math.min(v.position - startValue, totalValue), 0) // v.position 범위의 최소값은 0, 최대값은 totalValue가 되야함.\n let startStepAngle = endStepAngle || Math.PI * (startAngle + (circleSize * beforeValue) / totalValue)\n\n if (idx === arr.length - 1)\n // 마지막값은 무조건 끝까지 채워주도록 한다\n endStepAngle = Math.PI * (startAngle + circleSize)\n else endStepAngle = Math.PI * (startAngle + (circleSize * value) / totalValue)\n\n if (beforeValue > totalValue || beforeValue > value)\n // 값이 게이지의 최대 값을 넘어가거나 이전 값 보다 현재값이 작으면 다시 그릴 필요 없음\n return false\n\n context.ellipse(0, 0, Math.abs(rx), Math.abs(ry), 0, startStepAngle, endStepAngle)\n context.ellipse(0, 0, Math.abs(rxRatio), Math.abs(ryRatio), 0, endStepAngle, startStepAngle, true)\n context.fillStyle = v.color\n context.fill()\n\n beforeValue = value\n })\n }\n context.scale(1, ry / rx)\n\n //// 바늘 그리기 ////\n context.beginPath()\n let drawingValue = this.animValue\n drawingValue = Math.max(Math.min(drawingValue, endValue), startValue) // 그려지는 값은 startValue보다 작을 수 없고, endValue보다 클 수 없음.\n\n let ang = Math.PI * ((circleSize * (drawingValue - startValue)) / totalValue + startAngle - 0.5)\n\n drawNeedle(context, rx, ang)\n\n context.fillStyle = needleFillStyle\n context.fill()\n\n //// 중앙 원 그리기 ////\n context.beginPath()\n context.ellipse(0, 0, Math.abs(rx) / 15, Math.abs(rx) / 15, 0, 0, 2 * Math.PI)\n context.fillStyle = innerCircleFillStyle\n context.fill()\n\n //// 스텝 선 그리기 ////\n context.fillStyle = stepFillStyle\n if (showStepLine) {\n let count = totalValue / step\n\n // Draw StartValue\n drawStepLine(context, Math.PI * (startAngle + 0.5), rx * 0.8, stepNeedleSize) // 원을 그릴때 PI는 45도 부터 그리지만 angle은 0도부터 틀어서 + 0.5도를 곱해줘야함\n // Draw StepValue\n for (let num = 1; num < count; num++) {\n let ang = Math.PI * ((circleSize / count) * num + startAngle + 0.5)\n\n drawStepLine(context, ang, rx * 0.8, stepNeedleSize)\n }\n // Draw EndValue\n drawStepLine(context, Math.PI * (endAngle + 0.5), rx * 0.8, stepNeedleSize)\n }\n\n //// 서브 스탭 그리기 ////\n if (showSubStep && subStep > 0) {\n let count = Math.round(totalValue / subStep)\n\n // Draw StepValue\n for (let num = 1; num <= count; num++) {\n if ((num * subStep) % step == 0) {\n // 메인 스탭과 서브 스탭은 그리지 않음\n continue\n }\n let ang = Math.PI * ((circleSize / count) * num + startAngle + 0.5)\n\n drawSubStepLine(context, ang, rx * 0.8, stepNeedleSize)\n }\n }\n\n //// 스텝 텍스트 그리기 ////\n context.fillStyle = textFillStyle\n context.font = (rx * stepTextSize) / 50 + 'px arial'\n context.textBaseline = 'middle'\n context.textAlign = 'center'\n let textLocation = inText ? 0.8 : 1.35\n\n if (showStartValue) {\n // Draw StartText\n drawStepText(context, startValue, Math.PI * (startAngle + 0.5), rx * textLocation)\n }\n\n if (showEndValue) {\n // Draw EndText\n drawStepText(context, endValue, Math.PI * (endAngle + 0.5), rx * textLocation)\n }\n\n if (showStepText) {\n // Draw StepText\n let count = totalValue / step\n let significantFigures = countSignificantFigures(step)\n\n for (let num = 1; num < count; num++) {\n let value = startValue + step * num\n let ang = Math.PI * ((circleSize / count) * num + startAngle + 0.5)\n\n drawStepText(context, value.toFixed(significantFigures), ang, rx * textLocation)\n }\n }\n\n context.scale(1, rx / ry)\n context.translate(-cx, -cy)\n }\n\n contains(x: number, y: number): boolean {\n // 컨테인즈는 Ellipse로 정의함\n var { cx, cy, rx, ry } = this.state\n\n var normx = (x - cx) / (rx * 2 - 0.5)\n var normy = (y - cy) / (ry * 2 - 0.5)\n\n return normx * normx + normy * normy < 0.25\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawText(context)\n }\n\n get nature() {\n return NATURE\n }\n}\n"]}
1
+ {"version":3,"file":"gauge-circle.js","sourceRoot":"","sources":["../src/gauge-circle.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, ComponentNature, Donut, sceneComponent, ValueHolder } from '@hatiolab/things-scene'\n\nimport { PROPERTIES } from './gauge-properties.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n ...PROPERTIES,\n {\n type: 'number',\n label: 'start-angle',\n name: 'startAngle',\n property: 'startAngle'\n },\n {\n type: 'number',\n label: 'end-angle',\n name: 'endAngle',\n property: 'endAngle'\n },\n {\n type: 'color',\n label: 'text-fill-style',\n name: 'textFillStyle',\n property: 'textFillStyle'\n },\n {\n type: 'color',\n label: 'needle-fill-style',\n name: 'needleFillStyle',\n property: 'needleFillStyle'\n },\n {\n type: 'color',\n label: 'inner-circle-fill-style',\n name: 'innerCircleFillStyle',\n property: 'innerCircleFillStyle'\n },\n {\n type: 'checkbox',\n label: 'in-text',\n name: 'inText',\n property: 'inText'\n }\n ],\n help: 'scene/component/gauge-circle'\n}\n\nfunction countSignificantFigures(number: number) {\n const numStr = number.toString()\n const parts = numStr.split('.')\n\n // 소수점 이하 부분을 분석\n if (parts.length === 2) {\n const decimalPart = parts[1]\n let significantFigures = 0\n\n for (let i = 0; i < decimalPart.length; i++) {\n if (decimalPart[i] !== '0') {\n significantFigures = decimalPart.length - i\n break\n }\n }\n\n return significantFigures\n }\n\n // 정수인 경우 유효 자릿수 없음\n return 0\n}\n\nfunction drawStepLine(context: CanvasRenderingContext2D, ang: number, rx: number, stepNeedleSize: number) {\n context.rotate(ang)\n context.translate(0, -rx)\n\n context.fillRect(0, -rx * 0.14, stepNeedleSize, rx * 0.175)\n context.translate(0, rx)\n context.rotate(-ang)\n}\n\nfunction drawSubStepLine(context: CanvasRenderingContext2D, ang: number, rx: number, stepNeedleSize: number) {\n context.rotate(ang)\n context.translate(0, -rx)\n\n context.fillRect(0, -rx * 0.04, stepNeedleSize, rx * 0.075)\n context.translate(0, rx)\n context.rotate(-ang)\n}\n\nfunction drawStepText(context: CanvasRenderingContext2D, text: string, ang: number, rx: number) {\n context.rotate(ang)\n context.translate(0, -rx * 0.83)\n context.rotate(-ang)\n\n context.fillText(text, 0, 0)\n context.rotate(ang)\n context.translate(0, rx * 0.83)\n context.rotate(-ang)\n}\n\nfunction drawNeedle(context: CanvasRenderingContext2D, rx: number, ang: number) {\n context.rotate(ang)\n\n context.beginPath()\n\n context.moveTo(rx * 0.035, 0) // 중앙 두께\n\n context.lineTo(0, rx * 0.8) // 끝 점\n\n context.lineTo(-rx * 0.035, 0) // 중앙 두께\n\n context.lineTo(-rx * 0.015, -rx * 0.2) // 뒷쪽 두께\n context.lineTo(rx * 0.015, -rx * 0.2) // 뒷쪽 두께\n\n context.rotate(-ang)\n}\n\n@sceneComponent('gauge-circle')\nexport default class GaugeCircle extends ValueHolder(Donut) {\n render(context: CanvasRenderingContext2D) {\n var {\n lineWidth = 20,\n startValue,\n endValue,\n step,\n subStep,\n startAngle = 0,\n endAngle = 180,\n fontColor = 'black',\n showStepText = true,\n showStartValue = true,\n showEndValue = true,\n showStepLine = true,\n showSubStep = true,\n inText = true,\n colorStops, // 스텝별 각각 다른 색\n fillStyle,\n textFillStyle = 'black',\n needleFillStyle = 'black',\n innerCircleFillStyle = 'gray',\n stepNeedleSize = 2,\n stepFillStyle,\n stepTextSize,\n cx,\n cy,\n rx,\n ry,\n ratio,\n animFromBase = false\n } = this.state\n\n startValue = Number(startValue)\n\n this.animOnValueChange(this.value, animFromBase, startValue)\n\n const RADIAN = 0.0174533 / Math.PI\n const rxRatio = (rx / 100) * ratio // 원 안에 지워지는 비율을 계산한 rx - ratio의 비율에 따라 크기가 변함\n const ryRatio = (ry / 100) * ratio // 원 안에 지워지는 비율을 계산한 ry - ratio의 비율에 따라 크기가 변함\n const circleSize = (endAngle - startAngle) / 180 // 원의 총 길이. - PI * 2가 원이므로 (360도 = 2, 180도 = 1)\n const totalValue = endValue - startValue // 게이지의 시작과 끝 값의 크기\n\n startAngle = startAngle * RADIAN - 0.5 // 맨 위쪽을 중심으로 앵글의 범위에 따라 왼쪽으로 넓어짐\n endAngle = endAngle * RADIAN - 0.5 // 맨 위쪽을 중심으로 앵글의 범위에 따라 오른쪽으로 넓어짐\n\n context.translate(cx, cy)\n\n //// 메인 게이지 원 그리기 ////\n context.beginPath()\n\n context.ellipse(0, 0, Math.abs(rx), Math.abs(ry), 0, startAngle * Math.PI, endAngle * Math.PI)\n this.drawStroke(context)\n context.ellipse(0, 0, Math.abs(rxRatio), Math.abs(ryRatio), 0, endAngle * Math.PI, startAngle * Math.PI, true) // 반대로 그리며 원을 지움.\n // this.drawFill(context)\n\n context.closePath()\n\n //// 스텝별 색 칠하기 ////\n if (colorStops) {\n let beforeValue = 0\n let endStepAngle = 0\n context.moveTo(0, 0)\n\n colorStops.forEach(function (\n v: { position: number; color: string },\n idx: number,\n arr: { position: number; color: string }[]\n ) {\n context.beginPath()\n\n let value = Math.max(Math.min(v.position - startValue, totalValue), 0) // v.position 범위의 최소값은 0, 최대값은 totalValue가 되야함.\n let startStepAngle = endStepAngle || Math.PI * (startAngle + (circleSize * beforeValue) / totalValue)\n\n if (idx === arr.length - 1)\n // 마지막값은 무조건 끝까지 채워주도록 한다\n endStepAngle = Math.PI * (startAngle + circleSize)\n else endStepAngle = Math.PI * (startAngle + (circleSize * value) / totalValue)\n\n if (beforeValue > totalValue || beforeValue > value)\n // 값이 게이지의 최대 값을 넘어가거나 이전 값 보다 현재값이 작으면 다시 그릴 필요 없음\n return false\n\n context.ellipse(0, 0, Math.abs(rx), Math.abs(ry), 0, startStepAngle, endStepAngle)\n context.ellipse(0, 0, Math.abs(rxRatio), Math.abs(ryRatio), 0, endStepAngle, startStepAngle, true)\n context.fillStyle = v.color\n context.fill()\n\n beforeValue = value\n })\n }\n context.scale(1, ry / rx)\n\n //// 바늘 그리기 ////\n context.beginPath()\n let drawingValue = this.animValue\n drawingValue = Math.max(Math.min(drawingValue, endValue), startValue) // 그려지는 값은 startValue보다 작을 수 없고, endValue보다 클 수 없음.\n\n let ang = Math.PI * ((circleSize * (drawingValue - startValue)) / totalValue + startAngle - 0.5)\n\n drawNeedle(context, rx, ang)\n\n context.fillStyle = needleFillStyle\n context.fill()\n\n //// 중앙 원 그리기 ////\n context.beginPath()\n context.ellipse(0, 0, Math.abs(rx) / 15, Math.abs(rx) / 15, 0, 0, 2 * Math.PI)\n context.fillStyle = innerCircleFillStyle\n context.fill()\n\n //// 스텝 선 그리기 ////\n context.fillStyle = stepFillStyle\n if (showStepLine) {\n let count = totalValue / step\n\n // Draw StartValue\n drawStepLine(context, Math.PI * (startAngle + 0.5), rx * 0.8, stepNeedleSize) // 원을 그릴때 PI는 45도 부터 그리지만 angle은 0도부터 틀어서 + 0.5도를 곱해줘야함\n // Draw StepValue\n for (let num = 1; num < count; num++) {\n let ang = Math.PI * ((circleSize / count) * num + startAngle + 0.5)\n\n drawStepLine(context, ang, rx * 0.8, stepNeedleSize)\n }\n // Draw EndValue\n drawStepLine(context, Math.PI * (endAngle + 0.5), rx * 0.8, stepNeedleSize)\n }\n\n //// 서브 스탭 그리기 ////\n if (showSubStep && subStep > 0) {\n let count = Math.round(totalValue / subStep)\n\n // Draw StepValue\n for (let num = 1; num <= count; num++) {\n if ((num * subStep) % step == 0) {\n // 메인 스탭과 서브 스탭은 그리지 않음\n continue\n }\n let ang = Math.PI * ((circleSize / count) * num + startAngle + 0.5)\n\n drawSubStepLine(context, ang, rx * 0.8, stepNeedleSize)\n }\n }\n\n //// 스텝 텍스트 그리기 ////\n context.fillStyle = textFillStyle\n context.font = (rx * stepTextSize) / 50 + 'px arial'\n context.textBaseline = 'middle'\n context.textAlign = 'center'\n let textLocation = inText ? 0.8 : 1.35\n\n if (showStartValue) {\n // Draw StartText\n drawStepText(context, startValue, Math.PI * (startAngle + 0.5), rx * textLocation)\n }\n\n if (showEndValue) {\n // Draw EndText\n drawStepText(context, endValue, Math.PI * (endAngle + 0.5), rx * textLocation)\n }\n\n if (showStepText) {\n // Draw StepText\n let count = totalValue / step\n let significantFigures = countSignificantFigures(step)\n\n for (let num = 1; num < count; num++) {\n let value = startValue + step * num\n let ang = Math.PI * ((circleSize / count) * num + startAngle + 0.5)\n\n drawStepText(context, value.toFixed(significantFigures), ang, rx * textLocation)\n }\n }\n\n context.scale(1, rx / ry)\n context.translate(-cx, -cy)\n }\n\n contains(x: number, y: number): boolean {\n // 컨테인즈는 Ellipse로 정의함\n var { cx, cy, rx, ry } = this.state\n\n var normx = (x - cx) / (rx * 2 - 0.5)\n var normy = (y - cy) / (ry * 2 - 0.5)\n\n return normx * normx + normy * normy < 0.25\n }\n\n postrender(context: CanvasRenderingContext2D) {\n this.drawText(context)\n }\n get nature() {\n return NATURE\n }\n}\n"]}