;;--------------------------------------------------------------------------* ;; Modulbeschreibung: ;; Annotation - Teil im Schnitt Schützen/Schneiden ;;--------------------------------------------------------------------------* ;; Dateiname: teile_schuetzen.lsp ;; Version : 1.2 ;; Datum : 21.02.2018 ;; Author : MiBr ;;--------------------------------------------------------------------------* ;; Version : 1.1 Besitzer reservieren hinzugefügt ;; Ansicht aktualisierrn anstelle von Zeichnung ;; Version : 1.2 Lisp entrümpelt ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 65280 Grün ; 16776960 Gelb ; 16777215 Weiss ; 16711680 Rot ; 255 Blau ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (in-package :custom) (use-package '(:oli :frame2 :elan)) (sd-defdialog 'teile_schuetzen :dialog-title "Teile in Ansicht schützen/schneiden" :toolbox-button nil :variables '( (Element :selection (*sd-anno-geo-seltype*) :select-attribute :docu-calc-geo-only :title "Teilekante" :prompt-text "Element wählen" :toggle-type :invisible :after-input (Teil_ermitteln) ) (Creo_Tool :title "Zum CREO-TOOL" :push-action (preselect secure_part_from_section :secured_parts) :toggle-type :wide-toggle :initial-visible t ) ("Einfluss pro Ansicht") (Teile_bez :value-type :display-only :prompt-text "Teil" :title "Teil" :initial-value "" :size :third ) (Ansicht_Name :value-type :display-only :prompt-text "Ansicht" :title "Ansicht" :initial-value "" :size :third ) (Ansicht_aktu :value-type :boolean :toggle-type :wide-toggle :title "Ansicht aktualisieren" :prompt-text "Ansicht nach Auswahl direkt aktualisieren?" :initial-value nil) ("-") (T_schneiden :title "Schneiden" :push-action (sd-call-cmds (do_schneiden)) :toggle-type :grouped-toggle :initial-visible t :after-input (progn (setf Teile_pfad nil) (setf Ansicht nil) (setf Teile_bez nil) (setf Ansicht_Name nil)) ) (T_schuetzen :title "Schützen" :push-action (sd-call-cmds (do_schuetzen)) :toggle-type :grouped-toggle :initial-visible t :after-input (progn (setf Teile_pfad nil) (setf Ansicht nil) (setf Teile_bez nil) (setf Ansicht_Name nil)) ) (T_reserv :title "Besitzer reservieren" :push-action (progn (sd-call-cmds (ndm_reserve :objects (sd-am-view-set-struct-owner (sd-am-inq-view-set (sd-am-view-struct-view-set (sd-am-inq-view Ansicht )))))) (sd-set-variable-status 'T_schneiden :enable t) (sd-set-variable-status 'T_schuetzen :enable t) (sd-set-variable-status 'T_reserv :visible nil)) :toggle-type :wide-toggle :initial-visible nil ) );end-variables :prompt-variable 'Element :ok-action '() :help-action '(sd-display-message " 2017-09-13 erstellt aus Lisp SW-PosNum von Wolfgang Seel Makro zum Schützen und Schneiden von Bauteilen in Schnittdarstellungen Viel Spaß beim anwenden !!! Michael " :title "teile_anz.lsp" :push "Weiter") :local-functions '( (do_schuetzen () (when (and Teile_pfad Ansicht) (SECURE_PART_FROM_SECTION :SECURED_PARTS :part Teile_pfad :in_view Ansicht :section_feature_in_view :secure) (when (equal Ansicht_aktu t) (am_view_update :update_whole_drawing :update_selected_views Ansicht)) ) ) (do_schneiden () (when (and Teile_pfad Ansicht) (SECURE_PART_FROM_SECTION :SECURED_PARTS :part Teile_pfad :in_view Ansicht :section_feature_in_view :section) (when (equal Ansicht_aktu t) (am_view_update :update_whole_drawing :update_selected_views Ansicht)) ) ) (Teil_ermitteln () (let (Teil_ID SYS_ID Ansichten_liste Teile_liste Pfad_readonly BG_readonly) (setf Teil_ID (sd-execute-annotator-function :fnc (format nil "SW_send_teile_id_of_geo_objekt ~A" (sd-get-annotator-reference :object Element)))) (setf SYS_ID (sd-execute-annotator-function :fnc (format nil "SW_send_sys_id_of_geo_objekt '~A'" Teil_id))) (setf Ansichten_liste (sd-am-sheet-struct-views (sd-am-inq-sheet (sd-am-inq-curr-sheet)))) ;Ansichtenliste erstellen (setf Ansicht (Teileflagge_get_ansicht_aus_ansichtenliste (sd-am-inq-name Element) Ansichten_liste)) ;Aus der Liste die betroffene Ansicht rausholen (setf Teile_liste (Teileflagge_get_teileliste Ansicht)) ;Teileliste erstellen (setf Teile_bez (Teileflagge_get_bezeichnungen SYS_ID Teile_liste)) ;Teilebezeichnungen raussuchen (setf Teile_pfad (Teileflagge_get_nummer SYS_ID Teile_liste)) ;Teilepfad raussuchen (setf Ansicht_Name (sd-am-inq-name Ansicht)) (setf BG_readonly nil) (if (equal Teile_bez nil) (sd-display-message (format nil "3d-Baugruppe fehlt~%oder Einzelteil geladen") :title "Fehler" :push "Weiter") ; Besitzer der Zeichnung ermitteln (progn (setf Pfad_readonly (sd-am-view-set-struct-owner (sd-am-inq-view-set (sd-am-view-struct-view-set (sd-am-inq-view Ansicht )))) );;setf (setf BG_readonly (sd-inq-obj-contents-read-only-p Pfad_readonly)) ) ) (if BG_readonly (progn (sd-set-variable-status 'T_schneiden :enable nil) (sd-set-variable-status 'T_schuetzen :enable nil) (sd-set-variable-status 'T_reserv :visible t) ) (progn (sd-set-variable-status 'T_schneiden :enable t) (sd-set-variable-status 'T_schuetzen :enable t) (sd-set-variable-status 'T_reserv :visible nil) ) ) ) ;end let ) ;Teil_ermitteln (Teileflagge_get_ansicht_aus_ansichtenliste (A_name L) ;Aus der Liste die betroffene Ansicht rausholen (COND ((ENDP L) NIL) ((sd-string= A_name (sd-am-view-struct-name (sd-am-inq-view (FIRST L)))) (FIRST L)) (T (Teileflagge_get_ansicht_aus_ansichtenliste A_name (REST L))) );end COND );end Teileflagge_get_ansicht_aus_ansichtenliste (Teileflagge_get_teileliste (Ansicht) (DO ( (Teileliste (sd-am-view-struct-parts-3d (SD-AM-INQ-VIEW Ansicht)) (REST Teileliste)) (Rl 'NIL (CONS (LIST (sd-inq-obj-sysid (FIRST Teileliste)) (sd-inq-obj-basename (FIRST Teileliste)) (sd-inq-obj-pathname (FIRST Teileliste)) ) Rl)) ) ((ENDP Teileliste) Rl) ) );end Teileflagge_get_teileliste (Teileflagge_get_bezeichnungen (ID L) (LET ( (SuchSTR) (R) ) (LOOP (WHEN (ENDP L) (PROGN (SETQ R NIL) (RETURN))) (IF (sd-string= ID (SECOND (sd-string-split (FIRST (FIRST L)) " ")) ) ;then (PROGN (SETQ R (format nil "~A" (SECOND (FIRST L)))) (RETURN) ) ;else (SETQ L (REST L)) );end_IF );end_LOOP R );end LET );end Teileflagge_get_bezeichnungen (Teileflagge_get_nummer (ID L) (LET ( (SuchSTR) (R) ) (LOOP (WHEN (ENDP L) (PROGN (SETQ R NIL) (RETURN))) (IF (sd-string= ID (SECOND (sd-string-split (FIRST (FIRST L)) " ")) ) ;then (PROGN (SETQ R (format nil "~A" (THIRD (FIRST L)))) (RETURN) ) ;else (SETQ L (REST L)) );end_IF );end_LOOP R );end LET );end Teileflagge_get_nummer );end Local-Functions );end sd-defdialog ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; #| benötigte ME10-Makro´s um Teilenummern im Annotation zu ermitteln |# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (sd-execute-annotator-command :cmd (format nil "~a~a~a~a~a~a~a~a~a~a~a~a" "DEFINE SW_send_teile_id_of_geo_objekt" " PARAMETER Pn {*Pointernummer*}" " LOCAL Pid" " LOCAL I" " LOCAL D" " LOCAL C" " INQ_SELECTED_ELEM SELECT GLOBAL POINTER Pn CONFIRM END" " LET Pid (DOCU_CSTRING_TO_LSTRING (INQ 309))" " LET I (DOCU_OPEN_CONNECTION_TO_SD)" " LET D (DOCU_ADD_LINE_TO_SD Pid)" " LET C (DOCU_CLOSE_CONNECTION_TO_SD)" "END_DEFINE" )) (sd-execute-annotator-command :cmd (format nil "~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a~a" "DEFINE SW_send_sys_id_of_geo_objekt" " PARAMETER T" " LOCAL Istr" " LOCAL R" " LOCAL I" " LOCAL D" " LOCAL C" " INQ_SELECTED_ELEM GLOBAL T" " LET Istr (INQ 900)" " LOOP" " EXIT_IF (Istr = 'END-OF-LIST')" " IF (POS Istr 'SD_ID:')" " LET R (SUBSTR Istr ((POS Istr ' ')+1) (LEN Istr))" " LET R (SUBSTR R ((POS R ';')+1) (LEN R))" " END_IF" " EXIT_IF (POS Istr 'SD_ID:')" " LET Istr (INQ 901)" " END_LOOP" " IF (Istr = 'END-OF-LIST')" " LET R 'NONE'" " END_IF" " LET I (DOCU_OPEN_CONNECTION_TO_SD)" " LET D (DOCU_ADD_LINE_TO_SD (DOCU_CSTRING_TO_LSTRING R))" " LET C (DOCU_CLOSE_CONNECTION_TO_SD)" "END_DEFINE" ))