Skip to content

Commit

Permalink
Merge pull request #197 from t29mato/feature/add_constants_for_manual…
Browse files Browse the repository at this point in the history
…_mode_and_mask_mode

Feature/add constants for manual mode and mask mode
  • Loading branch information
yu-smc authored Sep 19, 2024
2 parents a2beda9 + 2a38fd1 commit d97ca62
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 41 deletions.
27 changes: 14 additions & 13 deletions src/application/services/canvasHandler/canvasHandler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import ColorThief from 'colorthief'
import { CanvasHandlerInterface } from './canvasHandlerInterface'
import { Coord } from '../../../domain/models/dataset/datasetInterface'
import { HTMLCanvas } from '../../../presentation/dom/HTMLCanvas'
import { MANUAL_MODE, MASK_MODE } from '@/constants'
const colorThief = new ColorThief()

export class CanvasHandler implements CanvasHandlerInterface {
Expand All @@ -16,8 +17,8 @@ export class CanvasHandler implements CanvasHandlerInterface {
endX: 0,
endY: 0,
}
maskMode = -1
manualMode = -1 // INFO: {0: add, 1: Edit, 2: Delete}
maskMode: number = MASK_MODE.UNSET
manualMode: number = MANUAL_MODE.UNSET
penToolSizePx = 50
eraserSizePx = 30
uploadImageUrl = ''
Expand Down Expand Up @@ -57,9 +58,9 @@ export class CanvasHandler implements CanvasHandlerInterface {

get isDrawingMask(): boolean {
switch (this.maskMode) {
case 0:
case 1:
case 2:
case MASK_MODE.PEN:
case MASK_MODE.BOX:
case MASK_MODE.ERASER:
return true
default:
return false
Expand All @@ -72,21 +73,21 @@ export class CanvasHandler implements CanvasHandlerInterface {
}

mouseDragInManualMode() {
if (this.manualMode === 1) {
if (this.manualMode === MANUAL_MODE.EDIT) {
//INFO: only in EDIT mode
this.drawDraggedArea()
}
}

mouseDragInMaskMode(xPx: number, yPx: number) {
switch (this.maskMode) {
case 0:
case MASK_MODE.PEN:
this.drawPenMask(xPx, yPx, this.penToolSizePx)
break
case 1: // INFO: マウスドラッグ中は選択範囲を仮描画
case MASK_MODE.BOX: // INFO: マウスドラッグ中は選択範囲を仮描画
this.drawDraggedArea()
break
case 2:
case MASK_MODE.ERASER:
this.drawEraserMask(xPx, yPx, this.eraserSizePx)
break
default:
Expand All @@ -99,12 +100,12 @@ export class CanvasHandler implements CanvasHandlerInterface {
this.rectangle.endY = yPx

//INFO: 現在のモードがmanual modeかmask modeかで処理を分岐
if (this.manualMode !== -1) {
if (this.manualMode !== MANUAL_MODE.UNSET) {
this.mouseDragInManualMode()
return
}

if (this.maskMode !== -1) {
if (this.maskMode !== MASK_MODE.UNSET) {
this.mouseDragInMaskMode(xPx, yPx)
return
}
Expand All @@ -113,7 +114,7 @@ export class CanvasHandler implements CanvasHandlerInterface {
mouseUp() {
this.clearTempMask()

if (this.maskMode === 1) {
if (this.maskMode === MASK_MODE.BOX) {
this.drawBoxMask()
}
}
Expand Down Expand Up @@ -379,7 +380,7 @@ export class CanvasHandler implements CanvasHandlerInterface {

setMaskMode(mode: number) {
this.maskMode = mode
this.manualMode = -1
this.manualMode = MANUAL_MODE.UNSET
}

setPenToolSizePx(size: number) {
Expand Down
14 changes: 14 additions & 0 deletions src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,17 @@ export const POINT_MODE = {
TWO_POINTS: 0,
FOUR_POINTS: 1,
} as const

export const MANUAL_MODE = {
UNSET: -1,
ADD: 0,
EDIT: 1,
DELETE: 2,
} as const

export const MASK_MODE = {
UNSET: -1,
PEN: 0,
BOX: 1,
ERASER: 2,
}
9 changes: 5 additions & 4 deletions src/presentation/components/AxisSetManager/AxisSetManager.vue
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ import { canvasHandler } from '@/instanceStore/applicationServiceInstances'
import { interpolator } from '@/instanceStore/applicationServiceInstances'
import { axisSetRepository } from '@/instanceStore/repositoryInatances'
import { datasetRepository } from '@/instanceStore/repositoryInatances'
import { MANUAL_MODE } from '@/constants'
export default defineComponent({
components: {},
Expand Down Expand Up @@ -84,9 +85,9 @@ export default defineComponent({
//NOTE: If axis coords are not calibrated, change manualMode for calibration. Otherwise automatically set to ADD mode
if (this.axisSetRepository.activeAxisSet.nextAxis) {
this.canvasHandler.manualMode = -1
this.canvasHandler.manualMode = MANUAL_MODE.UNSET
} else {
this.canvasHandler.manualMode = 0
this.canvasHandler.manualMode = MANUAL_MODE.ADD
}
},
handleOnClickAxisSet(id: number) {
Expand Down Expand Up @@ -143,9 +144,9 @@ export default defineComponent({
this.axisSetRepository.setActiveAxisSet(alternativeAxisSet.id)
if (alternativeAxisSet.nextAxis) {
this.canvasHandler.manualMode = -1
this.canvasHandler.manualMode = MANUAL_MODE.UNSET
} else {
this.canvasHandler.manualMode = 0
this.canvasHandler.manualMode = MANUAL_MODE.ADD
}
},
},
Expand Down
26 changes: 13 additions & 13 deletions src/presentation/components/Canvas/CanvasCursor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ import { CSSProperties } from 'vue'
import { canvasHandler } from '@/instanceStore/applicationServiceInstances'
import { axisSetRepository } from '@/instanceStore/repositoryInatances'
import { datasetRepository } from '@/instanceStore/repositoryInatances'
import { POINT_MODE, STYLE } from '@/constants'
import { MANUAL_MODE, MASK_MODE, POINT_MODE, STYLE } from '@/constants'
const guideLineBaseStyles: CSSProperties = {
position: 'absolute',
Expand All @@ -83,19 +83,19 @@ export default defineComponent({
},
rightLabel(): string {
switch (this.canvasHandler.maskMode) {
case 0:
case MASK_MODE.PEN:
return 'Pen'
case 1:
case MASK_MODE.BOX:
return 'Box'
case 2:
case MASK_MODE.ERASER:
return 'Eraser'
}
switch (this.canvasHandler.manualMode) {
case 0:
case MANUAL_MODE.ADD:
return 'Add'
case 1:
case MANUAL_MODE.EDIT:
return 'Edit'
case 2:
case MANUAL_MODE.DELETE:
return 'Delete'
}
return ''
Expand Down Expand Up @@ -128,33 +128,33 @@ export default defineComponent({
isCursorGuideLinesActive(): boolean {
//INFO: 軸定義後でプロットのいずれのモードでもないときは表示しない
if (
this.canvasHandler.manualMode === -1 &&
this.canvasHandler.manualMode === MANUAL_MODE.UNSET &&
this.axisSetRepository.activeAxisSet.y2.coordIsFilled
) {
return false
}
// //INFO: マスク操作中の場合は表示しない
if (this.canvasHandler.maskMode !== -1) {
if (this.canvasHandler.maskMode !== MASK_MODE.UNSET) {
return false
}
//INFO: EDIT, DELETEモードの場合は表示しない
if (
this.canvasHandler.manualMode !== -1 &&
this.canvasHandler.manualMode !== 0
this.canvasHandler.manualMode !== MANUAL_MODE.UNSET &&
this.canvasHandler.manualMode !== MANUAL_MODE.ADD
) {
return false
}
return true
},
guideLineColor(): string {
if (this.canvasHandler.manualMode === -1) {
if (this.canvasHandler.manualMode === MANUAL_MODE.UNSET) {
return '#00ff00'
}
if (this.canvasHandler.manualMode === 0) {
if (this.canvasHandler.manualMode === MANUAL_MODE.ADD) {
return '#ffcc00'
}
Expand Down
3 changes: 2 additions & 1 deletion src/presentation/components/Canvas/CanvasMain.vue
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import { extractor } from '@/instanceStore/applicationServiceInstances'
import { canvasHandler } from '@/instanceStore/applicationServiceInstances'
import { axisSetRepository } from '@/instanceStore/repositoryInatances'
import { datasetRepository } from '@/instanceStore/repositoryInatances'
import { MANUAL_MODE } from '@/constants'
// INFO: to adjust the exact position the user clicked.
const offsetPx = 1
Expand Down Expand Up @@ -157,7 +158,7 @@ export default defineComponent({
this.datasetRepository.activeDataset.inactivatePoints()
// INFO: 軸を全て設定し終えた後は自動でプロット追加モードにする
if (!this.axisSetRepository.activeAxisSet.nextAxis) {
this.canvasHandler.manualMode = 0
this.canvasHandler.manualMode = MANUAL_MODE.ADD
}
return
}
Expand Down
10 changes: 5 additions & 5 deletions src/presentation/components/Canvas/CanvasPoint.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { Point } from '@/domain/models/dataset/datasetInterface'
import { interpolator } from '@/instanceStore/applicationServiceInstances'
import { canvasHandler } from '@/instanceStore/applicationServiceInstances'
import { datasetRepository } from '@/instanceStore/repositoryInatances'
import { STYLE } from '@/constants'
import { MANUAL_MODE, STYLE } from '@/constants'
export default defineComponent({
data() {
Expand All @@ -50,7 +50,7 @@ export default defineComponent({
},
cursor(): string | undefined {
const mode = this.canvasHandler.manualMode
if (mode === 1 || mode === 2) {
if (mode === MANUAL_MODE.EDIT || mode === MANUAL_MODE.DELETE) {
return 'pointer'
}
return undefined
Expand Down Expand Up @@ -131,9 +131,9 @@ export default defineComponent({
click(event: MouseEvent) {
switch (this.canvasHandler.manualMode) {
// INFO: CanvasMain Component -> point method
case 0:
case MANUAL_MODE.ADD:
return
case 1:
case MANUAL_MODE.EDIT:
if (event.ctrlKey || event.metaKey) {
this.datasetRepository.activeDataset.toggleActivatedPoint(
this.point.id,
Expand All @@ -144,7 +144,7 @@ export default defineComponent({
this.point.id,
)
return
case 2:
case MANUAL_MODE.DELETE:
this.datasetRepository.activeDataset.clearPoint(this.point.id)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import { canvasHandler } from '@/instanceStore/applicationServiceInstances'
import { interpolator } from '@/instanceStore/applicationServiceInstances'
import { datasetRepository } from '@/instanceStore/repositoryInatances'
import { axisSetRepository } from '@/instanceStore/repositoryInatances'
import { MASK_MODE } from '@/constants'
export default defineComponent({
components: {},
Expand Down Expand Up @@ -105,7 +106,7 @@ export default defineComponent({
)
// INFO: データセットが変えた時はマスクをクリアすることが多いので。
this.canvasHandler.clearMask()
this.canvasHandler.maskMode = -1
this.canvasHandler.maskMode = MASK_MODE.UNSET
},
handleOnClickDataset(id: number) {
if (
Expand Down
17 changes: 13 additions & 4 deletions src/presentation/components/Settings/MaskSettings.vue
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
Clear
</v-btn>
<v-text-field
v-if="canvasHandler.maskMode === 0"
v-if="maskModeIsPen"
:model-value="canvasHandler.penToolSizePx"
@change="onChangePenToolSizePx"
type="number"
Expand All @@ -31,7 +31,7 @@
density="compact"
></v-text-field>
<v-text-field
v-if="canvasHandler.maskMode === 2"
v-if="maskModeIsEraser"
:model-value="canvasHandler.eraserSizePx"
@change="onChangeEraserSizePx"
type="number"
Expand All @@ -43,6 +43,7 @@
</template>

<script lang="ts">
import { MASK_MODE } from '@/constants'
import { canvasHandler } from '@/instanceStore/applicationServiceInstances'
import { defineComponent } from 'vue'
Expand All @@ -52,6 +53,14 @@ export default defineComponent({
canvasHandler,
}
},
computed: {
maskModeIsPen() {
return this.canvasHandler.maskMode === MASK_MODE.PEN
},
maskModeIsEraser() {
return this.canvasHandler.maskMode === MASK_MODE.ERASER
},
},
methods: {
onChangePenToolSizePx(event: Event) {
this.canvasHandler.setPenToolSizePx(
Expand All @@ -73,8 +82,8 @@ export default defineComponent({
clearMask() {
this.canvasHandler.clearMask()
// INFO: マスク削除後はマスク描画されておらず消しゴムツールを使う必要ないため。
if (this.canvasHandler.maskMode === 2) {
this.canvasHandler.maskMode = -1
if (this.canvasHandler.maskMode === MASK_MODE.ERASER) {
this.canvasHandler.maskMode = MASK_MODE.UNSET
}
},
},
Expand Down

0 comments on commit d97ca62

Please sign in to comment.