;;; Spindeltreppe.lsp ;;; Version 1.0 lauffähig ab ACAD 2006 ;;; Copyright Februar 2010 by ;;; Wolfgang Raeder, Sperlingslust 1, 36284 Hohenroda, Germany ;;; Tel. 06676/1237 ;;; email: Spindeltreppe@RealvieW.de ;;; homepage: www.RealvieW.de ;;; ;Das Programm wird dem Benutzer so zur Verfügung gestellt, "wie es ist". ;;; ;Für eventuelle Programmfehler oder Schäden durch die Anwendung ;;; ;wird keine Haftung übernommen. ;;; ;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;;; ;>>>>>>>>>>>>>>>>>>>>>>>HILFSFUNKTIONEN:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (defun Spindeltreppe_Hilfsfunktionen ( ) (defun SICHERN () ;Sichern von Systemvariablen (setq Olderr *error* ;Errorroutine sichern Osmodeold (getvar "Osmode") ;;;Einstellungen OFang sichern Oldlayer (getvar "CLAYER") ;;;Aktuellen Layer sichern VARIABLEN_LISTE ;Liste der zu setzenden Variablen '( ;Beginn der Liste ("CMDECHO" . 0) ;;Eingabeaufforderungen und Eingaben während der Ausführung der AutoLISP-Befehlsfunktion ("EXPERT" . 0) ;;0 = Gibt alle Eingabeaufforderungen normal aus ("SNAPMODE" . 0) ;;Rasterfang ("ORTHOMODE" . 0) ;;Beschränkt Cursorbewegungen auf die Lotrechte ("GRIDMODE" . 0) ;;Raster aktiviert oder deaktiviert ("ELEVATION" . 0) ;;Z-Position neuer Objekten relativ zum aktuellen BKS ("THICKNESS" . 0) ;;Objekthöhe ("UNITMODE" . 0) ;;Anzeigeformat für Einheiten ("UCSICON" . 3) ;;BKS am Ursprung 2 und eingeschaltet 1 = 3 ("LUNITS" . 2) ;;Bestimmt lineare Einheiten. 2 = dezimal ("LUPREC" . 3) ;;Anzahl der angezeigten Dezimalstellen ("DYNMODE" . 0) ;;Schaltet dynamische Eingabefunktionen ein oder aus. ("DELOBJ" . 1) ;;Beim Erstellen von 3D-Objekten verwendete Geometrie beibehalten oder löschen ("OSNAPCOORD" . 1) ;;Tastatureinträge setzen Objektfangeinstellungen außer Kraft ) ;; ;Ende der Liste ) ;_ Ende von setq (foreach item VARIABLEN_LISTE ;; 2 Listen zur Sicherung der Variablen: (setq OLD_WERT (cons (getvar (car item)) OLD_WERT) ;Alte Werte auslesen OLD_NAME (cons (car item) OLD_NAME) ;Namen der Variablen auflisten ) ) ;_ Ende von foreach ) ;_ Ende von DEFUN ;;;;;>>>>>>>>>>>>>>>>>>>>>>>>> Zeichnung einrichten <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ;;;;Setzen von Systemvariablen und Vorgaben (defun SETZ (/ VORGABEN_LISTE); (setq *error* new_err) (foreach SVar VARIABLEN_LISTE ;System Variablen setzen (setvar (car SVar) (cdr SVar)) ) (SetUndo) ;Startet eine Undo_Group (setq Insunit_wert (getvar "INSUNITS")) (cond ((= Insunit_wert 5) (setq VORGABEN_LISTE ;Liste der zu setzenden Vorgaben '( ;Beginn der Liste (SPTR_Steigung . 18.0) (SPTR_Höhe_Vorg . 275.0) (SPTR_Mitte_Vorg . '(0 0 0)) (SPTR_AussenRadius_Vorg . 112.0) (SPTR_Treppenauge_Vorg . 12.0) (SPTR_Winkel_Vorg . 310.0) (SPTR_Stufendicke_Vorg . 5.0) (SPTR_Stufenanzahl_Vorg . 12.0) (Geländer_Höhe_Vorg . 90.0) (Handlauf_Dicke_Vorg . 2.5) (Stab_Dicke_Vorg . 1.5) (Ueberstand . 7.0) )) ) ((= Insunit_wert 6) (setq VORGABEN_LISTE ;Liste der zu setzenden Vorgaben '( ;Beginn der Liste (SPTR_Steigung . 0.18) (SPTR_Höhe_Vorg . 2.75) (SPTR_Mitte_Vorg . '(0 0 0)) (SPTR_AussenRadius_Vorg . 1.12) (SPTR_Treppenauge_Vorg . 0.12) (SPTR_Winkel_Vorg . 310.0) (SPTR_Stufendicke_Vorg . 0.05) (SPTR_Stufenanzahl_Vorg . 12.0) (Geländer_Höhe_Vorg . 0.90) (Handlauf_Dicke_Vorg . 0.025) (Stab_Dicke_Vorg . 0.015) (Ueberstand . 0.07) )) ) (T (setq VORGABEN_LISTE ;Liste der zu setzenden Vorgaben '( ;Beginn der Liste (SPTR_Steigung . 180.0) (SPTR_Höhe_Vorg . 2750.0) (SPTR_Mitte_Vorg . '(0 0 0)) (SPTR_AussenRadius_Vorg . 1120.0) (SPTR_Treppenauge_Vorg . 120.0) (SPTR_Winkel_Vorg . 310.0) (SPTR_Stufendicke_Vorg . 50.0) (SPTR_Stufenanzahl_Vorg . 12.0) (Geländer_Höhe_Vorg . 900.0) (Handlauf_Dicke_Vorg . 25.0) (Stab_Dicke_Vorg . 15.0) (Ueberstand . 70.0) )) ) ) (foreach item VORGABEN_LISTE (if (= (eval (car item)) nil) (set (car item) (cdr item)) ) ) (command "_UCS" "_Save" "AltesBKS") ;;Aktuelle BKS-Einstellung sichern (command "_UCS" "_W") ;;;Weltkoordinaten einstellen ;;Layer anlegen bzw. aktivieren (command "Layer" "_Make" "SPTR_Helfer" "_color" "1" "SPTR_Helfer" "") ) ;_ Ende von DEFUN SETZ ;;>>>>>>>>>>>>>>>>>>>>>>>>> Starten einer "Undo Group" <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (defun SetUndo () (if (= (gcd (getvar "UNDOCTL") 2) 2) ;Activate (command "_.UNDO" "_ALL") ) ;Undo (if (= (logand (getvar "UNDOCTL") 2) 2) ;Activate All (command "_.UNDO" "_CONTROL" "_ALL") ) ;Undo Controls (if (= (logand (getvar "UNDOCTL") 8) 8) ;End Any Current (command "_.UNDO" "_END") ) ;Undo Groups (command "_.UNDO" "_GROUP") ;Start An Undo Group (eval (getvar "UNDOCTL")) ;Return Undo Status ) ;_ Ende von defun ;;>>>>>>>>>>>>> Zeichnungsumgebung wiederherstellen <<<<<<<<<<<<<<< (defun RESTORE () (setvar "Osmode" Osmodeold) (setvar "CLAYER" Oldlayer) (command "_regen") (command "_UCS" "_RESTORE" "AltesBKS") (command "_UCS" "_Del" "AltesBKS") (command "_.UNDO" "_END") ;Ende "Undo Group" (mapcar 'setvar OLD_NAME OLD_WERT) ;Gesicherte Variablen zurückschreiben (setq *error* olderr) (princ "\nFertig!") (princ) ) ;_ Ende von defun ;;------------------------------------------------- ;;Neue Error-Funktion (defun new_err (msg) (RESTORE) ;Gesicherte Variable zurücksetzen (command "_.UNDO" "1") (cond ((= msg "Beenden/Verlassen abbrechen") (princ "\nFunktion *Spindeltreppe* beendet durch Anwender") (princ) ) ((= msg "quit / beenden abbrechen") (princ "\nFunktion *Spindeltreppe* durch Benutzer abgebrochen") ;_ Ende von princ (princ) ) ((= msg "Funktion abgebrochen") (princ "\nFunktion *Spindeltreppe* durch Benutzer abgebrochen") ;_ Ende von princ (princ) ) (t (princ (strcat "\nXFehlernummer: " msg)) (princ)) ) ) ;end defun new_err ;;; Erweiterung für getdist um initget in einer setq-Anweisung anzuwenden (defun getdistinit (point string) (initget 6) (if point (getdist point string) (getdist string) ) ) ;;------------------------------------------------- ;;>>>>>>>>>>>>> Vorgaben übernehmen bzw auf neuen Wert setzten <<<<<<<<<<<<<<< (defun Vorgaben_Auswertung (Zahlenliste / Teil_Liste) (setq VariaVorg_Liste ;Liste der zu setzenden Vorgaben '( ;Beginn der Liste (SPTR_Höhe . SPTR_Höhe_Vorg) ;0 (SPTR_Mitte . SPTR_Mitte_Vorg) ;1 (SPTR_AussenRadius . SPTR_AussenRadius_Vorg) ;2 (SPTR_Treppenauge . SPTR_Treppenauge_Vorg) ;3 (SPTR_Winkel . SPTR_Winkel_Vorg) ;4 (SPTR_Stufendicke . SPTR_Stufendicke_Vorg) ;5 (SPTR_Stufenanzahl . SPTR_Stufenanzahl_Vorg) ;6 (Geländer_Höhe . Geländer_Höhe_Vorg) ;7 (Handlauf_Dicke . Handlauf_Dicke_Vorg) ;8 (Stab_Dicke . Stab_Dicke_Vorg) ;9 ) ) (while Zahlenliste ;;;Liste erweitern (setq Teil_Liste (cons (nth (car Zahlenliste) VariaVorg_Liste) Teil_Liste) Zahlenliste (cdr Zahlenliste) ) ) (foreach item Teil_Liste (if (= (eval (car item)) nil) (set (car item) (eval (cdr item))) (set (cdr item) (eval (car item))) ) ) ) ;;>>>>>>>>>>>>> Abfragen <<<<<<<<<<<<<<< (defun SPTR_EINGABE () (setq SPTR_Mitte (getpoint "\nEinfügepunkt (Zentrum der Treppe):") SPTR_Höhe (getdistinit Nil (strcat "\nGesamthöhe der Treppe (Geschosshöhe) <" (Rtos SPTR_Höhe_Vorg) ">: ")) SPTR_AussenRadius (getdistinit SPTR_Mitte (strcat "\nAußenradius der Treppe <" (Rtos SPTR_AussenRadius_Vorg) ">: ")) ) (Vorgaben_Auswertung '(0 1 2)) (command "_circle" SPTR_Mitte SPTR_AussenRadius) (setq SPTR_Treppenauge (getdistinit SPTR_Mitte (strcat "\nRadius der Spindel <" (Rtos SPTR_Treppenauge_Vorg) ">: "))) (Vorgaben_Auswertung '(3)) (command "_circle" SPTR_Mitte SPTR_Treppenauge) (initget 6 ) (setq SPTR_Winkel (getreal (strcat "\neingeschlossener Winkel <" (Rtos SPTR_Winkel_Vorg) ">: "))) (Vorgaben_Auswertung '(4)) (setq SPTR_Stufenanzahl_Tmp (fix (/ SPTR_Höhe SPTR_Steigung)) ;SPTR_Auftrittsbreite (* (/ (* (* 0.5 SPTR_AussenRadius) 2) 360) (/ SPTR_Winkel SPTR_Stufenanzahl_Tmp)) Text (strcat "\n****** Es wurden " (itoa SPTR_Stufenanzahl_Tmp) " Stufen mit einer ******") Text2 (strcat "\n****** Steigung von " (rtos (/ SPTR_Höhe SPTR_Stufenanzahl_Tmp)) " ermittelt ******") ) (princ Text) (princ Text2) (setq SPTR_Stufenanzahl (getint (strcat "\nStufenanzahl übernehmen oder neue Anzahl angeben <" (itoa SPTR_Stufenanzahl_Tmp) ">: "))) (if (not SPTR_Stufenanzahl) (setq SPTR_Stufenanzahl SPTR_Stufenanzahl_Tmp) ) (setq SPTR_Stufendicke (getreal (strcat "\nStufendicke <" (rtos SPTR_Stufendicke_Vorg) ">: ")) Geländer_Höhe (getreal (strcat "\nGeländerhöhe <" (rtos Geländer_Höhe_Vorg) ">: ")) Stab_Dicke (getreal (strcat "\nDicke der Geländerstäbe <" (rtos Stab_Dicke_Vorg) ">: ")) Handlauf_Dicke (getreal (strcat "\nHandlauf Radius <" (rtos Handlauf_Dicke_Vorg) ">: ")) ) (Vorgaben_Auswertung '(5 7 8 9)) ) ;;>>>>>>>>>>>>> Berechnungen <<<<<<<<<<<<<<< (defun SPTR_BERECHNUNG () (setq SPTR_Stufenwinkel (/ SPTR_Winkel SPTR_Stufenanzahl) SPTR_Stufenhöhe (/ SPTR_Höhe SPTR_Stufenanzahl) ) ) ;;>>>>>>>>>>>>> Stufen zeichnen und Treppe zusammenfügen <<<<<<<<<<<<<<< (defun SPTR_MODELL (/ Spindel_Segment Zylinder_Basis) ;;; Stufen_Zähler (command "_UCS" "_ORIG" SPTR_Mitte);;;BKS in Treppenmittelpunkt verschieben (setq Zylinder_Basis (list 0 0 0) Treppen_Stufen (ssadd);;;Leeren Auswahlsatz bilden Spindel_Segment (ssadd);;;Leeren Auswahlsatz bilden Gelaender_staebe (ssadd);;;Leeren Auswahlsatz bilden Stufen_Zähler 0 ;;;Zähler auf Null setzen Punkteliste Nil ;;;Punkteliste für Handlauf zurücksetzen ) (command "Layer" "_Make" "SPTR_Stufen" "_color" "5" "SPTR_Stufen""") (command "Layer" "_Make" "SPTR_Spindel" "_color" "4" "SPTR_Spindel" "") (command "_CYLINDER" Zylinder_Basis (* 1.2 SPTR_Treppenauge) (* 0.5 SPTR_Stufenhöhe)) ;;;Spindelsegment zeichnen (while (< Stufen_Zähler SPTR_Stufenanzahl) (command "_UCS" "_ORIG" (list 0 0 (* 0.5 SPTR_Stufenhöhe)));;;BKS um halbe Stufenhöhe verschieben (command "Layer" "_Make" "SPTR_Spindel" "") (command "_CYLINDER" Zylinder_Basis SPTR_Treppenauge SPTR_Stufenhöhe) ;;;Spindelsegment zeichnen (setq Spindel_Segment (ssadd (entlast) Spindel_Segment);;;Spindelsegment in AWS sammeln Stufen_Zähler (+ Stufen_Zähler 1);;;Eine Stufe weiterschalten ) (command "_UCS" "_ORIG" (list 0 0 (* 0.5 SPTR_Stufenhöhe))) ;;;BKS um halbe Stufenhöhe verschieben (command "Layer" "_Make" "SPTR_Stufen" "") (TREPPEN_STUFEN_ZEICHNEN);;;Stufe zeichnen (command "_Circle" (setq K_point (polar P1 (Grad2Bogenmass 235) Ueberstand)) (/ Stab_Dicke 2.0)) (command "_extrude" (entlast) "" (+ Geländer_Höhe SPTR_Stufenhöhe)) (setq Gelaender_staebe (ssadd (entlast) Gelaender_staebe)) ;K_point listen füer spline transformieren in Weltkoordinaten (setq K_point (trans K_point 1 0 ) Punkteliste (cons K_point Punkteliste) ) (command "_UCS" "_Z" SPTR_Stufenwinkel);;;BKS um Z drehen ) (command "Layer" "_Make" "SPTR_Geländer" "_color" "3" "SPTR_Geländer" "") (HANDLAUF_ZEICHNEN) (command "_UNION" Gelaender_staebe "") ;;Geländer vereinigen (entlast) (command "_solidedit" "_body" "_separate" Gelaender_staebe "" "") (command "Layer" "_Make" "SPTR_Spindel" "") (command "_copy" Spindel_Segment "" "0,0,0" "0,0,0") (command "Layer" "_Make" "SPTR_Stufen" "") (command "_UNION" Spindel_Segment "") (command "_subtract" Treppen_Stufen "" Spindel_Segment "") (command "_solidedit" "_body" "_separate" Treppen_Stufen "" "") ) ;;>>>>>>>>>>>>> einzelne Stufe erzeugen - innerhalb while <<<<<<<<<<<<<<< (defun TREPPEN_STUFEN_ZEICHNEN () (setq Stufen_Basis (list 0 0 0) P0 (polar Stufen_Basis (Grad2Bogenmass SPTR_Stufenwinkel) SPTR_AussenRadius) P1 (polar P0 (Grad2Bogenmass 90) Ueberstand) P2 (polar Stufen_Basis (Grad2Bogenmass 90) SPTR_Treppenauge) P3 (polar Stufen_Basis (Grad2Bogenmass 270) (/ SPTR_Treppenauge 2)) P4 (polar Stufen_Basis 0 SPTR_AussenRadius) ) (command "_pline" P4 "_Arc" "_C" Stufen_Basis P1 "_Line" Stufen_Basis P3 "_c") (command "_extrude" (entlast) "" (* -1.0 SPTR_Stufendicke)) (setq Treppen_Stufen (ssadd (entlast) Treppen_Stufen)) ;;;Stufen in AWS sammeln ) ;;;;------------------------------------------------- (defun HANDLAUF_ZEICHNEN () (command "_ucs" "_World") (command "Layer" "_Make" "SPTR_Helfer" "") (command "spline" ) (Foreach Eintrag Punkteliste (command Eintrag) ) (command "" "" "") (setq Pfad (ssadd (entlast))) (command "_move" Pfad "" "0,0,0" (strcat "0,0," (rtos (+ Geländer_Höhe SPTR_Stufenhöhe)))) (setq Geländerpunkt (car (reverse Punkteliste)) Geländerpunkt (PUNKT_Z_VERSCHIEBEN Geländerpunkt (+ Geländer_Höhe SPTR_Stufenhöhe)) ) (command "_UCS" "_ORIG" Geländerpunkt) (command "_UCS" "_X" 90.0) (command "_circle" "0,0,0" Handlauf_Dicke) (command "Layer" "_Make" "SPTR_Geländer" "") (command "_extrude" (entlast) "" "_Path" Pfad) (setq Handlauf (ssadd (entlast))) (command "_ucs" "_World") (command "_sphere" Geländerpunkt (* 1.5 Handlauf_Dicke)) (command "_copy" (entlast) "" Geländerpunkt (PUNKT_Z_VERSCHIEBEN (car Punkteliste) (+ Geländer_Höhe SPTR_Stufenhöhe))) (command "_UNION" "_P" (entlast) Handlauf "") ) ;;;;------------------------------------------------- (defun Grad2Bogenmass (WinkelGradmass) (/ (* WinkelGradmass PI) 180.0) ) ;;;;------------------------------------------------- (defun PUNKT_Z_VERSCHIEBEN (Punkt Addwert) (list (car Punkt) (cadr Punkt) (+ (caddr Punkt) Addwert) ) ) ;;;;------------------------------------------------- ) ;Ende Spindeltreppe_Hilfsfunktionen ;;;;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ;;;;>>>>>>>>>>>>>>>>>>>>>>>>>Hauptprogramm:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (defun C:Spindeltreppe (/ GELAENDER_STAEBE GELÄNDER_HÖHE GELÄNDERPUNKT GETDISTINIT GRAD2BOGENMASS HANDLAUF HANDLAUF_DICKE HANDLAUF_ZEICHNEN INSUNIT_WERT K_POINT NEW_ERR OLD_NAME OLD_WERT OLDERR OLDLAYER OSMODEOLD P0 P1 P2 P3 P4 PFAD PUNKT_Z_VERSCHIEBEN PUNKTELISTE RESTORE SETUNDO SETZ SICHERN SPTR_AUSSENRADIUS SPTR_BERECHNUNG SPTR_EINGABE SPTR_HÖHE SPTR_MITTE SPTR_MODELL SPTR_STEIGUNG SPTR_STUFENANZAHL SPTR_STUFENANZAHL_TMP SPTR_STUFENDICKE SPTR_STUFENHÖHE SPTR_STUFENWINKEL SPTR_TREPPENAUGE SPTR_WINKEL STAB_DICKE STUFEN_BASIS STUFEN_ZÄHLER TEXT TEXT2 TREPPEN_STUFEN TREPPEN_STUFEN_ZEICHNEN UEBERSTAND VARIABLEN_LISTE VARIAVORG_LISTE VORGABEN_AUSWERTUNG) (Spindeltreppe_Hilfsfunktionen) (SICHERN) (SETZ) (SPTR_EINGABE) (SPTR_BERECHNUNG) (SPTR_MODELL) (RESTORE) ) ;_ Ende defun (defun c:SPTR () (C:Spindeltreppe) ) ;;;Dieser Text wird beim Laden des Programmes in die Befehlszeile geschrieben (princ "\nCopyright Februar 2010 by Wolfgang Raeder, RealvieW.de ") (princ "\nBefehlsaufruf mit \"Spindeltreppe\" oder \"sptr\" ") (princ)