Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Aktivierungsstatus der Komponente / Component Activation State

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:  Aktivierungsstatus der Komponente / Component Activation State (2182 mal gelesen)
C.Samer
Mitglied
CAD Administrator


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

Beiträge: 72
Registriert: 03.05.2017

erstellt am: 09. Aug. 2017 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

Hallo liebe Community,

ich habe schon einiges darüber recherchiert, aber mir ist meine jetzige Lösung

Code:
actProd.Parameters.Item(actProd.Parent.Parent.PartNumber & "\" & actProd.Name & "\" & "Component Activation State")

einfach viel zu langsam. Bei kleine Baugruppen funktioniert diese Methode sofort, bei großen Baugruppen warte ich teilweise bis zu 10 Sekunden 

Der alternative Code

Code:
actProd.Parameters.Item("Aktivierungsstatus der Komponente")

dauert sogar noch länger!

Eine weitere Alternative

Code:
actProd.Parameters.Item(actProd.Parameters.Count)

geht relativ schnell, ist aber leider unzuverlässig. Nicht immer ist der letzte Parameter der Activation State..


Bitte, bitte, wenn irgendjemand eine schnellere Methode kennt, wäre ich sehr dankbar!

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 09. Aug. 2017 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 Nur für C.Samer 10 Unities + Antwort hilfreich

Hi Samer,

vielleicht hilft Dir der Thread weiter:

https://ww3.cad.de/foren/ubb/Forum137/HTML/004017.shtml

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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: 09. Aug. 2017 12:27    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 C.Samer 10 Unities + Antwort hilfreich

Servus
Ich nehme an dass bei dir actProd die Product-Instanz ist.
Schon mal probiert deinen dritten Ansatz so umgestalteten (ungetestet und nur  grobe Fehlerbehandlung):
Code:
Function GetComponentActivationState (InstanceProduct as Product) as Parameter
dim oParameters as Parameters
dim i as Integer

Set oParameters = InstanceProduct.Parameters

for i = oParameters.Count to 1 Step -1
  if (InStr(oParameters.item(i), "Component Activation State" <> 0) or InStr(oParameters.item(i), "Aktivierungsstatus der Komponente" <> 0) then
    GetComponentActivationState = oParameters.item(i)
    exit function
  end if
next

GetComponentActivationState = Nothing

end function


Ist das schneller als die ersten beiden Ansätze?

Gruß
Bernd

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

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

C.Samer
Mitglied
CAD Administrator


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

Beiträge: 72
Registriert: 03.05.2017

erstellt am: 09. Aug. 2017 14:39    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 Joe,

den Thread habe ich in meiner Recherche auch schon gefunden. Ich habe tomtom1972's Ansatz versucht, verstehe ihn jedoch nicht so richtig:

Zitat:
Moin Jens,
dafür gibt es zwar keine eigene Methode oder Property, aber Möglichkeiten den "Status" eines Knoten abzufragen gibt es viele.
Ich mache mir dabei folgende Eigenart eines deaktivierten Knoten zu Nutze: ein .CreateReferenceFromName liefert keine "echte" Reference;
soll heißen: jedes Modell (egal was es ist) hat schon Aufgrund  seiner Existenz mindestens einen Parameter (also ein ....Product.Parameter.Item(1)). Auf diesen ein .CreateReferenceFromName versuchen. Bekommst du eine "echte" Reference auf den Parameter zurück (der Parameter.Name ist im Reference.Displayname enthalten) heißt das, der "Status" des Knoten ist aktiviert, geht die Ref nur auf die Instanz des Products heißt das der "Status" des Knoten ist deaktiviert.
Das funktioniert seit vielen Releases stabil und schnell.
Gruß

Hallo Bernd,

habe den Code jetzt so probiert:

Code:
Dim mySel As Selection
Set mySel = Catia.ActiveDocument.Selection

If (mySel.Count = 0) Then
    Exit Sub
End If

Set actProd = mySel.Item(1).value

CATIA.StatusBar = "Counting Parameters.."
Catia.RefreshDisplay = True
For i = actProd.Parameters.Count To 1 Step -1
    CATIA.StatusBar = "Checking Parameters: " & i
    Catia.RefreshDisplay = True
    If InStr(actProd.Parameters.Item(i).Name, "Aktivierungsstatus der Komponente") <> 0 Then
        MsgBox actProd.Parameters.Item(i).Name & "  -  " & actProd.Parameters.Item(i).Value
        Exit For
    End If

    If i = 200 Then
        Exit Sub
    End If
Next

MsgBox "Not Found"
Exit Sub


Das Problem ist, dass ein großes Produkt (Mit vielen Unterprodukten und Teilen) auch sehr viele Parameter hat. Mein Testprodukt hat z.B. 155000 Parameter  . Da dauert Parameters.Count alleine schon 6 Sekunden.

Danke an euch Beide. Vielleicht fällt ja jemandem noch eine Möglichkeit ein 

[Diese Nachricht wurde von C.Samer am 09. Aug. 2017 editiert.]

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: 09. Aug. 2017 15:33    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 C.Samer 10 Unities + Antwort hilfreich

Servus

Ein Idee hab ich noch (ungetestet):

Code:

dim oParameterActivationState as Parameter

Set oInstanceProduct = oRootProduct.Products.item(1) 'Instanz die abgefragt werden soll

Set oParameterActivationState = oRootProduct.Parameters.Sublist(oInstanceProduct, false).item(1)
'ist der Status immer der einzige/erste Parameter?


Wie schnell ist dies den bei großen Baugruppen?

Gruß
Bernd

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

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

C.Samer
Mitglied
CAD Administrator


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

Beiträge: 72
Registriert: 03.05.2017

erstellt am: 16. Aug. 2017 12: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

Du bist genial Bernd! 

Für alle zukünftigen Leidensgenossen, hier ein funktionierendes Codebeispiel:

Code:

Dim iObjectPos As Integer
Dim iObjectMax As Integer
iObjectMax = 0
iObjectPos = 0

Function countMaxObjects(p As Product)
    iObjectPos = iObjectPos + 1
    CATIA.StatusBar = "Counting Active Objects: " & iObjectPos
    Catia.RefreshDisplay = True

    Dim oRootProduct As Product
    Set oRootProduct = p.parent.parent
    Dim oInstanceProduct As Product
    Set oInstanceProduct = p
    Dim oParameterActivationState As Parameter
    Set oParameterActivationState = oRootProduct.Parameters.SubList(oInstanceProduct, False).Item(1)
    If oParameterActivationState.value <> "Wahr" and oParameterActivationState.value <> "True" Then
        Exit Function
    End If

    Dim pp As Products
    Set pp = p.Products
    For i = 1 To pp.Count
        countMaxObjects(pp.Item(i))
    Next
    iObjectMax = iObjectMax + 1
End Function



Diese Funktion zählt alle aktiven Products & Parts in einem an die Funktionen übergebenen Product p.
Schnell wie ein Blitz. 

Liebe Grüße aus Wien,
Christoph

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

moppesle
Ehrenmitglied V.I.P. h.c.
Konstrukteur


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

Beiträge: 3418
Registriert: 28.05.2009

CATIA V5 R19 SP9
WIN 7 64bit

erstellt am: 01. Dez. 2020 08:57    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 C.Samer 10 Unities + Antwort hilfreich

Hallo Christoph,

wollte deine Funktion in meinen Code einbauen.
Leider scheitere wahrscheinlich an der richtigen Übergabe des Products.


Fehler kommt in der Zeile:

Zitat:
Set oRootProduct = p.Parent.Parent

"Type mismatch"

Hast du einen Tipp für mich?

Besten Dank


Code:
Sub CATMain()

    Dim oProduct    As Product
    Set oProduct = CATIA.ActiveDocument.Product

    Dim iObjectPos As Integer
    Dim iObjectMax As Integer
    iObjectMax = 0
    iObjectPos = 0
   
 
    countMaxObjects oProduct
                       
End Sub

Function countMaxObjects(p As Product)
   
    iObjectPos = iObjectPos + 1
    CATIA.StatusBar = "Counting Active Objects: " & iObjectPos
    CATIA.RefreshDisplay = True

    Dim oRootProduct As Product
    Set oRootProduct = p.Parent.Parent
    Dim oInstanceProduct As Product
    Set oInstanceProduct = p
    Dim oParameterActivationState As Parameter
    Set oParameterActivationState = oRootProduct.Parameters.SubList(oInstanceProduct, False).Item(1)
    If oParameterActivationState.Value <> "Wahr" And oParameterActivationState.Value <> "True" Then
        Exit Function
    End If

    Dim pp As Products
    Set pp = p.Products
    For i = 1 To pp.Count
        countMaxObjects (pp.Item(i))
    Next
    iObjectMax = iObjectMax + 1
End Function


------------------
Gruß Uwe

Auch Catia ist nur ein Mensch!    

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: 01. Dez. 2020 10:33    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 C.Samer 10 Unities + Antwort hilfreich

Servus Uwe

Übergib mal der Unterroutine eine Unterproduct (nicht das Rootproduct).
Für das Zählen des Rootproduct müsstest du die Routine etwas umschreiben.

Gruß
Bernd

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

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

moppesle
Ehrenmitglied V.I.P. h.c.
Konstrukteur


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

Beiträge: 3418
Registriert: 28.05.2009

CATIA V5 R19 SP9
WIN 7 64bit

erstellt am: 01. Dez. 2020 11: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 Nur für C.Samer 10 Unities + Antwort hilfreich

Hallo Bernd,

Danke dir.

Leider klappt das nicht.
Bin damit auch noch auf Kriegsfuß.

Code:
Dim ProdDoc
    Set ProdDoc = CATIA.ActiveDocument.Product
    Dim oProducts    As Products
    Set oProducts = ProdDoc.Products


Fehler kommt immer noch an der gleichen Stelle.

------------------
Gruß Uwe

Auch Catia ist nur ein Mensch!    

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: 01. Dez. 2020 11:41    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 C.Samer 10 Unities + Antwort hilfreich

Servus Uwe

Hier ein überarbeiteter Code der die Anzahl der aktivierten Instanzen in einer übergebenen Products-Collection ausgibt.

Code:
Sub CATMain()

Dim oProduct    As Product
Set oProduct = CATIA.ActiveDocument.Product

MsgBox "Anzahl: " & CStr(countMaxObjects(oProduct.Products))

End Sub


Function countMaxObjects(oProducts As Products) as Integer

    Dim oParameterActivationState As Parameter
    Dim oParentProduct As Product
    Dim iObjectMax as Integer
    Dim i as Integer
    Dim oParameters as Parameters
 
    'CATIA.StatusBar = "Counting Active Objects: " & iObjectPos
    'CATIA.RefreshDisplay = True

    Set oParentProduct = oProducts.Parent
    Set oParameters = oParentProduct.Parameters
   
    iObjectMax = 0
       
    if oProducts.Count <> 0 then
        for i = 1 to oProducts.Count
            Set oInstanceProduct = oProducts.Item(i)
            Set oParameterActivationState = oParameters.SubList(oInstanceProduct, False).Item(1)
            If oParameterActivationState.Value = "Wahr" Or oParameterActivationState.Value = "True" Then
                iObjectMax = iObjectMax + 1
            end if
        next
    end if
   
    countMaxObjects = iObjectMax
   
End Function


Gruß
Bernd

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

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

moppesle
Ehrenmitglied V.I.P. h.c.
Konstrukteur


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

Beiträge: 3418
Registriert: 28.05.2009

CATIA V5 R19 SP9
WIN 7 64bit

erstellt am: 01. Dez. 2020 13:23    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 C.Samer 10 Unities + Antwort hilfreich

Hi Bernd,

Danke Dir.

Dadurch das du

Code:
Dim oRootProduct As Product
    Set oRootProduct = p.Parent.Parent

rausgenommen hast werden die unterprodukte nicht mitgezählt.
Sehe ich das richtig?

------------------
Gruß Uwe

Auch Catia ist nur ein Mensch!    

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



Elektroniker zur elektrischen Prüfung (m/w/d)

Seit bald 50 Jahren steht SCHLEIFRING für innovative und absolut zuverlässige Übertragungstechnologien. Unser Entwicklungs- und Produktangebot reicht von kontaktierenden Schleifringen über berührungslose Drehübertragungstechniken bis hin zu kundenspezifischen Systemlösungen für die Bereiche Medizintechnik, Windenergie, Industrie, Wehrtechnik sowie für zahlreiche weitere Einsatzgebiete. Wir sind ...

Anzeige ansehenElektrotechnik, Elektronik
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: 01. Dez. 2020 13:26    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 C.Samer 10 Unities + Antwort hilfreich

Servus Uwe

Nein, ich hab den rekursiven Aufruf (countMaxObjects (pp.Item(i))) entfernt.
Deshalb werden die Unterprodukte nicht aufgelöst.

Gruß
Bernd

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

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