Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Referenz aus 3d-Element in globaler Variablen sichern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von fireman an!   Senden Sie eine Private Message an fireman  Schreiben Sie einen Gästebucheintrag für fireman

Beiträge: 736
Registriert: 22.11.2002

erstellt am: 26. Mai. 2004 18:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von fireman an!   Senden Sie eine Private Message an fireman  Schreiben Sie einen Gästebucheintrag für fireman

Beiträge: 736
Registriert: 22.11.2002

erstellt am: 08. Jun. 2004 17:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
 


Sehen Sie sich das Profil von Steffen Hohmann an!   Senden Sie eine Private Message an Steffen Hohmann  Schreiben Sie einen Gästebucheintrag für Steffen Hohmann

Beiträge: 446
Registriert: 06.03.2002

erstellt am: 09. Jun. 2004 11:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fireman 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fireman an!   Senden Sie eine Private Message an fireman  Schreiben Sie einen Gästebucheintrag für fireman

Beiträge: 736
Registriert: 22.11.2002

erstellt am: 13. Aug. 2004 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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
 


Sehen Sie sich das Profil von Steffen Hohmann an!   Senden Sie eine Private Message an Steffen Hohmann  Schreiben Sie einen Gästebucheintrag für Steffen Hohmann

Beiträge: 446
Registriert: 06.03.2002

erstellt am: 13. Aug. 2004 13:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für fireman 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von fireman an!   Senden Sie eine Private Message an fireman  Schreiben Sie einen Gästebucheintrag für fireman

Beiträge: 736
Registriert: 22.11.2002

erstellt am: 13. Aug. 2004 14:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von fireman an!   Senden Sie eine Private Message an fireman  Schreiben Sie einen Gästebucheintrag für fireman

Beiträge: 736
Registriert: 22.11.2002

erstellt am: 14. Aug. 2004 00:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz