All files / app/codeCharta/services/3DExports/3DPreview/MeshModels customVisibilityMesh.ts

100% Statements 16/16
75% Branches 6/8
100% Functions 5/5
100% Lines 16/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 4217x     17x             106x 106x   106x       18x 18x       74x 74x       245x 245x       153x 153x 32x 31x     153x      
import { GeneralMesh } from "./generalMesh"
import { ColorChangeStrategy } from "../ColorChangeStrategies/colorChangeStrategy"
 
export abstract class CustomVisibilityMesh extends GeneralMesh {
    currentWidth: number
    visibleBecauseOfColor: boolean
 
    constructor(
        name: string,
        colorChangeStrategy: ColorChangeStrategy,
        public minWidth = 1,
        public manualVisibility = true
    ) {
        super(name, colorChangeStrategy)
    }
 
    setManualVisibility(manualVisibility: boolean): void {
        this.manualVisibility = manualVisibility
        this.updateVisibility()
    }
 
    setCurrentWidth(width: number): void {
        this.currentWidth = width
        this.updateVisibility()
    }
 
    private updateVisibility(): void {
        const visibleBecauseOfWidth = this.currentWidth ? this.currentWidth >= this.minWidth : true
        this.visible = this.manualVisibility && this.visibleBecauseOfColor && visibleBecauseOfWidth
    }
 
    updateColor(numberOfColors: number) {
        this.visibleBecauseOfColor = this.colorChangeStrategy.execute(numberOfColors, this)
        for (const child of this.children) {
            if (child instanceof GeneralMesh) {
                child.updateColor(numberOfColors)
            }
        }
        this.updateVisibility()
    }
}