diff --git a/src/Mod/BIM/ArchStairs.py b/src/Mod/BIM/ArchStairs.py index 1d32f666c0..e64753056e 100644 --- a/src/Mod/BIM/ArchStairs.py +++ b/src/Mod/BIM/ArchStairs.py @@ -2003,7 +2003,28 @@ class _Stairs(ArchComponent.Component): .multiply(numOfSteps - 1) .add(Vector(0, 0, -vTreadThickness.Length + stringerOverlap)) ) + + # Shapes of Stringer at Different Cases + # + # p1 + # ∕│ + # ∕ │ + # / │ + # ∕ │ + # / │ + # ∕ │ + # / │ p1a -------┐ p1b + # ∕ │ ∕ │ + # ∕ │ ∕ │ + # ∕ │ ∕ │ p1c + # / ∕ / ∕ + # / / / / p1a __________ p1b + # / ∕ / ∕ / ∕ + # / ∕ / ∕ / ∕ + # / ⁄ / ∕ / ∕ + p1 = vBase.add(l1).add(h1) + # TODO: Why not use vBasedAligned but align again? p1 = self.align(p1, align, vWidth) overlapDiff = (float(hgt) / numOfSteps + vTreadThickness.Length) - stringerOverlap strOverlapMax = (structureThickness / vLength.Length) * hyp @@ -2014,18 +2035,21 @@ class _Stairs(ArchComponent.Component): lProfile.append(p1.add(Vector(0, 0, -strOverlapMax))) else: if (strOverlapMax + overlapDiff) > 0: # overlapDiff is -ve - vLenDiffP1b = (vLength.Length / vHeight.Length) * overlapDiff + vLenDiffP1a = (vLength.Length / vHeight.Length) * overlapDiff vLenDiffP1c = (structureThickness / vLength.Length) * hyp p1b = p1.add(Vector(0, 0, overlapDiff)) # overlapDiff is -ve - p1a = p1b.add(Vector(vLenDiffP1b, 0, 0)) + v1a = DraftVecUtils.scaleTo(vLength, vLenDiffP1a) + p1a = p1b.add(v1a) p1c = p1.add(Vector(0, 0, -vLenDiffP1c)) lProfile.append(p1a) lProfile.append(p1b) lProfile.append(p1c) else: vLenDiffP1a = (vLength.Length / vHeight.Length) * (overlapDiff) - p1a = p1.add(Vector(vLenDiffP1a, 0, overlapDiff)) - p1b = p1a.add(Vector(strucHorLen, 0, 0)) + v1a = DraftVecUtils.scaleTo(vLength, vLenDiffP1a) + p1a = p1.add(Vector(0, 0, overlapDiff)).add(v1a) + v1b = DraftVecUtils.scaleTo(vLength, strucHorLen) + p1b = p1a.add(v1b) lProfile.append(p1a) lProfile.append(p1b) h3 = lProfile[-1].z - vBase.z