From e8b5398d8f9a2d4fa9ed339fec774badc270979f Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Wed, 26 Aug 2026 21:37:56 +0100 Subject: All views seem to work ok --- ShedCalc/RenderView.swift | 39 ++++++++++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 9 deletions(-) (limited to 'ShedCalc/RenderView.swift') diff --git a/ShedCalc/RenderView.swift b/ShedCalc/RenderView.swift index a143e99..b71b741 100644 --- a/ShedCalc/RenderView.swift +++ b/ShedCalc/RenderView.swift @@ -31,23 +31,44 @@ struct RenderView: View { //content.addChild(beam) //draw all beams - let beamData = renderController.generateShedWall(position: [0,0,0], height: paramModel.height, widthNum: paramModel.widthBeamNum(), lengthNum: paramModel.lengthBeamNum(), spaceBeem: paramModel.beamSpace) - //content.add(beams) - let beams = renderController.createBeams(beamData) - beams.forEach { scene.addChild($0) } + let beamData = renderController.generateShedWall(position: [0,0,0], height: paramModel.height, widthNum: paramModel.widthBeamNum(), lengthNum: paramModel.lengthBeamNum(), spaceBeam: paramModel.beamSpace) + let wallBeams = renderController.createBeams(beamData) + wallBeams.forEach { scene.addChild($0) } + + //let floorBeamData = renderController.generateShedFloor(position: [0,0,0], width: Float(1.0), widthNum: paramModel.widthBeamNum(), spaceBeam: paramModel.beamSpace) + //let floorBeams = renderController.createBeams(floorBeamData) + //floorBeams.forEach { scene.addChild($0) } } update: { content in // Update box geometry directly in the scene - if let scene = content.entities.first(where: { $0.name == "scene" }), - let box = scene.findEntity(named: "box") as? ModelEntity { - box.model?.mesh = .generateBox(size: paramModel.dimensions(), cornerRadius: 0.02) + //if let scene = content.entities.first(where: { $0.name == "scene" }), + //let box = scene.findEntity(named: "box") as? ModelEntity { + //box.model?.mesh = .generateBox(size: paramModel.dimensions(), cornerRadius: 0.02) + //} + if let scene = content.entities.first(where: { $0.name == "scene"}) { + let oldBeams = scene.children.filter { $0.name.hasPrefix("beam-") } + oldBeams.forEach { $0.removeFromParent() } + + let beamData = renderController.generateShedWall(position: [0,0,0], height: paramModel.height, widthNum: paramModel.widthBeamNum(), lengthNum: paramModel.lengthBeamNum(), spaceBeam: paramModel.beamSpace) + let beams = renderController.createBeams(beamData) + beams.forEach { scene.addChild($0) } + + let floorBeamData = renderController.generateShedFloor(position: [0,0,0], height: paramModel.height, width: Double(paramModel.lengthBeamNum())*paramModel.beamSpace, widthNum: paramModel.widthBeamNum(), spaceBeam: paramModel.beamSpace) + let floorBeams = renderController.createBeams(floorBeamData) + floorBeams.forEach { scene.addChild($0) } + + let roofBeamData = renderController.generateShedRoof(position: [0,0,0], height: paramModel.height, width: Double(paramModel.lengthBeamNum())*paramModel.beamSpace, widthNum: paramModel.widthBeamNum(), spaceBeam: paramModel.beamSpace) + let roofBeams = renderController.createBeams(roofBeamData) + roofBeams.forEach { scene.addChild($0) } } + // Update scene rotation directly if let scene = content.entities.first(where: { $0.name == "scene" }) { - let xRot = simd_quatf(angle: viewModel.rotationX, axis: [1, 0, 0]) - let yRot = simd_quatf(angle: viewModel.rotationY, axis: [0, 1, 0]) + let xRot = simd_quatf(angle: Float(viewModel.rotationX), axis: [1, 0, 0]) + let yRot = simd_quatf(angle: Float(viewModel.rotationY), axis: [0, 1, 0]) scene.transform.rotation = yRot * xRot } + //update amount of beams }.gesture( DragGesture() .onChanged { value in -- cgit v1.2.3