Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Problem beim Umbenennen einer CATIA Struktur mittels Rekursiverschleife

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:  Problem beim Umbenennen einer CATIA Struktur mittels Rekursiverschleife (2970 mal gelesen)
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: 18. Mrz. 2011 15:51    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


struktur.jpg

 
Hallo,

ich habe ein VB.NET geschrieben, welches eine CATIA Struktur umbenennt und unter dem neuen Namen abspeichert. Das funktioniert soweit auch ganz gut.
Das Problem ist, dass der Instancename nur in der ersten Ebene umbenannt wird. (Die PartNumber jedoch einwandfrei!)

Hat jemand eine Idee woran das liegen lönnte?

Den Code habe ich unte angefügt. Ein Bild der Strktur ist im Anhang.

Vielen Dank für eure Hilfe!

Code:

    Sub SUB_SCAN(ByVal oProducts, ByVal UebergabeName, ByVal auftragsnummer)
        Dim oProductsUebergabe As Products
        Dim pos As Integer
        Dim n As Integer
        Dim NeuerName As String
        Dim Pfad As String

        For i = 1 To oProducts.Count
            If oProducts.Item(i).Products.Count > 0 Then
                oProductsUebergabe = oProducts.Item(i).Products
                SUB_SCAN(oProductsUebergabe, UebergabeName, auftragsnummer)
                '------Umbenennen--------
                pos = 0
                n = 0
                Do

                    pos = Strings.InStr(pos + 1, oProducts.Item(i).PartNumber, "_")
                    n = n + 1
                Loop Until n = 2
                NeuerName = UebergabeName & "_" & Strings.Mid(oProducts.Item(i).PartNumber, pos + 1)
                If oProducts.Item(i).PartNumber <> "Formteile" And oProducts.Item(i).PartNumber <> "Rohlinge" Then

                    oProducts.Item(i).PartNumber = NeuerName
                    oProducts.Item(i).Name = NeuerName & ".1"
                    '-------------Prameterinhalt ändern------------
                    If Strings.InStr(oProducts.Item(i).PartNumber, "Arbeitspart") <> 0 Then
                        oProducts.item(i).ApplyWorkMode(CatWorkModeType.DESIGN_MODE)
                        oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Auftrag").value = auftragsnummer
                        oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Konstrukteur").value = ComboBox2.Text
                        oProducts.Parent.update()
                    End If
                    '-------Speichern----------
                    Dim loeschFile As String
                    loeschFile = oProducts.Item(i).ReferenceProduct.Parent.Fullname
                    pos = Strings.InStrRev(oProducts.Item(i).ReferenceProduct.Parent.Fullname, "\")
                    Pfad = Strings.Left(oProducts.Item(i).ReferenceProduct.Parent.Fullname, pos) 'Len(oProducts.Item(i).ReferenceProduct.Parent.Fullname) - pos + 1)
                    Catia.DisplayFileAlerts = False
                    Try
                        oProducts.Item(i).ReferenceProduct.Parent.saveas(Pfad & NeuerName)
                    Catch ex As Exception
                    End Try
                    Catia.DisplayFileAlerts = True
                    System.IO.File.Delete(loeschFile)
                End If

            Else
                pos = 0
                n = 0
                Do

                    pos = Strings.InStr(pos + 1, oProducts.Item(i).PartNumber, "_")
                    n = n + 1
                Loop Until n = 2
                NeuerName = UebergabeName & "_" & Strings.Mid(oProducts.Item(i).PartNumber, pos + 1)
                If oProducts.Item(i).PartNumber <> "Formteile" And oProducts.Item(i).PartNumber <> "Rohlinge" Then

                    oProducts.Item(i).PartNumber = NeuerName
                    oProducts.Item(i).Name = NeuerName & ".1"
                    '-------------Prameterinhalt ändern------------
                    If Strings.InStr(oProducts.Item(i).PartNumber, "Arbeitspart") <> 0 Then
                        oProducts.item(i).ApplyWorkMode(CatWorkModeType.DESIGN_MODE)
                        oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Auftrag").value = auftragsnummer
                        oProducts.item(i).ReferenceProduct.Parent.Part.Parameters.RootParameterSet.DirectParameters.Item("Konstrukteur").value = ComboBox2.Text
                        oProducts.Parent.update()
                    End If
                    '-------Speichern----------
                    Dim loeschFile As String
                    loeschFile = oProducts.Item(i).ReferenceProduct.Parent.Fullname
                    pos = Strings.InStrRev(oProducts.Item(i).ReferenceProduct.Parent.Fullname, "\")
                    Pfad = Strings.Left(oProducts.Item(i).ReferenceProduct.Parent.Fullname, pos) 'Len(oProducts.Item(i).ReferenceProduct.Parent.Fullname) - pos + 1)
                    Catia.DisplayFileAlerts = False
                    Try
                        oProducts.Item(i).ReferenceProduct.Parent.saveas(Pfad & NeuerName)
                    Catch ex As Exception
                    End Try
                    Catia.DisplayFileAlerts = True
                    System.IO.File.Delete(loeschFile)
                End If
            End If
        Next
    End Sub


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

tberger
Mitglied
Application Manager CATIA V5 / V6


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

Beiträge: 1385
Registriert: 13.01.2007

WIN 7 64bit
V5R21SP3HF49
3DX/V6 R2016x

erstellt am: 18. Mrz. 2011 17:22    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 tobiley 10 Unities + Antwort hilfreich

Ich kann es nicht 100% erkennen:
kann es sein, dass du "Referenzdokumente laden" abgewählt hast?
Du hast ein graues Achsenkreuz als Symbol an der Part-Instanz. Wenn das nicht geladen kann es sein dass das Makro keine Instanzbezeichnung finden kann. Ich kann es im Moment nicht prüfen (kein CATIA). Vlt. Montag wieder wenn nicht ein anderer schneller ist.

------------------
Grüße aus dem Thurgau
Thomas

+++++++++++++++++++++++++++++++++

CATIA - eine Laune der Natur ...

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

zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 19. Mrz. 2011 11:13    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 tobiley 10 Unities + Antwort hilfreich

Hallo,

die Antwort auf Instanznamen via .NET ist in diesen Thread beschrieben.
Instanznamen sollte man ausschließlich über CATScript umbenennen, ansonsten kann es Probleme mit dem Modell geben (mit den Links z.B.).
Im Thread ist auch Beispielcode.
Die Umbenennung von PartNumber und Dateiname kann in .NET (oder VBA) bleiben.

Gruß,
Zoltan

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: 21. Mrz. 2011 15:09    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

Vielen Dank für eure Hilfe habe es jetzt auch mit einem CATScript gelöst und es funktioniert bis jetzt einwandfrei.

mfg Tobias

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: 25. Mrz. 2011 16:06    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,

gibt es eine Möglichkeit, dass das Product bzw. die gesamte Struktur nicht im Design-Modus geladen sein muss, während des Umbenennens? Also das der Cache-Modus benutzt wird und dann beispielsweise die einzelnen CATParts und Products einzelnen geladen werden aber nicht alle auf einmal? Hintergrund ist, dass große Baugruppen umbenannt werden sollen und diese unter Umständen sehr lange oder gar nicht komplett geladen werden können.

Habe schon mal versucht vor und hinter dem Umbenennen bzw. Speichern das oProducts.item(i) in den Design-Modus zu laden und dann wieder in der Visualization-Modus. Jedoch wurden dann nicht alle Bauteile gespeichert. Ich denke weil ja dann ein Unterprodukt geändert wurde aber wenn das Oberprodukt gespeichert werden soll schon nicht mehr "scharf" geladen ist.

Vielen Dank für eure Hilfe!

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: 25. Mrz. 2011 16:16    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 tobiley 10 Unities + Antwort hilfreich

Servus
Vielleicht reicht es aus währende dem Durchlauf des Makros die Parts/Products in den DEFAULT_MODE umzuschalten (siehe auch hier)

Gruß
Bernd

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

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: 25. Mrz. 2011 17:42    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 Bernd,

vielen Dank für deinen Hinweis!

Meinst du, dass ich das ganze Product in den Default-Modus laden soll, weil das schneller als im Design-Modus geht?? das könnte klappen, werde es die Tage mal ausprobieren habe gerade kein Catia zur Hand.
Wenn jedes einzelne Part in den Default-Modus geladen wird und dann wieder nur die Visualisierung dann müsste ja das gleichen Problem auftreten wie beim Design-Modus, dass ihm beim Speichern ein Bauteil fehlt weils nicht geladen ist oder?

Gruß Tobias

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



IT-Solution-Architekt (m/w/x)

Sich etwas Neues trauen, über sich hinauswachsen und dabei die Grenzen des Machbaren neu definieren. Genau das ist es, was unsere Mitarbeitenden täglich leben dürfen und sollen. Um mit unseren Innovationen ein Zeichen zu setzen und Großartiges zu ermöglichen. Denn hinter jedem erfolgreichen Unternehmen stehen eine ganze Menge faszinierende Menschen.

In einem offenen und modernen Umfeld mit ...

Anzeige ansehenConsulting, Engineering
zoltan.bekesi
Mitglied



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

Beiträge: 321
Registriert: 22.10.2006

Job:
CATIA V5R19 / XP 32bit
MS Office 2003
Microstation V8 2004 Edition
DELL Precision M6300

erstellt am: 25. Mrz. 2011 19: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 Nur für tobiley 10 Unities + Antwort hilfreich

Hallo Tobias,

Bernd hat recht, du solltest es mit Default mode versuchen.
Es ist etwas mehr, als Visualisation mode (z.B. UserProperties können angesprochen werden), aber nicht Design mode. Dies ist die Unterschied, die hier schon mal erwähnt wurde. Andere kenne ich nicht.

Ich weiß nicht, wie verlinkt deine Modelle sind, da können sich evtl. Probleme ergeben.
Oder du kannst es versuchen, dass du nur einzelne Baugruppen in Design mode lädst und so umbenennst.
Evtl. musst du auch den Zähler anpassen, der die Instanzname generiert (ich meine den Zahl nach dem Punkt).

Gruß,
Zoltan

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