Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Instanz-Name in einer Komponente ändern

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:  Instanz-Name in einer Komponente ändern (3458 mal gelesen)
LargeAssy
Mitglied



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

Beiträge: 12
Registriert: 04.03.2010

XP32/64bit, V5R18SP2HF88

erstellt am: 04. Mrz. 2010 14: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

Hallo,

erstmal Danke an den Thread "Name der Instanz ändern". Dieser Thread und einige andere mehr, haben mir sehr geholfen beim Schreiben diese Macros.
Das Macro wandert durch den ganzen Baum und benennt die Instanzen auf "Partnumber.Zähler".
Das funktioniert alles auch ganz prima, mit Ausnahme von Parts/Produkten welche in einer Komponente eingebaut sind.
Die Komponente selber wird noch richtig umbenannt, nicht aber die Objekte, welche in der Komponente verbaut sind.

Hier der Teil welcher das umbenennen macht:
........
Sub renameInstance(theProduct As Product)
    Dim newName As String
    Dim myParent As Product
       
    On Error Resume Next
    newName = createInstanceName(theProduct)                                ' hier wird der neuen Instanzname gebaut
    Set myParent = theProduct.Parent.Parent.ReferenceProduct.Parent.Product
   
    'theProduct.Parent.Parent.Products.Item(theProduct.Name).Name = newName  ' 3 Varianten um den Instanz-Name zu ändern
    myParent.Products.Item(theProduct.Name).Name = newName                  '
    'theProduct.Name = newName                                              '
End Sub
....................
Ich habe, dank Suche im Forum, 3 Varianten um den Instanz-Namen zu ändern. Nur leider funktioniert keine bei Instanzen
innerhalb einer Komponente.

Wahrscheinlich seh ich den Wald vor lauter Bäumen nicht.
Vielen Dank schon mal.

Gruss

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 08. Mrz. 2010 00: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 LargeAssy 10 Unities + Antwort hilfreich

Hallo LargeAssy,

ich habe mir jetzt Deinen Code ein paar mal durchgelesen und denke, Deinen Fehler gefunden zu haben. Einige der Beispiele, die Du genutzt hast, funktionieren nur für "Products"! Grund: Das "ReferenceProduct" einer "Component" ist das übergeordnete "Product", da "Components" kein eigenes Dokument besitzen. Du aber bestimmst die "Sub-Products" aus dem Dokument und da werden natürlich Deine umzubenennenden Instanzen nicht gefunden, da sie erst "Sub-Products" der "Sub-Products" sind.

Davon ausgehend müsste die 3.Variante funktionieren. Allerdings gibt es hier ein kleines Hindernis: Der Instanzenname darf nicht schon einmal irgendwo im gesamten geöffneten "Product" vorkommen. Falls doch, wird er nicht ersetzt bzw. das Programm bricht ab!

Falls Du damit noch keine Lösung findest, ein Beispiel wäre nicht schlecht! Und natürlich soviel Information wie möglich, z.B. über den neuen Instanzennamen bzw. den "Component"-Namen.


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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

LargeAssy
Mitglied



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

Beiträge: 12
Registriert: 04.03.2010

XP32/64bit, V5R18SP2HF88

erstellt am: 08. Mrz. 2010 06: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

Hallo Lusilnie,
vielen Dank für den Hinweis. In der Richtung hatte ich auch rumprobiert. Irgendwie muß ich die Komponenten "aktivieren" im darin Instanzen umbenennen zu können.

Hier die Lösung, wie sie momentan funktioniert. Zumindest bei den Produkten, welche ich getestet habe.
...
...
Sub scanProductStructure(theProducts As Products)
    Dim actProducts As Products
    Dim ii As Integer
    Dim goDeeper As Boolean

    On Error Resume Next
    For ii = 1 To theProducts.Count
        toDesignMode theProducts.Item(ii)
       
        If theProducts.Item(ii).Products.Count > 0 Then                'TypeName(theProducts.Item(ii)) = "ProductDocument"
            renameInstance theProducts.Item(ii)
            goDeeper = True
            For j = 0 To count_01 - 1                                 
                If theProducts.Item(ii).PartNumber = alreadyBeenTo(j) Then
                    goDeeper = False
                    Exit For
                End If
            Next j
            If goDeeper Then
                ReDim Preserve alreadyBeenTo(count_01)
                alreadyBeenTo(count_01) = theProducts.Item(ii).PartNumber
                count_01 = count_01 + 1
               
                Set actProducts = theProducts.Item(ii).Products
                scanProductStructure actProducts
            End If
        Else
            renameInstance theProducts.Item(ii)
        End If
    Next
    On Error GoTo 0
End Sub
'
' rename the Instance
'------------------------------------------------------------------------------------------
Sub renameInstance(theProduct As Product)
    Dim newName As String
    Dim myParent As Product
       
    On Error Resume Next   
    If isComponent(theProduct.Parent.Parent) Then
        Set myParent = theProduct.Parent.Parent.ReferenceProduct
    Else
        Set myParent = theProduct.Parent.Parent.ReferenceProduct.Parent.Product
    End If
    newName = createInstanceName(theProduct, myParent)                    ' sorgt für einen einzigartigen Namen
 
    'theProduct.Parent.Parent.Products.Item(theProduct.Name).Name = newName
    myParent.Products.Item(theProduct.Name).Name = newName
    'theProduct.Name = newName
End Sub
'
' Test auf Componente
'------------------------------------------------------------------------------------------
Function isComponent(theProduct As Product) As Boolean
    isComponent = False
 
    If theProduct.Name <> CATIA.ActiveDocument.Product.Name Then
        If theProduct.ReferenceProduct.Parent.Name = theProduct.Parent.Parent.ReferenceProduct.Parent.Name Then
            isComponent = True
        End If
    End If
End Function
...
...

Vielleicht ein bischen umständlich. Es sollte doch möglich sein ohne den Test "isComponente" auszukommen.
Aber, immerhin, es funktioniert, und macht was es soll.

Gruß

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

Lusilnie
Mitglied



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 09. Mrz. 2010 00:15    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 LargeAssy 10 Unities + Antwort hilfreich

Hallo LargeAssy,

mir scheint, Du machst Dir selber das Leben schwer!

Warum übergibst du in der Sub "scanProductStructure" denn die Products? Die lassen sich doch einfach auslesen, wenn Du das die Products enthaltende Product übergibst. Dann hast Du auch das "Parent-Product" und brauchst es nicht so umständlich später wieder bestimmen. Du kannst es direkt zum Umbenennen mit übergeben, etwa als "renameInstance theProduct.Products.Item(ii) theProduct".

Dann wird Deine Routine viel einfacher:

Code:
Sub renameInstance(theProduct As Product, myParent As Product)
    Dim newName As String
    newName = createInstanceName(theProduct, myParent)    ' sorgt für einen einzigartigen Namen
    theProduct.Name = newName
End Sub


Auch Deine Eingangsaussage 'Irgendwie muß ich die Komponenten "aktivieren" im darin Instanzen umbenennen zu können.' kann ich nicht nachvollziehen. Anders als in der interaktiven Arbeit, arbeitest Du im Script immer mit den gewählten Elementen, wenn Du die richtige Workbench aktiv hast. Da gibt es hier auch schon unzählige Diskussionen dazu...


mfg,
Lusilnie

------------------
Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!!

frei nach größeren Geistern

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

LargeAssy
Mitglied



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

Beiträge: 12
Registriert: 04.03.2010

XP32/64bit, V5R18SP2HF88

erstellt am: 10. Mrz. 2010 06:29    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 Lusilnie,

vielen Dank für den Hinweis. Das Product zu übergeben macht das Leben tatsächlich viel einfacher.
War wohl wirklich die Sache mit dem Wald und den Bäumen.

Gruß

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