(in-package :mibr) (use-package :oli) (sd-defdialog 'verdeckte_teile_ausblenden :dialog-title "Verdeckte Teile ausblenden" :toolbox-button t :after-initialization '(unless (sd-am-view-struct-view-set (sd-am-inq-view (first (sd-am-sheet-struct-views (sd-am-inq-sheet (sd-am-inq-curr-sheet)))))) (sd-display-message (format nil "Die dazu gehörige 3d-Baugruppe/3d-Teil ist nicht geladen!") :title "Fehler" :push "Weiter") ) :variables '( (Ausw_besit :selection (*sd-anno-view-seltype*) :title "Besitzer" :prompt-text "Besitzer/Ansicht auswählen" :initial-enable t :initial-value t :gui-value (if Ausw_besit (format nil "~a" (sd-am-inq-name Ausw_besit))) ;;Ansichtsname im Display anzeigen ) (Push-manu :push-action (do-zaehlen) :title "Teile ausblenden" :toggle-type :wide-toggle ) ) :local-functions '( (do-zaehlen () (let (alle_linien id_nummern_liste erm_teile_ansicht teile_pfade invert_list) ; Alle Linien aus einer Ansicht wählen (setf alle_linien (sd-call-cmds (get_selection :focus_type *sd-anno-geo-seltype* :select :by_view_docu_geo ausw_besit ) ) ) ; Teile_id von allen Teilen nach 'alle_linien' ermitteln (dolist (element alle_linien) (push (sd-execute-annotator-function :fnc (format nil "SW_send_teile_id_of_geo_objekt ~A" (sd-get-annotator-reference :object element))) id_nummern_liste) ) ; Exemplare der Teile_id entfernen (setf id_nummern_liste (remove-duplicates id_nummern_liste :test #'sd-string=)) ;Entfernt Exemplar (pprint id_nummern_liste) ; Sys-id der Exemplare ermitteln (dolist (element id_nummern_liste) (push (teileflagge_get_nummer (sd-execute-annotator-function :fnc (format nil "SW_send_sys_id_of_geo_objekt '~A'" element)) (teileflagge_get_teileliste ausw_besit)) erm_teile_ansicht) (pprint (sd-execute-annotator-function :fnc (format nil "SW_send_sys_id_of_geo_objekt '~A'" element) )) ) ; Alle Teilepfade aus Ansicht (dolist (element (sd-am-view-struct-parts-3d (sd-am-inq-view ausw_besit))) (push (sd-inq-obj-pathname element) teile_pfade) ) ;; end dolist ; Unsichtbare Teile auswählen / invertieren die Ausgeblendet werden (dolist (element teile_pfade) (unless (find element erm_teile_ansicht :test #'sd-string=) (push element invert_list) ) ) ; Teile verwalten/ausblenden (dolist (element invert_list) (sd-call-cmds (manage_parts :this_view ausw_besit :rem_selected_parts element)) ) (sd-display-alert (format nil "~a Elemente ausgeblendet" (length invert_list)) :icon :info :auto-close-time 5) ) ;;end let ) ;;end do-zaehlen (teileflagge_get_teileliste (gew_ansicht) (do ((teileliste (sd-am-view-struct-parts-3d (sd-am-inq-view gew_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_nummer (id l) (let ((suchstr)(r)) (loop (when (endp l) (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 local-functions ) (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" ))