;;--------------------------------------------------------------------------* ;; Modulbeschreibung: ;; Form- und Lagertoleranzen ;;--------------------------------------------------------------------------* ;; Dateiname: form_u_lagetoleranzen.lsp ;; Version : 1.0 ;; Datum : 09.2025 ;; Author : MiBr ;; Beschreibung: Sucht Form- und Lagetoleranzen aus der Zeichnung ;;--------------------------------------------------------------------------* ;; modifziert von der_Wolfgang Thu Sep 4 22:13:14 CEST 2025 (in-package :mibr) (use-package :oli) (sd-defdialog 'such_form_u_lage :dialog-title "Form- und Lagetoleranze" :toolbox-button t ;; :after-initialization '(progn ()) ;; giggle :variables '( (do_ausfuellen :title "Suche" :toggle-type :grouped-toggle :push-action (symbole_suchen) ) ) ;end variables ;; :ok-action '() :local-functions '( ;>>>>>>>>>>>>>>>>>>>>>>>>>> Funktionen zum Finden der Oberflächenzeichen <<<<<<<<<<<<<<<<<<<<<<<<<<; (symbole_suchen () (let ((my-filename "c:/temp/zng_temp.mi")) ;; den Dateiname NUR EINmal definieren. Spart arbeit beim Testen ;; dateiname in LISP, im Annotator, im me10 einfach immer nur mit SCHRÄGSTRICH / ;; nur wenn ein widerspenstiges Windoof programm den Dateinamen braucht, dann evtl den doofen Backslash \ ;; also wenn du den Namen an den Exploder, oder Äxl oder so übergeben musst ;;;; aber dafür gibt es ne IKIT funktion! (sd-convert-filename-to-platform my-filename) ;;;; und die nutze man dann nur im allerletzten Schritt ;; ;; wobei das Windows eigene NotePad (wie mehr und mehr Programme) mit beiden klar kommt ;; notepad.exe c:\temp\zng_temp.mi ;; notepad.exe c:/temp/zng_temp.mi (sd-call-cmds ;; einen dialog aus einem dialog rufen immer mit sd-call-cmds ; (frame2-ui::fb-set-temp-filing-revision "20.1") dat kann wech (am_store_drawing :filename my-filename :overwrite :compressed :off :check_up_to_date 1 :yes )) ;(with-open-file (instream my-filename) ;; und hier gibt es zig parameter! (with-open-file (instream my-filename :external-format :utf-8-bom) ; oder :utf-8 oder oder oder ;; -> https://de.wikipedia.org/wiki/Byte_Order_Mark ;; Notepad++ kann da auch konvertieren. und zeigt das aktuelle auch unten rechts an (loop for line = (read-line instream t) while line do ;; und das man hier nur Kästchen sieht beim Editieren .. liegt auch an der Text file kodierung. (when (find (subseq line 0 1) '("" "" "" "E") :test #'string=) ;E zum testen (pprint line) ) ); endloop ); with-open-file ;(delete-file my-filename) )) ;let+symbole_suchen ) ;end local-funktions ) ;; end defdialog ;; und das man hier nur Kästchen sieht beim Editieren .. liegt auch an der Text file kodierung. #|         |# ;; diese strings sind solche die ME10 in der command line verträgt. Weil das eben so Font spezifische ist. #| Ganz Oben im MI file steht (meistens) ENCODING:UTF-8 in dieser Kodierung schreibt der ME10 die INHALTE der Texte ... Da Toleranz Symbole auch nur TEXT sind ABER in einem speziellem Font, dessen Font Format (fast) nur die CoCreate Produkte ME10, Annotator und Modeling beherrschen, wirst du damit nicht glücklich werden. Kein anderes Programm zeigt da was 'vernünftges' oder gar lesbares an. Aber hinter jedem Zeichen steht eine Zahl! ein A ist die 65 ein B ist die 66 .... mit code-char bzw char-code kann man dann ran kommen (code-char 65) ==>> #\A nun ist das aber ein char und kein String! deswegen (char-code (subseq "ABC" 0 1)) ==>> LISP error: "A" is not of type CHARACTER. Abhilfe (char "ABC" 0) ==> der erste character im String (char "ABC" 1) ==> der erste character im String (char-code (char "ABC" 2)) ==>> 67 !! Tada! Die beste Seite zum Thema habe ich bei Wikibooks gefunden: * https://en.wikibooks.org/wiki/Common_Lisp/Advanced_topics/Strings die haben vor allem sehr viele einzelen kleine (einzeilige) Beispiele in ihrer Dokumentation. 👍 ABER: ernstes Wort: MACH das SOOOO NIIICHT! Mi-file angucken war nur als inspiration gedacht. Ich hatte Dir per PM noch einee weitere Funktion geschickt. Da bekommst du auf LSP direkt nen string bzw. derer Mehrere in die Hand. die kannst du dann mit (char-code (char firstline 1)) == 42? untersuchen. |#