Autor
|
Thema: Workbench-Wechsel (4620 mal gelesen)
|
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 09. Aug. 2006 14:18 <-- editieren / zitieren --> Unities abgeben:
Hallo, in meinem Macro muss ich mehrmals zwischen der Assembly- und der PartDesign-Workbench hin und herwechseln. Hier Teile des Codes: For i = 0 To nCount ... If "PrtCfg" <> CATIA.GetWorkbenchId Then Call oSelection.Add(oPart) Call CATIA.StartWorkbench("PrtCfg") ' HIER DAS PROBLEM (s.u.) End If ... Call Call oSelection.Add(oProduct) Call CATIA.StartWorkbench("Assembly") ... next Beim ersten Schleifendurchlauf klappt es noch. Allerdings hat er beim Zweiten schon Probleme, da die Workbench offentsichlich nicht so schnell wechselt, wie der Code abläuft. Während des Ablaufs zeigt sich das dadurch, dass er ein neues Part öffnet, obwohl die Abfrage mit 'CATIA.GetWorkbenchId' schon die richtige Workbench-ID wiedergibt (soll heißen: die gewünschte ID ist bereits eingetragen, obwohl der Wechsel noch nicht perfekt ist - damit wird die Abfrage hinfällig!). Ein 'Sleep(...)' möchte ich allerdings nur ungern einbauen. Hat da jemand vielleicht eine Lösung für mich? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 09. Aug. 2006 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Frage: Warum musst du zwischen den Workbenches hin und her schalten?? Erklär mal was du in CATIA von der Funktionsabfolge mit dem Makro machen willst Gruss Timber ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mathias.bergundthal Mitglied informatiker
Beiträge: 153 Registriert: 03.08.2005 HP xw6000 - WXP Pro SP2 - CATIA V5 R16 SP9 - Visual Studio 2005
|
erstellt am: 09. Aug. 2006 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
hallo heinz, erkläre mir mal warum du überall einen "call" vornedran schreibst...??!! wenn es dann immer noch nicht geht teile uns mal mit was für eine CATIA Version du benutzt und auf was du entwickelst, danke Wegen dem sleep, also ich bin nicht drumrum gekommen. ist einfach eine Sicherheit und der User merkt nichts. ich habe bei mir 200ms eingestellt und es hat sich niemand beklagt und das Prog ist auch stabil so.
gruss, mahthias
------------------ In diesem Zeitalter der Massenkomunikation sind Verrücktheiten ansteckend. [Diese Nachricht wurde von mathias.bergundthal am 09. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 09. Aug. 2006 20:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich benutze CATIA V5R14. Zum Aufruf mit Call: Das ist reine Formsache, wenn ich es weglasse, löst es das Problem leider auch nicht. Die Zeile: ' Call Call oSelection.Add(oProduct) ' ist ein Abschreibfehler - habe hier im Forum versehentlich ein Call zu viel reinkopiert. Zu meinem Macro: ich durchsuche mein Root-Product nach Parts mit bestimmten Namen, um deren Position zu bestimmen. Nun kann es vorkommen, dass ein und das selbe Part mehrmals verbaut wurde (-> ein Part - mehrere Part-Instanzen). Um die Position bestimmen zu können, füge ich den Parts Punkte hinzu, um dessen Koordinaten auslesen zu können. Für den Fall, dass ich nun ein Part erwische, welches mehrmals verbaut wurde, habe ich nach längerem Probieren nur eine Lösung gefunden: Schleifen-Anfang -> gefundene Part-Instanz (Product) nach seinem Part durchsuchen (Call oSelection.Search(...)) -> wenn gefunden, Aktivierung der Part-Design-Workbench (hier kommt es dann ab dem zweiten Schleifen-Durchgang zu meinem Problem, da der Wechsel offentichtlich nicht schnell genug abläuft) -> Selektion der Part-Instanz, dann Aktivierung der Assembly-Workbench -> Zuweisen des Parts der selektierten Part-Instanz (set oPart = oPartInstance.ReferenceProduct.Parent.Part) -> Hinzufügen des Punktes, danach Auslesen der Koordinaten -> Löschen des Punktes Schleifen-Ende Das sieht doppelt gemoppelt aus, allerdings komme ich sonst nicht an die jeweiligen Parts der gefundenen Part-Instanzen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Axel.Strasser Ehrenmitglied V.I.P. h.c. Selbstständig im Bereich PLM/CAx
Beiträge: 4107 Registriert: 12.03.2001 Früher war vieles gut, und das wäre es heute immer noch, wenn man die Finger davon gelassen hätte!
|
erstellt am: 09. Aug. 2006 20:35 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
|
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 09. Aug. 2006 20:40 <-- editieren / zitieren --> Unities abgeben:
|
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 10. Aug. 2006 00:03 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Hallo mgheinz1001, aus meiner Erfahrung ist es nicht notwendig, den Workbench zu wechseln, um im Part zu arbeiten. Du mußt nur das Part über das Part-Dokument ansprechen, dann sollte die Funktionalität von Part-Design verfügbar sein. Von der Part-Instance kommst Du mittels .ReferenceProduct.Parent zum Part-Dokument und .ReferenceProduct.Parent.Part zum Part. Part-Dokument oder Part aktivieren und schon hast du die Part-Design-Umgebung. Wenn Du die Namen der abgearbeiteten Part-Dokumente in ein Array schreibst, kannst Du auch bei jeder Part-Instance prüfen, ob Die schon abgearbeitet ist. mfg, Lusilnie
------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Jules_Vernes Mitglied Systemadmin
Beiträge: 145 Registriert: 04.10.2005 Catia V5R24SP4
|
erstellt am: 10. Aug. 2006 08:11 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Guten Morgen, ich hab das Problem auch schon öffters gehabt und hab bis jetzt immer den Anwender von Hand in die entsprechende Umgebung wechseln lassen, weil ich den Übergang vom ProductDocument zum PartDocument nicht hin bekomme(siehe Code). Dim productDocument As ProductDocument Set productDocument = CATIA.ActiveDocument
Dim product As Product Set product = productDocument.Product .........................??????? Dim partDocument As PartDocument Set partDocument = ................Item("Sepp_Maier.CATPart") Vieleicht hat jemand von euch ne Idee Ich arbeite mit VBA und CATIA R14 SP3 HF56 Gruss Jules
[Diese Nachricht wurde von Jules_Vernes am 10. Aug. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 10. Aug. 2006 09:02 <-- editieren / zitieren --> Unities abgeben:
Noch mal zurück zu meinem Problem (s.o.!): wenn ich die Workbench von 'PartDesign' in 'Assembly' und dann wieder zurück wechsel, wird automatisch ein neues Part geöffnet. Grund dafür ist wahrscheinlich, dass der Code schneller abläuft als der Wechsel. Gibt es eine Möglichkeit das abzufragen?! ('CATIA.GetWorkbenchId' funktioniert nicht, da die abgefragete Eigenschaft, offensichtlich sofort gesetzt wird, ohne den Wechsel abzuwarten. Auf Sleep(...) würde ich gern verzichten) Zur Abgrenzung: ich möchte NICHT wissen, wie ich von der Part-Instanz zu meinem Part komme - dieses Problem habe ich bereits gelöst (s.o.!). Lusilnies Lösung funktioniert bei mir nicht, da ein und das selbe Part mehrmals verbaut wurde und ich damit nicht so einfach an die verschiedenen angezeigten Parts im Strukturbaum heran komme, welche eigentlich auf ein und das selbe Part zurückgehen (s.o.!) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mathias.bergundthal Mitglied informatiker
Beiträge: 153 Registriert: 03.08.2005 HP xw6000 - WXP Pro SP2 - CATIA V5 R16 SP9 - Visual Studio 2005
|
erstellt am: 10. Aug. 2006 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
also das mit der geschwindigkeit ... ist so ein problem... wenn du sleep nicht brauchen willst dann mach doch eine schleife in der du überprüfst wo du bist und wo du sein solltest... wenn dies erreicht, führe den code weiter aus. etwas anderes kommt mir momentan für dein problem nicht in sinn. gruss, mathias ------------------ In diesem Zeitalter der Massenkomunikation sind Verrücktheiten ansteckend. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
romanoir2005 Mitglied
Beiträge: 62 Registriert: 22.02.2005
|
erstellt am: 16. Aug. 2006 19:37 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Hallo Heinz, ich löse dieses Problem immer dadurch, dass ich nach dem Workbenchwechsel die Fensterdarstellung in CATIA umschalte; danach hat er die richtige Workbench immer erst gerafft. Die Fensterdarstellugn kannst Du leider nicht direkt über die Automatisierungsschnittstelle ansprechen, aber der Weg über "StartCommand" geht. Hier ein Beispiel: Catia.StartWorkbench "Assembly" Catia.StartCommand "cascade" Statt "cascade" kannst du auch "maximize" oder ähnliches nehmen. Manchmal flackert die Darstellung dann kurz etwas, aber Hauptsache die Workbench ist umgestellt. Bye, r.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Heini_K Mitglied
Beiträge: 34 Registriert: 26.09.2006 Catia V5R14SP4/R16 HP- Unix- Workstation
|
erstellt am: 03. Jan. 2007 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Hallo Heinz, Auch wenn der Beitrag nen bisschen spät kommt: Hast Du schonmal versucht Dein entsprechendes Part vom Assembly aus im Design- Mode zu laden und es dann zu aktivieren? In diesem Fall erzeugt CATIA nämlich kein neues Part. ------------------ Gruß, Matthias Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |