Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  Makro allgemein anwendbar machen

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
  
CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min 48
  
KISTERS 3DViewStation: Schutz sensibler 3D CAD Daten, egal von wo Sie arbeiten, eine Pressemitteilung
Autor Thema:  Makro allgemein anwendbar machen (3020 mal gelesen)
Moholic79
Mitglied
Student

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

Beiträge: 3
Registriert: 28.04.2011

erstellt am: 28. Apr. 2011 15: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

Hallo miteinander,

ich bin neu hier.  Euer Forum ist echt Klasse. Ich habe auch schon ein paar Hilfen gefunden.

Leider habe ich zu dem jetztigen Problem nichts gefunden das mir weiterhilft. Leider bin ich auch nicht mehr fit was das Schreiben von Makros betrifft.

Zu meinem Problem:  Ich habe rund 400Parts die ich in meiner Projektarbeit bearbeiten muss...

Ich möchte bei einem Product ein Part mit einem neuen Parameter versehen und das dann mit einer Formel verknüpfen.

Ich habe mir die Makros aufgezeichnet und zurechtgestuzt. Soweit funktioniert es auch.  Allerdings nur in diesem Product und nur dieses eine Part. 
Ich möchte es gerne allgemein anwendbar machen, in anderen Products und Parts.
Mir würde es erstmal völlig reichen wenn ich das Part selectieren muss und dann das Makro starte(da ich noch die Messung um die Masse erweitern muss wäre das nicht so schlimm, ein Makro für die Erweiterung um Mass Volumen oder ähnliches geht irgendwie garnicht zu erstellen).  Es muss nicht das ganze Product durchgehen und alle Parts mit Parameter und Formel versehen.

Wäre super wenn Ihr mir da weiterhelfen könnt.  Ein paar hinweise oder wie ich mir das vorstelle habe ich beigefügt.

Language="VBSCRIPT"

Sub CATMain()

'1.Teil Parameter hinzufügen bzw. add Properties

Set documents1 = CATIA.Documents


''''hier wird das Product angespochen ("4141A4D53C usw.")...habe es mit.. Set partDocument1 = CATIA.ActiveDocument ..probiert aber es gibt dann im Späteren verlauf ein problem.

Set partDocument1 = documents1.Item("4141A4D53C8A2D1E4141A4...")


''''hier mein Part das müsste allgemein ansprechbar sein bzw. den Namen des Parts ("3H__3571080_0000_01__A")einlesen und später bei "`3H__3571080_0000_01__A\InertiaVolume.1\Mass` "...wieder eintragen werden

Set product1 = partDocument1.GetItem("3H__3571080_0000_01__A")

Set product1 = product1.ReferenceProduct

Set parameters1 = product1.UserRefProperties

Set dimension1 = parameters1.CreateDimension("PartMass", "MASS", 0.000000)

'''''geht auch ohne diese Zeile
'dimension1.ValuateFromString "`3H__3571080_0000_01__A\InertiaVolume.1\Mass` "

Set product1 = product1.ReferenceProduct


'2.Teil hinzufügen der Formel

Set documents1 = CATIA.Documents


''''hier wird das Product angespochen ("4141A4D53C usw.")...habe es mit.. Set partDocument1 = CATIA.ActiveDocument .. geht leider nicht.

Set partDocument1 = documents1.Item("4141A4D53C8A2D1E4141A4...")

Set part1 = partDocument1.Part

Set relations1 = part1.Relations

Set parameters1 = part1.Parameters


'''''hier müsste wieder das selektierte part eingetragen werden da immer dort der Partname eingetragen werden muss bzw. die Bezeichnung von oben beim erstellen des Parameters("partname\Properties\PartMass")

Set dimension1 = parameters1.Item("3H__3571080_0000_01__A\Properties\PartMass")

Set formula1 = relations1.CreateFormula("Formula.3", "", dimension1, "InertiaVolume.1\Mass ")

formula1.Rename "Formula.3"

End Sub


Vielen Dank schon mal

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

tobiley
Mitglied
Masterstudent


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

Beiträge: 59
Registriert: 15.02.2010

Win XP
CatiaV5 R17, R18, R19
HD2-Lizenz
VB2008

erstellt am: 28. Apr. 2011 20:43    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 Moholic79 10 Unities + Antwort hilfreich

Hallo,

hast du immer nur ein Product und ein Part auf? dann könnntest du anstatt der NAmen auch den Index nehmen also z.B.

Code:

Set partDocument1 = documents1.Item(1)

Alternativ könntest du auch eine UserSelection machen und das Product sowie das Part auswählen oder nur das product falls sich wiederum nur ein Part darunter befindet.
Sollte Interesse an dieser Lösung bestehen eben melden dann gebe ich dir meine Lösung zu einer UserSelection steht aber z.B. auch im Ziethen drin. Den NAmen kannst du dann auslesen

Aus welchem Grund funktioniert das nicht?

Code:

Set product1 = CATIA.ActiveDocument.Product

Set part1 = product1.Products.Item(1).ReferenceProduct.Parent.Part


mfg Tobi

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

Moholic79
Mitglied
Student

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

Beiträge: 3
Registriert: 28.04.2011

erstellt am: 28. Apr. 2011 23:12    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 Tobi,

in dem Product sind viele Parts leider nicht nur eins. In diesem Product sind auch weitere Products usw in dem dann Parts sind. Wir arbeiten mit einer VPM-Umgebung und eigentlich wenn ich die Baumstruktur so anschaue ist vor jedem Part ein Product Part.

Beispiel:
Product-Baugruppe-
  -Product-Part-
      -Part
        -PartBody
        -Parameter

Ich kann leider erst wieder Mittwoch sachen an dem System testen.  Auf dem PC sieht einiges anders aus.

Allerdings sollte es ja auch auf dem PC laufen.

mfg Ben

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

tobiley
Mitglied
Masterstudent


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

Beiträge: 59
Registriert: 15.02.2010

Win XP
CatiaV5 R17, R18, R19
HD2-Lizenz
VB2008

erstellt am: 29. Apr. 2011 09:36    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 Moholic79 10 Unities + Antwort hilfreich

Hallo Ben,

willst du denn alle Parts mit einem Parameter versehen, dann empfehle ich dir ne rekursive Schleife die nach allen Parts in der Struktur sucht. Oder willst du nur bestimmte Parts mit einem neuen Parameter versehen, dann würde ich die UserSelection nehmen.

Bei CATIA steht in einer Baugruppe mit Produkten und Parts immer ein Partprodukt vor jedem Part. Deswegen das .ReferenceProduct.Parent.Part.
Du solltest dir mal im VBA Editor dein oberstes Product einer Variablen zuweisen (Set a = CATIA.ActiveDocument.Product) und dann eine Überwachung hinzufügen, dann kannst du dich im Watch Window durch die Struktur klicken und sehen wie alles aufgebaut ist.


mfg Tobi

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

Moholic79
Mitglied
Student

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

Beiträge: 3
Registriert: 28.04.2011

erstellt am: 11. Mai. 2011 09:25    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 Tobi,

endlich kann ich wieder am meinem Projekt arbeiten...Also ich habe versucht die User Selction zu erstellen.  Ich bekomme es leider gar nicht hin. Das heißt, ich bin sehr an deiner Lösung interesiert.  Kann ich noch irgendetwas bereitstellen?

Gruß Ben

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

ptit.tom
Mitglied
CAD-Berater


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

Beiträge: 115
Registriert: 11.02.2005

win10, CATIA R19 bis R30

erstellt am: 11. Mai. 2011 11:48    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 Moholic79 10 Unities + Antwort hilfreich

Hallo,

Du hast einige Frage nicht beantwortet:
- Sind deine Product/Part-Strukture immer gleich ? (z.B immer nur 1 Part unter ein Produkt) ?
- Will du nur die Parts ändern ? (sowie es aussieht nicht)

Wenn du durch die Struktur navigieren willst kannst du eine rekursive Funktion verwenden (die Funktion ruft sich selbst).

Code:

Sub CATMain()
Dim oDoc As Document
Set oDoc = CATIA.ActiveDocument

Dim oProd As Product
Set oProd = oDoc.Product

Debug.Print "Name:" & oProd.Name
ShowStructure oProd
End sub

Function ShowStructure( oProd As Product)
  Dim cSubProducts As Products
  Set cSubProducts  = oProd.Products

  Dim oChildProduct As Product
  Dim I As Integer
 
  If cSubProducts.Count >=1 'Das Produkt hat Sub-Produkte
      For I=1 to cSubProducts.Count
        Debug.Print "Name:" & cSubProducts.Item(I).PartNumber 'Man Zeigt den Name des SubProduct
        Set oChildProduct = cSubProducts.Item(I)
        ShowStructure ochildProduct 'und startet die Funktion für das SubProduct
      Next
  End If
End Function




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

tobiley
Mitglied
Masterstudent


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

Beiträge: 59
Registriert: 15.02.2010

Win XP
CatiaV5 R17, R18, R19
HD2-Lizenz
VB2008

erstellt am: 12. Mai. 2011 13:55    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 Moholic79 10 Unities + Antwort hilfreich

Hallo Ben,

Hier ein Beispiel-Code für eine UserSelection. Bei dem Bespiel können nur Körper und geometrische Sets angewählt werden. Das kann natrürlich auch auf ein Product abgeändert werden, mit Hilfe des Parameters InputObjectType1(1), die Arraygröße muss dann selbstverständlich angepasst werden, also bei nur einem Typ müsste es "Dim InputObjectType1(0)" heißen. Diese Methode steht aber auch in dem Buch CATIA V5 Makroprogrammierung von Ziethen gut erklärt, wenn ich mich richtig erinnere.

Gruß Tobi


Code:

Dim MyCatiaDocument As Document
Set MyCatiaDocument = CATIA.ActiveDocument
Dim MsgBoxReturn As VbMsgBoxResult
MsgBoxReturn = MsgBox("Position auswählen", vbOKCancel, "Auswählen")
Dim UserSel
If MsgBoxReturn = vbCancel Then
    Exit Sub
Else
    Set UserSel = MyCatiaDocument.Selection
    Dim InputObjectType1(1)
    InputObjectType1(0) = "Body"
    InputObjectType1(1) = "HybridBody"
    UserSel.Clear
    Dim Status
    Status = UserSel.SelectElement2(InputObjectType1, "Position auswählen", False)
    If Status = "Cancel" Then
        MsgBox "Auswahl wurde abgebrochen"
        Exit Sub
    End If
End If
Dim MyBody
Set MyBody = UserSel.Item(1).Value



[Diese Nachricht wurde von tobiley am 12. Mai. 2011 editiert.]

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