@@ -8,18 +8,6 @@ const defaultColors = ['#1fb0ff', '#ff5252', '#D67600', '#830EE3', '#B366F2', '#
88const lightDefaultColors = [ '#000' , ...defaultColors ]
99const darkDefaultColors = [ '#FFF' , ...defaultColors ]
1010
11- const updateMinMax = ( previous : { min : number , max : number } , value ?: number ) => {
12- if ( value != null ) {
13- previous . min = Number . isFinite ( previous . min )
14- ? Math . min ( previous . min , value )
15- : value
16-
17- previous . max = Number . isFinite ( previous . max )
18- ? Math . max ( previous . max , value )
19- : value
20- }
21- }
22-
2311export const getters = {
2412 getLayers : ( state , getters , rootState ) : readonly Layer [ ] => {
2513 if ( state . layers . length ) {
@@ -73,7 +61,11 @@ export const getters = {
7361 return state . parts
7462 } ,
7563
76- getBounds : ( state , getters ) : BBox => {
64+ getBounds : ( state , getters ) : Readonly < BBox > => {
65+ if ( state . bounds != null ) {
66+ return state . bounds
67+ }
68+
7769 const layers : readonly Layer [ ] = getters . getLayers
7870
7971 // ignore first and last layer (priming and parking)
@@ -83,34 +75,41 @@ export const getters = {
8375 ? Object . freeze ( state . moves . slice ( moveRangeStart , moveRangeEnd ) )
8476 : state . moves
8577
86- const bounds = {
78+ const bounds : BBox = {
8779 x : {
88- min : NaN ,
89- max : NaN
80+ min : Number . POSITIVE_INFINITY ,
81+ max : Number . NEGATIVE_INFINITY
9082 } ,
9183 y : {
92- min : NaN ,
93- max : NaN
84+ min : Number . POSITIVE_INFINITY ,
85+ max : Number . NEGATIVE_INFINITY
9486 }
9587 }
9688
9789 for ( let index = 0 ; index < moves . length ; index ++ ) {
9890 const move = moves [ index ]
9991
100- updateMinMax ( bounds . x , move . x )
101- updateMinMax ( bounds . y , move . y )
92+ if ( move . x != null ) {
93+ bounds . x . min = Math . min ( bounds . x . min , move . x )
94+ bounds . x . max = Math . max ( bounds . x . max , move . x )
95+ }
96+
97+ if ( move . y != null ) {
98+ bounds . y . min = Math . min ( bounds . y . min , move . y )
99+ bounds . y . max = Math . max ( bounds . y . max , move . y )
100+ }
102101 }
103102
104- return {
103+ return Object . freeze ( {
105104 x : {
106- min : bounds . x . min || 0 ,
107- max : bounds . x . max || 0
105+ min : Number . isFinite ( bounds . x . min ) ? bounds . x . min : 0 ,
106+ max : Number . isFinite ( bounds . x . max ) ? bounds . x . max : 0
108107 } ,
109108 y : {
110- min : bounds . y . min || 0 ,
111- max : bounds . y . max || 0
109+ min : Number . isFinite ( bounds . y . min ) ? bounds . y . min : 0 ,
110+ max : Number . isFinite ( bounds . y . max ) ? bounds . y . max : 0
112111 }
113- }
112+ } )
114113 } ,
115114
116115 getToolHeadPosition : ( state ) => ( moveIndex : number ) : Point3D => {
@@ -121,20 +120,10 @@ export const getters = {
121120 z : NaN
122121 }
123122
124- for ( let i = moveIndex ; i >= 0 && ( ! Number . isFinite ( output . x ) || ! Number . isFinite ( output . y ) || ! Number . isFinite ( output . z ) ) ; i -- ) {
123+ for ( let i = moveIndex ; i >= 0 && ( Number . isNaN ( output . x ) || Number . isNaN ( output . y ) || Number . isNaN ( output . y ) ) ; i -- ) {
125124 const move = moves [ i ]
126125
127- if ( ! Number . isFinite ( output . x ) && move . x != null ) {
128- output . x = move . x
129- }
130-
131- if ( ! Number . isFinite ( output . y ) && move . y != null ) {
132- output . y = move . y
133- }
134-
135- if ( ! Number . isFinite ( output . z ) && move . z != null ) {
136- output . z = move . z
137- }
126+ Object . assign ( output , move )
138127 }
139128
140129 return {
@@ -204,7 +193,7 @@ export const getters = {
204193 return tools
205194 } ,
206195
207- getPaths : ( state , getters ) => ( startMove : number , endMove : number , ignoreTools = false ) : LayerPaths => {
196+ getPaths : ( state , getters ) => ( startMove : number , endMove : number , ignoreTools = false ) : Readonly < LayerPaths > => {
208197 const toolhead : Point3D = getters . getToolHeadPosition ( startMove )
209198 const moves : readonly Move [ ] = state . moves
210199
@@ -265,26 +254,28 @@ export const getters = {
265254 y : toolhead . y
266255 }
267256
268- return path
257+ return Object . freeze ( path )
269258 } ,
270259
271- getLayerPaths : ( state , getters ) => ( layer : number ) : LayerPaths => {
260+ getLayerPaths : ( state , getters ) => ( layer : number ) : Readonly < LayerPaths > => {
272261 const layers : readonly Layer [ ] = getters . getLayers
273262
274- return getters . getPaths ( layers [ layer ] ?. move ?? 0 , ( layers [ layer + 1 ] ?. move ?? Infinity ) - 1 , true )
263+ return getters . getPaths ( layers [ layer ] ?. move ?? 0 , ( layers [ layer + 1 ] ?. move ?? Number . POSITIVE_INFINITY ) - 1 , true )
275264 } ,
276265
277- getPartPaths : ( state , getters ) : string [ ] => {
266+ getPartPaths : ( state , getters ) : readonly string [ ] => {
278267 const parts : readonly Part [ ] = getters . getParts
279268
280- return parts
269+ const partPaths = parts
281270 . map ( part => {
282271 const polygonAsString = part . polygon
283272 . map ( point => `${ point . x } ,${ point . y } ` )
284273 . join ( 'L' )
285274
286275 return `M${ polygonAsString } z`
287276 } )
277+
278+ return Object . freeze ( partPaths )
288279 } ,
289280
290281 getMoveIndexByFilePosition : ( state ) => ( filePosition : number ) : number => {
0 commit comments