Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Alle UserRefProperties in Produktstruktur löschen

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:  Alle UserRefProperties in Produktstruktur löschen (2605 mal gelesen)
MLuebbers
Mitglied


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

Beiträge: 5
Registriert: 05.10.2016

V5-6 R2014
Dell Precision Tower 5810
(Xeon E5-1630 3.7GHz, 32 GB RAM)

erstellt am: 12. Okt. 2016 12: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


Sample_Properties.png


CV5_ErrorCopyingData.png


simpleAssembly.zip

 
Hallo zusammen,
ich versuche gerade ein Macro (vba) zum Löschen aller vom Benutzer angelegten Properties in einer Produktstruktur zu schreiben.
Leider will mir das Löschen der Properties einfach nicht gelingen.
Ich nutze eine Selection, da der UserAccessMode der Properties das Löschen per <Parameter>.Remove nicht in jedem Fall zulässt.

Mein Code löscht die Properties des Root-Produktes, beim Versuch das erste Kind der Rootbaugruppe zu löschen, erhalte ich die Fehlermeldung "Selected element(s) not allowed for this operation".
Ich stehe im Moment auf dem Schlauch. Ich vermute es hat etwas mit dem mir unklaren Zusammenhang der Objekte "Document" zu "Product.ReferenceProduct" zu tun.
Ich habe eine Beispielbaugruppe (R24) angehängt, in dieser sollen die Properties myProperty1 , 2, 3 entfernt werden.
Kann mir jemand helfen?

Danke,
Matthias Lübbers


Code:
Sub CATMain()
    Dim myActiveDoc As Document
    Dim strActiveDocType As String
   
    Set myActiveDoc = CATIA.ActiveDocument
    strActiveDocType = TypeName(myActiveDoc)
   
    Call walkThroughStructure(myActiveDoc.Product)
End Sub


'Durchlaufen des Strukturbaumes (rekursiv) und Aufruf der Löschfunktion (deleteUserRefProperties)
Sub walkThroughStructure(myProd As Product)
    Dim myChildDoc As Document
    Dim childProd As Product
    Dim i As Integer
    'Operation am übergebenen Objekt selbst
    Debug.Print ("Prod: (" & myProd.Name & ")")
    deleteUserRefProperties myProd

    For i = 1 To myProd.Products.Count
        Debug.Print ("-----------------------------------------------------------------")
        Set childProd = myProd.Products.Item(i)
        'Debug.Print ("Prod: " & childProd.PartNumber & "(" & childProd.Name & ")")
        Debug.Print ("Prod: (" & childProd.Name & ")")
        Set myChildDoc = childProd.ReferenceProduct.Parent

        Debug.Print ("(" & i & ") Doc: " & myChildDoc.Name & "   Prod: " & childProd.PartNumber & "(" & childProd.Name & ")")
        strActiveDocType = TypeName(myChildDoc)

        Select Case strActiveDocType
            Case "PartDocument"
                deleteUserRefProperties childProd
            Case "ProductDocument"
                deleteUserRefProperties childProd
                walkThroughStructure childProd
            Case Else
        End Select
    Next
End Sub

'Löschen der UserRefProperties des übergebenen Products mittels Selection
Sub deleteUserRefProperties(myProd As Product)
    Dim myParameters As Parameters
    Dim myParameter As Parameter
    Dim paramName As String
    Dim paramCountAtStart As Integer
    Dim paramCountAtEnd As Integer
    Dim mySel As INFITF.Selection
   
    Dim myDoc As Document
    Set myDoc = myProd.ReferenceProduct.Parent
   
    Set mySel = myDoc.Selection
    mySel.Clear

    Set myParameters = myProd.ReferenceProduct.UserRefProperties
    paramCountAtStart = myParameters.Count
    Debug.Print ("Params at start: " & paramCountAtStart)

    For Each myParameter In myParameters
            mySel.Add myParameter
    Next
    If mySel.Count > 0 Then mySel.Delete
    mySel.Clear

    paramCountAtEnd = myProd.UserRefProperties.Count
    Debug.Print ("Params at end  : " & paramCountAtEnd)
End Sub


[Diese Nachricht wurde von MLuebbers am 12. Okt. 2016 editiert.]

[Diese Nachricht wurde von MLuebbers am 12. Okt. 2016 editiert.]

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

Randle
Mitglied
CAD/PLM Consultant


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

Beiträge: 695
Registriert: 12.04.2003

Win10 x64
CATIA V5 R18, R19, R21, R27-29

erstellt am: 12. Okt. 2016 12:07    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 MLuebbers 10 Unities + Antwort hilfreich

Hallo,

irgenwie glaube ich nicht das man eine benutzerdefinierte Eigenschaft der Selection hinzufügen kann. Warum machst du es nicht mit myParameters.Remove?

Gruß
Randle

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: 12. Okt. 2016 12: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 MLuebbers 10 Unities + Antwort hilfreich

Servus
Das Löschen über die Selection scheint nur zu gehen, wenn das Dokument im dem du die Parameter löschen willst in einem eigenen Fenster geöffnet ist.
Alternativ kannst du auch die Selection des RootProducts verwenden. (als globale Varaiable)

Gruß
Bernd

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

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

MLuebbers
Mitglied


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

Beiträge: 5
Registriert: 05.10.2016

V5-6 R2014
Dell Precision Tower 5810
(Xeon E5-1630 3.7GHz, 32 GB RAM)

erstellt am: 12. Okt. 2016 12: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 Randle,
"Parameter.Remove" war auch mein erster Ansatz, aber in den zu behandelnden Daten (nicht meinen angehängten Bsp. Daten) bleiben danach noch einige Properties übrig, da sie nicht den UserAccessMode=2, sondern den Wert 1 (änderbar, aber nicht löshbar) haben.

Grundsätzlich ist das Löschen von Parametern über die Selection möglich. In meinem Code klappt das für die Rootbaugruppe bereits.

Grüße!

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

MLuebbers
Mitglied


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

Beiträge: 5
Registriert: 05.10.2016

V5-6 R2014
Dell Precision Tower 5810
(Xeon E5-1630 3.7GHz, 32 GB RAM)

erstellt am: 12. Okt. 2016 12: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 Bernd,
ich hab deinen Vorschlag die Selection des Root-Produktes zu nutzen und sie global zu definieren getestet --> es funktioniert!!!

Ich verrate jetzt mal lieber nicht wie lange ich schon an diesem Problem grübel ... ,aber auf die Idee die Selection eines anderen Documents zu verwenden bin ich nicht gekommen. Manchmal sollte man einfach früher fragen.

Vielen Dank Bernd!

Anbei der finale Code:

Code:
Dim mySel As Selection

Sub CATMain()
    Dim myActiveDoc As Document
    Dim strActiveDocType As String
   
    Set myActiveDoc = CATIA.ActiveDocument
    strActiveDocType = TypeName(myActiveDoc)
   
    Set mySel = myActiveDoc.Selection
    mySel.Clear
   
   
    Call walkThroughStructure(myActiveDoc.Product)
End Sub


'Durchlaufen des Strukturbaumes (rekursiv) und Aufruf der Löschfunktion (deleteUserRefProperties)
Private Sub walkThroughStructure(myProd As Product)
    Dim myChildDoc As Document
    Dim childProd As ProductStructureTypeLib.Product
    Dim i As Integer
    'Operation am übergebenen Objekt selbst
    Debug.Print ("Prod: (" & myProd.Name & ")")
    deleteUserRefProperties myProd

    For i = 1 To myProd.Products.Count
        Debug.Print ("-----------------------------------------------------------------")
        Set childProd = myProd.Products.Item(i)
        'Debug.Print ("Prod: " & childProd.PartNumber & "(" & childProd.Name & ")")
        Debug.Print ("Prod: (" & childProd.Name & ")")
        Set myChildDoc = childProd.ReferenceProduct.Parent

        Debug.Print ("(" & i & ") Doc: " & myChildDoc.Name & "   Prod: " & childProd.PartNumber & "(" & childProd.Name & ")")
        strActiveDocType = TypeName(myChildDoc)

        Select Case strActiveDocType
            Case "PartDocument"
                deleteUserRefProperties childProd
            Case "ProductDocument"
                deleteUserRefProperties childProd
                walkThroughStructure childProd
            Case Else
        End Select
    Next
End Sub

'Löschen der UserRefProperties des übergebenen Products mittels Selection
Sub deleteUserRefProperties(myProd As Product)
    Dim myParameters As Parameters
    Dim myParameter As Parameter
    Dim paramName As String
    Dim paramCountAtStart As Integer
    Dim paramCountAtEnd As Integer
    'Dim mySel As INFITF.Selection
   
    Dim myDoc As Document
    Set myDoc = myProd.ReferenceProduct.Parent
   
    'Set mySel = myDoc.Selection
    mySel.Clear

    Set myParameters = myProd.ReferenceProduct.UserRefProperties
    paramCountAtStart = myParameters.Count
    Debug.Print ("Params at start: " & paramCountAtStart)

    For Each myParameter In myParameters
            mySel.Add myParameter
    Next
    If mySel.Count > 0 Then mySel.Delete
    mySel.Clear

    paramCountAtEnd = myProd.ReferenceProduct.UserRefProperties.Count
    Debug.Print ("Params at end  : " & paramCountAtEnd)
End Sub


[Diese Nachricht wurde von MLuebbers am 12. Okt. 2016 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)2023 CAD.de | Impressum | Datenschutz