(in-package :acme_warehouse) (use-package :oli) ;; ------------------------------------------------------------ ;; Wanne mit Lochgitter ;; ;; Wanne: ;; Laenge X = 200 mm ;; Breite Y = 100 mm ;; Hoehe = 25 mm ;; Wandstaerke = 2 mm ;; ;; Lochgitter: ;; Teilung X = 20 mm ;; Teilung Y = 20 mm ;; Durchmesser = 2 mm ;; Radius = 1 mm ;; Randabstand = 10 mm ;; ;; X-Positionen: ;; 10 / 30 / 50 / 70 / 90 / 110 / 130 / 150 / 170 / 190 ;; ;; Y-Positionen: ;; 10 / 30 / 50 / 70 / 90 ;; ;; Gesamtanzahl: ;; 10 Spalten x 5 Reihen = 50 Stanzungen ;; ------------------------------------------------------------ ;; ------------------------------------------------------------ ;; Fortschrittsvariablen ;; ------------------------------------------------------------ (setq STANZUNG 0) (setq GESAMTSTANZUNGEN 50) ;; ------------------------------------------------------------ ;; Aussenkoerper der Wanne erzeugen ;; ------------------------------------------------------------ (display "Aussenkoerper der Wanne wird erzeugt.") (sd-call-cmds (create_workplane :new :name "WANNE_WP")) (setq WANNE_WP (sd-inq-curr-wp)) ;; Aussenkontur 200 x 100 mm (sd-call-cmds (progn (line :two_points (make-gpnt2d :x 0 :y 0) (make-gpnt2d :x 200 :y 0)) (line :two_points (make-gpnt2d :x 200 :y 0) (make-gpnt2d :x 200 :y 100)) (line :two_points (make-gpnt2d :x 200 :y 100) (make-gpnt2d :x 0 :y 100)) (line :two_points (make-gpnt2d :x 0 :y 100) (make-gpnt2d :x 0 :y 0)) )) ;; Aussenkoerper auf 25 mm extrudieren (sd-call-cmds (extrude :part "/WANNE" :wp WANNE_WP :keep_wp :no :distance 25)) ;; ------------------------------------------------------------ ;; Innenkoerper der Wanne erzeugen ;; ;; Innenmass: ;; X = 200 - 2 x 2 = 196 mm ;; Y = 100 - 2 x 2 = 96 mm ;; Tiefe = 25 - 2 = 23 mm ;; ------------------------------------------------------------ (display "Innenkoerper der Wanne wird erzeugt.") (sd-call-cmds (create_workplane :new :name "KERN_WP" :par_wp :ref_wp WANNE_WP :offset 2)) (setq KERN_WP (sd-inq-curr-wp)) ;; Innenkontur 196 x 96 mm (sd-call-cmds (progn (line :two_points (make-gpnt2d :x 2 :y 2) (make-gpnt2d :x 198 :y 2)) (line :two_points (make-gpnt2d :x 198 :y 2) (make-gpnt2d :x 198 :y 98)) (line :two_points (make-gpnt2d :x 198 :y 98) (make-gpnt2d :x 2 :y 98)) (line :two_points (make-gpnt2d :x 2 :y 98) (make-gpnt2d :x 2 :y 2)) )) ;; Innenkoerper 23 mm tief extrudieren (sd-call-cmds (extrude :part "/KERN" :wp KERN_WP :keep_wp :no :distance 23)) ;; Innenkoerper von der Wanne abziehen (sd-call-cmds (subtract_3d :blanks "/WANNE" :tools "/KERN" :keep_tool :no)) ;; ------------------------------------------------------------ ;; Lochgitter erzeugen ;; ;; Jede Stanzung wird einzeln erzeugt und sofort von der ;; Wanne abgezogen. Dadurch entstehen keine verbleibenden ;; Werkzeugkoerper mit Endungen wie .01 oder .02. ;; ------------------------------------------------------------ (display (format nil "Lochgitter wird erzeugt: ~A Stanzungen" GESAMTSTANZUNGEN)) ;; 10 Spalten in X-Richtung ;; IX laeuft von 0 bis 9 (dotimes (IX 10) ;; 5 Reihen in Y-Richtung ;; IY laeuft von 0 bis 4 (dotimes (IY 5) ;; Laufende Stanzungsnummer erhoehen (setq STANZUNG (+ STANZUNG 1)) ;; Lochposition berechnen ;; ;; X = 10 + IX x 20 ;; Y = 10 + IY x 20 (setq X_POS (+ 10 (* IX 20))) (setq Y_POS (+ 10 (* IY 20))) ;; Eindeutige Namen fuer Workplane und Werkzeugkoerper (setq LOCH_WP_NAME (format nil "LOCH_WP_~D" STANZUNG)) (setq LOCH_NAME (format nil "/LOCH_~D" STANZUNG)) ;; Fortschrittsanzeige (display (format nil "Stanzung ~A von ~A" STANZUNG GESAMTSTANZUNGEN)) ;; Einzelne Arbeitsebene fuer die Stanzung erzeugen (sd-call-cmds (create_workplane :new :name LOCH_WP_NAME :par_wp :ref_wp WANNE_WP :offset 0)) (setq LOCH_WP (sd-inq-curr-wp)) ;; Mittelpunkt der Stanzung erzeugen (setq LOCH_MITTE (make-gpnt2d :x X_POS :y Y_POS)) ;; Kreis Ø2 mm zeichnen ;; Radius = 1 mm (sd-call-cmds (circle :CEN_RAD LOCH_MITTE 1)) ;; Werkzeugkoerper durch die gesamte Wannenhoehe erzeugen (sd-call-cmds (extrude :part LOCH_NAME :wp LOCH_WP :keep_wp :no :distance 25)) ;; Werkzeugkoerper von der Wanne abziehen (sd-call-cmds (subtract_3d :blanks "/WANNE" :tools LOCH_NAME :keep_tool :no)) ) ) ;; ------------------------------------------------------------ ;; Abschlussmeldung ;; ------------------------------------------------------------ (display (format nil "Lochgitter fertig: ~A von ~A Stanzungen" STANZUNG GESAMTSTANZUNGEN))