| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation: 3D-Visualisierung für After Sales, Service und Ersatzteile, eine Pressemitteilung
|
Autor
|
Thema: Referenz aus 3d-Element in globaler Variablen sichern (1318 mal gelesen)
|
fireman Mitglied Dipl.-Ing. (BA) Maschinenbau
  
 Beiträge: 736 Registriert: 22.11.2002
|
erstellt am: 26. Mai. 2004 18:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo alle miteinander, ich versuche mich nun ein wenig auf dem (für mich) neuen Terrain der Makroprogrammierung zu bewegen. Anhand eines Beispieles möchte ich mich nach oben hangeln, ich verstehe die Probleme dann meist besser. Leider hänge ich seit ein paar Tagen genau an einer Stelle fest: # Ich definiere in meinem Makro eine globale Variable (Anlagefläche) # Über eine User-Selektion soll im Verlauf des Makros eine Fläche ausgewählt werden, der Wert (Name der ausgewählten Fläche) soll dann der globalen Variablen zugewiesen werden (Anlagefläche soll den Namen der durch den Benutzer ausgewählten Fläche erhalten). # Im weiteren Verlauf des Makros soll dann eine Projektion in einer Skizze erfolgen, welche auf die am Anfang vom Benutzer ausgewählte Fläche zugreift (Fläche Projezieren). Die Frage(n): a) geht mein Vorhaben (globale Variable definieren, dieser einen Wert durch eine User-Selektion zuweisen, später mit der gloablen Variablen [die den zugewiesenen Wert; ausgewählte Fläche beinhaltet] eine Projektion erzeugen) b) kann mir jemand vielleicht die Programmzeile nennen, wie ich der globalen Variablen den Wert der User-Selektion zuweise. Für jede Hilfe äußert dankbar, Gruß aus dem wilden Süden, fireman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fireman Mitglied Dipl.-Ing. (BA) Maschinenbau
  
 Beiträge: 736 Registriert: 22.11.2002
|
erstellt am: 08. Jun. 2004 17:00 <-- editieren / zitieren --> Unities abgeben:         
Hallo nochmal miteinander, leider bin ich noch nicht wirklich weitergekommen, ich wollte aber nochmals auf meine Fragestellung aufmerksam machen. Weiß denn keiner eine Lösung? Falls jemand was weiß wäre es nett, wenn er/sie es weitergibt. Gruß aus dem wilden Süden, fireman Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 09. Jun. 2004 11:11 <-- editieren / zitieren --> Unities abgeben:          Nur für fireman
Hallo fireman, so müßte es gehen: Sub CATMain() Dim Anlageflaeche As Reference Dim odoc As PartDocument Set odoc = CATIA.ActiveDocument Dim oSel 'As Selection Set oSel = odoc.Selection Dim aSelArray(0) aSelArray(0) = "Face" oSel.Clear oSel.SelectElement2 aSelArray, "Fläche auswählen", False Set Anlageflaeche = oSel.Item(1).Reference Dim oSketch As Sketch Set oSketch = odoc.Part.MainBody.Sketches.Item("Skizze.XXXXX") oSketch.OpenEdition Dim oFactory2D As Factory2D Set oFactory2D = oSketch.Factory2D Dim oGeometricElements As GeometricElements Set oGeometricElements = oFactory2D.CreateProjections(Anlageflaeche) oSketch.CloseEdition odoc.Part.Update End Sub Gruss Steffen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fireman Mitglied Dipl.-Ing. (BA) Maschinenbau
  
 Beiträge: 736 Registriert: 22.11.2002
|
erstellt am: 13. Aug. 2004 10:53 <-- editieren / zitieren --> Unities abgeben:         
Hallo miteinander, Fragen über Fragen mal wieder..., ich plage mich mit der Selektion rum (erste Frage beantwortet, tut auch gut!), jetzt soll die Aufgabe ein wenig erweitert werden: Ich befinde mich in einer Baugruppe, welche zwei Teie eingefügt hat. Im einen ist eine Ebene definiert, welche kopiert werden soll, und dann im zweiten Teil eingefügt werden soll. Ich möchte diesen Weg gehen: Das Makro soll anhand der Namensgebung das erste Teil akivieren, dort eine Selektion der Auflageebne anhand des Namens "Auflageebene" vornehmen, diese kopieren, dann das zweite Teil aktivieren und dort einfügen. Ich bekomme das mit der Dokumentaktivierung und der Auswahl irgendwie nicht hin. Mein derzeitiger Code: Sub CATMain() Dim AktivTeil as PartDocument Dim Auswahl as Selection Set AktivTeil = CATIA.Documents.Item("master.CATPart").Part AktivTeil.Activate Set Auswahl = AktivTeil.Selection Set Auswahl = AktivTeil.Selection Auswahl.Add Auflageebene Auswahl.Copy End Sub Ich vermute den Fehler stark darin, dass ich mit der ganzen Klassenidee noch nicht so richtig durchsteige. Wenn jemand den korrekten Code kennt und mir weiterhelfen möchte bin ich sehr dankbar dafür (Also Teil "Master" aktivieren, dort die "Auflageebene" anhand des Namens suchen und diese Kopieren). Danke schon mal, Gruß aus dem Wilden Süden, fireman ------------------ ---------------------------- Neugier ist der erste Schritt des Vortschritts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
 
 Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 13. Aug. 2004 13:03 <-- editieren / zitieren --> Unities abgeben:          Nur für fireman
Hallo fireman, in letzter Zeit häufen sich die Beiträge, in denen es darum ging, ein Part in einer Baugruppe über ein Makro zu aktivieren. Aus meiner Sicht sehe ich keine Notwendigkeit dies zu tun, da auf jedes Objekt (auch Objekte aus Parts) innerhalb einer Baugruppe zugegriffen werden kann. Man muß nur den Objektpfad von oben nach unten durchgehen. Nun zu deinem Problem: Innerhalb eines geöffneten Dokuments gibt es nur eine (und nur eine!) Selection-Instanz: CATIA.ActiveDocument.Selection Über dieses Selektion-Objekt lassen sich auch Geometrien teileübergreifend kopieren und einfügen. Man muß nur für die Auswahl den kompletten Objektpfad angeben. Im nachfolgenden Beispiel wird eine Baugruppe verwendet, die aus 2 Teilen besteht. Im ersten Teil gibt es eine Ebene, die im ersten geöffneten Körper an erster Stelle steht. Im zweiten Teil gibt es einen geöffneten Körper, in dem die kopierte Ebene eingefügt werden soll. Sub CATMain() 'Aktives Dokument setzen Dim oActiveDoc As ProductDocument Set oActiveDoc = CATIA.ActiveDocument 'Objekte auf Part1 und Part2 setzen Dim oPart1Doc As PartDocument Dim oPart2Doc As PartDocument Set oPart1Doc = oActiveDoc.Product.Products.Item(1).ReferenceProduct.Parent Set oPart2Doc = oActiveDoc.Product.Products.Item(2).ReferenceProduct.Parent 'zu kopierendes Objekt und Einfügepunkt setzen Dim oCopyObject As HybridShape Dim oPasteObject As HybridBody Set oCopyObject = oPart1Doc.Part.HybridBodies.Item(1).HybridShapes.Item(1) Set oPasteObject = oPart2Doc.Part.HybridBodies.Item(1) 'kopieren und einfügen ausführen oActiveDoc.Selection.Clear oActiveDoc.Selection.Add oCopyObject oActiveDoc.Selection.Copy oActiveDoc.Selection.Clear oActiveDoc.Selection.Add oPasteObject oActiveDoc.Selection.PasteSpecial "CATPrtResultWithOutLink" oPart2Doc.Part.Update End Sub Gruss Steffen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fireman Mitglied Dipl.-Ing. (BA) Maschinenbau
  
 Beiträge: 736 Registriert: 22.11.2002
|
erstellt am: 13. Aug. 2004 14:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo Steffen, das sind gleich mal 10U's für eine einwandfrei Lösung. Ich versuche mir jetzt nur noch ein paar Sachen umzumünzen, Beispielsweise möchte ich die Referenzen über die Namen der Teile und Geometrien suchen lassen. Das ist wichtig, da im späteren (richtigen) Einsatz die Suche über mehrere Instanzen laufen sollte und das Makro natürlich immer auf die richtigen Teile zugreifen soll. Zudem könnte ich mir aber auch eine User-Selection für die entsprechenden Teile vorstellen. Mit der Sache zuerst ein bestimmtes Dokument zu aktivieren möchte ich aber auch noch ein wenig dran bleiben. Dein Code funktioniert beispielsweise nur, wenn auch tatsächlich das Produkt aktiv ist. Das ist zwar gut, aber es ist dann im Alltagseinsatz halt oft so, dass der Konstrukteur das Makro aufruft und nicht beachtet, dass er in der richtigen Instanz (also oberes Produkt) sitzt. Und wenns nicht tut gehen die Fragen ja gleich immer los (von den Killerphrasen mal ganz abgesehen). Wegen der Frage: ich bin wie vielleicht schon mal erwähnt komplett neu auf der Makros-Schiene, das geht dazu noch nebenher, daher kommen leider auch immer wieder mal ein wenig konfuse Fragen von meiner Seite. Auf jeden Fall nochmal vielen Dank für diese Antwort, bin somit einen großen Schritt weiter! Wenns dann soweit ist ein schönes WE und viele Grüße aus dem wilden Süden, fireman ------------------ ---------------------------- Neugier ist der erste Schritt des Vortschritts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fireman Mitglied Dipl.-Ing. (BA) Maschinenbau
  
 Beiträge: 736 Registriert: 22.11.2002
|
erstellt am: 14. Aug. 2004 00:38 <-- editieren / zitieren --> Unities abgeben:         
Hallo miteinander, die Fragen gehen leider nicht aus: ich versuche gerade seit geraumer Zeit den (wirklich hilfreichen) Programmcode von Steffen Hohmann noch ein wenig umzubauen, und zwar möchte ich die ganze Selektion nicht über den Indexwert der Parts sowie der Elemente laufen lassen, sondern über einen streng definierten Namen. Bei der Ebene und dem offenen Körper in welcher sich diese befindet funktioniert das alles auch sehr gut, aber beim Part habe ich leider meine Problemchen. Hier meine geänderte Programmzeile (das Part, welches angesprochen werden soll heißt masterCPL): Set oPart1Doc = oActiveDoc.Product.Products.Item("masterCPL").ReferenceProduct.Parent Im Vergleich nochmal die Originalzeile von Steffen (die funktioniert!): Set oPart1Doc = oActiveDoc.Product.Products.Item(1).ReferenceProduct.Parent Was um alles in der Welt mache ich falsch (der eine oder andere denkt jetzt sicher: er versucht zu programmieren!!*g*), ich hoffe trotzdem, dass Ihr noch ein wenig Geduld habt und mir bei der Programmierung noch ein wenig auf die Sprünge helft. Wie immer besten Dank im voraus und Grüße aus dem wilden Süden, fireman ------------------ ---------------------------- Neugier ist der erste Schritt des Vortschritts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |