Autor
|
Thema: Partname aus Produkt auslesen (1679 mal gelesen)
|
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002
|
erstellt am: 11. Jun. 2008 15:21 <-- editieren / zitieren --> Unities abgeben:
Hi, mal angenommen ich hab ein größeres Produkt mit mehreren Unterbaugruppen. Dort wiederum mehrere Parts. Ich habe die Absicht ein kleines Tool zu erstellen welches die Namen der Parts prüft ob diese den allgemeinen Firmeinternen Vorgaben entsprechen. Das Tool soll aber nicht nur von anfang bis Ende Durchlaufen, sondern in erster Line auch eine Hilfe beim Benennen der Parts sein. Ich hatte mir gedacht, dass ich das (noch falsch benannte) Part mit "Objekt in Bearbeitung" aktiv schalte und dann mein Skript starte das den namen des selektierten Parts übernimmt. Kann mir einer sagen wie da die Codezeile heißt die den Namen des Aktiven Parts (im Produkt) ausliest? Danke schonmal für Eure Hilfe. Grüße Tiberius Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
apollo11 Mitglied
Beiträge: 47 Registriert: 31.03.2007 MacBook Leopard 10.5.6 4GB Ram VMWARE 3 WinXP Pro SP2 V5R16 SP5
|
erstellt am: 11. Jun. 2008 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
Das aktive Part kannst du meines Wissens nicht ermitteln. Du kannst aber irgendwas von diesem Part selektieren und mit FindObjekt das Root des einzelnen Parts finden. WICHTIG: Die Selektion muss immer mit CATIA.ActiveDocument.Selection definiert werden! Andernfalls erhält man Fehler. (also nicht mit PartDocument.Selection arbeiten) Es gibt ja nur eine Selektion und die ist immer in der obersten Ebene verankert. Code:
'... Set sel = CATIA.ActiveDocument.Selection.Item(1).ValueSet Product1 = CATIA.ActiveDocument.Selection.FindObject("CATIAProduct") If TypeName(Product1.ReferenceProduct.Parent) = "PartDocument" Then Set PartDocu = Product1.ReferenceProduct.Parent 'proceed iPartDoc 'Dim Prt As Part 'Set Prt = PartDocu.Part ' usw. oder über funktion proceedPartFunction PartDocu 'also vom Stamm/Ast in die Frucht *gg*) Else 'kein PartDocument gefunden -> "ProductDocument"; 'd.h. es war ein Teil eines Products selektiert proceedProductFunction Product1.ReferenceProduct.Parent 'im Baum eine Ebene tiefer (also vom Stamm in den Ast rein) End If '...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 12. Jun. 2008 08:19 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
Hallo, also das Part hat eine Methode Part.InWorkObject, vielleicht hat das Product oder das Document diese auch? Nur so ne Idee, weiß nicht ob's sowas gibt. Ansonsten hat apollo11 recht, immer die oberste Selection nehmen, die vom Document kommt und auch wenn im Makrorecorder mehrere Selections definiert werden, es gibt wirklich nur eine. Zum umbenennen kann ich aber schon jetzt vorab sagen, dass es gewisse Schwierigkeiten mit sich bringen könnte, da CATIA sich etwas affig hat, was das automatische umbennen und dann speichern von mehreren Bauteilen angeht. Noch ne Idee von mir wäre dem part eventuell einen entsprechenden partameter zu geben, dass es umbenannt werden soll und dnan diesen suchst. MfG Lila 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: 13. Jun. 2008 17:25 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
|
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002
|
erstellt am: 18. Jun. 2008 11:33 <-- editieren / zitieren --> Unities abgeben:
Bin ne Zeit nicht dazu gekommen, nur jetzt sitz ich wieder drüber. Ich hatte die Idee das ganze jetzt etwas anders anzugehen. Und zwar soll das Makro nicht selbst feststellen welches Objekt in Bearbeitung ist, sondern ich klicke aktiv auf das Part/Produkt. Code: Dim EnableSelectionFor(0) EnableSelectionFor(0) = "Product" Do MySel.Clear UserSelection = MySel.SelectElement2(EnableSelectionFor, "umzubenennendes Objekt wählen", True) If UserSelection <> "Normal" Then MsgBox "Fehler bei der Auswahl des Objektes!", vbCritical, "Abbruch" Exit Sub End If Set MyObject = MySel.Item(1).Value HasRep = MyObject.HasAMasterShapeRepresentation If HasRep Then Exit Do Else MyMsg = MsgBox("Keine gueltiges Objekt ausgewaehlt! Bitte erneut auswaehlen", vbOKCancel, "Fehler") If MyMsg = vbCancel Then Exit Sub End If Loop
Wie stelle ich nun fest ob es sich um ein Part gehandelt hat oder um ein Produkt? Meine Absicht ist es nun den ausgelesenen Namen in ein temp File zu sichern und dann per TCL weiterzuverarbeiten. Das Skript und die Oberfläche in TCL sind schon fertig, es muß nur noch das temp File einlesen. Rückwärts gehts genau anders herum. Im vbs müßte ich dann lediglich das zurückschreiben der neuen Bezeichnung realisieren. Probleme mit Drawings wird es nicht geben da das Makro nur zur Verfügung stehen soll beim neuen Anlegen einer konstruktion, und da gibts noch keine Drawings. Vielleicht hat ja noch einer ne Idee wie ich das realisieren könnte. Grüße Tiberius
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BigCheese Mitglied Dipl-Ing
Beiträge: 130 Registriert: 12.05.2004 CATIA V5R19 SP3
|
erstellt am: 18. Jun. 2008 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
Hallo Tiberius, wenn Du wissen willst, ob ein Part oder ein Product selektiert wurde, musst Du zunächst auch die Auswahlmöglichkeit auf ein Part erweitern.
Code: Dim EnableSelectionFor(1) EnableSelectionFor(0) = "Product" EnableSelectionFor(1) = "Part"
Dann kannst Du mit
Code: sTypeName = TypeName(MyObject)
den Typ auslesen.Wenn Du allerdings nur auf die PartNumber bzw. Nomenclature zugreifen möchtest, kannst Du Dir diese Erweiterung sparen, da Du diese ja über die Instanz bekommen und verändern kannst
Code: sPartNumber = MyObject.PartNumber sNomenclature = MyObject.Nomenclature
HTH Grüße, Alex
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 19. Jun. 2008 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
|
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002
|
erstellt am: 19. Jun. 2008 08:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Alex, danke für die Tipps. Mit sPartNumber = MyObject.PartNumber kann ich zwar jetzt den angewählten Namen auslesen, jedoch sPartNumber = MyObject.PartNumber liefert immer als Ergebnis Product zurück (was jetzt auch nicht tragisch wäre. Wie schaffe ich es wenn ich den Namen des Parts/Produktes ausgelesen hab (notfalls veränderungen vorgenommen habe) dann wieder zurückzuschreiben??? Grüße Tiberius Edit: hab es selbst gefunden [Diese Nachricht wurde von Tiberius am 19. Jun. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 20. Jun. 2008 00:52 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
Hallo Tiberius, ...GONG!... Es ist ja schön, dass du die Lösung selbst gefunden hast, doch das Ganze hier ist ein Forum, wo auf Fragen Antworten/Lösungen kommen. Mit: Zitat: Original erstellt von Tiberius: ... Edit: hab es selbst gefunden ...
ist leider niemandem geholfen, der vielleicht das gleiche Problem hat. Also sei doch so nett und lasse alle an Deiner Erkenntnis teilhaben. 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 |
Tiberius Mitglied
Beiträge: 414 Registriert: 19.02.2002 SWX 2013 SP2 (unter anderen) Windows 7 Prof. 64 Bit Intel Xeon E5-2643 NVIDIA Quadro 4000 32 GB Ram
|
erstellt am: 23. Jun. 2008 08:21 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe einfachfach das ganze rumgedreht und mit My.Object.Partnumber = NeuerName das ganze erledigt. Nun hab ich aber noch was anderes festgestellt. Das Tool funktioniert nur solange ich ein Produkt geöffnet habe. Dort kann ich den produktname oder auch die darin verbauten Parts umbenennen. Gehe ich jetzt aber her und lege ein neues Part an über Datei -> Neu -> Part, dann funktioniert das ganze nicht mehr. Hier nochmal der Codeschnipsel mit dme ich das Aulesen erledigt habe: Code: set MyObject = MySel.Item(1).value sTypeName = TypeName(MyObject) sPartNumber = MyObject.PartNumber
Wenn ich mit ner Messagebox beim Part auf den Namen im Baum klicke, wird ein leerer String übergeben. Ich denke mal dass das MyObject.Partnumber nicht ganz korrekt ist, jedoch hab ich dazu keine Unterlagen um dort für diese Stelle nachzuschlagen. Mit MyObject.Name kann ich zwar den Namen des Parts abfragen aber irgendwie klappt es anders herum nicht, so daß ich dem Part nen neuen Namen vergeben kann (So wie als wenn ich ein produkt geöffnet habe) Hat von Euch noch einer ne Idee? Grüße Tiberius
[Diese Nachricht wurde von Tiberius am 23. Jun. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 23. Jun. 2008 12:19 <-- editieren / zitieren --> Unities abgeben: Nur für Tiberius
|