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

100% Statements 30/30
100% Branches 1/1
100% Functions 5/5
100% Lines 29/29

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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91    6x     6x 6x 6x 6x 6x           6x   6x       6x 6x 36x     6x   6x       4x                     4x       6x 6x 6x               6x               6x 6x 36x 36x                 36x     36x 36x   36x 30x     6x      
import { GeometryOptions } from "../../preview3DPrintMesh"
import { Font } from "three/examples/jsm/loaders/FontLoader"
import { BackPrintColorChangeStrategy } from "../../ColorChangeStrategies/backPrintColorChangeStrategy"
import { CreateTextGeometryStrategy, CreateTextGeometryStrategyOptions } from "../../CreateGeometryStrategies/createTextGeometryStrategy"
import { ColorRange } from "../../../../../codeCharta.model"
import { MetricDescriptionBlockMesh, MetricDescriptionBlockOptions } from "./metricDescriptionBlockMesh"
import { TextMesh } from "../textMesh"
import { PositivePrintColorChangeStrategy } from "../../ColorChangeStrategies/positivePrintColorChangeStrategy"
import { NeutralPrintColorChangeStrategy } from "../../ColorChangeStrategies/neutralPrintColorChangeStrategy"
import { NegativePrintColorChangeStrategy } from "../../ColorChangeStrategies/negativePrintColorChangeStrategy"
 
export interface ColorMetricDescriptionBlockOptions extends MetricDescriptionBlockOptions {
    colorRange: ColorRange
}
 
export class ColorMetricDescriptionBlockMesh extends MetricDescriptionBlockMesh {
    constructor(colorMetricDescriptionBlockOptions: ColorMetricDescriptionBlockOptions, font: Font, yOffset: number) {
        super(colorMetricDescriptionBlockOptions, font, yOffset)
    }
 
    async init(geometryOptions: GeometryOptions): Promise<ColorMetricDescriptionBlockMesh> {
        const coloredBackTextChildren = await this.createColoredBackTextChildren(geometryOptions)
        for (const child of coloredBackTextChildren) {
            this.add(child)
        }
 
        super.init(geometryOptions)
 
        return this
    }
 
    async createTextGeometry(createTextGeometryStrategy: CreateTextGeometryStrategy, text: string, geometryOptions: GeometryOptions) {
        return createTextGeometryStrategy.create(geometryOptions, {
            font: this.font,
            text,
            side: "back",
            xPosition: 0.05,
            yPosition: 0.015,
            align: "left"
        })
    }
 
    getText() {
        return `${this.metricDescriptionBlockOptions.nodeMetricData.name}\n` + `${this.metricDescriptionBlockOptions.title}\n`
    }
 
    private async createColoredBackTextChildren(geometryOptions: GeometryOptions) {
        const colorMetricDescriptionBlockOptions = this.metricDescriptionBlockOptions as ColorMetricDescriptionBlockOptions
        const colorTextGeometries = []
        const colorTextValueRanges = [
            `Value ranges:`,
            `${colorMetricDescriptionBlockOptions.nodeMetricData.minValue} - ${colorMetricDescriptionBlockOptions.colorRange.from - 1}`,
            `/`,
            `${colorMetricDescriptionBlockOptions.colorRange.from} - ${colorMetricDescriptionBlockOptions.colorRange.to - 1}`,
            `/`,
            `${colorMetricDescriptionBlockOptions.colorRange.to} - ${colorMetricDescriptionBlockOptions.nodeMetricData.maxValue}`
        ]
        const colorChangeStrategies = [
            new BackPrintColorChangeStrategy(),
            new PositivePrintColorChangeStrategy(),
            new BackPrintColorChangeStrategy(),
            new NeutralPrintColorChangeStrategy(),
            new BackPrintColorChangeStrategy(),
            new NegativePrintColorChangeStrategy()
        ]
        let xOffset = 0.05
        for (let index = 0; index < colorTextValueRanges.length; index += 1) {
            const name = `ColorMetricLastLine${index}`
            const createTextGeometryStrategyOptions: CreateTextGeometryStrategyOptions = {
                font: this.font,
                text: colorTextValueRanges[index],
                side: "back",
                xPosition: xOffset,
                yPosition: -0.045,
                align: "left"
            }
 
            const textMesh = await new TextMesh(name, colorChangeStrategies[index], 200, true, createTextGeometryStrategyOptions).init(
                geometryOptions
            )
            this.updateColor(geometryOptions.numberOfColors)
            colorTextGeometries.push(textMesh)
 
            if (index !== colorTextValueRanges.length - 1) {
                xOffset += textMesh.getWidth() + 0.03
            }
        }
        return colorTextGeometries
    }
}