diff --git a/src/Mod/Arch/ArchStairs.py b/src/Mod/Arch/ArchStairs.py index a38421e899..88ae58f074 100644 --- a/src/Mod/Arch/ArchStairs.py +++ b/src/Mod/Arch/ArchStairs.py @@ -109,7 +109,7 @@ def makeStairs(baseobj=None,length=None,width=None,height=None,steps=None,name=" stairs[i].Label = translate("Arch",name) stairs[i].Base = baseobjI - if (len(baseobjI.Shape.Edges) > 1): + if len(baseobjI.Shape.Edges) > 1: stepsI = 1 #'landing' if 'multi-edges' currently elif steps: stepsI = steps @@ -178,7 +178,8 @@ def makeRailing(stairs): sel = FreeCADGui.Selection.getSelection() sel0 = sel[0] stairs = [] - if Draft.getType(sel[0]) == "Stairs": # TODO currently consider 1st selected object, then would tackle multiple objects ? + # TODO currently consider 1st selected object, then would tackle multiple objects? + if Draft.getType(sel[0]) == "Stairs": stairs.append(sel0) if Draft.getType(sel0.Base) == "Stairs": stairs.append(sel0.Base) @@ -492,15 +493,15 @@ class _Stairs(ArchComponent.Component): if (len(obj.Base.Shape.Edges) == 1): edge = obj.Base.Shape.Edges[0] if isinstance(edge.Curve,(Part.LineSegment,Part.Line)): - # preparing for multi-edges landing / segment staircase - if obj.NumberOfSteps > 1: + # preparing for multi-edges landing / segment staircase + if obj.NumberOfSteps > 1: self.makeStraightStairsWithLanding(obj,edge) # all cases use makeStraightStairsWithLanding() - # preparing for multi-edges landing / segment staircase - if obj.NumberOfSteps == 1: + # preparing for multi-edges landing / segment staircase + if obj.NumberOfSteps == 1: # TODO - All use self.makeMultiEdgesLanding(obj,edges) ? self.makeStraightLanding(obj,edge) - if obj.NumberOfSteps == 0: + if obj.NumberOfSteps == 0: pass # Should delete the whole shape else: @@ -510,12 +511,12 @@ class _Stairs(ArchComponent.Component): else: self.makeCurvedStairs(obj,edge) - elif (len(obj.Base.Shape.Edges) >= 1): - #if obj.NumberOfSteps == 1: - # Sort the edges so each vertex tested of its tangent direction in order - ## TODO - Found Part.sortEdges() occasionally return less edges then 'input' - edges = Part.sortEdges(obj.Base.Shape.Edges)[0] - self.makeMultiEdgesLanding(obj,edges) + elif len(obj.Base.Shape.Edges) >= 1: + #if obj.NumberOfSteps == 1: + # Sort the edges so each vertex tested of its tangent direction in order + ## TODO - Found Part.sortEdges() occasionally return less edges then 'input' + edges = Part.sortEdges(obj.Base.Shape.Edges)[0] + self.makeMultiEdgesLanding(obj,edges) else: if not obj.Length.Value: return @@ -718,7 +719,7 @@ class _Stairs(ArchComponent.Component): netWidthI = widthFirstSegment.Value - offsetHLeft.Value - offsetHRight.Value #2*offsetH else: - netWidthI = widthFirstSegment.Value - offsetHLeft.Value - offsetHRight.Value #2*offsetH + netWidthI = widthFirstSegment.Value - offsetHLeft.Value - offsetHRight.Value #2*offsetH ''' (3) append vBase ''' @@ -773,15 +774,15 @@ class _Stairs(ArchComponent.Component): vOffsetH2 = DraftVecUtils.scaleTo(dvec2,offsetHLeft.Value) if align == "Left": - vBase[i] = _Stairs.align(vBase[i], "Right", -vOffsetH) - if isArc: - vBase1 = _Stairs.align(vBase1, "Right", -vOffsetH1) - vBase2 = _Stairs.align(vBase2, "Right", -vOffsetH2) + vBase[i] = _Stairs.align(vBase[i], "Right", -vOffsetH) + if isArc: + vBase1 = _Stairs.align(vBase1, "Right", -vOffsetH1) + vBase2 = _Stairs.align(vBase2, "Right", -vOffsetH2) elif align == "Right": - vBase[i] = _Stairs.align(vBase[i], "Right", vOffsetH) - if isArc: - vBase1 = _Stairs.align(vBase1, "Right", vOffsetH1) - vBase2 = _Stairs.align(vBase2, "Right", vOffsetH2) + vBase[i] = _Stairs.align(vBase[i], "Right", vOffsetH) + if isArc: + vBase1 = _Stairs.align(vBase1, "Right", vOffsetH1) + vBase2 = _Stairs.align(vBase2, "Right", vOffsetH2) ''' (3b, 2b/1c) get + alter [p1, p2, p3, p4] - Need vBase ''' @@ -831,8 +832,8 @@ class _Stairs(ArchComponent.Component): outlineP3P4.insert(0, intersectionP3P4) else: - outlineP1P2.append(p1[i]) - outlineP3P4.insert(0, p4[i]) + outlineP1P2.append(p1[i]) + outlineP3P4.insert(0, p4[i]) # add back last/first 'missing' point(s) outlineP1P2.append(p2[i]) @@ -861,40 +862,40 @@ class _Stairs(ArchComponent.Component): outlineP3P4Closed[i+1] = intersectionP3P4 #intersection[0] if mode in ["OrderedOpen", "OrderedCloseAndOrderedOpen"]: - if i > 0: # Multi-edge, otherwise no use + if i > 0: # Multi-edge, otherwise no use - outlineP1P2Ordered = list(outlineP1P2) + outlineP1P2Ordered = list(outlineP1P2) - ''' Guessing the 1st Start Point based on Intersection ''' - vx1 = Vector(outlineP1P2[1].x, outlineP1P2[1].y, 0) - l0 = Part.LineSegment(edges[0].Vertexes[0].Point, edges[0].Vertexes[1].Point) - try: - distFrom1stParameter = l0.parameter(vx1) - distFrom2ndParameter = l0.length()-distFrom1stParameter + ''' Guessing the 1st Start Point based on Intersection ''' + vx1 = Vector(outlineP1P2[1].x, outlineP1P2[1].y, 0) + l0 = Part.LineSegment(edges[0].Vertexes[0].Point, edges[0].Vertexes[1].Point) + try: + distFrom1stParameter = l0.parameter(vx1) + distFrom2ndParameter = l0.length()-distFrom1stParameter - ''' Further point of this line from intersection ''' - if distFrom2ndParameter > distFrom1stParameter: - foundStart = edges[0].Vertexes[1].Point - else: # if distFrom2ndParameter = / < distFrom1stParameter (i.e. if equal, Vertexes[0].Point is taken ?) - foundStart = edges[0].Vertexes[0].Point - except Exception: - print('Intersection point Not on this edge') + ''' Further point of this line from intersection ''' + if distFrom2ndParameter > distFrom1stParameter: + foundStart = edges[0].Vertexes[1].Point + else: # if distFrom2ndParameter = / < distFrom1stParameter (i.e. if equal, Vertexes[0].Point is taken ?) + foundStart = edges[0].Vertexes[0].Point + except Exception: + print('Intersection point Not on this edge') - ''' Guessing the last End Point based on Intersection ''' - vx99 = Vector(outlineP1P2[i].x, outlineP1P2[i].y, 0) - l99 = Part.LineSegment(edges[i].Vertexes[0].Point, edges[i].Vertexes[1].Point) - try: - distFrom1stParameter = l99.parameter(vx99) - distFrom2ndParameter = l99.length()-distFrom1stParameter - if distFrom2ndParameter > distFrom1stParameter: - foundEnd = edges[i].Vertexes[1].Point - else: - foundEnd = edges[i].Vertexes[0].Point - except Exception: - print('Intersection point Not on this edge') + ''' Guessing the last End Point based on Intersection ''' + vx99 = Vector(outlineP1P2[i].x, outlineP1P2[i].y, 0) + l99 = Part.LineSegment(edges[i].Vertexes[0].Point, edges[i].Vertexes[1].Point) + try: + distFrom1stParameter = l99.parameter(vx99) + distFrom2ndParameter = l99.length()-distFrom1stParameter + if distFrom2ndParameter > distFrom1stParameter: + foundEnd = edges[i].Vertexes[1].Point + else: + foundEnd = edges[i].Vertexes[0].Point + except Exception: + print('Intersection point Not on this edge') - outlineP1P2Ordered[0] = foundStart - outlineP1P2Ordered[i+1] = foundEnd + outlineP1P2Ordered[0] = foundStart + outlineP1P2Ordered[i+1] = foundEnd return outline, outlineP1P2, outlineP3P4, vBase, outlineP1P2Closed, outlineP3P4Closed, outlineP1P2Ordered, pArc, pArc1, pArc2 @@ -985,17 +986,17 @@ class _Stairs(ArchComponent.Component): else: print ("obj.Base has 0 z-value") print (h) - if h==0 and obj.Height.Value != 0: + if (h == 0) and obj.Height.Value != 0: h = obj.Height.Value else: print (h) if obj.TreadDepthEnforce != 0: - l = obj.TreadDepthEnforce.Value * (numberofsteps-2) - if obj.LandingDepth: - l += obj.LandingDepth.Value - else: - l += obj.Width.Value + l = obj.TreadDepthEnforce.Value * (numberofsteps-2) + if obj.LandingDepth: + l += obj.LandingDepth.Value + else: + l += obj.Width.Value elif obj.Base: if hasattr(obj.Base,'Shape'): l = obj.Base.Shape.Length #.Value? @@ -1118,7 +1119,7 @@ class _Stairs(ArchComponent.Component): "builds a simple, straight staircase from a straight edge" # Upgrade obj if it is from an older version of FreeCAD - if not(hasattr(obj, "StringerOverlap")): + if not hasattr(obj, "StringerOverlap"): obj.addProperty("App::PropertyLength","StringerOverlap","Structure",QT_TRANSLATE_NOOP("App::Property","The overlap of the stringers above the bottom of the treads")) # general data