diff options
| author | Arturs Artamonovs <arturs.artamonovs@protonmail.com> | 2026-08-27 09:54:08 +0100 |
|---|---|---|
| committer | Arturs Artamonovs <arturs.artamonovs@protonmail.com> | 2026-08-27 09:54:08 +0100 |
| commit | 157937ececbada7c1083e95d84c5131645c825eb (patch) | |
| tree | f5f9762c7d95364a3a7262b4c3723cb92a9e893a | |
| parent | e8b5398d8f9a2d4fa9ed339fec774badc270979f (diff) | |
| download | ShedCalc-main.tar.gz ShedCalc-main.zip | |
added weather wrap calculationsmain
| -rw-r--r-- | ShedCalc/BOMController.swift | 16 | ||||
| -rw-r--r-- | ShedCalc/ParamModel.swift | 19 | ||||
| -rw-r--r-- | ShedCalc/ParamView.swift | 117 |
3 files changed, 124 insertions, 28 deletions
diff --git a/ShedCalc/BOMController.swift b/ShedCalc/BOMController.swift index be70a65..35713e4 100644 --- a/ShedCalc/BOMController.swift +++ b/ShedCalc/BOMController.swift @@ -126,14 +126,20 @@ class BOMController { } private func calcWeatherWrap(from paramModel: ParamModel) -> MaterialItem { + let wrapRollArea = paramModel.wrapWidth * paramModel.wrapLength + let wrapPricePerMeter = paramModel.wrapPrice / wrapRollArea + let wrapArea = paramModel.totalWallArea() + + let totalPieces = roundUpPieces(Double(wrapArea)/Double(wrapRollArea)) + let totalPrice = Double(totalPieces) * paramModel.wrapPrice return MaterialItem( materialName: "Weather Wrap", - pricePerMeter: Double(0.1), - totalMeters: Double(0.1), - totalPrice: Double(0.1), - metersPerPiece:Double(0.1), - totalPieces: Double(0.1) + pricePerMeter: wrapPricePerMeter, + totalMeters: wrapArea, + totalPrice: totalPrice, + metersPerPiece: paramModel.wrapPrice, + totalPieces: Double(totalPieces) ) } diff --git a/ShedCalc/ParamModel.swift b/ShedCalc/ParamModel.swift index f3cbbd7..0302019 100644 --- a/ShedCalc/ParamModel.swift +++ b/ShedCalc/ParamModel.swift @@ -14,16 +14,19 @@ class ParamModel { var height: Double = 1.0 var length: Double = 1.0 var beamSpace: Double = 0.6 - var OSBSheetPrice: Double = 0.0 - var timberBeamPrice: Double = 0.0 + var OSBSheetPrice: Double = 1.0 + var timberBeamPrice: Double = 1.0 var timberLengthSize: Double = 2.4 - var feltPrice: Double = 0.0 + var feltPrice: Double = 1.0 var feltWidth: Double = 1.0 var feltLength: Double = 10 - var claddingPrice: Double = 0.1 - var claddingLength: Double = 0.1 + var claddingPrice: Double = 1.0 + var claddingLength: Double = 2.4 var claddingWidth: Double = 0.1 - var claddingOverlap: Double = 0.1 + var claddingOverlap: Double = 0.01 + var wrapPrice: Double = 1.0 + var wrapWidth: Double = 1.0 + var wrapLength: Double = 10 func floorArea() -> Double { return width*length @@ -60,4 +63,8 @@ class ParamModel { func totalJoistBeamLength() -> Double { return Double(widthBeamNum())*beamSpace } + + func totalWallArea() -> Double { + return (self.width * self.height)*2 + (self.length * self.height)*2 + } } diff --git a/ShedCalc/ParamView.swift b/ShedCalc/ParamView.swift index 1f02856..690a1e8 100644 --- a/ShedCalc/ParamView.swift +++ b/ShedCalc/ParamView.swift @@ -23,7 +23,7 @@ struct ParamView: View { TextField("Width", value: Binding( get: { paramModel.width }, set: { newValue in - if !newValue.isNaN && !newValue.isInfinite && newValue > 0.5 { + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.5 && newValue < 10.0 { paramModel.width = newValue } } @@ -34,7 +34,7 @@ struct ParamView: View { TextField("Length", value: Binding( get: { paramModel.length }, set: { newValue in - if !newValue.isNaN && !newValue.isInfinite && newValue > 0.5 { + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.5 && newValue < 10.0 { paramModel.length = newValue } } @@ -45,7 +45,7 @@ struct ParamView: View { TextField("Height", value: Binding( get: { paramModel.height }, set: { newValue in - if !newValue.isNaN && !newValue.isInfinite && newValue > 0.5 { + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.5 && newValue < 3.0 { paramModel.height = newValue } } @@ -56,7 +56,7 @@ struct ParamView: View { TextField("Spacing", value: Binding( get: { paramModel.beamSpace }, set: { newValue in - if !newValue.isNaN && !newValue.isInfinite && newValue > 0.15 { + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.15 && newValue < 10.0 { paramModel.beamSpace = newValue } } @@ -76,18 +76,18 @@ struct ParamView: View { } HStack { Text("OSB per sheet price") - TextField("per sheet", value: Binding( + TextField("", value: Binding( get: { paramModel.OSBSheetPrice }, set: { newValue in - if !newValue.isNaN && !newValue.isInfinite && newValue > 0.15 { - paramModel.beamSpace = newValue + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.1 { + paramModel.OSBSheetPrice = newValue } } ), format: .number) } HStack { Text("Beam price per meter") - TextField("per meter", value: Binding( + TextField("", value: Binding( get: { paramModel.timberBeamPrice }, set: { newValue in if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 { @@ -97,10 +97,10 @@ struct ParamView: View { ), format: .number) Text("Piece size") - TextField("per meter", value: Binding( + TextField("", value: Binding( get: { paramModel.timberLengthSize }, set: { newValue in - if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 { + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 10.0 { paramModel.timberLengthSize = newValue } } @@ -108,24 +108,107 @@ struct ParamView: View { } HStack { Text("Felt price") - TextField("per meter", value: $paramModel.feltPrice, format: .number) + TextField("per meter", value: Binding( + get: { paramModel.feltPrice }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 { + paramModel.feltPrice = newValue + } + } + ), format: .number) Text("Felt width") - TextField("per meter", value: $paramModel.feltWidth, format: .number) + TextField("per meter", value: Binding( + get: { paramModel.feltWidth }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 10.0 { + paramModel.feltWidth = newValue + } + } + ), format: .number) Text("Felt length") - TextField("per meter", value: $paramModel.feltLength, format: .number) + TextField("per meter", value: Binding( + get: { paramModel.feltLength }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 100.1{ + paramModel.feltLength = newValue + } + } + ), format: .number) } HStack { Text("Cladding dimensions and price") } HStack { Text("Cladding price per meter") - TextField("", value: $paramModel.claddingPrice, format: .number) + TextField("", value: Binding( + get: { paramModel.claddingPrice }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 { + paramModel.claddingPrice = newValue + } + } + ), format: .number) Text("Length") - TextField("", value: $paramModel.claddingLength, format: .number) + TextField("", value: Binding( + get: { paramModel.claddingLength }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 10.0 { + paramModel.claddingLength = newValue + } + } + ), format: .number) Text("Width") - TextField("", value: $paramModel.claddingWidth, format: .number) + TextField("", value: Binding( + get: { paramModel.claddingWidth }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 10.0 + && (newValue > paramModel.claddingOverlap) { + paramModel.claddingWidth = newValue + } + } + ), format: .number) Text("Overlap") - TextField("", value: $paramModel.claddingOverlap, format: .number) + TextField("", value: Binding( + get: { paramModel.claddingOverlap }, + set: { newValue in + //overlap can't be bigger then width of cladding + if !newValue.isNaN && !newValue.isInfinite && (newValue > 0.0 && newValue < 10.0) && (newValue < paramModel.claddingWidth) { + paramModel.claddingOverlap = newValue + } + } + ), format: .number) + } + HStack { + Text("Weather wrap") + } + HStack { + Text("Wrap price") + TextField("per meter", value: Binding( + get: { paramModel.wrapPrice }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 { + paramModel.wrapPrice = newValue + } + } + ), format: .number) + Text("Wrap width") + TextField("per meter", value: Binding( + get: { paramModel.wrapWidth }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 10.0 { + paramModel.wrapWidth = newValue + } + } + ), format: .number) + Text("Wrap length") + TextField("per meter", value: Binding( + get: { paramModel.wrapLength }, + set: { newValue in + if !newValue.isNaN && !newValue.isInfinite && newValue > 0.0 && newValue < 100.1 { + paramModel.wrapLength = newValue + } + } + ), format: .number) } } } |
