Wendeltreppe mit glatter Unterseite (Software)

Martin Vogel ⌂ @, Dortmund / Bochum, Donnerstag, 21.06.2018, 19:38 (vor 147 Tagen) @ Martin Vogel

Das Wendeltreppenprogramm hat nun noch eine kleine Erweiterung bekommen. Die Unterseite der Treppe wird jetzt als Ausformungskörper an den Stufenrückseiten entlanggeführt. Dadurch ergibt sich eine sehr schöne glatte Treppenunterseite.

Die neue Version des Pythonprogramms verzichtet darauf, die Stufen der Wendeltreppe als eigenen Block zu definieren. Das sorgte für die Unbequemlichkeit, das Script nicht erneut in derselben Zeichnungsdatei laufen lassen zu können.

[image]

Beim Konstruieren von Wendeltreppen mit mehreren Windungen kam es beim Testen des Programms gelegentlich vor, dass der Ausformen-Befehl ein paar Stufen nicht mitbekam und das CAD-Programm eine originelle Betonschleife konstruierte. In diesem Fall hilft es, mit der Maus die Ansicht so zu drehen und zu zoomen, dass alle Stufen gut erkennbar sind und sich nicht gegenseitig verdecken, die missratene Wendeltreppe zu löschen und die Ausführung des Scriptes mittels SCRIPT zu wiederholen.

  1. #!/usr/bin/env python3
  2. # benötigt mindestens Python 3.6
  3.  
  4. from math import pi, degrees, radians, sin, cos
  5.  
  6. print("""
  7. Dieses Programm erzeugt eine AutoCAD/BricsCAD-Scriptdatei für eine
  8. Wendeltreppe.
  9. """)
  10.  
  11. def fi(s, vorgabe=None):
  12. "float input"
  13. while True:
  14. print(f"{s}{f' ({vorgabe})' if vorgabe else ''}: ",end="")
  15. inp = input().replace(",",".")
  16. if not inp:
  17. inp = vorgabe
  18. try:
  19. return float(inp)
  20. except:
  21. print("Fehler: Eingabe wurde nicht als Zahl erkannt.")
  22.  
  23. print("Der Außendurchmesser sollte nicht kleiner als 120 cm sein.")
  24. da = fi("Außendurchmesser der Treppe", 250)
  25. du = da - 60
  26. ul = pi * du
  27. print(f"\nDer Durchmesser der Lauflinie beträgt {du} cm.")
  28. print(f"Ihr Umfang beträgt {ul:.1f} cm.")
  29. print("\nDer Innendurchmesser muss größer als null sein.")
  30. di = fi("Innendurchmesser der Treppe", 50)
  31. ht = fi("\nHöhe der Treppe", 260)
  32. n = round(ht/17)
  33. hs = ht/n
  34. print(f"\nDie Treppe erhält {n} Stufen.")
  35. print(f"Die Stufenhöhe beträgt {hs:.1f} cm.")
  36. # rechnerischer Auftritt aus Schrittmaßregel
  37. ra = 63 - 2 * hs
  38. # rechnerischer Winkel der Treppe
  39. rw = 360 * n * ra / ul
  40. # gerundet auf 15°
  41. rwg = int(round(rw/15)*15)
  42. print("\nLinks herum ansteigende Treppen besitzen einen positiven Drehwinkel,"
  43. "\nrechts herum ansteigende Treppen einen negativen.")
  44. wt = fi("Gesamtdrehwinkel der Treppe",rwg)
  45. # Winkel einer Stufe
  46. ws = wt/n
  47.  
  48. # Koordinatendrehung
  49. def rot(x, y, grad):
  50. w = radians(grad)
  51. return x * cos(-w) - y * sin(w), x * sin(w) + y * cos(-w)
  52.  
  53. with open("WENDELTREPPE.SCR","w") as scr:
  54. # Koordinateneingabe geht vor Objektfang
  55. scr.write("OSnapCoord 1\n")
  56. # Einheit Zentimeter
  57. scr.write("_InsUnits 5\n")
  58.  
  59. # Die Unterseite der Wendeltreppe wird als Ausformungskörper entlang
  60. # der Rückseiten der (späteren) Stufenprofile angelegt.
  61.  
  62. # In der Liste Lp merken wir uns einen Punkt pro Querschnitt, den
  63. # wir beim Ausformen anklicken können.
  64. Lp = []
  65.  
  66. # Für alle Stufen ab der zweiten:
  67. for i in range(1,n+1):
  68. # Hinterseite der Stufe
  69. xi,yi = rot(di/2, 0, i*ws)
  70. xa,ya = rot(da/2, 0, i*ws)
  71. p0 = f"{xi},{yi},{(i-1)*hs}"
  72. p1 = f"{xa},{ya},{(i-1)*hs}"
  73. p2 = f"{xa},{ya},{i*hs}"
  74. p3 = f"{xi},{yi},{i*hs}"
  75. scr.write(f"3DPoly {p0} {p1} {p2} {p3} s\n")
  76. Lp.append(p1)
  77.  
  78. # Ausformen
  79. scr.write(f"_Loft {' '.join(Lp)}\n\n\n")
  80.  
  81. # Nun werden die einzelnen Stufen auf die „Rampe“ gesetzt.
  82.  
  83. # Für alle Stufen:
  84. for i in range(n):
  85. # Vorderseite der Stufe
  86. xi,yi = rot(di/2, 0, i*ws)
  87. xa,ya = rot(da/2, 0, i*ws)
  88. p0 = f"{xi},{yi},{i*hs}"
  89. p1 = f"{xa},{ya},{i*hs}"
  90. p2 = f"{xa},{ya},{(i+1)*hs}"
  91. p3 = f"{xi},{yi},{(i+1)*hs}"
  92. scr.write(f"3DPoly {p0} {p1} {p2} {p3} s\n")
  93. # Rotieren
  94. scr.write(f"Rotation l 0,0,0 0,0,1 {ws}\n")
  95.  
  96. # Anzeige anpassen
  97. scr.write("-APunkt -1,-1,1\n")
  98. scr.write(f"Zoom Fenster {-da/2},{-da/2},0 {da/2},{da/2},{ht}\n")
  99.  
  100. print("""
  101. Fertig.
  102.  
  103. Starten Sie die erzeugte Scriptdatei WENDELTREPPE.SCR im CAD-Programm
  104. in einer leeren Zeichnung (Einheit Zentimeter) mit dem Befehl SCRIPT!
  105. """)
  106. input("[Enter]")

--
Dipl.-Ing. Martin Vogel
Leiter des Bauforums

Heute schon programmiert? Einführung in Python 3 (PDF)

Tags:
Python, AutoCAD, BricsCAD, Wendeltreppe



gesamter Thread:

 RSS-Feed dieser Diskussion

powered by my little forum