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 92 93 94 95 96 97 98 | 6x 6x 6x 6x 6x 6x 7x 7x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 48x 48x 48x 48x 48x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x | import { GeometryOptions } from "../../preview3DPrintMesh" import { Mesh } from "three" import { Font } from "three/examples/jsm/loaders/FontLoader" import { BackPrintColorChangeStrategy } from "../../ColorChangeStrategies/backPrintColorChangeStrategy" import { MetricDescriptionBlockMesh } from "./metricDescriptionBlockMesh" import { ColorMetricDescriptionBlockMesh } from "./colorMetricDescriptionBlockMesh" import { GeneralMesh } from "../generalMesh" export class MetricDescriptionsContainerMesh extends GeneralMesh { constructor( name: string, public font: Font ) { super(name, new BackPrintColorChangeStrategy()) } async init(geometryOptions: GeometryOptions): Promise<MetricDescriptionsContainerMesh> { const { areaIcon, areaIconScale } = this.createAreaAttributes() const { heightIcon, heightIconScale } = this.createHeightAttributes() const { colorIcon, colorIconScale } = this.createColorAttributes() const heightMetricBlock = await new MetricDescriptionBlockMesh( { name: "HeigthMetricBlock", title: geometryOptions.heightMetricTitle, iconFilename: heightIcon, iconScale: heightIconScale, nodeMetricData: geometryOptions.heightMetricData }, this.font, 0.05 ).init(geometryOptions) this.add(heightMetricBlock) const areaMetricBlock = await new MetricDescriptionBlockMesh( { name: "AreaMetricBlock", title: geometryOptions.areaMetricTitle, iconFilename: areaIcon, iconScale: areaIconScale, nodeMetricData: geometryOptions.areaMetricData }, this.font, -0.1 ).init(geometryOptions) this.add(areaMetricBlock) const colorMetricBlock = await new ColorMetricDescriptionBlockMesh( { name: "ColorMetricBlock", title: geometryOptions.colorMetricTitle, iconFilename: colorIcon, iconScale: colorIconScale, nodeMetricData: geometryOptions.colorMetricData, colorRange: geometryOptions.colorRange }, this.font, -0.25 ).init(geometryOptions) this.add(colorMetricBlock) this.centerMetricsMeshInXDirection() return this } private centerMetricsMeshInXDirection() { const x = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY } this.traverse(child => { if (child instanceof Mesh && child.visible) { child.geometry.computeBoundingBox() const { min, max } = child.geometry.boundingBox x.min = Math.min(x.min, min.x) x.max = Math.max(x.max, max.x) } }) this.position.x = (x.max - x.min) / 2 } private createColorAttributes() { const colorIcon = "color_icon_for_3D_print.svg" const colorIconScale = 0.075 return { colorIcon, colorIconScale } } private createHeightAttributes() { const heightIcon = "height_icon_for_3D_print.svg" const heightIconScale = 0.09 return { heightIcon, heightIconScale } } private createAreaAttributes() { const areaIcon = "area_icon_for_3D_print.svg" const areaIconScale = 0.075 return { areaIcon, areaIconScale } } } |