;;--------------------------------------------------------------------------* ;; Modulbeschreibung: ;; Form u Lage und Toleranzen ;;--------------------------------------------------------------------------* ;; Dateiname: form_u_lagetoleranzen.lsp ;; Version : 1.0 ;; Datum : 09.2025 ;; Author : MiBr ;; Unterstützung: DerWolfgang (Besten Dank) ;; Beschreibung: Sucht Form- u. Lagetoleranzen und Nennmaße mit Toleranzen ;; aus der Zeichnung und schreibt diese in die Datei ;; C:/temp/ful_tol.csv ;;--------------------------------------------------------------------------* (in-package :mibr) (use-package :oli) (sd-defdialog 'ful_tol :dialog-title "Form u Lage und Toleranzen" :toolbox-button t :after-initialization '(progn ()) :variables '( (pas_tabelle :title "Tabelle bearbeiten" :toggle-type :wide-toggle :push-action (sd-display-url outfile) ) (find_fultol :title "Zeichnung analysieren" :toggle-type :wide-toggle :push-action (do_fultol) ) (outfile :initial-value "c:\\Temp\\ful_tol.csv") (symbol_liste) (toleranz_liste) ) ;end variables :ok-action '() :local-functions '( ;>>>>>>>>>>>>>>>>>>>>>>>>>> Funktionen zum Finden der Form u. Lagetoleranzen <<<<<<<<<<<<<<<<<<<<<<<<<<; (do_fultol () ;;; Form Richtungstoleranz Ortstoleranz Lauftoleranz ;;; F1 Geradheit R1 Parallelität O1 Position L1 Rundlauf ;;; F2 Ebenheit R2 Rechtwinkligkeit O2 Koaxialität L2 Gesamt Rundlauf ;;; F3 Rundheit R3 Neigung O3 Symetrie ;;; F4 Zylinderform ;;; F5 Linienform ;;; F6 Flächenform (let (symbliste sym-pid tol-strings first-char symbol_bez toleranz_bezug toleranz_txt form_lage_tol first_txt dim_list obere_tol_flag untere_tol_flag) ;>>>>>>>>>>>>>>>>>>>>>>>>>> Form u. Lage Symbole suchen <<<<<<<<<<<<<<<<<<<<<<<<<<; (setf symbliste (sd-call-cmds (get_selection :focus_type *sd-anno-symbol-seltype* :select :all_at_top :by_drawing_docu_rest))) (setq symbol_liste nil) (dolist (a-item symbliste) (setq sym-pid (docu::docu-selitem-pid a-item)) (when (setq tol-strings (sd-execute-annotator-function :fnc (format nil "Docu_tol_sym_multitier_strings '~a'" sym-pid))) (dolist (a-line tol-strings) (dolist (one-line (rest a-line)) ;; sublines (setq first-char (char one-line 0)) (cond ((equal (char-code first-char) 173) (setf symbol_bez "F1")) ((equal (char-code first-char) 174) (setf symbol_bez "F2")) ((equal (char-code first-char) 175) (setf symbol_bez "F3")) ((equal (char-code first-char) 176) (setf symbol_bez "F4")) ((equal (char-code first-char) 177) (setf symbol_bez "F5")) ((equal (char-code first-char) 178) (setf symbol_bez "F6")) ((equal (char-code first-char) 181) (setf symbol_bez "R1")) ((equal (char-code first-char) 180) (setf symbol_bez "R2")) ((equal (char-code first-char) 179) (setf symbol_bez "R3")) ((equal (char-code first-char) 182) (setf symbol_bez "O1")) ((equal (char-code first-char) 183) (setf symbol_bez "O2")) ((equal (char-code first-char) 172) (setf symbol_bez "O3")) ((equal (char-code first-char) 184) (setf symbol_bez "L1")) ((equal (char-code first-char) 185) (setf symbol_bez "L2")) ) (when symbol_bez (setf toleranz_bezug (sd-string-split (subseq one-line 1 (- (length one-line) 1)) "|")) (setf toleranz_txt (sd-string-replace (first toleranz_bezug) " " "" "e" "ø")) (setf form_lage_tol (format nil "~a;~a;" symbol_bez toleranz_txt)) (when (rest toleranz_bezug) (dolist (bezug (rest toleranz_bezug)) (if first_txt (setf form_lage_tol (format nil "~a_~a" form_lage_tol bezug)) (setf form_lage_tol (format nil "~a~a" form_lage_tol bezug)) ) (setf first_txt 1) ) (setq first_txt nil) ) (push (sd-string-split form_lage_tol ";") symbol_liste) ) ) ;;;end dolist ) ;;end dolist ) ;end when ) ;end dolist (setq symbol_liste (sort symbol_liste 'symbol_sort)) ;>>>>>>>>>>>>>>>>>>>>>>>>>> Nennmaße und Toleranzen suchen <<<<<<<<<<<<<<<<<<<<<<<<<<; (setf dim_list (sd-call-cmds (get_selection :focus_type *sd-anno-dimension-seltype* :select :all_at_top :by_drawing_docu_rest))) (setf toleranz_liste nil) (dolist (a_dim dim_list) (when (sd-am-dim-plus-minus-tol-struct-p (sd-am-inq-dim-tol-values a_dim)) (push (list "Nennm." (sd-am-inq-dim-main-value-text a_dim) (format nil "±~a" (sd-write-to-string (sd-am-dim-plus-minus-tol-struct-plus-minus (sd-am-inq-dim-tol-values a_dim)))) ) toleranz_liste ) ) (when (sd-am-dim-upper-lower-tol-struct-p (sd-am-inq-dim-tol-values a_dim)) (setf obere_tol_flag t) (setf untere_tol_flag t) (setf obere_tol (sd-am-dim-upper-lower-tol-struct-upper (sd-am-inq-dim-tol-values a_dim))) (setf untere_tol (sd-am-dim-upper-lower-tol-struct-lower (sd-am-inq-dim-tol-values a_dim))) (when (string= "" (format nil "~a" obere_tol)) (setf obere_tol_flag nil)) (when (string= "" (format nil "~a" untere_tol)) (setf untere_tol_flag nil)) (when (or obere_tol_flag untere_tol_flag) (push (list "Nennm." (sd-am-inq-dim-main-value-text a_dim) (cond ((and obere_tol_flag untere_tol_flag) (format nil "~a_~a" (sd-write-to-string obere_tol) (sd-write-to-string untere_tol))) (untere_tol_flag (format nil "~a" (sd-write-to-string untere_tol))) (obere_tol_flag (format nil "~a" (sd-write-to-string obere_tol))) ) ) toleranz_liste ) ) ) ) ;end dolist (setq toleranz_liste (sort toleranz_liste 'nenn_sort)) ;>>>>>>>>>>>>>>>>>>>>>>>>>> Tabelle schreiben <<<<<<<<<<<<<<<<<<<<<<<<<<; (with-open-file (out outfile :direction :output :if-exists :supersede :if-does-not-exist :create :external-format :ansi) (format out "Form u Lage und Toleranzen~%~%") (format out "Art d.Eintrages~aFormtoleranzen~aRichtungstoleranzen~aOrtstoleranzen~aLauftoleranzen~aIntervall~%" #\tab #\tab #\tab #\tab #\tab) (format out "ISO~a1 Geradheit~a1 Parallelität~a1 Postion~a1 Rund- Planlauf~a0 Erstes und Letztes~%" #\tab #\tab #\tab #\tab #\tab) (format out "Ok~a2 Ebenheit~a2 Rechtwinkligkeit~a2 Koaxialität~a2 Ges.Rund- Planlauf~%" #\tab #\tab #\tab #\tab) (format out "F1~a3 Rundheit~a3 Neigung~a3 Symmetrie~%" #\tab #\tab #\tab) (format out "R1~a4 Zylinderform~%" #\tab) (format out "O1~a5 Profilform Linie~%" #\tab) (format out "L1~a6 Proilform Fläche~%~%" #\tab) (format out "Art d. Eintrages~aNennmaß~aAbm/Bezug~%" #\tab #\tab) (dolist (a-item toleranz_liste) (format out "~a~a" (nth 0 a-item) #\tab) (format out "~a~a" (sd-string-replace (nth 1 a-item) "." ",") #\tab) (format out "~a~%" (sd-string-replace(nth 2 a-item) "." ",")) ) ;end dolist (dolist (a-item symbol_liste) (format out "~a~a" (nth 0 a-item) #\tab) (format out "~a~a" (sd-string-replace (nth 1 a-item) "." ",") #\tab) (when (nth 2 a-item) (format out "~a" (nth 2 a-item))) (format out "~%") ) ;end dolist ) ;end with-open-file ) ;end let ) ;end do_tol_maße ) ;end local-funktions ) ;end defdialog ;>>>>>>>>>>>>>>>>>>>>>>>>>> Symbole sortieren <<<<<<<<<<<<<<<<<<<<<<<<<<; (defun symbol_sort (a1 a2) (string-lessp (first a1) (first a2)) ) ;>>>>>>>>>>>>>>>>>>>>>>>>>> Nennmaße sortieren <<<<<<<<<<<<<<<<<<<<<<<<<<; (defun nenn_sort (a1 a2) (< (sd-read-from-string (nth 1 a1)) (sd-read-from-string (nth 1 a2))) )