| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Creo | | | | T-Day München am 16.10.2024, eine Veranstaltung am 16.10.2024
|
Autor
|
Thema: Änderungsindex Makro (2587 / mal gelesen)
|
Kitzivofelbra Mitglied Konstrukteur
Beiträge: 13 Registriert: 15.11.2017 ME 10 Version 17.0 Pelook 1
|
erstellt am: 28. Nov. 2017 12:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin auf der Suche nach einem Makro für unseren Änderungsindex. Hier mal mein Entwurf: define Index LOCAL Ds LOCAL P100 LOCAL P101 LOCAL Text READ PNT 'Untere linke Ecke anwählen' P100 READ STRING DEFAULT 'a Zeichn. aktualisiert 28.11.17 Kit' Text INQ_ENV 6 LET Ds (INQ 4) LET P101 (P100+PNT_XY (4/Ds) (2/Ds)) COLOR YELLOW TEXT_ADJUST 4 TEXT_SIZE 2 TEXT_RATIO 0.8 TEXT Text P101 END END_DEFINE Nun möchte ich diesen Text noch jeweils separat abfragen. D. h. a,b,c.. dann den Text eingeben, das Datum wenn möglich automatisch beziehen und am Ende das Kürzel des Konstrukteurs. Außerdem nach dem Eingeben und Positionieren der Zeile, sollte das Makro den Buchstaben der Änderung mit dem Mauszeiger in der Zeichnung positionieren. Hier ein ähnliches Makro, welches ich hier im Forum gefunden hab: DEFINE Revision LOCAL Teilename LOCAL Teilenummer LOCAL P0 LOCAL P1 LOCAL P2 LOCAL P3 LOCAL nr LOCAL Rev_nr_txt LOCAL LA LOCAL LF LET Teilename "Revision" EDIT_PART TOP CREATE_LTAB 'TMPLTAB' PARTS_LIST TREE LTAB 'TMPLTAB' LET I 1 LOOP EXIT_IF (I > (LTAB_ROWS 'TMPLTAB')) LET Z (READ_LTAB 'TMPLTAB' I 1) LET Kl1 (POS Z ' [~') LET Tmpstr (SUBSTR Z (Kl1+2) (LEN Z - Kl1 - 1)) LET Kl2 (POS Tmpstr ']') LET Name (TRIM (SUBSTR Z 1 (Kl1 - 1))) { Teilename } LET Nr (SUBSTR Tmpstr 1 (Kl2-1)) { Teilenummer } EXIT_IF (Name = Teilename) LET I (I+1) END_LOOP IF (Name = Teilename) EDIT_PART Nr ELSE INIT_PART Teilename PART_DRW_SCALE Teilename 1 END_IF READ NUMBER 'Revisionsnummer ?' nr LET Rev_nr_txt (STR(nr)) INQ_ENV 3 LET LF (INQ 201) LET LA (INQ 301) LOOP READ PNT 'Platzierungspunkt angeben oder END ?' P0 LET P1 (PNT_XY ((X_OF P0)-4) ((Y_OF P0)-(4*TAN(30)))) LET P2 (PNT_XY (X_OF P0) ((Y_OF P0)+(4/COS(30)))) LET P3 (PNT_XY ((X_OF P0)+4) ((Y_OF P0)-(4*TAN(30)))) COLOR YELLOW LINETYPE SOLID LINE POLYGON P1 P2 P3 P1 END TEXT_ADJUST 5 TEXT_RATIO 1 TEXT_SIZE 2.5 COLOR YELLOW TEXT Rev_nr_txt P0 END END_LOOP COLOR LF LINETYPE LA END_DEFINE Dies ist mein erstes Makro, welches ich versucht habe zu schreiben/abzuleiten. Seid also bitte gnädig mit mir
Kann mir hier jemand weiterhelfen? Mit freundlichen Grüßen, Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roman Mitglied
Beiträge: 704 Registriert: 16.01.2001
|
erstellt am: 28. Nov. 2017 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Der Befehl Code: date
ergibt einen String ergibt Datum und Uhrzeit in folgendem Format: '26-Oct-2003 10:26:58' Da du die Uhrzeit nicht benötigst must du den String noch bearbeiten. Dazu musst du wahrscheinlich die Funktion Code: substr
nutzen Also etwa so ACHTUNG DAS IST KEINE FERTIGE LÖSUNG!!!: Code:
define abfrage LOCAL tfindex LOCAL tfgrund LOCAL tfdatum LOCAL teildatum READ STRING DEFAULT 'a' tfindex READ STRING DEFAULT 'Grund' tfgrund let tfdatum (date) let teildatum (substr tfdatum 1 12) DISPLAY teildatum end_define
Wie du siehst ist das extrahieren des gültigen Datums nicht damit fertig gemacht. Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
riesi Mitglied CAD-Admin
Beiträge: 1087 Registriert: 06.05.2002 SolidWorks 2020-Sp5 OneSpaceDrafting V20.6 MS-Windows 10 Prof. 64Bit Core i7-6700 @ 3.40 GHz 32,00 GB RAM ATI WX 5100
|
erstellt am: 28. Nov. 2017 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Wenn z.B. das Kürzel des Konstrukteurs gleich der Windows-Anmeldung ist, könntest Du die Umgebungsvariable %USERNAME% abfragen und einsetzen. Z.B. so: LET kuerzel GETENV("USERNAME") Die Texte würde ich alle schon im Blatt eintragen und mit eindeutigen Info-Variablen belegen, worüber die Texte identifiziert, abgefragt und geändert werden kann. Gruß, Klaus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roman Mitglied
Beiträge: 704 Registriert: 16.01.2001
|
erstellt am: 28. Nov. 2017 17:25 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Ja, das mit den Infos ist die allerbeste Lösung. Bei dem Ansatz von Kitzi? würde ich dann sowas machen: Code:
define abfrage LOCAL tfindex LOCAL tfgrund LOCAL tfdatum LOCAL teildatum LOCAL kuerzel LOCAL indextext READ STRING DEFAULT 'a' tfindex READ STRING DEFAULT 'Blablabla' tfgrund let tfdatum (date) let teildatum (substr tfdatum 1 11) LET kuerzel (getenv('USERNAME')) { 'a Zeichn. aktualisiert 28.11.17 Kit' } { Zusammenbauen } LET indextext (tfindex + " " + tfgrund + " " + teildatum + " " + kuerzel) DISPLAY indextext end_define
Roman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ME10-Faultier Mitglied
Beiträge: 25 Registriert: 30.03.2015 Direct Drafting 18.1
|
erstellt am: 30. Nov. 2017 22:17 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Hier mal mein Makro der Umwandlung des englischen Datumsformat in das deutsche Format: DEFINE Deutsches_Datum_erstellen {v============================================================================================================= } { - erstellt aus dem englischen Datum (10-May-05) ein deutsches Datum (10.Mai.05) } { - Aufruf: Deutsches_Datum_erstellen 'Datum' } { darin: 'Datum' - das Datum, welches umgewandelt werden soll. Wird ein Leerstring ('') übergeben, } { dann wird das aktuelle Datum verwendet. } { - verwendet folgende Variable: } { - uebergabetext - enthält das deutsche Datum } { ============================================================================================================= } PARAMETER deu_datum IF ( ( LEN deu_datum ) = 0 ) LET uebergabetext ( SUBSTR DATE 1 11 ) ELSE LET uebergabetext deu_datum END_IF IF ( POS uebergabetext 'Mar' ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'a' ) 'ä' 't' ELSE_IF ( POS uebergabetext 'May' ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'y' ) 'i' 't' ELSE_IF ( POS uebergabetext 'Oct' ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'c' ) 'k' 't' ELSE_IF ( POS uebergabetext 'Dec' ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'c' ) 'z' 't' END_IF Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext '-' ) '.' 't' Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext '-' ) '.' 't' END_DEFINE Die Zeile "LET uebergabetext ( SUBSTR DATE 1 11 )" enthält dann den schon weiter vorne angeführten Befehl zur Extrahierung des Datums aus dem ME10-Datums-String, in welchem die Uhrzeit noch enthalten ist. Die Funktion Buchstabe_in_Wort_tauschen findest Du hier: Datei drucken mit Übergabe des Dateinamens Und hier mein Makro für die automatische Indexänderung: DEFINE Index_aendern { ============================================================================================================= } { - ändert im Schriftfeld den Zeichnungsindex und fügt unter "Änderungen" im Schriftfeld den neuen Zeichnungs- } { index mit dem Namen des Bearbeiters und des aktuellen Datums ein } { - verwendet folgende Variablen: } { - index_n - der Zeichnungsindex, der um eins erhöht wird } { - Naam_tekenaar - der Name des Planers, der verwendet wird } { - alt_part_n - das Teil, in dem man sich beim Aufruf des Macros befindet } { - alt_win_u - der Punkt links unten des Ausgangs-Fensterausschnitts } { - alt_win_o - der Punkt rechts oben des Ausgangs-Fensterausschnitts } { - sf_faktor - der vorher errechnete Vergrößerungsfaktor } { - uebergabetext - enthält das deutsche Datum nach der Umwandlung aus dem englischen Datum } { ============================================================================================================= } LOCAL P1W LOCAL P2W LOCAL P3W LOCAL P4W LOCAL abst Fenster_feststellen Teil_feststellen Index_feststellen IF ( index_n <> 'k.SF' ) EDIT_PART 'Label' IF ( index_n <> 'z' ) LET P1W ( Y_OF teil_u + ( 75.76 * sf_faktor ) ) LET P2W ( X_OF teil_u + ( 132 * sf_faktor ) ) LET P3W ( X_OF teil_u + ( 156 * sf_faktor ) ) LET P4W ( X_OF teil_u + ( 164 * sf_faktor ) ) WINDOW (PNT_XY ((X_OF teil_u)+(130*sf_faktor)) (P1W-(30.75*sf_faktor))) (PNT_XY (X_OF teil_o) (P1W+(1.8*sf_faktor))) IF ( index_n = '-' ) LET index_n 'a' LET abst ( -20 * sf_faktor ) ELSE_IF ( index_n = 'a' ) LET index_n 'b' LET abst ( -25 * sf_faktor ) ELSE_IF ( index_n = 'b' ) LET index_n 'c' LET abst ( -30 * sf_faktor ) ELSE_IF ( index_n < 'z' ) LET index_n ( CHR ( NUM index_n + 1 ) ) LET abst ( -20 * sf_faktor ) DELETE ( PNT_XY P2W ( P1W + abst ) ) DELETE ( PNT_XY P3W ( P1W + abst ) ) DELETE ( PNT_XY P4W ( P1W + abst ) ) END LET abst ( -25 * sf_faktor ) MODIFY ( PNT_XY P2W ( P1W + abst ) ) MOVE DEL_OLD VERTICAL ( 5 * sf_faktor ) MODIFY ( PNT_XY P3W ( P1W + abst ) ) MOVE DEL_OLD VERTICAL ( 5 * sf_faktor ) MODIFY ( PNT_XY P4W ( P1W + abst ) ) MOVE DEL_OLD VERTICAL ( 5 * sf_faktor ) LET abst ( -30 * sf_faktor ) MODIFY ( PNT_XY P2W ( P1W + abst ) ) MOVE DEL_OLD VERTICAL ( 5 * sf_faktor ) MODIFY ( PNT_XY P3W ( P1W + abst ) ) MOVE DEL_OLD VERTICAL ( 5 * sf_faktor ) MODIFY ( PNT_XY P4W ( P1W + abst ) ) MOVE DEL_OLD VERTICAL ( 5 * sf_faktor ) END_IF MODIFY ( PNT_XY P2W P1W ) MOVE COPY VERTICAL abst MODIFY ( PNT_XY P3W P1W ) MOVE COPY VERTICAL abst MODIFY ( PNT_XY P4W P1W ) MOVE COPY VERTICAL abst CHANGE_TEXT Naam_tekenaar ( PNT_XY P3W ( P1W + abst ) ) CHANGE_COLOR WHITE ( PNT_XY P2W ( P1W + abst ) ) CHANGE_TEXT ( index_n + ') Überarbeitet' ) ( PNT_XY P2W ( P1W + abst ) ) IF ( ( POS DATE ':' ) > 0 ) Deutsches_Datum_erstellen '' CHANGE_TEXT uebergabetext ( PNT_XY P4W ( P1W + abst ) ) ELSE EDIT_TEXT ( PNT_XY P4W ( P1W + abst ) ) END_IF LET P1W ( X_OF teil_u + ( 157.5 * sf_faktor ) ) LET P2W ( Y_OF teil_u + ( 14.26 * sf_faktor ) ) WINDOW ( PNT_XY ( ( X_OF teil_u ) + ( 130 * sf_faktor ) ) Y_OF teil_u ) teil_o Plannummer_erstellen CHANGE_TEXT Project_number ( PNT_XY P1W P2W ) Textlaenge_anpassen ( PNT_XY P1W P2W ) ( 51 * sf_faktor ) 12 Projektnummer_aus_Zeichnung 'prnum' IF ( ( index_n = '-' ) OR ( index_n = 'k.SF' ) ) Protokolldatei_eintragen ( 'Plan bearbeitet : ' + uebergabetext + pfad_trenn_z + ( LWC Tekening_nummer ) ) ELSE Protokolldatei_eintragen ('Plan bearbeitet : ' + uebergabetext + pfad_trenn_z + (LWC Tekening_nummer) + index_n) END_IF ELSE DISPLAY 'Maximaler Index "z" ist erreicht!' END_IF ELSE DISPLAY 'Bitte erst ein Schriftfeld einfügen!' END_IF Teil_herstellen Fenster_herstellen END_DEFINE Bei uns werden die Änderungen im Schriftfeld hinterlegt, welches das Teil "Label" als Symbol ist. damit sind die Punkte, an denen die Texte eingefügt werden müssen, immer fest definiert und können durch feste Zahlen definiert werden. Zuerst stelle ich fest, in welchem Teil ich mich befinde und welcher Zeichnungsausschnitt auf dem Bildschirm angezeigt wird. Das wird abgespeichert und am Ende wieder abgerufen, damit man an der gleichen stelle weiter arbeiten kann. Dann wird der aktuelle Index aus dem Schriftfeld eingelesen und die Punkte berechnet, die für die Texteingabe wichtig sind. Da bei uns nur 3 Zeilen für Änderungen vorrätig sind, wird, falls schon was in allen 3 Zeilen eingetragen ist, die erste Zeile gelöscht und die beiden anderen werden jeweils um eine Zeile nach oben verschoben. Unten wird dann der aktuelle Index mit Datum und Zeichnerkürzel eingetragen. Falls noch nichts in allen 3 Zeilen iengetragen ist (als entweder nur eine, nur zwei oder noch keine Zeile ausgefüllt, was über den Index errechnet wird) wird in die letzte freie Zeile der aktuelle Index eingetragen. Allerdings wird bei mir immer nur als Änderung nach dem Index "Überarbeitet" eingetragen. Falls ich das spezifieren möchte, dann mache ich das hinterher von Hand. Aber in 95 % der fälle bleibt das "Überarbeitet" da drin stehen. Ich bin schließlich faul. Zitat: Original erstellt von Roman: Ja, das mit den Infos ist die allerbeste Lösung. Bei dem Ansatz von Kitzi? würde ich dann sowas machen:
Code:
LET indextext (tfindex + " " + tfgrund + " " + teildatum + " " + kuerzel)
Da bei uns im Schriftfeld eine Schriftart mit unterschiedlich breiten Zeichen verwendet wird, würde ich 4 einzelne Texte statt einem verwenden. Gruß ME10-Faultier [Diese Nachricht wurde von ME10-Faultier am 30. Nov. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
der_Wolfgang Moderator Tastenhauer
Beiträge: 2219 Registriert: 3.20. ● PE20+60+80@home ● W10 Pro Build19045.4651 ● Drafting V17~V20.7 ● Modeling V17~V20.7 ● Windchill 12.1.2.6 ● UWGM Client 13.0.1.0
|
erstellt am: 01. Dez. 2017 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
|
ME10-Faultier Mitglied
Beiträge: 25 Registriert: 30.03.2015 Direct Drafting 18.1
|
erstellt am: 01. Dez. 2017 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Ja, die Kürzel für den Code habe ich gesehen. Aber ich dachte, daß durch die Leerzeile vor und nach dem Makro klar ersichtlich ist, was das Makro und was der Text ist. Und die Mehrklicks für das Einfügen der Code-Kürzel wollte ich mir sparen, ich bin ja schließlich ein Faultier. Wenn es aber hier Vorschrift ist, das man die verwendet, dann entschuldige ich mich natürlich für das Nichtverwenden und gelobe Besserung. Das war mir zumindest bisher noch nicht bekannt. Ich sehe dann nur das Problem, daß meine Beschreibung zu breit sein könnte, da die im alten ME10 für Unix auf den Bildschirm abgestimmt war und dort genau den Bildschirm ausgefüllt hat. Gruß ME10-Faultier Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ME10-Faultier Mitglied
Beiträge: 25 Registriert: 30.03.2015 Direct Drafting 18.1
|
erstellt am: 01. Dez. 2017 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Hier mal im Anhang dann unser Schriftfeld und wie das bei mir dann aussieht, wenn der Index erhöht wird. Dazu noch einige meiner SUBs, die ich im Makro verwende: Code: DEFINE Fenster_feststellen {v============================================================================================================= } { - speichert die Koordinaten des aktuellen Fensterausschnitts } { - verwendet folgende Variablen: } { - alt_win_u - der linke untere Punkt des aktuellen Fensterausschnitts } { - alt_win_o - der rechte obere Punkt des aktuellen Fensterausschnitts } { ============================================================================================================= } INQ_ENV 2 LET alt_win_u ( INQ(101) ) LET alt_win_o ( INQ(102) ) END_DEFINEDEFINE Fenster_herstellen {v============================================================================================================= } { - stellt den Fensterausschnitt mit den Koordinaten alt_win_u und alt_win_o wieder her } { - verwendet folgende Variablen: } { - alt_win_u - der linke untere Punkt des Fensterausschnitts } { - alt_win_o - der rechte obere Punkt des Fensterausschnitts } { ============================================================================================================= } WINDOW alt_win_u alt_win_o END_DEFINE DEFINE Teil_feststellen {v============================================================================================================= } { - speichert die eindeutige Nummer des aktuellen Teiles in der Variablen alt_part_n } { - verwendet folgende Variable: } { - alt_part_n - das Teil, in dem man sich beim Aufruf des Macros befindet } { ============================================================================================================= } INQ_ENV 7 LET alt_part_n ( '~' + INQ(302) ) END_DEFINE DEFINE Teil_herstellen {v============================================================================================================= } { - editiert das Teil, dessen Nummer in alt_part_n gespeichert ist } { - verwendet folgende Variable: } { - alt_part_n - das Teil, welches editiert werden soll } { ============================================================================================================= } EDIT_PART alt_part_n END_DEFINE DEFINE Index_erkennen {v============================================================================================================= } { - berechnet die Projektnummer, die Plannummer und den Zeichnungsindex aus der Zeichnungsnummer } { - verwendet folgende Variablen: } { - Project_number - die Zeichnungsnummer, aus der die anderen Nummern berechnet werden } { - Project_nummer - die Projektnummer, die berechnet wird } { - Tekening_nummer- die Plannummer, die berechnet wird } { - index_n - der Zeichnungsindex, der berechnet wird } { ============================================================================================================= } IF ( LEN Project_number > 0 ) LET index_n ( LWC ( SUBSTR Project_number LEN Project_number 1 ) ) IF ( ( NUM index_n < 97 ) OR ( NUM index_n > 122 ) ) LET index_n '-' ELSE_IF (((NUM (SUBSTR Project_number ((LEN Project_number)-1) 1))<>32) AND (((NUM (SUBSTR Project_number ((LEN Project_number)-1) 1))<48) OR ((NUM (SUBSTR Project_number ((LEN Project_number)-1) 1))>57))) LET index_n '-' END_IF IF ( index_n <> '-' ) IF ( ( SUBSTR Project_number ( LEN Project_number - 1 ) 1 ) = ' ' ) LET Project_number ( SUBSTR Project_number 1 ( LEN Project_number - 2 ) ) ELSE LET Project_number ( SUBSTR Project_number 1 ( LEN Project_number - 1 ) ) END_IF END_IF IF ( POS Project_number '-' > 0 ) LET Project_nummer ( SUBSTR Project_number 1 ( POS Project_number '-' - 1 ) ) LET Tekening_nummer (SUBSTR Project_number (POS Project_number '-' + 1) (LEN Project_number - (POS Project_number '-'))) ELSE LET Project_nummer Project_number LET Tekening_nummer '' END_IF ELSE LET Project_nummer '' LET Tekening_nummer '' END_IF END_DEFINE DEFINE Index_feststellen {v============================================================================================================= } { - liest vom Schriftfeld die Zeichnungsnummer und speichert sie in der Variablen Project_number, danach werden } { mit der Funktion Index_erkennen die Projektnummer, die Plannummer und der Zeichnungsindex berechnet } { - falls das Schriftfeld nicht vorhanden ist, wird index_n auf 'k.SF' gesetzt } { - falls im Schriftfeld keine Zeichnungsnummer vorhanden ist, werden Project_nummer und Tekening_nummer } { auf '' gesetzt } { - verwendet folgende Variablen: } { - Project_number - die Zeichnungsnummer, aus der die anderen Nummern berechnet werden } { - Project_nummer - die Projektnummer, die berechnet wird } { - Tekening_nummer- die Plannummer, die berechnet wird } { - index_n - der Zeichnungsindex, der berechnet wird } { - sf_faktor - der errechnete Vergrößerungsfaktor des Schriftfeldes. Falls kein Schriftfeld } { vorhanden ist, wird sf_faktor auf 0 gesetzt } { - teil_o - der rechte obere Punkt des Schriftfeldes } { - teil_u - der linke untere Punkt des Schriftfeldes } { ============================================================================================================= } Faktor_berechnen 'Label' 'H' 79.26 IF ( sf_faktor <> 0 ) WINDOW ( PNT_XY ( ( X_OF teil_u ) + ( 130 * sf_faktor ) ) Y_OF teil_u ) teil_o INQ_ELEM ( PNT_XY ( ( X_OF teil_u ) + ( 157.5 * sf_faktor ) ) ( ( Y_OF teil_u ) + ( 14.26 * sf_faktor ) ) ) LET Project_number ( INQ(902) ) Index_erkennen END_PART ELSE LET index_n 'k.SF' END_IF END_DEFINE DEFINE Faktor_berechnen {v============================================================================================================= } { - berechnet den Vergrößerungsfaktor eines Teils durch die übermittelte Vergleichslänge } { - Aufruf: Faktor_berechnen 'Teilname' ( 'L' oder 'H' ) 100 } { darin: 'Teilname' - der Name des Teils, dessen Vergrößerungsfaktor berechnet werden soll } { 'L' oder 'H' - Angabe, ob der Vergrößerungsfaktor aus der Höhe ('L') oder der Länge ('L') be- } { rechnet werden soll } { 100 - die Höhe oder die Länge, die als Vergleich benutzt wird } { - verwendet folgende Variablen: } { - sf_faktor - der errechnete Vergrößerungsfaktor. Falls das Teil nicht vorhanden ist, wird } { sf_faktor auf 0 gesetzt } { - teil_o - der rechte obere Punkt des Teiles } { - teil_u - der linke untere Punkt des Teiles } { ============================================================================================================= } PARAMETER name_teil PARAMETER hoehe_oder_laenge PARAMETER laenge_teil TRAP_ERROR EDIT_PART name_teil IF ( CHECK_ERROR = 0 ) INQ_ENV 7 LET teil_u ( INQ(101) ) LET teil_o ( INQ(102) ) IF ( ( UPC hoehe_oder_laenge ) = 'L' ) IF ( ( X_OF teil_o - X_OF teil_u ) <> laenge_teil ) LET sf_faktor ( ( X_OF teil_o - X_OF teil_u ) / laenge_teil ) ELSE LET sf_faktor 1 END_IF ELSE_IF ( ( UPC hoehe_oder_laenge ) = 'H' ) IF ( ( Y_OF teil_o - Y_OF teil_u ) <> laenge_teil ) LET sf_faktor ( ( Y_OF teil_o - Y_OF teil_u ) / laenge_teil ) ELSE LET sf_faktor 1 END_IF END_IF ELSE LET sf_faktor 0 END_IF END_DEFINE DEFINE Plannummer_erstellen {v============================================================================================================= } { - erstellt die Zeichnungsnummer aus der Projektnummer, der Plannummer und dem Zeichnungsindex } { - verwendet folgende Variablen: } { - Project_number - die Zeichnungsnummer, die aus den anderen Nummern berechnet wird } { - Project_nummer - die Projektnummer, die verwendet wird } { - Tekening_nummer- die Plannummer, die verwendet wird } { - index_n - der Zeichnungsindex, der verwendet wird } { ============================================================================================================= } IF ( Tekening_nummer <> '' ) LET Project_number ( Project_nummer + '-' + Tekening_nummer ) ELSE LET Project_number Project_nummer END_IF IF ( ( index_n <> '-' ) AND ( index_n <> 'k.SF' ) ) LET Project_number ( Project_number + ' ' + index_n ) END_IF END_DEFINE DEFINE Textlaenge_anpassen {v============================================================================================================= } { - paßt einen Text an eine vorgegebene Länge an (nur wenn der Text länger als die vorgegebene Länge ist) oder } { markiert Anfang und Ende eines Textes } { - Aufruf: Textlaenge_anpassen P1 100 50 } { darin: P1 - der Bezugspunkt des anzupassenden Textes } { 100 - die neue maximale Länge des Textes } { 50 - die Anzahl der Buchstaben, ab deren Länge der Text angepaßt wird (wenn beide } { Zahlen 0 sind, wird am Anfang und Ende des Textes eine Hilfslinie eingezeichnet) } { - erstellt das Teil 'test' neu und löscht es dann wieder. Dieses Teil darf nicht vorhanden sein !!! } { - verwendet folgende Variable: } { - sf_faktor - wird zur Berechnung der Textlänge benutzt } { ============================================================================================================= } PARAMETER wp1 PARAMETER text_laenge_neu PARAMETER text_laenge_min LOCAL wp2 LOCAL wp3 IF ( ( text_laenge_neu = 0 ) AND ( text_laenge_min = 0 ) ) LET uebergabetext 'Wort' Daten_eingeben 'Antippen' LET wp1 uebergabetext ELSE CHANGE_TEXT_RATIO 1 wp1 END_IF INQ_ELEM wp1 IF ( LEN ( INQ(902) ) > text_laenge_min ) CREATE_SUBPART 'test' wp1 EDIT_PART 'test' INQ_ENV 7 LET wp2 ( INQ(103) ) LET wp3 ( INQ(104) ) IF ( ( text_laenge_neu = 0 ) AND ( text_laenge_min = 0 ) ) C_LINE VERTICAL wp2 C_LINE VERTICAL wp3 END ELSE IF ( ( X_OF wp3 ) - ( X_OF wp2 ) > text_laenge_neu ) CHANGE_TEXT_RATIO ( INT ( ( text_laenge_neu * 100 ) / ( ( X_OF wp3 ) - ( X_OF wp2 ) ) ) / 100 ) ALL END END_IF END_IF END_PART SMASH_SUBPART KEEP_DISPLAY 'test' END END_IF END_DEFINE
Die Funktion Projektnummer_aus_Zeichnung erstellt mit der Option "prnum" aus der Projektnummer den Verzeichnispfad, unter welchem das Projekt auf der Festplatte gespeichert ist und welcher dann für den Eintrag in meine Protokolldatei gebraucht wird. Für die Indexerstellung sind diese Funktionen aber nicht notwendig, weswegen ich sie hier nicht auch noch reinquetsche. Sie dienen nur für meine Abrechnung, da ich nach einigen Tagen nicht mehr weiß, wie lange ich welches Projekt bearbeitet habe und nicht immer gleich meine Teiten aufschreibe. Gruß Faultier Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roman Mitglied
Beiträge: 704 Registriert: 16.01.2001
|
erstellt am: 01. Dez. 2017 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Klasse-Code "Faultier" (sorry der musste sein ). Da werde ich bestimmt was von klauen Ich gebe nur zu Bedenken (ist natürlich immer eine subjektive Entscheidung), daß man sich so einen manuellen Aufwand ersparen kann, wenn man eine Zeichnungsverwaltung einsetzt (muss ja nicht unbedingt das monströse Windchill sein). Roman
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ME10-Faultier Mitglied
Beiträge: 25 Registriert: 30.03.2015 Direct Drafting 18.1
|
erstellt am: 01. Dez. 2017 16:00 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Immer zu, darfst Dich ruhig davon bedienen. Zum Aufwand: die Makros sind ja alle entstanden, weil ich so faul bin. Wenn ich 3x hintereinander das Gleiche machen muß, dann fange ich an zu überlegen, ob ich das nicht an meinen Rechenknecht delegieren kann. Und das für mich Nervigste sind die Tastatureingaben, weil man da jedes Mal den Stift zur Seite legen muß, die Eingabe machen und dann den Stift wieder nehmen muß. Und da das beim manuellen Einfügen des Änderungsindex zwangsläufig geschieht, war es nur eine Frage der Zeit, bis ich das bei mir geändert habe, da ich es liebe, zu programmieren. Jetzt ist das nur noch ein Klick im Menü und alles passiert automatisch. Und da ich meinen Standardtext ("Überarbeitet") benutze, brauche ich normalerweise da auch nichts mehr ändern, da ich nicht in der Konstruktion, sondern in der Schalungsplanung das Programm benutze. Da interessiert nicht so sehr, was geändert wurde, sondern hauptsächlich, ob es eine neue Materialliste gibt. Eine Zeichnungsverwaltung benutzen wir nicht, da weiß ich also nicht, was es da für Vorteile gibt bzw. was die Programme alles können. Falls ich mit meinen Makros auch noch anderen die Arbeit erleichtern kann, dann immer fragen (hier z.B. war ja schon mal mein Makro zum automatischen Speichern der aktuellen Zeichnung im richtigen Verzeichnis). Gruß Faultier [Diese Nachricht wurde von ME10-Faultier am 01. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ME10-Faultier Mitglied
Beiträge: 25 Registriert: 30.03.2015 Direct Drafting 18.1
|
erstellt am: 05. Dez. 2017 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für Kitzivofelbra
Ich sehe gerade, daß auch meine Funktion Daten_eingeben hier drin ist. Hier noch deren Code: Code: DEFINE Daten_eingeben { ============================================================================================================= } { - weist verschiedenen Variablen Daten zu, die vom Benutzer eingegen werden } { - Aufruf: Daten_eingeben (3750, 2500, 1700, 1500, 1150, 780, 'Alles', 'Antippen' } { 'ASG A2', 'ASG A4', 'ASG A6', 'ASG 250', 'ASG 500', 'ASG 1000', 'ASG 1250', } { 'ASG 5000', 'ASG Sk', 'ASG Sl', 'ASG SH', 'ASG AK', 'Bez_Punkt 1', } { 'Bezugspunkt Text', 'GH', 'Hoehe', 'Hoehenkote', 'HV St', 'HV Maxi', 'HV AK' } { 'HV 100', 'HV 125', 'HV Sk', 'HV Sl', 'HV SH', 'HV-Traegerlaenge', 'Ja_Nein' } { 'KH', 'Länge', 'R-H', 'R-V', 'Schnittpfeil', 'SF 1', 'ST', 'JT', 'Stuetze', } { 'Text', 'Textpfeil' oder 'Zahl') } { darin: 1700, 1500, 1150 - die Anzahl der HV-NT 1700, 1500 oder 1150 wird eingegeben } { 3750, 2500, 780 - die Anzahl der TITAN 120-3750, 120-2500 bzw. 120-780 wird eingegeben } { 'Alles' - es wird der auf der Zeichnung angetippte Punkt oder die Eingabe oder } { der angetippte Befehl an uebergabetext zurückgegeben. Vor Aufruf von } { Daten_eingeben 'Alles' muß in uebergabetext ein Text angegeben werden, } { der bei der Eingabe angezeigt werden soll! Nach 'Alles' kann noch eine } { Angabe für die Vorgabe ('Alles Vorgabe') oder die Art der Gummilinie } { gemacht werden (z.B. 'Alles Line' -> Gummilinie oder 'Alles Box' -> } { Gummibox). Bei 'Alles Vorgabe' muß in uebergabetext vor dem Eingabetext } { ein Wert für die Vorgabe, gefolgt von '#####', eingegeben werden. Bei } { 'Alles Line' wird der in teil_o gespeicherte Wert als Bezugspunkt für } { RUBBER_BOX bzw. RUBBER_LINE benutzt. } { 'Antippen' - es wird der auf der Zeichnung angetippte Punkt an uebergabetext zurück- } { gegeben. Vor Aufruf von Daten_eingeben 'Antippen' muß in uebergabetext } { ein Text angegeben werden, der bei der Eingabe angezeigt werden soll } { (z.B. 'Startpunkt' -> 'Bitte Startpunkt antippen:' wird angezeigt)! } { Nach Antippen kann noch eine Angabe für die Art der Gummilinie gemacht } { werden (z.B. 'Antippen Line' -> Gummilinie oder 'Antippen Box' -> } { Gummibox). Dann wird der in teil_o gespeicherte Punkt als Bezugspunkt } { für RUBBER_BOX bzw. RUBBER_LINE benutzt. } { ASG A2, ASG A4, ASG A6- die Anzahl der Alustützen Gr. 2, Gr. 4 oder Gr. 6 wird eingegeben } { 'ASG 250' - die Anzahl der Kopfplatten 250mm Bauhöhe wird eingegeben } { ASG 500/1000/1250/5000- die Anzahl der Aufstockungen 500 / 1000 / 1250 / 5000 wird eingegeben } { 'ASG AK' - die Anzahl der Aufstockklammern wird eingegeben } { 'ASG Sk', 'ASG Sl' - die Anzahl der Spindeln 40cm (Sk) bzw. 120cm (Sl) wird eingegeben } { 'ASG SH' - die Anzahl der Spindelhalterungen wird eingegeben } { 'Bez_Punkt 1' - der Bezugspunkt eines Teiles (analog Textbezugspunkt) wird eingegeben } { (Die Nummer (zwischen 1 und 9) gibt den neuen Bezugspunkt an) } { 'Bezugspunkt Text' - der Bezugspunkt des Textes wird eingegeben } { 'GH' - die Trägerhöhe für den GH im Schnitt wird eingegeben } { 'Hoehe' - der Höhenwert für die erste Höhenkote wird eingegeben } { 'Hoehenkote' - der Bezugspunkt für die Höhenkote wird eingegeben bzw. die Ausrichtung. } { Vor Aufruf von Daten_eingeben 'Hoehenkote' muß in uebergabetext die } { Ausrichtung angegeben werden ('u' oder 'o' und 'l' oder 'r': z.B. 'ol') } { 'HV St', 'HV Maxi' - die Anzahl der Alustützen TITAN HV oder TITAN HV-Maxi wird eingegeben } { 'HV 100', 'HV 125' - die Anzahl der HV-Aufstockungen 1000 / 1250 wird eingegeben } { 'HV AK' - die Anzahl der HV-Aufstockklammern wird eingegeben } { 'HV Sk', 'HV Sl ' - die Anzahl der HV-Spindeln 40cm (Sk) bzw. 120cm (Sl) wird eingegeben } { 'HV SH' - die Anzahl der HV-Spindelhalterungen wird eingegeben } { 'HV-Traegerlaenge' - die Länge des Hauptträgers wird eingegeben } { 'Ja_Nein' - 'Y' oder 'N' wird eingegeben } { 'KH' - der KH-Abstand wird eingegeben } { 'Länge' - END oder die Punkte für die Längenmessung werden eingegeben } { 'R-H', 'R-V' - die Anzahl der horiz. ('R-H') / vertik. ('R-V') Rahmen wird eingegeben } { 'Schnittpfeil' - die Punkte für den Schnittpfeil im Grundriß werden eingegeben } { 'SF 1' ... 'SF 5' - die Schriftfelddaten werden eingegeben (1 - Baufirma, 2 - Bauvorhaben, } { 3 - Projektnummer, 4 - Zeichnungsnummer und 5 - alles von 1 bis 4) } { 'ST', 'JT', 'Stuetze' - der ST-Abstand, der JT-Abstand oder der Stützenabstand wird eingegeben } { 'Text' - ein Text wird eingegeben. Vor Aufruf von Daten_eingeben 'Text' muß in } { uebergabetext ein Text angegeben werden, der bei der Eingabe angezeigt } { werden soll. Soll ein Vorgabewert angezeigt werden, dann ist der am } { Anfang in uebergabetext anzugeben, gefolgt von '#####' und dem bei der } { Eingabe anzuzeigenden Text (z.B. 'AB#####Bitte Text eingeben:'). } { 'Textpfeil' - die Punkte für den Bezugspfeil des Textes werden eingegeben } { 'Überstand' - der Mindest-Überstand für die Träger in einem Joch wird eingegeben } { 'Zahl' - eine Zahl wird eingegeben. Vor Aufruf von Daten_eingeben 'Zahl' muß in } { uebergabetext ein Text angegeben werden, der bei der Eingabe angezeigt } { werden soll. Soll ein Vorgabewert angezeigt werden, dann ist der am } { Anfang in uebergabetext anzugeben, gefolgt von '#####' und dem bei der } { Eingabe anzuzeigenden Text (z.B. '45#####Bitte Zahl eingeben:'). } { - verwendet folgende Variablen: } { - die jeweilige globale Variable, die den Wert enthält: index_st_ab, index_jt_ab, index_stue_ab, } { anzahl_jt_3750, anzahl_jt_2500, anzahl_jt_1700, anzahl_jt_1500, anzahl_jt_1150, anzahl_jt_0780, } { anzahl_rahmen_h, anzahl_rahmen_v, bezugs_punkt, index_asg_code, index_kh_ab, teil_u, teil_o, } { ueber_jt_min und uebergabetext } { ============================================================================================================= } PARAMETER was_eingeben LOCAL x IF ( was_eingeben = 3750 ) READ NUMBER 'Bitte geben Sie die Anzahl der Schalungsträger TITAN 120 - 3750 ein:' DEFAULT anzahl_jt_3750 anzahl_jt_3750 Sm_willi ELSE_IF ( was_eingeben = 2500 ) READ NUMBER 'Bitte geben Sie die Anzahl der Schalungsträger TITAN 120 - 2500 ein:' DEFAULT anzahl_jt_2500 anzahl_jt_2500 Sm_willi ELSE_IF ( was_eingeben = 1700 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-NT 1700 ein:' DEFAULT anzahl_jt_1700 anzahl_jt_1700 Sm_willi ELSE_IF ( was_eingeben = 1500 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-NT 1500 ein:' DEFAULT anzahl_jt_1500 anzahl_jt_1500 Sm_willi ELSE_IF ( was_eingeben = 1150 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-NT 1150 ein:' DEFAULT anzahl_jt_1150 anzahl_jt_1150 Sm_willi ELSE_IF ( was_eingeben = 780 ) READ NUMBER 'Bitte geben Sie die Anzahl der Schalungsträger TITAN 120 - 780 ein:' DEFAULT anzahl_jt_0780 anzahl_jt_0780 Sm_willi ELSE_IF ( SUBSTR was_eingeben 1 5 = 'Alles' ) IF ( LEN ( was_eingeben ) = 5 ) READ PROMPT uebergabetext uebergabetext ELSE IF ( POS ( UPC was_eingeben ) 'VORGABE' > 0 ) LET x ( ( POS uebergabetext '#' ) - 1 ) WHILE ( ( x < ( POS uebergabetext '#' ) ) AND ( x > 0 ) ) IF ( ( NUM ( SUBSTR uebergabetext x 1 ) < 58 ) AND ( NUM ( SUBSTR uebergabetext x 1 ) > 47 ) ) LET x ( x - 1 ) ELSE LET x ( ( POS uebergabetext '#' ) + 1 ) END_IF END_WHILE IF ( x = 0 ) LET x ( VAL ( SUBSTR uebergabetext 1 ( ( POS uebergabetext '#' ) - 1 ) ) ) ELSE LET x ( SUBSTR uebergabetext 1 ( ( POS uebergabetext '#' ) - 1 ) ) END_IF LET uebergabetext ( SUBSTR uebergabetext ( ( POS uebergabetext '#' ) + 5 ) ( ( LEN uebergabetext ) - ( POS uebergabetext '#' ) - 4 ) ) READ PROMPT uebergabetext DEFAULT x uebergabetext ELSE_IF ( POS ( UPC was_eingeben ) 'BOX' > 0 ) READ PROMPT uebergabetext RUBBER_BOX teil_o uebergabetext ELSE_IF ( POS ( UPC was_eingeben ) 'LINE' > 0 ) READ PROMPT uebergabetext RUBBER_LINE teil_o uebergabetext END_IF END_IF ELSE_IF ( ( SUBSTR was_eingeben 1 8 ) = 'Antippen' ) IF ( ( LEN was_eingeben ) = 8 ) READ PNT PROMPT ( 'Bitte ' + uebergabetext + ' antippen:' ) uebergabetext ELSE LET was_eingeben ( SUBSTR was_eingeben 10 ( ( LEN was_eingeben ) - 9 ) ) IF ( ( UPC was_eingeben ) = 'BOX' ) READ PNT PROMPT ( 'Bitte ' + uebergabetext + ' antippen:' ) RUBBER_BOX teil_o uebergabetext ELSE_IF ( ( UPC was_eingeben ) = 'LINE' ) READ PNT PROMPT ( 'Bitte ' + uebergabetext + ' antippen:' ) RUBBER_LINE teil_o uebergabetext ELSE_IF ( ( UPC was_eingeben ) = 'TEXT' ) READ PNT PROMPT ( uebergabetext ) uebergabetext END_IF END_IF ELSE_IF ( SUBSTR was_eingeben 1 3 = 'ASG' ) LET was_eingeben ( SUBSTR was_eingeben 5 ( ( LEN was_eingeben ) - 4 ) ) IF ( was_eingeben = 'A2' ) LET x ( NUM ( SUBSTR index_asg_code 1 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Alu-Stütze Gr. 2 ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 1 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'A4' ) LET x ( NUM ( SUBSTR index_asg_code 2 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Alu-Stütze Gr. 4 ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 2 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'A6' ) LET x ( NUM ( SUBSTR index_asg_code 3 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Alu-Stütze Gr. 6 ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 3 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '250' ) LET x ( NUM ( SUBSTR index_asg_code 5 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Kopfplatte 250mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 5 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '500' ) LET x ( NUM ( SUBSTR index_asg_code 7 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Aufstockung 500mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 7 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '1000' ) LET x ( NUM ( SUBSTR index_asg_code 8 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Aufstockung 1000mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 8 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '1250' ) LET x ( NUM ( SUBSTR index_asg_code 9 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Aufstockung 1250mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 9 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '5000' ) LET x ( NUM ( SUBSTR index_asg_code 10 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Aufstockung 5000mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 10 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'AK' ) LET x ( NUM ( SUBSTR index_asg_code 12 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Aufstockklammern ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 12 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'Sk' ) LET x ( NUM ( SUBSTR index_asg_code 14 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Spindel 40cm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 14 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'Sl' ) LET x ( NUM ( SUBSTR index_asg_code 15 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Spindel 120cm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 15 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'SH' ) LET x ( NUM ( SUBSTR index_asg_code 17 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Spindelhalterungen ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 17 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'Gelenk' ) LET x ( NUM ( SUBSTR index_asg_code 19 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Gelenkplatten ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_asg_code 19 ( CHR ( x + 48 ) ) 't' END_IF LET index_asg_code uebergabetext Sm_willi ELSE_IF ( POS was_eingeben 'Bez_Punkt' > 0 ) LET x ( VAL ( SUBSTR was_eingeben 11 ( ( LEN was_eingeben ) - 10 ) ) ) IF ( ( x <= 9 ) AND ( x >= 1 ) ) LET bezugs_punkt x ELSE REPEAT READ NUMBER 'Bitte geben Sie den Bezugspunkt des Teils ein:' DEFAULT bezugs_punkt bezugs_punkt UNTIL ( ( bezugs_punkt >= 1 ) AND ( bezugs_punkt <= 9 ) AND ( FRACT bezugs_punkt = 0 ) ) END_IF Sm_willi ELSE_IF ( was_eingeben = 'Bezugspunkt Text' ) READ PNT 'Bitte Punkt antippen, an dem der Text eingefügt werden soll:' teil_u ELSE_IF ( was_eingeben = 'GH' ) READ PNT 'Bitte die untere Ecke am Träger antippen:' teil_u READ PNT 'Bitte die Oberkante der Schalhaut antippen:' RUBBER_LINE_VERTICAL teil_u teil_o READ PNT 'Bitte antippen, in welcher Richtung die Deckenkante liegt:' uebergabetext ELSE_IF ( was_eingeben = 'Hoehe' ) READ NUMBER 'Bitte Höhe eingeben:' uebergabetext ELSE_IF ( was_eingeben = 'Hoehenkote' ) REPEAT READ PROMPT ('Bitte die Ausrichtung ("o","u","l","r" - aktuell: '+uebergabetext+') oder den Einfügepunkt der Höhenkote eingeben bzw. antippen:') teil_u IF ( ( TYPE teil_u ) = STRING ) IF ( teil_u = 'o' ) IF ( ( POS uebergabetext 'u' ) > 0 ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'u' ) teil_u 't' ELSE_IF ( ( POS uebergabetext 'o' ) = 0 ) LET uebergabetext ( uebergabetext + teil_u ) END_IF ELSE_IF ( teil_u = 'u' ) IF ( ( POS uebergabetext 'o' ) > 0 ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'o' ) teil_u 't' ELSE_IF ( ( POS uebergabetext 'u' ) = 0 ) LET uebergabetext ( uebergabetext + teil_u ) END_IF ELSE_IF ( teil_u = 'l' ) IF ( ( POS uebergabetext 'r' ) > 0 ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'r' ) teil_u 't' ELSE_IF ( ( POS uebergabetext 'l' ) = 0 ) LET uebergabetext ( uebergabetext + teil_u ) END_IF ELSE_IF ( teil_u = 'r' ) IF ( ( POS uebergabetext 'l' ) > 0 ) Buchstabe_in_Wort_tauschen uebergabetext ( POS uebergabetext 'l' ) teil_u 't' ELSE_IF ( ( POS uebergabetext 'r' ) = 0 ) LET uebergabetext ( uebergabetext + teil_u ) END_IF END_IF END_IF UNTIL ( ( TYPE teil_u ) = PNT ) ELSE_IF ( SUBSTR was_eingeben 1 3 = 'HV ' ) LET was_eingeben ( SUBSTR was_eingeben 4 ( ( LEN was_eingeben ) - 3 ) ) IF ( was_eingeben = 'St' ) LET x ( NUM ( SUBSTR index_hv_code 1 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Alu-Stütze TITAN HV ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 1 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'Maxi' ) LET x ( NUM ( SUBSTR index_hv_code 2 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Alu-Stütze TITAN Maxi ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 2 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '100' ) LET x ( NUM ( SUBSTR index_hv_code 4 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-Aufstockung 1000mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 4 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = '125' ) LET x ( NUM ( SUBSTR index_hv_code 5 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-Aufstockung 1250mm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 5 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'AK' ) LET x ( NUM ( SUBSTR index_hv_code 7 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Aufstockklammern TITAN HV ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 7 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'Sk' ) LET x ( NUM ( SUBSTR index_hv_code 9 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-Spindel 50cm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 9 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'Sl' ) LET x ( NUM ( SUBSTR index_hv_code 10 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der HV-Spindel 130cm ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 10 ( CHR ( x + 48 ) ) 't' ELSE_IF ( was_eingeben = 'SH' ) LET x ( NUM ( SUBSTR index_hv_code 12 1 ) - 48 ) READ NUMBER 'Bitte geben Sie die Anzahl der Spindelhalterungen TITAN HV ein:' DEFAULT x x Buchstabe_in_Wort_tauschen index_hv_code 12 ( CHR ( x + 48 ) ) 't' END_IF LET index_hv_code uebergabetext Sm_willi ELSE_IF ( was_eingeben = 'HV-Traegerlaenge' ) IF ( ( uebergabetext<>1150 ) AND ( uebergabetext<>1500 ) AND ( uebergabetext<>1700 ) AND ( uebergabetext<>2300 ) ) LET uebergabetext 0 END_IF REPEAT IF ( uebergabetext = 0 ) READ NUMBER 'Bitte geben Sie die Trägerlänge ein:' uebergabetext ELSE READ NUMBER 'Bitte geben Sie die Trägerlänge ein:' DEFAULT uebergabetext uebergabetext END_IF UNTIL ( ( uebergabetext = 1150 ) OR ( uebergabetext = 1500 ) OR ( uebergabetext = 1700 ) OR ( uebergabetext = 2300 ) ) ELSE_IF ( was_eingeben = 'Ja_Nein' ) READ STRING PROMPT ( uebergabetext + " ('Y' = Ja, 'N' = Nein):" ) DEFAULT 'Y' uebergabetext LET uebergabetext ( UPC uebergabetext ) ELSE_IF ( was_eingeben = 'JT' ) READ NUMBER 'Bitte geben Sie einen neuen Jochträgerabstand in [mm] ein:' DEFAULT index_jt_ab index_jt_ab Sm_willi ELSE_IF ( was_eingeben = 'KH' ) READ NUMBER 'Bitte geben Sie einen neuen KH-Abstand in [mm] ein:' DEFAULT index_kh_ab index_kh_ab Sm_willi ELSE_IF ( was_eingeben = 'Länge' ) READ 'Bitte den Startpunkt antippen:' teil_o IF ( TYPE teil_o = PNT ) READ PNT 'Bitte den Endpunkt antippen:' RUBBER_LINE teil_o teil_u END_IF ELSE_IF ( was_eingeben = 'R-H' ) READ NUMBER 'Bitte geben Sie die Anzahl der horizontalen Rahmen in der Höhe ein:' DEFAULT anzahl_rahmen_h anzahl_rahmen_h Sm_willi ELSE_IF ( was_eingeben = 'R-V' ) READ NUMBER 'Bitte geben Sie die Anzahl der vertikalen Rahmen in der Höhe ein:' DEFAULT anzahl_rahmen_v anzahl_rahmen_v Sm_willi ELSE_IF ( was_eingeben = 'Schnittpfeil' ) READ PNT 'Bitte den linken Punkt des Schnittpfeils antippen:' teil_u READ PNT 'Bitte den rechten Punkt des Schnittpfeils antippen:' RUBBER_LINE teil_u teil_o READ PNT 'Bitte die Richtung der Schnittansicht antippen:' RUBBER_LINE teil_o uebergabetext ELSE_IF ( SUBSTR was_eingeben 1 2 = 'SF' ) LET x ( VAL ( SUBSTR was_eingeben 4 1 ) ) IF ( x = 1 ) READ STRING 'Contractor Name ?' DEFAULT Naam_aannemer Naam_aannemer Baufirma_speichern Naam_aannemer ELSE_IF ( x = 2 ) READ STRING 'Project Name ?' DEFAULT Naam_projekt Naam_projekt ELSE_IF ( x = 3 ) IF ( Project_nummer = '' ) INQ_ENV 0 LET Project_nummer ( INQ(302) ) WHILE ( ( POS Project_nummer pfad_trenn_z ) > 0 ) LET Project_nummer (SUBSTR Project_nummer (1+(POS Project_nummer pfad_trenn_z)) (LEN Project_nummer-(POS Project_nummer pfad_trenn_z))) END_WHILE END_IF READ STRING "Project number (max 5 chr's):" DEFAULT Project_nummer Project_nummer ELSE_IF ( x = 4 ) IF ( Tekening_nummer = '' ) IF ( ( POS Naam_projekt 'Brücke' ) > 0 ) LET Tekening_nummer 'BR-1' ELSE_IF ( ( POS Naam_projekt 'Rampe' ) > 0 ) LET Tekening_nummer 'R-1' ELSE_IF ( ( POS Naam_projekt 'Tiefgarage' ) > 0 ) LET Tekening_nummer 'TG-1' ELSE_IF ( ( ( POS Naam_projekt 'Tunnel' ) > 0 ) OR ( ( POS Naam_projekt 'tunnel' ) > 0 ) ) LET Tekening_nummer 'T-1' ELSE LET Tekening_nummer '1' END_IF END_IF READ STRING "Drawing number (max 5 chr's):" DEFAULT Tekening_nummer Tekening_nummer ELSE_IF ( x = 5 ) IF ( Project_nummer = '' ) INQ_ENV 0 LET Project_nummer ( INQ(302) ) WHILE ( ( POS Project_nummer pfad_trenn_z ) > 0 ) LET Project_nummer (SUBSTR Project_nummer (1+(POS Project_nummer pfad_trenn_z)) (LEN Project_nummer-(POS Project_nummer pfad_trenn_z))) END_WHILE END_IF IF ( Tekening_nummer = '' ) IF ( ( POS Naam_projekt 'Brücke' ) > 0 ) LET Tekening_nummer 'BR-1' ELSE LET Tekening_nummer '1' END_IF END_IF READ STRING 'Contractor Name ?' DEFAULT Naam_aannemer Naam_aannemer Baufirma_speichern Naam_aannemer READ STRING 'Project Name ?' DEFAULT Naam_projekt Naam_projekt READ STRING "Project number (max 5 chr's):" DEFAULT Project_nummer Project_nummer READ STRING "Drawing number (max 5 chr's):" DEFAULT Tekening_nummer Tekening_nummer END_IF Sm_willi ELSE_IF ( was_eingeben = 'ST' ) READ NUMBER 'Bitte geben Sie einen neuen Schalungsträgerabstand in [mm] ein:' DEFAULT index_st_ab index_st_ab Sm_willi ELSE_IF ( was_eingeben = 'Stuetze' ) READ NUMBER 'Bitte geben Sie einen neuen Stützenabstand in [mm] ein:' DEFAULT index_stue_ab index_stue_ab Sm_willi ELSE_IF ( was_eingeben = 'Text' ) IF ( ( POS uebergabetext '#####' ) > 0 ) LET x ( SUBSTR uebergabetext 1 ( ( POS uebergabetext '#####' ) - 1 ) ) LET uebergabetext (SUBSTR uebergabetext ((POS uebergabetext '#####')+5) ((LEN uebergabetext)-(POS uebergabetext '#####')-4)) READ STRING PROMPT uebergabetext DEFAULT x uebergabetext ELSE READ STRING PROMPT uebergabetext DEFAULT '' uebergabetext END_IF ELSE_IF ( was_eingeben = 'Textpfeil' ) READ PNT 'Bitte Punkt antippen, wo die Pfeilspitze hinzeigen soll:' teil_o READ PNT 'Bitte Punkt antippen, wo der Pfeil beginnen soll:' RUBBER_LINE teil_o teil_u ELSE_IF ( was_eingeben = 'Überstand' ) READ NUMBER 'Bitte geben Sie den Trägerüberstand ein:' DEFAULT ueber_jt_min ueber_jt_min ELSE_IF ( was_eingeben = 'Zahl' ) IF ( ( POS uebergabetext '#####' ) > 0 ) LET x ( VAL ( SUBSTR uebergabetext 1 ( ( POS uebergabetext '#####' ) - 1 ) ) ) LET uebergabetext (SUBSTR uebergabetext ((POS uebergabetext '#####')+5) ((LEN uebergabetext)-(POS uebergabetext '#####')-4)) READ NUMBER PROMPT uebergabetext DEFAULT x uebergabetext ELSE READ NUMBER PROMPT ( uebergabetext ) uebergabetext END_IF END_IF END_DEFINE
Das hätte man alles auch ohne extra Funktion programmieren können. Aber die Firmenmakros, die unser alter Chef programmiert hat, waren teilweise verschlüsselt. Allerdings ist mir mal aufgefallen, daß man bei Eingaben die Verschlüsselung aushebeln kann, indem man zuerst ECHO und/oder TRACE eingibt. Dann kann man zumindest ab der Selle der Eingabe sehen, was programmiert wurde. Darum habe ich alle meine Eingaben dann in diese extra Funktion geschrieben, in die ich bei Bedarf dann am Ende noch ein ECHO OFF oder TRACE OFF geschrieben hätte, wenn ich das Makro verschlüsseln hätte wollen. Da ich meine Makros aber bisher noch nicht verschlüsselt habe, fehlt das noch. Sie sind also nur für den Fall der Fälle schon dafür vorbereitet. Hier sind jetzt auch viele Eingaben dabei, die speziell für unser Anwendungsgebiet sind. Die kann sich jeder ja je nach Bedarf rauslöschen. Und alle nicht im Makro definierten Variablen sind global definiert und werden beim Start von ME10 definiert, bei dem unsere Makros geladen werden. Gruß ME10-Faultier [Diese Nachricht wurde von ME10-Faultier am 05. Dez. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|