Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Update-Status aller Constraints einer Produktstruktur

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:   Update-Status aller Constraints einer Produktstruktur (2447 mal gelesen)
  
Die Gewinne der Zukunft werden mit intelligenten, autonomen Elektrofahrzeugen eingefahren. (3DEXPERIENCE)
reiffm
Mitglied
Angestellter


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

Beiträge: 82
Registriert: 18.08.2000

erstellt am: 22. Jul. 2009 11: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

Hallo zusammen.

Folgende Aufgabenstellung gilt es zu lösen:
Ist das aktuell geöffnet CATProduct (mit Unterprodukten) up to date oder nicht? Der Update-Status der Bauteile spielt hierbei keine Rolle;
oder anders: gibt es Constraints die den Status "Un-Updated" haben?

Mit beiliegenden Script schaffe ich es, den Update-Status der Constraints der Root-Produktes abzufragen. Sobald jedoch dann instanzierte Unterprodukte analysiert werden, können die Constraints zwar noch in ihrer Anzahl erkannt, jedoch nicht mehr in ihrem Status ausgelesen werden...

Hat da jemand eine Idee? Auch wenn jemand eine andere Lösung (z.B. mit der Eigenschaft: UnUpdatedConstraintsCount) hat, ist diese selbstverständlich willkommen.


Sub CATMain()

  Set actProduct = CATIA.ActiveDocument.Product

Call concheck(actProduct)

Call geh_in_die_Unterbaugruppen(actProduct)
End Sub 'CATMain


Sub geh_in_die_Unterbaugruppen(selProduct)

Anzahl_Baugruppen = selProduct.Products.Count
For j = 1 To Anzahl_Baugruppen
    Set curProduct = selProduct.Products.Item(j)
    'MsgBox "Ich bin in der Unterbaugruppe: " & curProduct.Name
    'MsgBox "und habe soviel Bauteile: " & curProduct.Products.Count
    If curProduct.Products.Count > 0 Then
        Call concheck(curProduct)
        Call geh_in_die_Unterbaugruppen(curProduct)
    Else
    End If   
Next
End Sub 'geh_in_die_Unterbaugruppen

Sub concheck(currentProduct)
MsgBox "Das ist der Produkt-Name: " & currentProduct.Name
    Set my_constraints = currentProduct.Connections("CATIAConstraints")   
    MsgBox "Anzahl gefundener Constraints: " & my_constraints.Count
   
    'UnUpdCstNum = my_constraints.UnUpdatedConstraintsCount
    'MsgBox "Anzahl unupdated Constraints: " & UnUpdCstNum
 
    For i = 1 To my_constraints.Count
        Dim MyConstrain As Constraint
       
        Set MyConstrain = my_constraints.Item(i)

       
        If MyConstrain.Status = catCstStatusOK Then
        MsgBox "Der Constraint " & MyConstrain.Name & " ist i.O."
        Else
        Eingabe = MsgBox("Ein Constraint des !Rootproduktes! ist nicht up to date. ==> Alle Constraints aktualisiern und weitermachen?", vbYesNo)
            If Eingabe = vbNo Then
            MsgBox "dann halt nicht"
            Else
            MsgBox "Produkt update könnte ich jetzt gemacht haben"
            End If
        End If
    Next   
End Sub

------------------
Frohes Schaffen
Michael Reiff

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: 601
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon 3,7GHz 32GB RAM
Windows7 64bit
R26 <= CATIA V5 > =R19

erstellt am: 30. Jul. 2009 10:40    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 reiffm 10 Unities + Antwort hilfreich

Hallo,

du musst die Rekursion ändern und jede Ebene deiner Struktur über die CATIA.Documents aufrufen, nicht alles über das .ActiveDocument, dann funktionierts.
Im Prinzip wie beim Erzeugen eines Constrains in einem Produkt einer unteren Ebene einer Struktur. Das Prinzip habe ich in diesem Beitrag http://ww3.cad.de/foren/ubb/Forum137/HTML/001475.shtml#000005
schon mal gezeigt.

Hoffe das hilft dir, Gruß

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

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

reiffm
Mitglied
Angestellter


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

Beiträge: 82
Registriert: 18.08.2000

erstellt am: 30. Jul. 2009 11:34    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

super, das ist es, danke!

------------------
Frohes Schaffen
Michael Reiff

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

V5Playaz
Mitglied
Dipl.-Ing (BA)


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

Beiträge: 447
Registriert: 12.07.2005

DELL PRECISION 390
3,25 GB RAM
WIN XP PRO SP2
CATIA V5 R16-19
Delmia V5 R19
VB6, VB2008
Adobe Acrobat 9 Pro Extended

erstellt am: 30. Jul. 2009 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 Nur für reiffm 10 Unities + Antwort hilfreich

Falls es geklappt hat, darfst du gerne deinen Code veröffentlichen,
damit andere User auch etwas davon haben.

Grüße Dominik

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

reiffm
Mitglied
Angestellter


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

Beiträge: 82
Registriert: 18.08.2000

erstellt am: 30. Jul. 2009 13:18    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

bitteschön:

Public oSelection

Sub CATMain()

'On Error Resume Next

Dim oProduct
Dim oProducts
Dim bIsAComponent As Boolean

Set oRoot = CATIA.ActiveDocument

Set oProduct = oRoot.Product
Set oProducts = oProduct.Products

Set oSelection = CATIA.ActiveDocument.Selection

SUB_ProdScan oProducts, False

End Sub

Sub SUB_ProdScan(oProducts, bIsAComponent) 'Rekursive Funktion: Scant alle Subs

On Error Resume Next

If bIsAComponent = False Then
  Set oConnections = CATIA.Documents.Item(oProducts.Parent.ReferenceProduct.Parent.Name).Product.Connections("CATIAConstraints")
ElseIf bIsAComponent = True Then
  Set oConnections = oProducts.Parent.Connections("CATIAConstraints")
End If
   
iConnectionsCount = oConnections.Count
oSelection.Clear
conKO = 0
       
For A = 1 To iConnectionsCount
  oSelection.Add (oConnections.Item(A))
        Set MyConstrain = oConnections.Item(A)
        If MyConstrain.Status = catCstStatusOK Then
        ' MsgBox "Der Constraint " & MyConstrain.Name & " ist i.O."
        Else
        conKO = conKO + 1
        End If
Next

If conKO > 0 Then
    Eingabe = MsgBox("Ein Constraint des Produktes " & vbCrLf & oProducts.Parent.Name & vbCrLf & "ist nicht up to date." _
    & vbCrLf & vbCrLf & "==> Alle Constraints aktualisieren und weitermachen?", vbYesNo)
    'MsgBox (oProducts.Parent.Name)
    If Eingabe = vbNo Then
        MsgBox "dann halt nicht"
        Else
        MsgBox "Produkt update könnte ich jetzt gemacht haben"
    End If
   
    Else
   
End If
       
If oSelection.Count > 0 Then
  'oSelection.Clear
  'oSelection.Delete
End If
       
oSelection.Clear

For X = 1 To oProducts.Count 'zaehlt die Children des aktuellen Subs

  If bIsAComponent = False Then  'übergebenes Root ist keine Komponente
      Set oProductOpen = CATIA.Documents.Item(oProducts.Parent.PartNumber & ".CATProduct").Product
      '-----------Fixieren
      Set oReference = oProductOpen.CreateReferenceFromName(oProductOpen.PartNumber & "/" & oProductOpen.Products.Item(X).Name & "/!" & oProductOpen.PartNumber & "/" & oProductOpen.Products.Item(X).Name & "/")
      'Set oConstraint = oProductOpen.Connections("CATIAConstraints").AddMonoEltCst(catCstTypeReference, oReference)
  ElseIf bIsAComponent = True Then  'übergebenes Root ist eine Komponente
      Set oReference = oProducts.Parent.CreateReferenceFromName(oProducts.Parent.PartNumber & "/" & oProducts.Parent.Products.Item(X).Name & "/!" & oProducts.Parent.PartNumber & "/" & oProducts.Parent.Products.Item(X).Name & "/")
      'Set oConstraint = oProducts.Parent.Connections("CATIAConstraints").AddMonoEltCst(catCstTypeReference, oReference)
  End If
  If TypeName(oProducts.Item(X).ReferenceProduct.Parent) = "PartDocument" Then 'Check ob PartDoc
      ' passiert gar nix
  ElseIf TypeName(oProducts.Item(X).ReferenceProduct.Parent) = "ProductDocument" Then
      Err.Number = 0
      Set oMasterShape = oProducts.Item(X).GetMasterShapeRepresentation(True)
      If Err.Number = 0 Then  'it s a others
        ' passiert gar nix
      ElseIf oProducts.Item(X).ReferenceProduct.Parent.Name = oProducts.Item(X).Parent.Parent.ReferenceProduct.Parent.Name Then  '---its a Component
        Err.Number = 0
        SUB_ProdScan CATIA.Documents.Item(oProducts.Item(X).ReferenceProduct.Parent.Name).GetItem(oProducts.Item(X).PartNumber).Products, True
      ElseIf oProducts.Item(X).ReferenceProduct.Parent.Name <> oProducts.Item(X).Parent.Parent.ReferenceProduct.Parent.Name Then  '---its a Product
        Err.Number = 0
        If oProducts.Item(X).Products.Count > 0 Then
            Set oProductsUebergabe = oProducts.Item(X).Products
            SUB_ProdScan oProductsUebergabe, False
        End If
      End If
      Err.Number = 0
  End If
Next

End Sub

Sub concheck(currentProduct)


MsgBox "Das ist der Produkt-Name: " & currentProduct.Name

    Set my_constraints = currentProduct.Connections("CATIAConstraints")
   
    MsgBox "Anzahl gefundener Constraints: " & my_constraints.Count
   
    'UnUpdCstNum = my_constraints.UnUpdatedConstraintsCount
    'MsgBox "Anzahl unupdated Constraints: " & UnUpdCstNum
 
    For i = 1 To my_constraints.Count
        Dim MyConstrain As Constraint
       
        Set MyConstrain = my_constraints.Item(i)

       
        If MyConstrain.Status = catCstStatusOK Then
        MsgBox "Der Constraint " & MyConstrain.Name & " ist i.O."
        Else
        Eingabe = MsgBox("Ein Constraint des !Rootproduktes! ist nicht up to date. ==> Alle Constraints aktualisiern und weitermachen?", vbYesNo)
            If Eingabe = vbNo Then
            MsgBox "dann halt nicht"
            Else
            MsgBox "Produkt update könnte ich jetzt gemacht haben"
            End If
        End If
    Next
   
End Sub

------------------
Frohes Schaffen
Michael Reiff

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