(defun c:3dlei () ; und nun auch mit Anmerkungen/Korrekturen von CADmium & Dorfy ; Danke! (setvar "cmdecho" 0) (setq osmode_old (getvar "osmode")) (command "osmode" "1" ) (command "ortho" "_off" ) (setq pickmode (getvar "pickstyle")) (setvar "pickstyle" 0) (command "_.ucs" "_w") (setq startpunkt_1 (getpoint "\nPunkt auf Startebene wählen: ")) (setq endpunkt_1 (getpoint "\nPunkt auf Zielebene wählen: ")) (command "osmode" "0" ) (setq Leiter (ssadd)) ; Sammelbox aller Einzelteile der zu erstellenden Leiter ; Hilfslinien zeichnen (setq Laenge_Leiter (+ 1100 (- (caddr endpunkt_1) (caddr startpunkt_1)))) ; Z-Koordinaten voneinander substrahieren (command "_.ucs" "_o" startpunkt_1) (command "_.line" (trans startpunkt_1 0 1) ".xy" (trans startpunkt_1 0 1) Laenge_Leiter "") (setq Achse_Leiter (entlast)) (command "_.line" (trans startpunkt_1 0 1) "@500,0,0" "") (setq Basis_Leiter (entlast)) (command "_.move" Basis_Leiter "" (trans startpunkt_1 0 1) ".yz" (trans startpunkt_1 0 1) "-250") (setq alldata (entget Basis_Leiter)) (setq startpunkt_Basis_Leiter (cdr (assoc 10 alldata))) (setq endpunkt_Basis_Leiter (cdr (assoc 11 alldata))) ; Wenn Leiterhöhe größer 3m dann ... (defun Rueckenschutz () (setq RSchutz (ssadd)) ; Sammelbox aller Einzelteile für den Rückenschutz (setq Rschutzstreben (ssadd)) ; Sammelbox aller Einzelteile für den Rückenschutz (setq RSchutz_gesamt (ssadd)) ; Sammelbox aller Einzelteile für den Rückenschutz Gesamtsammlung (command "_.pline" (trans startpunkt_Basis_Leiter 0 1) "-250,-100" "") (ssadd (entlast) RSchutz) (command "_.pline" (trans endpunkt_Basis_Leiter 0 1) "250,-100" "") (ssadd (entlast) RSchutz) (command "_.ARC" "-250,-100,0" "0,-700" "250,-100") (setq Bogenelement (entlast)) (ssadd (entlast) RSchutz) ;;; (setq alldata (entget Bogenelement)) (setq Bogenzentrum (cdr (assoc 10 alldata))) (setq Start_Rschutzstreben (list (- (car Bogenzentrum) 348) (+ (cadr Bogenzentrum) 25) (+ (caddr Bogenzentrum) 2150) ) ) ;;; (command "_.pedit" RSchutz "_J" RSchutz "" "") (setq RSchutz (entlast)) (command "_.ucs" "x" "90") (command "_.RECTANG" (trans startpunkt_Basis_Leiter 0 1) "@-3,-50") (setq Fangring (entlast)) (command "_.ucs" "x" "-90") (command "_.EXTRUDE" Fangring "" "_P" RSchutz) (command "_.ERASE" RSchutz "") (setq RSchutz (entlast)) (ssadd RSchutz RSchutz_gesamt) ;;; (command "_.move" RSchutz "" (trans startpunkt_1 0 1) ".xy" (trans startpunkt_1 0 1) "2200") (command "_.ucs" "y" "90") (setq Anzahl_RSchutzringe (+ 1 (fix(/ (- Laenge_Leiter 2200) 1500)))) (command "_.array" RSchutz "" "_r" "1" (+ 1 Anzahl_RSchutzringe) (* -1.0 (/ (- Laenge_Leiter 2200) Anzahl_RSchutzringe)) ) (while (setq RSchutz (entnext RSchutz)) (ssadd RSchutz RSchutz_gesamt)) (sssetfirst RSchutz_gesamt RSchutz_gesamt) (command "_.UNION" RSchutz_gesamt "") (ssadd (entlast) Leiter) (command "_.ucs" "y" "-90") (command "_.box" (trans Start_Rschutzstreben 0 1) "@-3,-50" (+ 50 (- Laenge_Leiter 2200)) ) ;;; (ssadd (entlast) Rschutzstrebe) (setq Rschutzstrebe (entlast)) (ssadd Rschutzstrebe Rschutzstreben) (command "_.array" Rschutzstrebe "" "_p" (trans Bogenzentrum 0 1) "5" "180" "_Y" ) ; (ssadd (entlast) Rschutzstrebe) (while (setq Rschutzstrebe (entnext Rschutzstrebe)) (ssadd Rschutzstrebe Rschutzstreben) ) (sssetfirst Rschutzstreben Rschutzstreben) (command "_.UNION" Rschutzstreben "") ;;;<-- noch nicht bearbeitet, da der Sammler über "while" nicht funktioniert (ssadd (entlast) Leiter) ) ;;; Ende von (defun Rueckenschutz () ;;;;;; ;;;;;; (if (> Laenge_Leiter 3000) (Rueckenschutz)) ;;; Prüfung/Entscheidung Leiterlänge ;;; ; Zeichne Leiterholm (command "_.cylinder" (trans startpunkt_1 0 1) "d" "60.3" Laenge_Leiter) (setq Leiterholm1 (entlast)) (ssadd Leiterholm1 Leiter) ; Kopieren Leiterholm (command "_.copy" Leiterholm1 "" (trans startpunkt_1 0 1) ".yz" (trans startpunkt_1 0 1) "500") (setq Leiterholm2 (entlast)) (ssadd Leiterholm2 Leiter) (command "_.move" Leiterholm1 Leiterholm2 "" (trans startpunkt_1 0 1) ".yz" (trans startpunkt_1 0 1) "-250") ; Zeichne Leitersprosse (command "_.box" (trans startpunkt_1 0 1) "l" "500" "26" "26") (setq Leitersprosse (entlast)) (command "_.move" Leitersprosse "" (trans startpunkt_1 0 1) ".yz" (trans startpunkt_1 0 1) "-250") (command "_.move" Leitersprosse "" (trans startpunkt_1 0 1) ".zx" (trans startpunkt_1 0 1) "-13") (command "_.move" Leitersprosse "" (trans startpunkt_1 0 1) ".xy" (trans startpunkt_1 0 1) "-13") (command "_.ucs" "y" "90") (command "_.rotate" Leitersprosse "" (trans startpunkt_1 0 1) "45") ; Zeichne alle Leitersprossen (command "_.ucs" "y" "180") ; BKS zurückdrehen (setq Anzahl_Sprossen (+ 1 (fix(/ (- Laenge_Leiter 1100) 250)))) (setq Startabstand (abs (/ (- (- Laenge_Leiter 1100) (* (fix(/ (- Laenge_Leiter 1100) 250)) 250)) 2))) ; um die Säulen mittig anzuordnen, (command "_.move" Leitersprosse "" (trans startpunkt_1 0 1) ".yz" (trans startpunkt_1 0 1) Startabstand) (setq Sprossen (entlast)) (command "_.array" Leitersprosse "" "_r" "1" Anzahl_Sprossen "250") (while (setq Sprossen (entnext Sprossen))(ssadd Sprossen Leiter)) (sssetfirst Leiter Leiter) (command "_.ERASE" Leitersprosse "") ; löschen der ersten Sprossen, sieht sonst blöd aus ... (command "_.UNION" Leiter "") (setvar "pickstyle" pickmode) (setvar "osmode" osmode_old) (command "_ucs" "_w" ) (setvar "cmdecho" 1) (command "_ucs" "_w") )