Autor
|
Thema: Parameter im Parameterset (7085 mal gelesen)
|
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 06. Mrz. 2009 13:45 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte in einem CATPart alle Parameternamen und Werte in ein Feld(Name,Wert) abspeichern. Die Paramter befinden sich in einem Parameterset "Werte" unterhalb von Parameters und sind in der Anzahl nicht bekannt. Wie kann ich das Parameterset Parameter\Werte anprechen und die die Parameter und Werte auslesen ? Gruss Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ogard1 Mitglied Verfahrenstechniker
Beiträge: 442 Registriert: 12.09.2004 R19 SP2
|
erstellt am: 06. Mrz. 2009 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo, versuch es hiermit, hier werden alle Parameter in einer Box ausgegeben.
Sub CATMain() Dim oActiveDoc As Document Set oActiveDoc = CATIA.ActiveDocument
Dim oParameters As Parameters Set oParameters = oActiveDoc.Part.Parameters Dim ostrPar As String For i = 1 to oParameters.Count ostrPar = ostrPar & vbCrLf & oParameters.Item(i).Name Next MsgBox ostrPar End Sub Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 06. Mrz. 2009 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
|
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 09. Mrz. 2009 10:40 <-- editieren / zitieren --> Unities abgeben:
Hallo, vielen Dank für eure Beiträge. Aber mein Problem ist das ich die Parameter im Parameterset nicht korrekt ansprechen kann. Die Struktur ist wie folgt: /Parameters/MeinParameterset/unbekannteAnzahlParameter Code: Sub CATMain() Dim oActiveDoc As Document Set oActiveDoc = CATIA.ActiveDocument Dim parameters1 As Parameters Set parameters1 = oActiveDoc.Part.Parameters
Dim ParameterSet1 As ParameterSet Set ParameterSet1 = parameters1.RootParameterSet
Dim parameterSets1 As ParameterSets Set parameterSets1 = parameterSet1.ParameterSets Dim theSet as ParameterSet 'Hier kommt die Fehlermeldung Set theSet = parameterSets1.Item("MeinParameterset")
dim para2 as parameters set para2 = theSet.Parameters
for i= 1 to para2.Count
msgbox(para2.Item(i).Name) Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAMiCADse Mitglied
Beiträge: 177 Registriert: 17.02.2006 V5,R19,SP9
|
erstellt am: 09. Mrz. 2009 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo Michi79, dein Code sollte so laufen, der String ist aber "Case Sensitive", also evtl. liegt es an der Groß/Kleinschreibung des Parametersets? Die Parameter innerhalb eines Sets holst du mit .DirectParameters (bzw. .AllParammeters) Gruß CAMiCADse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 09. Mrz. 2009 11:43 <-- editieren / zitieren --> Unities abgeben:
|
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 10. Mrz. 2009 14:33 <-- editieren / zitieren --> Unities abgeben:
Hallo, das Problem ist leider noch nicht ganz gelöst. In einem einzelnen Catpart läuft das Makro zwar, aber nicht in einer Baugruppe. So wie es aussieht, will CATIA immer auf das RootParamterset des Root-Products zugreifen und nicht auf das "Rootparameterset" der einzelnen Catparts. Ich durchlaufe dazu die Baumstruktur der Baugruppe. Wie kann ich die Parametersets der untergeordneten Baugruppen anpsrechen ? Gruss Michi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 10. Mrz. 2009 21:58 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo michi79, poste doch mal den Code von der entstandenen Sub bzw. Function und den Aufruf derselben. Dann ist das Helfen etwas leichter! 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 |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 11. Mrz. 2009 10:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Lusilnie, ich habe das Script Stückliste zählen als Vorlage genommen. http://ww3.cad.de/foren/ubb/Forum137/HTML/003224.shtml Im Bereich der CATParts sieht mein Eintrag wie folgt aus .... For Each oProduct In oProducts oProduct.ApplyWorkMode DESIGN_MODE If oProduct.Products.Count > 0 Then RekursivDurchBaum oProduct.Products Else Set oRefProduct = oProduct.ReferenceProduct Set oRefDocument = oRefProduct.Parent If TypeName(oRefDocument) = "PartDocument" Then Set parameters1 = oProduct.Parameters Set parameterSets1 = oProduct.ParameterSets Set ParameterSet1 = parameters1.RootParameterSet Set parameterSets1 = parameterSet1.ParameterSets msgbox(parameterSets1.Count) for i= 1 to parameterSets1.Count msgbox(parameterSets1.Item(i).Name) Next Set theSet = parameterSets1.Item("MeinParameterSet") Set para2 = theSet.AllParameters 'Du bist an einen Part 'jetzt kannst du entscheiden, nach was du zählen willst: 'Dateiname ' aAssyArray(iAssyArrayCount) = oRefDocument.Name 'PartNumber aAssyArray(iAssyArrayCount) = oRefProduct.PartNumber ...... Über meine msgboxes habe ich schon herausgefunden dass wohl immer versucht wird das Root-Parameterset im Haupt-Catproduct anzusprechen. Die Struktur der Parts ist so, dass es in jedem CATPART unter Parameters ein Parameterset "MeinParameterset" gibt. An diese Parameter will ich ran. Vielen Dank schon mal
Gruss Michi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 11. Mrz. 2009 18:31 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo Michi, tausche mal dein Teil mit den Parameters auf folgende aus:
Code: Dim parameters1 As Parameters 'Alle Parameters einer PartDocument (weil oRefDocument genommen) Set parameters1 = oRefDocument.Part.Parameters Dim parametersets1 As ParameterSets 'Alle ParameterSets innerhalb des Parts Set parametersets1 = parameters1.RootParameterSet.ParameterSets Dim parameterSet1 As ParameterSet Dim I As Integer Dim sName As String Dim bParametersetGefunden As Boolean bParametersetGefunden = False Dim theSet As ParameterSet For I = 1 To parametersets1.Count sName = parametersets1.Item(I).Name MsgBox (sName) 'hier gesuchte Name einsetzen If sName = "Stueckliste" Then bParametersetGefunden = True Set theSet = parametersets1.Item(I) End If Next If bParametersetGefunden Then sName = "" Dim oParameter As Parameter 'von jeder Parameter Name und Wert ausgeben For Each oParameter In theSet.DirectParameters sName = sName & oParameter.Name & "=" & oParameter.ValueAsString & vbCrLf Next MsgBox (sName) Else MsgBox ("Kein Parameterset gefunden!") End If
Für solche Probleme ist die Watch-Fenster im alten VBA Editor eine große Hilfe. Dort einfach, ohne Code ein Watch auf CATIA.ActiveDocument - Global - Global einstellen und durch den Baum navigieren. Hilft mir jetzt auch noch sehr viel, wenn ich mich auf Neuland befinde. Gruß, Zoltan [Diese Nachricht wurde von zoltan.bekesi am 11. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 12. Mrz. 2009 10:14 <-- editieren / zitieren --> Unities abgeben:
|
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 12. Mrz. 2009 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo, oProduct ist der Instanz, oRefDocument ist die "Originale". Wenn du in der V5Automation.chm die Objektstruktur durchliest, oder einfach in der VBA-Editor ein Watch auf CATIA.ActiveDocument legst, kannst du sehr schön die Hierarchie sehen. In CATIA hat jedes PartDocument (CATPart) ein Part und ein Product, sowie jedes ProductDocument ein Product und ein Products. Von oben nach unten, also von ActiveDocument ausgegangen, kommst Du in die erste Ebene über CATIA.ActiveDocument.Product.Products.Item(x) Von hier ist CATIA.ActiveDocument ein ProductDocument. Es hat ein Product, dessen Name ist es, was du ganz oben im Baum siehst. Dieses hat eine Products Collection (CATIA.ActiveDocument.Product.Products), wo die Products in der ersten Ebene sich befinden. Besser gesagt die Instanzen, da diese Products in der oben geöffneten Hauptproduct gespeichert sind. Die Namen auf dieser Ebene sind die Instanznamen. Wenn du von so einen Item den ReferenceProduct (CATIA.ActiveDocument.Product.Products.Item(x).ReferenceProduct) nimmst, bekommst Du auch ein Product, das gehört aber schon zur jeweiligen PartDocument/ProductDocument. Nehme von diesen den Parent, dann kommst du beim Document an. Alles was hier ist, ist die "Original", als hättest Du ins Part Design gewechselt. So sind nur die Parameter da, die sich wirklich in der Part definiert sind. Wie schon gesagt, widme eine halbe Stunde an den Baum im VBA-Editor, es wird sich lohnen. Gruß, Zoltan
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 13. Mrz. 2009 10:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, erst mal vielen Dank. Ich bin jetzt schon ein Stück weiter, aber der letzte Durchblick fehlt mir noch. Ich denke der wird mit dem Watch Fenster klar, wenn ich durch den Baum gehe. Bei mir klappt das aber nicht. Das Watch Fenster wird nicht aktualisiert wenn ich durch den Baum klicke. Ein Watch auf CATIA.ActiveDocument habe ich gesetzt. Aber was meinst Du mit -Global -Global einstellen ? Gruss Michi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 13. Mrz. 2009 10:14 <-- editieren / zitieren --> Unities abgeben:
|
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 13. Mrz. 2009 11:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, wenn ich in eine Part bin (Products.Count)=0 nehme ich von dort den Wert aus ReferenceProduct (set oRefProduct=oProduct.ReferenceProduct) Im Strukturbaum des VBA-Editors steht dort aber "The method ReferenceProduct failed" Bin ich an der falschen Stelle oder was hat das zu bedeuten ? Gruss Michi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 13. Mrz. 2009 18:14 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo Michi, das fehlen des ReferenceProduct kann auf einiges deuten: -Dokument in Visualisation mode -Dokument konnte am Anfang nicht geladen werden (Desk, Broken part) -Dokument nicht geladen wegen Compoenents/Unload Über kaputte Teile im Baum war hier schon eine interessante Diskussion: http://ww3.cad.de/foren/ubb/Forum137/HTML/001998.shtml#000000 Products.Count=0 bedeutet nicht automatisch, dass du in ein Part bist. Es kann auch ein leeres Product im Baum geben. Erst wenn der Typ von ReferenceProduct.Parent bekannt ist, kannst du sichergehen. Die ganze Sache mit ReferenceProduct hat mir auch einiges an Zeit gekostet (und einige Makros), bis ich es begriffen habe. Ich hoffe, du kommst mit den Sachen klar. Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 16. Mrz. 2009 16:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, steht der Typ von ReferenceProdukt.Parent irgendwo im Klartext im Watchbaum ?, oder wird diese Information einfach nicht angezeigt ? Ich habe Ihn bisher nicht gefunden Es ist schon schwer zu verstehen !!! Gruss Michi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 16. Mrz. 2009 17:49 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo Michi, der Typ steht in der dritten Spalte im Watch. Alternativ kannst du über TypeName(Referenceproduct.parent) es in einen String umwandeln und ausschreiben lassen (wie in der IF-Anweisung in mein Kode). Gruß, Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
michi79 Mitglied
Beiträge: 37 Registriert: 19.01.2009
|
erstellt am: 17. Mrz. 2009 11:03 <-- editieren / zitieren --> Unities abgeben:
Hallo Zoltan, ich hab den Formalismus verstanden wie man ein PartDocument und ein ProductDocument unterscheiden kann. Vielen Dank dafür. Allerdings kann ich die gesamt-Logik im Baum noch nicht durchschauen Mann kann sich da bei Parent ja noch sehr tief durchbewegen. Macht das irgendwie auch noch Sinn ? Gibt es da auch eine vernünftige Doku dazu ? Auf jeden Fall mal viele Unities für Dich
Gruss Michi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
zoltan.bekesi Mitglied
Beiträge: 321 Registriert: 22.10.2006 Job: CATIA V5R19 / XP 32bit MS Office 2003 Microstation V8 2004 Edition DELL Precision M6300
|
erstellt am: 17. Mrz. 2009 17:41 <-- editieren / zitieren --> Unities abgeben: Nur für michi79
Hallo Michi, .Parent zeigt auf den VB Vater. Das ist eigentlich in der V5Automation.chm dokumentiert. Es gibt dort schöne Grafiken über die Objekthierarchie. Mit Parent kannst dur bis zur CATIA.Application hochklettern, wird aber normalerweise nicht verwendet. Es ist aber in der Watch-Fenster auch ganz schön zu sehen. Ich habe es bisher nur bei PartDocument/ProductDocument unterscheidung verwendet, bzw. von einen Shape auf die Body, bzw. Part zu kommen. Letzteres ist gut, wenn du ein Pad oder sowas bekommst und z.B. die Body brauchst. Viel Spaß beim Programmieren! Zoltan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |