Autor
|
Thema: Führende Instanz definieren (1089 mal gelesen)
|
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 02. Dez. 2008 11:43 <-- editieren / zitieren --> Unities abgeben:
Hallo, per Makro möchte ich ein Achsensystem aus einem Part (Geber) innerhalb der Produktstruktur in ein anderes Part (Nehmer) kopieren (As Result). Gibt es vom Nehmer nur eine Instanz klappt alles wunderbar. Bei mehreren Nehmerinstanzen, die unterschiedliche Positionen im Raum haben, habe ich jedoch das Problem, dass ich nicht die führende Instanz (in die kopiert werden soll) bestimmen kann. (siehe Anhang) Kann mir evt.jemand einen Tip geben, wie ich die im Anhang beschriebenen Fälle per Makro steuern kann. Danke im voraus, & Grüsse aus dem Süden. Crio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 02. Dez. 2008 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo, hier haben wir schon mal eine ähnliche Diskussion geführt: In einem Process ein Koordinatensystem kopieren Das Problem ist folgendes. Du hast zwei Nehmer-Instanzen die ein und die selbe Datei sind, die sich aber an unterschiedlichen Orten im Produktkontext befinden. Fügst du jetzt einer Instanz ein Achsensystem hinzu, erschein diese auch in der zweiten Instanz aber durch die unterschiedlichen Lage der beiden Instanzen an einem anderen Ort. Das passiert, da die beide Instanzen ein und die selbe Datei sind. Aber wo genau sollen das Achsensystem nach deinem Kopiervorgang den sein? Direkt über dem das Geber-Parts? Ich würde mir mein Makro anderes aufbauen. Und zwar im Nehmer-Part durch das Makro ein neues Achsensystem erstellen, das direkt auf dem vom Anwender ausgewählten Achsensystem liegt. Dann hast du zwar keine Kopie, die brauchst du aber nicht dann du willst ja so und so mit "as Result" einfügen. ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 02. Dez. 2008 12:11 <-- editieren / zitieren --> Unities abgeben:
Hallo denyo_1, mein Ziel ist es, dass ich das Achsensystem in der Nehmerinstanz lagerichtig habe (d.h. kongruent zum Achsensystem im Geberpart), welche ich während des Makrolaufs auswähle. Ein neues Achsensystem im Nehmerpart erzeugen, geht leider nicht, da das Ziel des Makros auch sein soll, bei Änderungen im Geberpart, diese an das Nehmerpart zu übergeben. Da das Achsensystem im Nehmerpart publiziert ist, und diese Publikation erhalten bleiben soll, hole ich mir immer nur eine temporäre Kopie ins Nehmerpart, und setze den Nullpunkt des bereits vorhandenen Achsensystems auf das neue. Geht alles schon ein bisschen weit - Kernstück ist jedoch, dass ich das Achsensystem, in einer von mir gewählten Instanz lagerichtig habe. Die Lage in den anderen Instanzen ist erstmal unerheblich. Vielleicht hast du ja dazu noch nen Tip Danke und Gruss aus dem Süden Crio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 02. Dez. 2008 23:41 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo Criollo, wenn ich Dich richtig verstehe, hast Du Probleme, die richtige Instanz des Parts für's Einfügen zu selektieren. Hier wären die Stichworte zum Lösungsansatz: Selection und FindObject! Als Code-Zeile lautet dies in etwa Code: ... Selection.FindObject("CATIAProduct") ...
Über diese Methode kannst Du genau auf die selektierte Instanz zugreifen (und Dich notfalls auch zum Root-Knoten "hoch hangeln"). Das Thema wurde, so glaube ich zumindest, hier auch schon ausführlicher diskutiert. 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 |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 03. Dez. 2008 06:39 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo Crillo, es hilft dir gar nichts, wenn du die "richtige Instanz" selektierst, da beim kopieren von CATIA immer die Transformation der ersten im Tree verbauten Instanz verwendet wird. Die einzige Möglichkeit dies zu vermeiden besteht darin, die Knoten aller Instanzen (bis auf den der Instanz, aus welcher du kopieren möchtest) zu deaktivieren. Hierbei handelt es sich NICHT um einen Bug; der Grund ist vielmehr die Tatsache, das sich die Geometrie eines Parts im Dokument befindet und nicht der Instanz. Dazu habe ich vor 2 Jahren eine PMR bei IBM/Dassault gestellt. Wenn ich mich nicht irre, gibts dazu auch schon beiträge im Forum. Gruß TomTom
------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 03. Dez. 2008 07:37 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für die Antworten. Das mit .FindObject hatte ich schon ausprobiert, aber wie von tomtom1972 erwähnt, bringt das leider nicht allzuviel. Ich werde jetzt heute mal versuchen, das Thema mit dem aktivieren / deaktivieren umzusetzen. Bin optimistisch dass es funktioniert Vielen Dank nochmal Crio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 03. Dez. 2008 16:08 <-- editieren / zitieren --> Unities abgeben:
Dubioses Catia... hab nun die Thematik mit dem aktivieren / deaktivieren eingebracht. Funktioniert einwandfrei - beim ersten Mal. Möchte ich aber ein zweites Achsensystem in eine andere Instanz kopieren. So läuft das Makro zwar fehlerfrei durch. CATIA nimmt aber einfach die führende Instanz vom ersten Makrolauf, und verwendet deren Transformation. Das einzige was zu helfen scheint, ist ein CATIA Neustart. Dann läuft wieder alles sauber. Falls mir hier noch jemand einen Typ geben kann, wie man die französische Dame in diesem Fall bezähmen kann, wäre das super. Danke Crio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 03. Dez. 2008 21:59 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo Criollo, wenn das mit der Instanz nicht funktioniert, könntest du doch alternativ auch einen anderen Weg gehen: 1. Berechnung der "Move"-Matrix zwischen Geber und Nehmer 2. Kopieren des Elementes aus dem Geber 3. separates Öffnen des Nehmers 4. Einfügen des kopierten Elementes (As Result) in den Nehmer 5. Move des eingefügten Elementes entsprechend "Move"-Matrix Wie das mit der Matrix funktionieren kann, zeigt Dir z.B. das Script "DMUpstcopypastekeepabsoluteposition.CATScript" von DS, was Du in der Automation.chm (oder so ähnlich) findest. 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 |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 04. Dez. 2008 07:05 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo Crillo, und wieder einen Schritt weiter. Du hast nur noch folgenden Fehler gemacht: Du must nach dem kopieren der ersten Instanz nicht nur ein Selection. Clear ausführen sondern die neue Selektion über ein Selection.Search vornehmen, d.h. ich gehe davon aus, das du es bisher über ein Selection.Add gemacht hast, da dann der von dir beschriebene "Fehler" auftritt. Also am einfachsten geht es wenn du es so abänderts ... Selection.Clear, dann Selection.Add() ... (wie bisher, hier ist die Transformation noch falsch) dann die Selection auslesen, ein erneutes .clear und über Selection.Search wieder befüllen. Dann ist die Transformation OK. Falls du die Möglichkeit dazu hast kannst du das selektierte Object nach dem .Add umbenennen (Selection.Item(1).Value.Name = unikaler String, z.B. Time), und das .Search nach dem String ausführen und ihm danach wieder seinen alten Namen zuweisen. Das ganze hat 2. Nachteile: 1) die Umbenennerei führt zu einem "Modified" des entsp. Parts im SaveManegement 2) das .Search dauert (vor allem bei großen Strukturen) "wesentlich" länger als das .Add An 1) kannst du nix ändern. 2) wird "wesentlich" schneller wenn du (sofern du viele Objekt kopieren willst) zum Scriptstart rekursiv alle (!) Nodes deaktivierst und immer nur den aktivierst, aus dem du kopieren willst und ihn danach wieder daektivierst. Der Vorschlag von Lusilnie funktioniert ebenfalls sofern du alles nur "As Result" einfügen willst. Mit der Vorgehensweise die du momentan verfolgst kannst du alle Objekte auch mit Link einfügen. Ich erzeuge mir auf diese Weise .ALLCATParts mit Links zu der Original-Struktur. Ich kann dir auch versicheren, das das ganze funktioniert, ohne das CATIA neu gestartet werden muss. Falls du noch Probleme hast sende mir eine PM zu. Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 04. Dez. 2008 11:13 <-- editieren / zitieren --> Unities abgeben:
Hallo, danke für die Antworten. Bei der Lösung von tomtom1972, habe ich das Problem, das ich mit der .Search Methode des Selection Objekts nicht auf den AxisSystemNode komme, da beim Makrolauf immer ein Produktknoten aktiv ist. Vielleicht fällt mir ja dazu noch eine Lösung ein. @Lusilnie: Werde mir das von dir angesprochene Beispiel mal zu Gemüte führen. Habe zwar bisher schon etliches an Zeit in meinen derzeitigen Weg investiert, aber vielleicht hilft es ja, was anderes zu versuchen. Danke & Gruss Crio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|