| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
| |
 | BOM Assistant für Stücklistenerstellung , eine App
|
Autor
|
Thema: Symbol - Inhalt auslesen (294 / mal gelesen)
|
MiBr Mitglied Konstrukteur
  
 Beiträge: 586 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 02. Sep. 2025 15:14 <-- editieren / zitieren --> Unities abgeben:         
Hallo Freunde der Sonne, ich möchte mir mal wieder ein Lisp schreiben. Hierfür möchte ich die Form- und Lage Toleranzen von einer Zeichnung ermitteln. Und wie ihr euch schon denkt hänge ich mal wieder!!!
Code:
(symbole_suchen () (let (symbliste) (setf symbliste (sd-call-cmds (get_selection :focus_type *sd-anno-symbol-seltype* :select :all_at_top :by_drawing_docu_rest))) (dolist (a-item symbliste) (pprint (sd-am-inq-symbol-param-names a-item)) (pprint (sd-am-inq-symbol-param a-item "tolerance")) (pprint (sd-am-inq-symbol-param a-item "")) ) ;;end dolist ) ;;end let ) ) ;end local-funktions ) ;; end defdialog
Mittels 'get_selection ...' bekomme ich alle Symbole Mittels '(sd-am-inq-symbol-param-names a-item) bekomme ich die Namen der Parameter -> "tolerance" "" Mittels '(sd-am-inq-symbol-param a-item "tolerance") bekomme ich den Inhalt "tolerance" Mittels '(sd-am-inq-symbol-param a-item "") bekomme ich den Inhalt "" Aber raus kommen nur wenig Info´s, siehe Bild. Ich bräuchte die Formtoleranz der Ebenheit und die Größe des Toleranzfeldes in diesem Beispiel! Wie komme ich daran? Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MiBr Mitglied Konstrukteur
  
 Beiträge: 586 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 03. Sep. 2025 12:04 <-- editieren / zitieren --> Unities abgeben:         
Hallo nochmal, habe heute Versucht das hinzubekommen. Ich glaube mittlerweile, dass das eine Sackgasse ist und bin da auf eine andere Idee gekommen. Also wenn ich in Drafting das Form- und Lagesymbol mit dem Texteditor editiere, dann kommt da z.B. sowas bei raus: <#uxE1B8><Space><0><.><1><5><#uxE17C><A><#uxE17D> Und das würde ich sehr gut auswerten können <#uxE1B8> -> Rundlauf <0><.><1><5 -> 0.15 Toleranzfeld <#uxE17C> -> Rahmenteil Senkrechte <A> -> Bezug <#uxE17D> -> Rahmenend Mittels '(sd-get-annotator-reference :Object a-item)' hätte ich ja das Objekt, Richtig? Und nun müsste ich den Textinhalt abfragen: '(sd-execute-annotator-command :cmd <GET_TXT_INHALT> (sd-get-annotator-reference :Object a-item))' Problem: Ich kenne den Befehl für <GET_TXT_INHALT> nicht und im IKit steht bei dem Befehl leider: Return Value: no return value -always Oder könnte man, also nicht ich , ein Funktion schreiben die mir aus allen Objekte auf der Zeichnung eine Liste aus den Texten macht '(sd-execute-annotator-command :cmd ...) Geht sowas, grübel, ... ka. Also hänge ich auf allen Wegen  Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2355 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build19045.6282 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 03. Sep. 2025 18:43 <-- editieren / zitieren --> Unities abgeben:          Nur für MiBr
Zitat: Original erstellt von MiBr: Also wenn ich in Drafting das Form- und Lagesymbol mit dem Texteditor editiere, dann kommt da <#uxE1B8><Space><0><.><1><5><#uxE17C><A><#uxE17D>Mittels '(sd-get-annotator-reference :Object a-item)' hätte ich ja das Objekt, Richtig? '(sd-execute-annotator-command :cmd <GET_TXT_INHALT> (sd-get-annotator-reference :Object a-item))'
Ja, mit sd-get-annotator-reference bekommst du eine eindeutige Nummer in die Hand, mit der man auf ME10 Makro Ebene dann via 'select global pointer NNN' an das Element kommt. Dann folgen in der Regel andere INQ (xy) Zeilen auf ME10 Ebene... Gucke dir im DRAFTING mal die Info texte am SYMBOL PART(!) an . da steht was wie DOCU_SYMBOL_PARAMETER .. oder ähnlich (weiss-nimmer-ausm-kopp) Oder aber du speicherst die Zeichnung als UMKOMPRIMIERTES MI file (unter save drawing: optionen) ab. Dann haste ein schnödes ASCII file) .. im Notepad++ schnell noch alle Zeilen alphabetisch sortieren und ... man sieht es. Und stöber mehr in den Macros vom Annotation rum : $SDDIR Code: cd C:\Programs\PTC\cedm_pe90\Annotation\win findstr /I /N /C:"DEFINE " *.m > c:/temp/anno_macro_name_liste.txtfindstr /I /N /C:"DEFINE " *.m | findstr /I info | findstr /i part am_inq.m:569:DEFINE Docu_inq_part_infos am_inq.m:613:DEFINE Docu_inq_part_info_keyword am_inq.m:683:DEFINE Docu_check_part_for_info am_util.m:358:DEFINE Docu_check_for_elem_info_inside_part common_undelete.m:69:DEFINE Get_info_string_from_part {ANNO} mve_gen.m:4:DEFINE Gather_elem_to_part_by_info
Docu_inq_part_infos ist dein Freund, in Verbindung mit (sd-am-inq-unique-name the-symbol-sel-item)
Du muesstes ja sonst von verschiedensten Texten INNERHALB des Symbols den Inhalt erfragen: umständlich! ------------------------------------ MI .. ein schnödes ASCII file Und ich hatte mal einen Notepad++ Highlighter für MI files geschrieben... ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2355 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build19045.6282 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 03. Sep. 2025 19:20 <-- editieren / zitieren --> Unities abgeben:          Nur für MiBr
Die info texte (hier von 2 Toleranz und einem Oberflächen symbol) sehen so aus (pro symbol ein Text) Code: DOCU_PARAMETER: :FORM 2 :A1 "N9" :A2 "N8" :A3 "7" :A4 "" :A5 "" :B "precision-grind" :C "" :F "" :E "3" :D "X" :STANDARD :ASME :EXTRA-ROWS NIL :PNT 47.373375000000003,14.9975 :MULT_LANG_B NIL :MULT_LANG_A1 NIL :MULT_LANG_A2 NIL :MULT_LANG_A3 NIL :MULT_LANG_A4 NIL :MULT_LANG_A5 NIL :MULT_LANG_E NIL :MULT_LANG_F NIL :MULT_LANG_C NIL DOCU_PARAMETER: :MULTI_TIER NIL :TOLERANCE 174 :COMP NIL :SUPERFIX NIL :SUBFIX NIL :PREFIX NIL :POSTFIX NIL :SUPERFIX-ALIGNMENT "LEFT ALIGN" :SUBFIX-ALIGNMENT "LEFT ALIGN" :SUPERFIX-BOX NIL :SUBFIX-BOX NIL :SYMBOL-HEIGHT 7.0 :SYMBOL-WIDTH-FINAL 19.599999999999994 :PREFIX-WIDTH 0 :SUPERFIX-WIDTH 0 :NO-OF-SYMBOLS 1 :SUPER_INDEX NIL :SUB_INDEX NIL :PRE_INDEX NIL :POST_INDEX NIL DOCU_PARAMETER: :MULTI_TIER NIL :TOLERANCE 174 :COMP NIL :SUPERFIX NIL :SUBFIX NIL :PREFIX NIL :POSTFIX NIL :SUPERFIX-ALIGNMENT "LEFT ALIGN" :SUBFIX-ALIGNMENT "LEFT ALIGN" :SUPERFIX-BOX NIL :SUBFIX-BOX NIL :SYMBOL-HEIGHT 7.0 :SYMBOL-WIDTH-FINAL 34.824999999999996 :PREFIX-WIDTH 0 :SUPERFIX-WIDTH 0 :NO-OF-SYMBOLS 1 :SUPER_INDEX NIL :SUB_INDEX NIL :PRE_INDEX NIL :POST_INDEX NIL
Davon könnte man den Anfang abschneiden und den Rest (ab pos 16) als liste mit sd-read-from-string evaluieren. Einerfacher ist aber: Code: (sd-execute-annotator-function :FNC "Docu_inq_sym_parameters '~11'")
wobei ~11 hier eben der genannte (sd-am-inq-unique-name the-symbol-sel-item) name ist. Damit bekommst du direkt eine hybsche Property liste zurück. ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2355 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build19045.6282 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 03. Sep. 2025 19:51 <-- editieren / zitieren --> Unities abgeben:          Nur für MiBr
Kompletter dialog wäre gut gewesen, musste erst basteln: Code: (in-package :cadde-mibr) (use-package :Oli)(sd-defdialog 'am_inq_symbols :toolbox-button :force :OK-action '(let (symbliste names) (setf symbliste (sd-call-cmds (get_selection :focus_type *sd-anno-symbol-seltype* :select :all_at_top :by_drawing_docu_rest))) (dolist (a-item symbliste) (pprint "==================") ; (sd-am-inq-name a-item)) (pprint (setq names (sd-am-inq-symbol-param-names a-item))) (dolist (a-name names) (pprint (sd-am-inq-symbol-param a-item a-name)) )) ;;end dolist*2 ) ;;end let ) ;; end defdialog
Für Datum, Surface und Welding Symbole funktioniert das wunderbar. Tolerance Symbols sind anders (weil sie auf ME10 font basieren) .. und vielleicht funktioniert das bei denen auch nicht mehr seit man dort 'Multitier' / Mehrzeiligkeit eingebaut hat. Korrektur: das war schon in der PE 30.00 vom 17-Jun-2010 so. Also vermutlich wohl schon immer. Hat keiner getestet. Der Parameter "" mit dem Value "." ist übrigens der Referenzepunkt vom Symbol, um den es z.b. rotiert oder sakliert wird. Aber das ist ein unsichtbar gemachter Text als Platzhalter. Als Parameter taucht er dann wieder auf. ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2355 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build19045.6282 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 03. Sep. 2025 19:57 <-- editieren / zitieren --> Unities abgeben:          Nur für MiBr
|
MiBr Mitglied Konstrukteur
  
 Beiträge: 586 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 04. Sep. 2025 11:37 <-- editieren / zitieren --> Unities abgeben:         
Hallo Wolfgang, ich habe es mal über den Weg mit dem unkompremierten Mi-File versucht. In diesem gibt es es Einträge die z.B. so aussehen -> . Aber dahinter verbergen sich die Angaben zu den Symbolen. Jetzt habe ich eine kleine Lisp geschrieben die Zeile für Zeile den ersten String vergleicht und falls dieser übereinstimmt kommt die Zeile mittels pprint in die Konsole. Leider funzt das bei den Sonderzeichnen nicht. Habe das mit verschiedenen :test #'string= #'equal #'char= versucht es klappt nicht! Hast du dazu eine Idee? Achja, in der Lisp findet man am Ende ein paar Symbole und wenn man die als Text in Modeling einfügt erhalt man auch das schöne Symbol. Habe gerade gemerkt, dass mit 'with-open-file' sich die Sonderzeichen noch mal ändern. Dann scheint das auch ein Sackgasse zu sein! Gruß Michael
[Diese Nachricht wurde von MiBr am 04. Sep. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2355 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build19045.6282 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 04. Sep. 2025 22:23 <-- editieren / zitieren --> Unities abgeben:          Nur für MiBr
Hallo Michael, 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! Code: 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 Code: (char "ABC" 0) ==> der erste character im String (char "ABC" 1) ==> der zweite 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 eine weitere Funktion geschickt. Da bekommst du auf LSP direkt nen string bzw. derer nmehrere in die Hand. Die kannst du dann mit (char-code (char firstline 1)) == 42? untersuchen.
Zitat: Original erstellt von MiBr: Jetzt habe ich eine kleine Lisp geschrieben die Zeile für Zeile den ersten String vergleicht und falls dieser übereinstimmt kommt die Zeile mittels pprint in die Konsole.Habe gerade gemerkt, dass mit 'with-open-file' sich die Sonderzeichen noch mal ändern. Dann scheint das auch ein Sackgasse zu sein!
a) ich habe eine überarbeitet und kommentierte Version angehängt. b) Ja das ist die Kodierung oder eben ":external-format" wo man sich auf die Try-and-error Methoden von C-Lisp / Modeling verlassen kann, oder es eben selber vorgibt. ------------------ ● Firefox ESR ● Java Forum Stuttgart JUGS ● OSD Hilfeseite (de) / help page (en) ● NotePad++ ● BuFDi ● Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
     
 Beiträge: 2355 Registriert: 3.20. ● PE60+80+90@home ● W10 Pro Build19045.6282 ● Drafting V17~V20.7@job ● Modeling V17~V20.7@job ● Windchill 12.1.2.6@job ● UWGM Client 13.1.0.1@job ● Taschenrechner ● brain 6.3 ● Stift+Zettel V8.42
|
erstellt am: 04. Sep. 2025 22:46 <-- editieren / zitieren --> Unities abgeben:          Nur für MiBr
|
MiBr Mitglied Konstrukteur
  
 Beiträge: 586 Registriert: 30.06.2015 HP Z440 Workstation 64GB Modeling 20.1.2.0 (x64) Drafting 20.1.2.0 (64x) klas. UI Modell Manager 20.1.2.0 Ansys Workbeanch 22R2 Mechanicail Pro + FKM Inside
|
erstellt am: 18. Sep. 2025 15:07 <-- editieren / zitieren --> Unities abgeben:         
So, der Wolfgang und ich haben im Hintergrund noch an der Lisp gearbeitet! Und jetzt bin ich damit soweit gekommen, das man F.u.L. Toleranzen und Bemassung mit Passungen aus einer Zeichnung lesen kann. Das ganze wird dann in eine CSV-Datei auf C:\temp geschrieben. Evtl. kann das ja jemand von euch auch gebrauchen, dann Viel Spaß damit! Ansonsten Besten Dank für die Unterstützung! Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |