{-------------------------------------------------------------------} { Datei laden mit INPUT 'makro.mac' in der ME10-Eingabezeile oder } { INPUT 'macro.mac' in die STARTUP oder CUSTOM.MAC schreiben. } { Mess-Makro starten durch Eingabe von "Messen" in der ME10- } { Eingabezeile. Das Schweissnaht-Makro starten durch "Schweissnaht" } { WICHTIG: Immer auf die Meldungen in der ME10-Eingabezeile achten! } {-------------------------------------------------------------------} {------------------------------------------------------------------} { Multimessmakro (gmg) 21.10.1995 - Stand: 21.10.1995 } { Makro zum Messen (Aufaddieren) der Laengen von aufeinander } { folgenden Geometrieelementen (Linien, Boegen, Rundungen etc.). } { Anwendungsbeispiel: Zeichnen Sie ein Polygon nach Belieben. } { Starten Sie nun mit "Messen" das Multimessmakro. Tippen Sie } { nun den Anfangspunkt des Polygons an. Anschliessend tippen Sie } { die Linie an, die auf den Anfangspunkt folgt. Tippen Sie nun } { in der Reihenfolge, wie die einzelnen Linien aufeinander folgen, } { jede einzelne Linie an (Endpunkte werden nicht akzeptiert). } { Nachdem Sie die letzte Linie des Polygons angetippt haben, } { tippen Sie auf eine (Geometrie-) freie Flaeche. Danach zeigt das } { Programm in der Eingabezeile die Gesamtlaenge des Polygons an. } { ( bekanntlich kann mit der Eingabetaste der Wert in den Eingabe- } { puffer uebernommen werden und mit der BILD-HOCH-Taste wieder } { zurueckgeholt werden ) } { Wichtige Anwendung: Messen der Gesamtlaenge eines Kettentriebs! } { HINWEIS: Akzeptiert das Programm eine Linie nicht, so ist die } { angetippte Linie nicht mit der zuvor digitalisierten Linie } { direkt verbunden! Daher:Eckpunkte einschalten (SHOW VERTEX ON)! } {------------------------------------------------------------------} DEFINE Messen LOCAL Strecke LOCAL Teilstrecke LOCAL Ausgang LOCAL Ap LOCAL Ep LOCAL Art LOCAL P LOCAL Rl { Punkt der RUBBER_LINE } LOCAL Rl_old { vorhergehender Punkt der RUBBER_LINE } LET Strecke 0 LET Ausgang 0 LET Ap 0 LET Ep 0 LOOP READ PNT 'Anfangspunkt digitalisieren' P INQ_ELEM P LET Art (INQ(403)) IF (Art=LINE) LET Ap (INQ(101)) LET Ep (INQ(102)) END_IF IF ((Art=ARC) OR (Art=FILLET)) LET Ap (INQ(102)) LET Ep (INQ(103)) END_IF LET Rl P EXIT_IF ((P=Ap) OR (P=Ep)) END_LOOP LOOP TRAP_ERROR READ PNT 'Strecke digitalisieren' RUBBER_LINE Rl P INQ_ELEM P LET Art (INQ(403)) IF (Art=LINE) LET Ap (INQ(101)) LET Ep (INQ(102)) END_IF IF ((Art=ARC) OR (Art=FILLET)) LET Ap (INQ(102)) LET Ep (INQ(103)) END_IF IF ((Art<>LINE) AND (Art<>ARC) AND (Art<>FILLET)) LET Ausgang 1 END_IF IF (Ausgang=0) LET Rl_old Rl IF (Rl_old=Ap) LET Rl Ep MEASURE_LENGTH P LET Teilstrecke 0 LET Teilstrecke (INQ(2)) LET Strecke (Strecke+Teilstrecke) END_IF IF (Rl_old=Ep) LET Rl Ap MEASURE_LENGTH P LET Teilstrecke 0 LET Teilstrecke (INQ(2)) LET Strecke (Strecke+Teilstrecke) END_IF END_IF EXIT_IF (CHECK_ERROR=1) EXIT_IF (Ausgang=1) END_LOOP STORE_IN_RECALL_BUFFER (STR(Strecke)) DISPLAY (Strecke) END END_DEFINE {--------------------------------------------------------------------} { Schweissnaht - ein Makro fr ME10 (gmg) 05/95 } { Es werden per Polygon vieleckige Schweiánaehte gezeichnet. Nachdem } { man das Polygon geschlossen hat, wird die Schweissnaht automatisch } { geschwaerzt. Dannach tippt man entweder eine (Geometrie-) freie } { Flaeche an, um das Makro zu beenden, oder man tippt eine Mittel- } { linie, um die Schweissnaht zu spiegeln (z.B. um eine Welle). } { Das Makro erzeugt das Teil "Schweissnaht" unter dem aktuellen Teil!} {--------------------------------------------------------------------} DEFINE Schweissnaht LOCAL p { digitalisierter Punkt } LOCAL z { Punktez„hler } LOCAL z2 { Schleifenz„hler beim Schraffieren } LOCAL x { X-Koordinate des digitalisierten Punktes } LOCAL y { Y-Koordinate des digitalisierten Punktes } LOCAL ph { Hilfspunkt...Koordinate vorher } LOCAL xh { vorhergehende X-Koordinate } LOCAL yh { vorhergehende Y-Koordinate } LOCAL x1 { 1.Punkt aus LTAB X-Koordinate } LOCAL y1 { 1.Punkt aus LTAB Y-Koordinate } LOCAL ps { Schraffurpunkt } LOCAL xs { Schraffurpunkt X-Koordinate } LOCAL ys { Schraffurpunkt Y-Koordinate } LOCAL Art { Art der digitalisierten Spiegelachse } LOCAL sa { Punkt auf Spiegelachse } LOCAL ap { Anfangspunkt Spiegelachse } LOCAL ep { Endpunkt Spiegelachse } LOCAL w { Winkel Spiegelachse wenn Hilfsgeometrielinie } LOCAL lu { Kopierrahmen links unten } LOCAL ro { Kopierrahmen rechts oben } LOCAL Ende { Anfangspunkt gleich Endpunkt } LOCAL Ende2 { Schraffurschleife } LOCAL Gleich { ein Punkt bereits angetippt ? } LOCAL Teilename {Name des aktuellen Teils } DEFINE Teste_auf_gleichheit { Punkt bereits vorhanden ? } LOCAL z { Schleifenz„hler } LOCAL a { Anzahl der Eintr„ge in der Wertetabelle } LET a (LTAB_ROWS 'Werte_tab' - 1) { Anzahl Punkte - 1 } LET z 1 { „uáerer Schleifenz„hler } { f„ngt mit dem zweiten Wert an, da der Anfangspunkt gleich dem } { Endpunkt sein darf ! } REPEAT LET z (z+1) IF ( (x = (READ_LTAB 'Werte_tab' z 1)) AND (y = (READ_LTAB 'Werte_tab' z 2)) ) LET Gleich 1 DISPLAY 'Punkt bereits vorhanden !' END_IF UNTIL (z=a) END_DEFINE { Schweissnahtumriá zeichnen } LET z 0 LET Ende 0 LET Gleich 0 COLOR WHITE LINETYPE SOLID CREATE_LTAB 20 2 'Werte_tab' INQ_ENV 7 { lade Werte in Sytemtabelle } LET Teilename (INQ 301) { hole Name des aktuellen Teils } IF (Teilename <> 'Schweissnaht') { nur, wenn noch kein Teil erzeugt wurde } INIT_SUBPART 'Schweissnaht' END_IF LOOP LET z (z+1) IF (z>1) READ PNT 'Punkt des Schweissnaht-Polygons antippen' RUBBER_LINE p p ELSE READ PNT 'Startpunkt des Schweissnaht-Polygons antippen' p END_IF LET x (X_OF (p)) LET y (Y_OF (p)) WRITE_LTAB 'Werte_tab' z 1 x { schreibe X-Wert in Tabelle } WRITE_LTAB 'Werte_tab' z 2 y { schreibe Y-Wert in Tabelle } IF (z>1) IF (z>3) LET Gleich 0 Teste_auf_gleichheit { Punkt bereits angetippt ? } { ... ausser Anfangspunkt ! } END_IF LET xh (READ_LTAB 'Werte_tab' (z-1) 1) LET yh (READ_LTAB 'Werte_tab' (z-1) 2) LET ph (PNT_XY xh yh) IF ( (x = (READ_LTAB 'Werte_tab' 1 1)) AND (y = (READ_LTAB 'Werte_tab' 1 2)) AND ( (z=2) OR (z=3) ) ) DISPLAY 'min. drei verschiedene Punkte erforderlich !' LET z (z-1) LET p ph ELSE_IF (Gleich=1) LET z (z-1) LET p ph ELSE IF (ph=p) DISPLAY ('die letzten beiden Punkte waren gleich !') LET z (z-1) ELSE LINE ph p END END_IF END_IF END_IF LET x1 (READ_LTAB 'Werte_tab' 1 1) LET y1 (READ_LTAB 'Werte_tab' 1 2) IF ( ( ABS(x - x1) < 0.0001 ) AND ( ABS(y - y1) < 0.0001 ) AND (z>2) ) LET Ende 1 END_IF EXIT_IF (Ende=1) END_LOOP { Schraffieren } HATCH_DIST 0 { 0-Schraffur } LET Ende2 0 LET z2 0 LOOP { Schraffurschleife } LET z2 (z2+1) LET xh (READ_LTAB 'Werte_tab' (z2) 1) LET yh (READ_LTAB 'Werte_tab' (z2) 2) LET ps (PNT_XY xh yh) IF (z2=1) HATCH MANUAL ps ELSE ps END_IF IF (z2=z) LET Ende2 1 END_IF EXIT_IF (Ende2=1) END_LOOP END { auf Wunsch spiegeln } READ PNT 'Punkt auf Spiegelachse oder leere FlÌche antippen' sa INQ_ELEM sa LET Art (INQ(403)) { Linientyp holen } IF (Art=LINE) { Linie } LET ap (INQ(101)) { Anfangspunkt Spiegelachse holen } LET ep (INQ(102)) { Endpunkt Spiegelachse holen } INQ_ENV 7 { lade Werte in Sytemtabelle } LET lu (INQ 101) { unterer linker Punkt des aktuellen Teils } LET ro (INQ 102) { oberer rechter Punkt des aktuellen Teils } MODIFY COPY MIRROR ap ep lu ro END ELSE_IF (Art=C_LINE) { Hilfslinie } LET ap (INQ(101)) { Mittelpunkt Hilfslinie holen } LET w (INQ(3)) { Winkel der Hilfslinie holen } LET x (X_OF (ap)) LET y (Y_OF (ap)) LET xh (((cos w) * 100) + x) LET yh (((sin w) * 100) + y) LET ep (PNT_XY xh yh) INQ_ENV 7 { lade Werte in Sytemtabelle } LET lu (INQ 101) { unterer linker Punkt des aktuellen Teils } LET ro (INQ 102) { oberer rechter Punkt des aktuellen Teils } MODIFY COPY MIRROR ap ep lu ro END END_IF END_PART END_DEFINE