summaryrefslogtreecommitdiff
path: root/ShedCalc
diff options
context:
space:
mode:
authorArturs Artamonovs <arturs.artamonovs@protonmail.com>2026-08-27 09:54:08 +0100
committerArturs Artamonovs <arturs.artamonovs@protonmail.com>2026-08-27 09:54:08 +0100
commit157937ececbada7c1083e95d84c5131645c825eb (patch)
treef5f9762c7d95364a3a7262b4c3723cb92a9e893a /ShedCalc
parente8b5398d8f9a2d4fa9ed339fec774badc270979f (diff)
downloadShedCalc-main.tar.gz
ShedCalc-main.zip
added weather wrap calculationsmain
Diffstat (limited to 'ShedCalc')
-rw-r--r--ShedCalc/BOMController.swift16
-rw-r--r--ShedCalc/ParamModel.swift19
-rw-r--r--ShedCalc/ParamView.swift117
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)
}
}
}