;;=================================================================================================== ;; SW-Aussengewinde.lsp ;; erstellt am 29.01.2016 von Wolfgang Seel ;; ;; Das Makro soll bei geladenen Fremddaten, das erkennen von Aussengewinden für Annotation erleichtern. ;; ;; Da alle Gewindetypen gleichzeitig erkannt werden koennen, sind in der Definition der Gewinde auch ;; immer die Gewindeeinstellungen komplett vorzunehmen. ;; Unterschieden wird nur zwischen konstanter Steigung = Regelgewinden ;; und variabler Steigung = Feingewinde - Typen ;; Am besten immer komplette Zeile kopieren und ausfüllen. ;; ;; Viel Spass beim Datenimport und anschliessendem Gewinde erkennen !!! (in-package :GD-package) (use-package :OLI) (sd-defdialog 'SW-Aussengewinde :toolbox-button t :dialog-title "SW-Aussengewinde" :variables '( (ACHSEN-FEEDBACK) (ALLES) (RICHTUNG) (MITTELPUNKT) ("Gewindeflaeche") (FLAECHE :value-type :face :title "Zyl.-Flaeche" :prompt-text "Bitte Zylinderflaeche eingeben" :before-input (progn (setf STEIGUNG_F NIL) (setf Kerndurchmesser 0) (setf STEIGUNG NIL) (setf Gewindename NIL) (setf Gewindetyp NIL) (setf Gewindeprofile NIL) (setf Gewindetext NIL) (setf Durchmesser NIL) );;progn :check-function Eingabe_flaeche_pruefen :after-input (progn (sd-end-feedback ACHSEN-FEEDBACK) (sd-set-variable-status 'UMKEHREN :enable t) (Gewinde-definieren) );;progn );;FLAECHE ("Erkanntes Gewinde") (Gewindename :title "GEWINDE" :value-type :display-only :initial-value " " :display-units :length) (button-Gewinde :push-action (Gewinde-erstellen) :title "Gewinde erstellen" :toggle-type :wide-toggle ) ("Gewinderichtung") (UMKEHREN :title "Umkehren" :toggle-type :wide-toggle :initial-enable nil :push-action (Richtung-wechseln)) ("Gewinde Drehrichtung") (RECHTS_GEW :value-type :boolean :initial-value t :toggle-type :grouped-toggle :title "Rechts" );;RECHTS_GEW (LINKS_GEW :value-type :boolean :toggle-type :grouped-toggle :title "Links" );;LINKS_GEW ("Gewinde-Typ") (GEWINDE_STEIGUNG :value-type :boolean :toggle-type :wide-toggle :initial-value t :title "konstante Steigung" :after-input (progn (sd-set-variable-status 'STEIGUNG_F :enable nil) (sd-set-variable-status 'STEIGUNG :enable t) (sd-set-variable-status 'UMKEHREN :enable nil) (setf FLAECHE nil) (sd-end-feedback ACHSEN-FEEDBACK) );;progn );;GEWINDE_STEIGUNG (GEWINDE_STEIGUNG_F :value-type :boolean :toggle-type :wide-toggle :title "Variable Steigung" :after-input (progn (sd-set-variable-status 'STEIGUNG_F :enable t) (sd-set-variable-status 'STEIGUNG :enable nil) (sd-set-variable-status 'UMKEHREN :enable nil) (setf FLAECHE nil) (sd-end-feedback ACHSEN-FEEDBACK) );;progn );;GEWINDE_STEIGUNG_F ("abgegriffener Durchmesser") (DURCHMESSER :title "gross D" :value-type :display-only :initial-value 0 :display-units :length) ("Gewinde mit konstanter Steigung") (STEIGUNG :title "Steigung" :value-type :display-only :initial-value 0 :display-units :length) ("Gewinde mit Variabler Steigung") (STEIGUNG_F :title "Steigung" :prompt-text "Steigung waehlen" :range (0) :initial-enable nil :display-units :length :after-input (setf STEIGUNG STEIGUNG_F);; (setf Gewindename (FORMAT NIL "~ax~a" Gewindename Steigung) ) );;variables :mutual-exclusion '((GEWINDE_STEIGUNG GEWINDE_STEIGUNG_F) (RECHTS_GEW LINKS_GEW)) :ok-action '(Gewinde-erstellen) :cancel-action '(sd-end-feedback ACHSEN-FEEDBACK) :local-functions '( (Gewinde-definieren () (setf ALLES (sd-inq-geo-props FLAECHE :dest-space :global) DURCHMESSER (* 2 (sd-cylinder-radius ALLES)) MITTELPUNKT (sd-cylinder-center ALLES) RICHTUNG (sd-cylinder-axis-dir ALLES) ACHSEN-FEEDBACK (sd-start-direction-feedback :point MITTELPUNKT :direction RICHTUNG :disc t :color 0,0,1) );;setf (setf DURCHMESSER (/ (ROUND (* (+ DURCHMESSER 0.00003) 1000.0) 1) 1000.00)); Runden auf drei Stellen hinter dem Komma (if GEWINDE_STEIGUNG (progn (case DURCHMESSER ;; Liste von Gewinden mit fest definierter Steigung (1.0 (setf Gewindename "M1") (setf Kerndurchmesser 0.75) (setf STEIGUNG 0.25) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (1.1 (setf Gewindename "M1.1") (setf Kerndurchmesser 0.85) (setf STEIGUNG 0.25) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (1.2 (setf Gewindename "M1,2") (setf Kerndurchmesser 0.95) (setf STEIGUNG 0.25) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (1.4 (setf Gewindename "M1.4") (setf Kerndurchmesser 1.10) (setf STEIGUNG 0.30) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (1.6 (setf Gewindename "M1,6") (setf Kerndurchmesser 1.25) (setf STEIGUNG 0.35) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (1.8 (setf Gewindename "M1.8") (setf Kerndurchmesser 1.45) (setf STEIGUNG 0.35) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (2.0 (setf Gewindename "M2") (setf Kerndurchmesser 1.6) (setf STEIGUNG 0.4) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (2.2 (setf Gewindename "M2.2") (setf Kerndurchmesser 1.75) (setf STEIGUNG 0.45) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (2.5 (setf Gewindename "M2,5") (setf Kerndurchmesser 2.05) (setf STEIGUNG 0.45) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (3.0 (setf Gewindename "M3") (setf Kerndurchmesser 2.5) (setf STEIGUNG 0.5) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (3.5 (setf Gewindename "M3.5") (setf Kerndurchmesser 2.90) (setf STEIGUNG 0.60) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (4.0 (setf Gewindename "M4") (setf Kerndurchmesser 3.3) (setf STEIGUNG 0.7) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (4.5 (setf Gewindename "M4.5") (setf Kerndurchmesser 3.70) (setf STEIGUNG 0.75) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (5.0 (setf Gewindename "M5") (setf Kerndurchmesser 4.2) (setf STEIGUNG 0.8) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (6.0 (setf Gewindename "M6") (setf Kerndurchmesser 5) (setf STEIGUNG 1.0) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (7.0 (setf Gewindename "M7") (setf Kerndurchmesser 6.00) (setf STEIGUNG 1.00) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (8.0 (setf Gewindename "M8") (setf Kerndurchmesser 6.75) (setf STEIGUNG 1.25) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (9.0 (setf Gewindename "M9") (setf Kerndurchmesser 7.75) (setf STEIGUNG 1.25) (setf Gewindename "M9") (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (10.0 (setf Gewindename "M10") (setf Kerndurchmesser 8.5) (setf STEIGUNG 1.5) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (12.0 (setf Gewindename "M12") (setf Kerndurchmesser 10.25) (setf STEIGUNG 1.75) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (14.0 (setf Gewindename "M14") (setf Kerndurchmesser 12.00) (setf STEIGUNG 2.00) (setf Gewindename "M14") (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (16.0 (setf Gewindename "M16") (setf Kerndurchmesser 14) (setf STEIGUNG 2.0) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (18.0 (setf Gewindename "M18") (setf Kerndurchmesser 15.50) (setf STEIGUNG 2.50) (setf Gewindename "M18") (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (20.0 (setf Gewindename "M20") (setf Kerndurchmesser 17.5) (setf STEIGUNG 2.5) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (22.0 (setf Gewindename "M22") (setf Kerndurchmesser 19.50) (setf STEIGUNG 2.50) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (24.0 (setf Gewindename "M24") (setf Kerndurchmesser 21) (setf STEIGUNG 3.0) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (27.0 (setf Gewindename "M27") (setf Kerndurchmesser 24.00) (setf STEIGUNG 3.00) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (30.0 (setf Gewindename "M30") (setf Kerndurchmesser 26.5) (setf STEIGUNG 3.5) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (33.0 (setf Gewindename "M33") (setf Kerndurchmesser 29.50) (setf STEIGUNG 3.50) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (36.0 (setf Gewindename "M36") (setf Kerndurchmesser 32) (setf STEIGUNG 4.0) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (39.0 (setf Gewindename "M39") (setf Kerndurchmesser 35.00) (setf STEIGUNG 4.00) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (42.0 (setf Gewindename "M42") (setf Kerndurchmesser 37.5) (setf STEIGUNG 4.5) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (45.0 (setf Gewindename "M45") (setf Kerndurchmesser 40.50) (setf STEIGUNG 4.50) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (48.0 (setf Gewindename "M48") (setf Kerndurchmesser 43) (setf STEIGUNG 5.0) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (52.0 (setf Gewindename "M52") (setf Kerndurchmesser 47.00) (setf STEIGUNG 5.00) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (56.0 (setf Gewindename "M56") (setf Kerndurchmesser 50.5) (setf STEIGUNG 5.5) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (60.0 (setf Gewindename "M60") (setf Kerndurchmesser 55.50) (setf STEIGUNG 5.50) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) (64.0 (setf Gewindename "M64") (setf Kerndurchmesser 58.00) (setf STEIGUNG 6.0) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL)) (68.0 (setf Gewindename "M68") (setf Kerndurchmesser 62.00) (setf STEIGUNG 6.00) (setf Gewindetyp :metric) (setf Gewindeprofile :M) (setf Gewindetext NIL) ) ;Whitworth-Rohrgewinde DIN ISO 228/1 (9.728 (setf Gewindename "G1/8") (setf Kerndurchmesser 8.8) (setf STEIGUNG 28) (setf Gewindetyp :inch) (setf Gewindeprofile :PIPE_G) (setf Gewindetext "1/8")) (13.157 (setf Gewindename "G1/4") (setf Kerndurchmesser 11.8) (setf STEIGUNG 19) (setf Gewindetyp :inch) (setf Gewindeprofile :PIPE_G) (setf Gewindetext "1/4")) (16.66 (setf Gewindename "G3/8")(setf Kerndurchmesser 15.25) (setf STEIGUNG 19) (setf Gewindetyp :inch) (setf Gewindeprofile :PIPE_G) (setf Gewindetext "3/8")) (20.955 (setf Gewindename "G1/2") (setf Kerndurchmesser 19.00) (setf STEIGUNG 14) (setf Gewindetyp :inch) (setf Gewindeprofile :PIPE_G) (setf Gewindetext "1/2")) (26.441 (setf Gewindename "G3/4") (setf Kerndurchmesser 24.50) (setf STEIGUNG 14) (setf Gewindetyp :inch) (setf Gewindeprofile :PIPE_G) (setf Gewindetext "3/4")) (33.249 (setf Gewindename "G1") (setf Kerndurchmesser 30.75) (setf STEIGUNG 14) (setf Gewindetyp :inch) (setf Gewindeprofile :PIPE_G) (setf Gewindetext "1")) (otherwise (setf STEIGUNG 0)) );;case );;progn (progn (case DURCHMESSER ;; Liste von Gewinden mit variabler Steigung ;Metrisches ISO-Feingewinde DIN 13 (2.0 (setf Gewindename "M2x") (sd-set-range 'STEIGUNG_F' (0.25)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (3.0 (setf Gewindename "M3x") (sd-set-range 'STEIGUNG_F' (0.25)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (4.0 (setf Gewindename "M4x") (sd-set-range 'STEIGUNG_F' (0.2 0.35)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (5.0 (setf Gewindename "M5x") (sd-set-range 'STEIGUNG_F' (0.25 0.5)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (6.0 (setf Gewindename "M6x") (sd-set-range 'STEIGUNG_F' (0.25 0.5 0.75)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (8.0 (setf Gewindename "M8x") (sd-set-range 'STEIGUNG_F' (0.25 0.5 1)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (10.0 (setf Gewindename "M10x") (sd-set-range 'STEIGUNG_F' (0.25 0.5 1)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (12.0 (setf Gewindename "M12x") (sd-set-range 'STEIGUNG_F' (0.35 0.5 1)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (16.0 (setf Gewindename "M16x") (sd-set-range 'STEIGUNG_F' (0.5 1 1.5)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (20.0 (setf Gewindename "M20x") (sd-set-range 'STEIGUNG_F' (1 1.5)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (24.0 (setf Gewindename "M24x") (sd-set-range 'STEIGUNG_F' (1.5 2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (30.0 (setf Gewindename "M30x") (sd-set-range 'STEIGUNG_F' (1.5 2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (36.0 (setf Gewindename "M36x") (sd-set-range 'STEIGUNG_F' (1.5 2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (42.0 (setf Gewindename "M42x") (sd-set-range 'STEIGUNG_F' (1.5 2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (48.0 (setf Gewindename "M48x") (sd-set-range 'STEIGUNG_F' (1.5 2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (56.0 (setf Gewindename "M56x") (sd-set-range 'STEIGUNG_F' (1.5 2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (64.0 (setf Gewindename "M64x") (sd-set-range 'STEIGUNG_F' (2)) (setf Gewindetyp :metric) (setf Gewindeprofile :MF) (setf Gewindetext NIL)) (otherwise (setf STEIGUNG_F 0)) );;case );;progn );;if );;Gewinde-definieren (Gewinde-erstellen () (if (/= STEIGUNG 0) (progn (sd-call-cmds (progn (sd-define-thread FLAECHE :nominal-diameter DURCHMESSER :NOMINAL-DIAMETER-TEXT Gewindetext :core-diameter ;; Kerndurchmesser (IF (= Kerndurchmesser 0) (- DURCHMESSER STEIGUNG) Kerndurchmesser ) ;; IF END :pitch STEIGUNG :thread-type :outer :thread-unit Gewindetyp :thread-color (sd-color-to-rgb 16711935) :thread-hand (if RECHTS_GEW :RIGHT-HAND :LEFT-HAND) :thread-profile Gewindeprofile;;(if GEWINDE_STEIGUNG :M :MF) :include-chamfer T :thread-direction RICHTUNG :thread-name (if GEWINDE_STEIGUNG (if RECHTS_GEW (format nil "~a" Gewindename) ;; Gewinde - konstante Steigung - Rechtsgewinde (format nil "~a-LH" Gewindename) ;; Gewinde - konstante Steigung - Linksgewinde );;if (if RECHTS_GEW (format nil "~a~a" Gewindename (oli::sd-num-to-string STEIGUNG_F 2)) ;; Gewinde - variable Steigung - Rechtsgewinde (format nil "~a~a-LH" Gewindename (oli::sd-num-to-string STEIGUNG_F 2)) ;; Gewinde - variable Steigung - Linksgewinde );;if );;if );;sd-define-thread ;; 3D-Notiz für Gewinde an Fläche anhängen (if (= 0 (- DURCHMESSER (round DURCHMESSER))) (setf DURCHMESSER (round DURCHMESSER)) );;if (if (= 0 (- STEIGUNG_F (round STEIGUNG_F))) (setf STEIGUNG_F (round STEIGUNG_F)) );;if (Cocreate_3d_note :action :create :items FLAECHE :note (if GEWINDE_STEIGUNG (if RECHTS_GEW (format nil "~a" Gewindename) ;; Gewinde - konstante Steigung - Rechtsgewinde (format nil "~a-LH" Gewindename) ;; Gewinde - konstante Steigung - Linksgewinde );;if (if RECHTS_GEW (format nil "~a~a" Gewindename (oli::sd-num-to-string STEIGUNG_F 2)) ;; Gewinde - variable Steigung - Rechtsgewinde (format nil "~a~a-LH" Gewindename (oli::sd-num-to-string STEIGUNG_F 2)) ;; Gewinde - variable Steigung - Linksgewinde );;if );;if );;cocreate_3d_note );;progn );;sd-call-cmds );;progn (if GEWINDE_STEIGUNG (display (format nil "fuer Durchmesser ~A ist kein gueltiges Gewinde in der Datenbank hinterlegt!" Durchmesser)) (display "Es wurde keine Steigung gewaehlt!") );;if );;if (sd-end-feedback ACHSEN-FEEDBACK) (setf FLAECHE nil) );;Gewinde-erstellen ;; Richtung wechseln (Richtung-wechseln () (sd-end-feedback ACHSEN-FEEDBACK) (setf RICHTUNG (make-gpnt3d :x (* -1 (gpnt3d_x RICHTUNG)) :y (* -1 (gpnt3d_y RICHTUNG)) :z (* -1 (gpnt3d_z RICHTUNG))) ACHSEN-FEEDBACK (sd-start-direction-feedback :point MITTELPUNKT :direction RICHTUNG :disc t :color 0,0,1)) );;Richtung-wechseln ;; Eingabe auf Geo (Zylinder) und gueltige Durchmesser fuer Regel- bzw. Feingewinde pruefen (Eingabe_flaeche_pruefen (I) (if (sd-cylinder-p (SD-INQ-GEO-PROPS I)) (progn );;progn (values :error "Das ist keine Zylinderflaeche!") );;if );Eingabe_flaeche_pruefen ;; Eingabe auf Geo (Kreiskante) pruefen (Eingabe_kante_pruefen (I) (if (sd-circle-p (sd-inq-geo-props I :dest-space :global)) :ok (values :error "Das ist keine Kreiskante!") );;if );;Eingabe_kante_pruefen );;local-functions );;sd-defdialog