Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Unterprodukt als ActiveDocument setzen?

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
Autor Thema:  Unterprodukt als ActiveDocument setzen? (3014 mal gelesen)
MarcDe
Mitglied



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

Beiträge: 137
Registriert: 11.10.2006

CATIA R18 SP2, BN 18, HF 162
Win 7 64Bit

erstellt am: 29. Okt. 2008 20:19    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,

ich habe ein großes VBA-Programm geschrieben. Es erzeugt eine firmenspezifische Stückliste. Alles funktioniert gut. Man muss jedoch das Product einzelnt öffnen, von dem man die Stückliste erstellt haben möchte. Das soll geändert werden. Es soll möglich sein das übergeordnete Product zu öffnen, in dem das Untergeordnete sich befindet und dann durch vorheriges auswählen die Stückliste wie gewohnt von dem untergeordneten Product erstellt werden. Leider funktioniert das bisher nicht, weil ich in meinem Quellcode folgendes habe:

set productdocuemt = CATIA.ActiveDocument

Dann nimmt er natürlich immer das größte Product bzw das Rootproduct und macht von dem die Stückliste. Ich möchte da aber flexibel sein und möchte die große Baugruppe öffnen und durch "Active-Setzen" der unterbaugruppen mein stücklistenmakro drauf los lassen. Kann mir da jmd sagen wie ich ohne mein komplettes Programm ändern zu müssen ihm sage das er die Userauswahl (also ein Untergeordnetees Product) als Referenzproduct (praktisch als neues activedocument) nehmen soll?

Man muss sicher mit UserSelection arbeiten, aber da habe ich irgendwie schon viele Dinge probiert und so recht will es nicht klappen. Hoffe mir kann jemand weiterhelfen 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 30. Okt. 2008 08:27    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 MarcDe 10 Unities + Antwort hilfreich

Hallo MarcDe,

das Catia.ActiveDocument ist immer das im aktiven Window geöffnete Modell, egal ob es sich um ein .CATProduct, .CATPart oder sonst was handelt. Daran lässt sich erst mal nix ändern.
Interessiert aber auch nicht, da es deinem Script völlig egal ist (bzw. sein sollte) was das ActiveDocument ist.

Set oProd = Catia.ActiveDocument.Product.Products.Item(1)

z.B. gibt dir den ersten Knoten aus deiner Struktur zurück (also die Instanz), und

Set oProdDoc = oProd.ReferenceProduct.Parent

das zugehörige Dokument. Auf diese Weise kannst du alles in deiner Struktur ansprechen. Suche im Forum mal nach dem Stichwort rekursiv, da findest du unzählige Bsp.

Gruß

------------------
tomtom1972

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

chung
Mitglied



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

Beiträge: 23
Registriert: 25.04.2007

MS Windows XP SP2; x86 3,72 GHz; 4GB RAM; NVIDIA Quadro FX 1400; CATIA V5 R17 SP7

erstellt am: 11. Nov. 2008 10:28    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 MarcDe 10 Unities + Antwort hilfreich

Hallo MarcDe

wahrscheinlich bin ich schon zu spät, aber evtl. kann ich dir ja noch ein bisschen helfen. Tomtom1972 hat dir ja den richtigen Weg gezeigt. Es geht aber noch etwas flexibler:

Wenn du vorab schon ein Unterprodukt ausgewählt hast bekommst du das mit :

Dim oSelection As Selection
Set oSelection = CATIA.ActiveDocument.Selection
Set oProd = oSelection.Item2(1).Value

Dann weiter wie bei TomTom1972
Mögliche FalschAuswahl muss man natürlich noch abfangen.

Noch schöner wirds so:

Dim oSelection As Selection
Set oSelection = CATIA.ActiveDocument.Selection
Dim Ergebnis As String
Dim FilterProd(0)
FilterProd(0) = "Product"
Ergebnis = oSelection.SelectElement2(FilterProd, "Produkt auswaehlen", true)
If Ergebnis <> "Normal" or oDocument.Selection.Count > 1 Then
      MsgBox "Funktion abgebrochen. (Mehrere Elemente oder falsches Element selektiert)"
  Exit Sub
End If
Set oProd = oSelection.Item2(1).Value

Jetzt wird deine Vorauswahl gefiltert (nur Produkte durchlassen) und wenn die Vorauswahl verkehrt war oder nicht gewählt wurde, wird der User aufgefordert ein Product auszuwählen.

Gruß

chung

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ivanl
Mitglied



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

Beiträge: 28
Registriert: 21.10.2011

i7 2,80 Ghz
8GB Ram
Win XP Pro SP2
CATIA V5 R19 SP9

erstellt am: 03. Jan. 2012 17:02    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 MarcDe 10 Unities + Antwort hilfreich

Hallo zusammen und frohes neues,

ich bin mir nicht ganz sicher ob ich hier im richtigen thread bin, aber ich schildere einfach mal mein problem. Ich glaube ich habe ein ähnliches problem wie chung, dass ich ein beliebiges Product in meinem Strukturbaum aktiv setzen will.

Beispielsweise sieht mein Strukturbaum folgendermaßen aus (das funktionierte Makro soll auch auf beliebig aussehende Strukturbäume funktionieren):

Product
+Product1
+Product2
  +Product3
  +Prodcut4
    +Product5
    +Part1
    +Part2
    +Part3
    +Part4

Man nehme jetzt an, dass in Product5/part2 eine Kinematik (skelett) hinterlegt sei. aus dieser Kinematik möchte ich mit den restlichen Parts automatisch ein Dressup erzeugen was soweit funktioniert.

mein jetziges nmakro funktioniert, aber auch nur weil ich ihm hinterlege in welchem Product die Kinematik hinterlegt ist:

Sub CATMain()

dim productDocument1 as productdocument
Set productDocument1 = CATIA.ActiveDocument

dim product1 as product
Set product1 = productDocument1.Product

dim products1 as products
Set products1 = product1.Products

dim product2 as product
Set product2 = products1.Item(1)

dim products2 as products
Set products2 = product2.Products

dim product3 as product
Set product3 = products2.Item(1)

dim products3 as products
Set products3 = product3.Products

dim product4 as product
Set product4 = products3.Item(1)

dim products4 as products
Set products4 = product4.Products

dim product5 as product
Set product5 = products4.Item(1)

...DRESSUP

Sub end


mit diesem Programmaufbau ist es nur möglich automatische dressups zu erzeugen wenn jeder STrukturbaum identisch aussieht. ich dachte mir das z.b. durch selektion des parts indem die Kineamtik versteckt ist und über die parent funktion auf das zugehörige Product zurückgeschlossen werden kann und dieses dann aktiv setze. entweder geht das so überhaupt nicht oder ich habe einen fehler drinnen:

Code:

Sub CATMain()

Dim prodWork as product
Dim selWork As Selection

Set selWork = CATIA.ActiveDocument.Selection
Set prodWork = selWork.Item(1).Value

ReDim Datenfeld(selWork.count)

For Zaehler = 1 To selWork.Count
    Set Datenfeld(Zaehler) = selWork.Item(Zaehler).Value
Next

selWork.clear
selWork.add  Datenfeld(1)

Dim prod as product
Set prod = selWork.Item(1).Value

set RootProd= prod.Parent.Parent
'msgbox(RootProd.Name)

Set productDocument1 = CATIA.ActiveDocument

Set RootProd = productDocument1.Product

...DRESSUP

Sub end


oder geht sowas nur mit einer rekursiven schleife? ist das aber nicht das selbe? dabei würde ich doch auch nur alle produkte durchlaufen und sobald ich auf das produkt gestoßen bin in dem sich die Kinematik befindet dieses auf aktiv setze.


Grüße Ivanl

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 03. Jan. 2012 17:54    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 MarcDe 10 Unities + Antwort hilfreich

Servus
Also ganz verstehe ich deine Frage nicht.
Nur zum Verständnis: mit einem Makro kann man nicht ein Unterprodukt aktiveren/aktiv setzen.
Du willst also dein RootProd (=Product5) bestimmen, oder?
Dein zweiter Code sieht aber vielversprechend aus. (warum brauchst du ein Datenfeld?). Sollte es nicht reichen über das Parent deiner Selektion auf dein RootProduct Product5) zuzugreifen?
Code:
set RootProd= selWork.Item(1).Value.Parent '(oder 2x Parent??)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ivanl
Mitglied



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

Beiträge: 28
Registriert: 21.10.2011

i7 2,80 Ghz
8GB Ram
Win XP Pro SP2
CATIA V5 R19 SP9

erstellt am: 03. Jan. 2012 18:27    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 MarcDe 10 Unities + Antwort hilfreich

Hi Bernd,

jo ich möchte das Roduct5 aktiv setzen. Stimmt den kompletten Teil mit dem Datenfeld kann man rausschmeißen. Das war ein Programmteil den ich mal rainkopiert habe, aber vergessen ihn rauszuschmeissen. Habe es mal umgebaut:
Sub CATMain()

Dim prodWork as product
Dim selWork As Selection

Set selWork = CATIA.ActiveDocument.Selection
Set prodWork = selWork.Item(1).Value

set RootProd= selWork.Item(1).Value.Parent.Parent

Set productDocument1 = CATIA.ActiveDocument

Set RootProd = productDocument1.Product

......
Sub End


mit der Programmzeile die du mir überlassen hast gibt es keine Änderung, da es quasi das gleiche ist was ich schon in meinem Code drinnen hatte. Der einzige unterschied ist das der code um eine Zeile kürzer ist.

Wenn ich mein Makro so laufen lasse bringt er zwar keinen Fehler aber er verlinkt mir die Bauteile nicht zu den Kinematiken, wenn ich es so mache wie ganz oben beschrrieben indem ich ihm den Pfad fest vorgebe funktioniert es. Würde es etwas bringen wenn ich dir den ganzen Programmcode mal zeige?

Grüße Ivanl

[Diese Nachricht wurde von Ivanl am 03. Jan. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 03. Jan. 2012 18:30    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 MarcDe 10 Unities + Antwort hilfreich

Servus
Und warum setzt du das RootProd 2x? Für was brauchst du das productDocument1? (lösche mal diese Zeilen Set productDocument1 = CATIA.ActiveDocument , Set RootProd = productDocument1.Product)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ivanl
Mitglied



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

Beiträge: 28
Registriert: 21.10.2011

i7 2,80 Ghz
8GB Ram
Win XP Pro SP2
CATIA V5 R19 SP9

erstellt am: 03. Jan. 2012 18:39    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 MarcDe 10 Unities + Antwort hilfreich

Hi Bernd,

oki jetzt gehts  . Ich glaube mir fehlen noch bisschen die Grundlagen, da ich erst vor cs 2 Monaten mit der Makroprogrammierung angefangen habe. Ich dachte ich muss es als activeDocument setzen, aber dies scheint nicht so. Danke für die schnelle hilfe.

Grüße Ivanl

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)2023 CAD.de | Impressum | Datenschutz