| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für PTC CREO |
Autor
|
Thema: Problem mit Equidistance in Makro (638 mal gelesen)
|
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 05. Jul. 2004 12:34 <-- editieren / zitieren --> Unities abgeben:
Hallo, Ich habe ein Problem mit einer Funktion, die ich vor längerem programmiert habe. Diese Funktion soll innerhalb eines Makros anhand der Parameter Anfangspunkt, Abstand und Seite eine Parallelkontur zu einer vorhandenen Kontur erstellen. Dazu hangele ich mich zuerst an der Kontur entlang, um das letzte Element zu finden und rufe, sobald ich es gefunden habe, die Funktion Equidistance auf. Bis zur letzten Version des ME10 hat das auch prima funktioniert, aber seit wir 12.01C im Einsatz haben, klappt es nicht mehr mit Eckenradien unter ca. 0.5 mm. Da 0.2mm Eckenradien bei uns für Drahtkonturen Standard sind und die Funktion recht häufig genutzt wird, ist das ein Problem. Ich habe die Funktion mal angehangen. Der Parameter 'kritisch' bedeutet nur, das die Originalkontur gelöscht wird, deshalb kommt da eine Andere Meldung, wenn Probleme auftreten. Vielleicht kann mir ja jemand sagen, wo das Problem liegt. Gruß
Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 05. Jul. 2004 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
Hallo Andreas, es kann vielleicht folgendes sein: Du machst vor INQ_SELECTED_ELEM SELECT anfangspunkt CONFIRM einen TRAP_ERROR aber unmittelbar danach kein CHECK_ERROR. D.h. dass bei einem Fehler das System nicht wieder in den normalen Modus zurueckgesetz wird. (siehe dazu in der Hilfe zu TRAP_ERROR und CHECK_ERROR) Stell mal eine MI-Kontur mit deinen Parametern fuer das Makro rein, wo es nicht klappt ! Gruss RainerH.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 05. Jul. 2004 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
Hallo Andreas, das ganze kann dann folgendermassen aussehen: ..... TRAP_ERROR INQ_SELECTED_ELEM SELECT anfangspunkt CONFIRM IF (NOT (CHECK_ERROR)) LET L_Anfang (INQ 101) LET L_Ende (INQ 102) ELSE DISPLAY 'Fehler beim selektieren des Anfangspunktes.' END_IF TRAP_ERROR INQ_SELECTED_ELEM SELECT LINES ALL ADD ARCS ALL ADD FILLETS ALL SUBTRACT anfangspunkt CONFIRM IF (NOT (CHECK_ERROR)) LET anz_ele (inq 14) ELSE DISPLAY 'Fehler mein selektieren der Geometrieelemente.' END_IF ..... Wenn nun was schief geht, bekommst du eine Meldung ! Gruss RainerH.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 05. Jul. 2004 14:23 <-- editieren / zitieren --> Unities abgeben:
Hallo Rainer, Danke für die Antwort! Warum das erste "Trap_Error" da steht, weiß ich auch nicht mehr so genau, entweder hab ich damals vergessen es rauszunehmen, oder es soll irgendwas abfangen, aber ich weiß auch nicht mehr genau, was. Ich denke aber, das es nichts mit dem Fehler zu tun hat, da die Funktion bei größeren Radien prima funktioniert. ich hab mal ne Beispieldatei mitsamt Aufruf (mit trace aufgezeichnet) angehängt. Ich hoffe, mir kann jemand weiterhelfen. Gruß
Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 05. Jul. 2004 14:37 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
Hallo Andreas, wenn ich das (aus deinem Trace) richtig sehe, dann sind bei den Uebergabeparametern die Koordinaten des Anfangspunktes und der Seite exakt die selbe. (Abstand=0.01 und Kritisch=1) Wie soll dann das Makro wissen, zu welcher Seite die Aequidistante gezeichnet werden soll. Du erhaelst dann wahrscheinlich (wegen CHECK_ERROR) diese Meldung: "Die ausgewaehlte Kontur enthaelt doppelte Linien oder ....." Es wird wahrscheinlich auch keine Geometrie erzeugt ?? Gruss RainerH. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 05. Jul. 2004 14:44 <-- editieren / zitieren --> Unities abgeben:
Hallo Rainer, Ich denke, da hast Du Dich verlesen, der Punkt für die Seite liegt um 2 mm über dem Anfangspunkt. Das keine Geometrie erzeugt wird, stimmt allerdings, aber das muß andere Ursachen haben. Wären die Punkte gleich, würde es ja auch beim älteren ME10 nicht klappen. Trotzdem Danke für Deine Mühe Gruß
Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 05. Jul. 2004 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
Zitat: Original erstellt von Andreas 253: Ich denke, da hast Du Dich verlesen, der Punkt für die Seite liegt um 2 mm über dem Anfangspunkt.
Oh Schreck, da hast du recht - Entschuldigung !!! Ich kann aber deine Punkte nicht nachvollziehen, da sie total ausserhalb der Geometrie liegen. Eventuell muesstes du deine Geometrie zuerst auf den Nullpunkt verschieben, somit haetten wir die selben Ausgangspositionen. Was steht eigentlich in den letzten Zeilen, wenn du ein Trace mitlaufen laesst ??? Gruss RainerH.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 05. Jul. 2004 15:05 <-- editieren / zitieren --> Unities abgeben:
Hallo Rainer, Ich habe zuerst versucht, ein Beispiel mit geraden Werten (linke untere Ecke auf Nullpunkt und so weiter) zu erstellen, aber da trat dieses Biest von Fehler nicht auf! Ich vermute irgendwie, das das ganze was mit rechenungenauigkeit zu tun hat, aber 0,2 ist doch noch nicht SO klein, das es da verloren gehen kann, oder? Ich hab mal das ganze tracefile vom Aufruf bis zum Abbruch angehangen. Im Aufruf wird der Punkt für die Seite berechnet, deshalb sieht er etwas anders aus. Gruß
Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 05. Jul. 2004 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
Hallo Andreas, fuer dieses Problem muesste man mehr Zeit haben um zu pruefen, ob man alle moeglichen Bedingungen beruecksichtigt hat und auch die korrekten Punkte verwendet werden. Du kannst mal versuchen, die errechneten Punkte mittels aussagekraeftige TEXT-Punkt anzuzeigen. Eventuell mal die ganzen errechneten Punkte auf ca. 5 Kommastellen runden lassen. Dies ginge so: LET Zahl (0.00001*(ROUND (100000*Zahl))) Tut mir leid, dass ich keine schnelle Problemloesung fuer dich habe... Gruss RainerH.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 05. Jul. 2004 16:33 <-- editieren / zitieren --> Unities abgeben:
|
H.annes Mitglied CAD-Pfriemler
Beiträge: 482 Registriert: 02.07.2001 ME10 8.7 - PTC DirectDrafting 19.00; OSM 15.xx - PTC DM 19.xx
|
erstellt am: 06. Jul. 2004 07:58 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
Morgen, ich hab den trace nur kurz überflogen - ein paar Dinge fallen mir dabei auf: (1) das direkte Vergleichen von Punkten kann gefährlich sein - wenn sich die Koordinaten nur in der 12.Stelle hinter dem Komma unterscheiden. Statt IF (Startpunkt = Endpunkt) wäre besser: IF ((ABS (Startpunkt - Endpunkt)) < 0.001) damit hast Du eine Genauigkeitsschranke von 1/1000. (2) Elemente im Makro "anzutippen" hat auch so seine Tücken. Verwende hier besser CATCH mir NO_VIEWPORT_RANGE Etwa so: CATCH NO_VIEWPORT_RANGE 0.01 EQUIDISTANCE ...... CATCH NO_VIEWPORT_RANGE 0 Rücksetzen nicht vergessen! Laut Handbuch: Bei Punkten, die über die Tastatur eingegeben oder aus Makros und Dateien eingelesen werden, findet kein automatischer Fangvorgang statt. Mit der Option NO_VIEWPORT_RANGE können Sie für derartige Punkte jedoch einen Fangbereich in Benutzereinheiten festlegen. (3) falls (CHECK_ERROR) ungleich Null ist, kannst Du die Fehlermeldung auch anzeigen lassen: DISPLAY (ERROR_STR) Damit sieht Du die zuletzt aufgetretene (unterdrückte) Fehlermeldung. hope it helps ... Hannes
------------------ undmiadanwosmadan undmiadadnawosondasoisdeswosmadan undwosondasdammara Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 06. Jul. 2004 08:05 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
|
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 06. Jul. 2004 10:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Hannes, NO_VIEWPORT_RANGE ist mir bisher entgangen, Danke für die Info! Bei den meisten Makros runde ich die Werte beim Vergleichen auch, allerdings hab ich in der Beziehung noch nie Probleme gehabt, wenn es um Punkte ging, die ich per inq ermittelt habe, und auch in diesem Fall scheint das ja zu funktionieren, sonst käme ich ja gar nicht bis zum EQUIDISTANCE-Befehl. Aber Grundsätzlich muß ich Dir da recht geben, ich werds mal austesten. ERROR_STR gibt in diesem Fall leider nichts brauchbares zurück, das hab ich getestet und deshalb diese Lösung gewählt, die aber eigentlich ausreicht. Das Problem war ursprünglich, das einige Kollegen mit ungeeigneten Konturen das Makro gestartet haben, und ich Ihnen regelmäßig beweisen mußte, daß ihre Konturen NICHT in Ordnung sind. Komischerweise fragen sie kaum noch nach, seit Ihnen das Makro sagt, ihre Konturen wären fehlerhaft Leider spinnt das Makro seit Version 12, und ich hab noch immer keine Lösung gefunden Für weitere Ideen und Vorschläge wäre ich dankbar, wenn ich es selbst hinkriege werd ich hier reinstellen, woran es lag bzw. was geholfen hat. Gruß
Andreas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas 253 Mitglied
Beiträge: 157 Registriert: 01.03.2002
|
erstellt am: 06. Jul. 2004 10:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, Jetzt haltet Euch fest: Nach viel rumprobieren bin ich jetzt zufällig darauf gestoßen, das das Funktionieren des Makros offensichtlich davon abhängt, wie nah ich an die Kontur heranzoome!!! Für die gleiche Kontur - ein Rechteck mit 0.2mm Radien und 8x6 mm Kantenlängen - funktioniert es nicht, wenn die Kontur nur relativ klein zu sehen ist, und es funktioniert, wenn sie fast Bildschirmfüllend dargestellt wird!!! Jetzt frag ich mich doch echt, was da abgeht! Da das ganze vermutlich davon abhängt, wie groß die Radien dargestellt werden, ist dies für kleine Stempelkonturen eine (NOT)Lösung, allerdings wird es bei umfangreicheren, großen Konturen vermutlich recht lästig. Und hier nun die Lösung des Problems:
WINDOW 1,1 2,2 EQUIDISTANCE ... INQ_ENV 2 WINDOW (inq 103) (inq 104) Sieht blöd aus, aber funktioniert! Gruß
Andreas [Diese Nachricht wurde von Andreas 253 am 06. Jul. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RainerH Mitglied Techn. Ang. (Konstruktion)
Beiträge: 736 Registriert: 22.01.2003 OSDM 14.00A OSDD 14.00A MM 14.00A Windows-XP Professional --- HP xw4100 3.0 GHz 2GB RAM Quadro4 980 XGL
|
erstellt am: 06. Jul. 2004 11:29 <-- editieren / zitieren --> Unities abgeben: Nur für Andreas 253
@Andreas Na super - da muss mal jemand draufkommen... Wenn man bei beiden Situationen die TRACE miteinander vergleicht, stellt man fest dass nur die EQUIDISTANCE mit exakt den selben Koordinatenpunkte nicht erstellt werden konnte. (CHECK_ERROR = 1) ERROR_STR gibt bei dir wahrscheinlich deshalb nichts zurueck, weil du zuerst vor TRAP_ERROR ON_ERROR '' voranstellen musst. Bei mir kommt dann als Meldung: 'Element angeben.' In der Hilfe steht bei ON_ERROR: Zitat: Der nach ON_ERROR eingegebene String wird bei Auftreten des nächsten Fehlers als Eingabe verwendet. Anschließend wird der String gelöscht. Soll der String beim nächsten Fehler erneut als Eingabe dienen, so muß er erneut zusammen mit ON_ERROR eingegeben werden. Sie inaktivieren eine ON_ERROR Situation, indem Sie für die ON_ERROR-Funktion einen leeren Argument-String eingeben. Melde das ganze doch mal an den Support und schreib uns dann mal was die dazu sagen. Gruss RainerH.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |