| |
| Dassault PLM Integrationen mit der 3DViewStation, eine Pressemitteilung
|
Autor
|
Thema: Selbst erstellte Parameter aus Part auslesen (7918 mal gelesen)
|
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 27. Nov. 2012 14:38 <-- editieren / zitieren --> Unities abgeben:
Hey leute, nachdem ich in den bestehenden themen nicht gefunden habe wonach ich suche versuch ichs mal aufm direkten weg. ich hab mir ein makro zurechtgelegt das die eigenschaften meines parts ausliest und in meiner drawing den jeweiligen paramtern zuweist, damit keine tippfehler beim werte übernehmen entstehen können. für alle vordefinierten eigenschaften hat das wunderbar funktioniert (Name, Status, Beschreibung etc. ) jetzt hab ich allerdings das problem, dass mir das Material, Gewicht und Englische Bezeichnung nicht übernommen werden, da diese infos ja anscheinend auf einer anderen "ebene" abgelegt sind...hier mal ein ausschnitt aus meinem code Code:
. . ' get part number Dim sPartNumber ' As String sPartNumber = prdSource.PartNumber ' get nomenclature EN Dim sNomenclatureEN ' As String sNomenclatureEN = prod.Parameters.Item("`Properties\Nomenclature EN`") . . . . Set drawingDocument1 = CATIA.ActiveDocument ' place part number Set parameters1 = drawingDocument1.Parameters Set strParam1 = parameters1.Item("Part Number") strParam1.Value = sPartNumber ' place nomenclature EN Set strParam1 = parameters1.Item("Title EN") strParam1.Value = sNomenclatureEN
danke schon mal für eure hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Nov. 2012 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Willkommen im Forum. Wie sieht deine Struktur aus? (ggf Screenshot des Strukturbaums) ggf hilft dir die Objektauflösung im Makroeditor/VBA-Editor schon entsprechend weiter. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 27. Nov. 2012 17:14 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
|
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 27. Nov. 2012 17:15 <-- editieren / zitieren --> Unities abgeben:
danke schon mal für die schnelle antwort, hab mal ein bild vom struktur baum und sicherheitshalber den ausschnitt aus den props angehängt...die "Product Added Properties" sind die welche ich auslesen müsste.. meinst du mit objektauflösung den objektkatalog? hab mich mit vba bis jetzt noch wenig beschäftigt... gruß martin
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: 27. Nov. 2012 17:29 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Das müssten die UserRefProperties sein, in denen es in dem anderen beitrag ging, wie man sie am besten wieder heraus bekommt. :-) ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 27. Nov. 2012 17:43 <-- editieren / zitieren --> Unities abgeben:
ok, danke schon mal für die hilfe soweit...ich hab das mal probiert umzusetzen und komm trotzdem auf keinen grünen zweig. mein code um die masse auszulesen und ins parameterset der drawing einzufügen würde so ausschaun.. Code:
' get Mass Dim sMass ' As String Set ParamWorks = PartDoc.Product.UserRefProperties sMass = ParamWorks.Item("CAD Weight") ' place Mass Set strParam1 = parameters1.Item("Weight") strParam1.Value = sMass
ich nehm mal an, dass der fehler in zeile 4 is, weil ich nicht genau weiß wie ich auf die einzelnen items der UserRefProps zugreifen kann, bzw ob hier der klammerausdruck so aussehen müsste Code:
sMass = ParamWorks.Item("`Properties\CAD Weight`")
gruß martin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Nov. 2012 18:04 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus IMHO ist es am einfachsten über eine Schleife die Namen der Parameter abfragen und diese bzw deren letzten Zeichen mit deinem Suchstring zu vergleichen: Code: Sub CATMain() Dim PartDoc As partDocument Dim ParamWorks As Parameters Dim sMass As ParameterSet PartDoc = CATIA.ActiveDocument Set ParamWorks = PartDoc.Product.UserRefProperties Set sMass = getUserProperty(ParamWorks, "Test") End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next End Function
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 27. Nov. 2012 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: 28. Nov. 2012 09:53 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Bernds Code gefällt mir. :-) Ich würde, eventuell noch eine LCase()-Operation vorschalten um die Strings mit Kleinbuchstaben zu vergleichen, was eventuell Fehlerquellen reduziert. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Nov. 2012 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Der Code hat noch einiges an Verbessungspotential: - Fehlerabhandlung wenn es den Parameter nicht gibt - Was passiert wenn mehre Parameter mit den gleichen Zeichenfolgen enden (zB "Masse" und "CAD-Masse")? - ... Den Code hab ich einfach mal so runter getippt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 05. Dez. 2012 10:20 <-- editieren / zitieren --> Unities abgeben:
danke für den code...der war zwar ein guter ansatz für mich, es will aber iwie immer noch nicht wirklich klappen. macht es bei dem ganzen einen unterschied wenn im parameternamen leerzeichen vorkommen oder wird das auch erkannt? (bsp.: "CAD Weight") Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Dez. 2012 22:09 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Beim mir funktioniert der Code auch wenn Leerzeichen in den Parameternamen vorkommen. Hast du vielleicht beim Parameternamen an letzter Stelle noch ein Leerzeichen? Ggf kannst du noch vor dem Vergleich in beiden Strings mit der Trim-Funktion die Leerzeichen entfernen. Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 10. Dez. 2012 16:20 <-- editieren / zitieren --> Unities abgeben:
nein, an den leerzeichen liegt es leider auch nicht...er löscht den vorhandenen text in den parametern der zeichnung, so als ob er keinen wert aus dem part übernehmen würde. ich poste mal den ganzen code, vll is ja woanders der hund begraben Code:
Sub CATMain() '------------------------------------ ' RETRIEVE DRAWING DOCUMENT STRUCTURE '------------------------------------ Dim docDrawing As DrawingDocument Set docDrawing = CATIA.ActiveDocument Dim drwSheets As DrawingSheets Set drwSheets = docDrawing.Sheets ' get active sheet Dim shActiveSheet As DrawingSheet Set shActiveSheet = drwSheets.ActiveSheet Dim drwViews As DrawingViews Set drwViews = shActiveSheet.Views ' get active view Dim vwActiveView As DrawingView Set vwActiveView = drwViews.ActiveView ' get background view Dim vwBackgroundView As DrawingView Set vwBackgroundView = drwViews.Item(2) ' get titleblock Dim vwTitleBlock As DrawingView Set vwTitleBlock = drwViews.Item(2) '------------------------------------------ ' GET PART USED AS A SOURCE FOR ACTIVE VIEW '------------------------------------------ Dim gbBehaviour As DrawingViewGenerativeBehavior Set gbBehaviour = vwActiveView.GenerativeBehavior ' get Product interface on source Part document Dim prdSource As Product On Error Resume Next Set prdSource = gbBehaviour.Document If (prdSource Is Nothing) Then MsgBox "Source Part document not found!", vbCritical Exit Sub End If '----------------------------------- ' ACCESS PROPERTIES IN PART DOCUMENT '----------------------------------- ' get part number Dim sPartNumber ' As String sPartNumber = prdSource.PartNumber ' get revision Dim sRevision ' As String sRevision = prdSource.Revision ' get definition Dim sDefinition ' As String sDefinition = prdSource.Definition ' get nomenclature DE Dim sNomenclature ' As String sNomenclature = prdSource.Nomenclature ' get product description Dim sDescriptionRef ' As String sDescriptionRef = prdSource.DescriptionRef Dim PartDoc As partDocument Dim ParamWorks As Parameters Set PartDoc = CATIA.ActiveDocument Dim sMaterial As String Set ParamWorks = PartDoc.Product.UserRefProperties Set sMaterial = getUserProperty(ParamWorks, "CAD Material") Dim sMass As Parameter Set ParamWorks = PartDoc.Product.UserRefProperties Set sMass = getUserProperty(ParamWorks, "CAD Weight") Dim sNomEN As Parameter Set ParamWorks = PartDoc.Product.UserRefProperties Set sNomEN = getUserProperty(ParamWorks, "Nomenclature EN") '------------------------------------------------ ' PLACE VALUES OF PROPERTIES IN THEIR TEXTHOLDERS '------------------------------------------------ Set drawingDocument1 = CATIA.ActiveDocument Set parameters1 = drawingDocument1.Parameters ' place part number Set strParam1 = parameters1.Item("Part Number") strParam1.Value = sPartNumber ' place revision Set strParam1 = parameters1.Item("Revision") strParam1.Value = sRevision ' place definition Set strParam1 = parameters1.Item("Doc Status") strParam1.Value = sDefinition ' place nomenclature DE Set strParam1 = parameters1.Item("Title DE") strParam1.Value = sNomenclature ' place nomenclature EN Set strParam1 = parameters1.Item("Title EN") strParam1.Value = sNomEN ' place product description Set strParam1 = parameters1.Item("Description") strParam1.Value = sDescriptionRef ' place product material Set strParam1 = parameters1.Item("Material") strParam1.Value = sMaterial ' place product weight Set strParam1 = parameters1.Item("Weight") strParam1.Value = sMass MsgBox ("Schriftkopf wurde beschrieben") End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As String Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next End Function
gruß martin ------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! [Diese Nachricht wurde von geeeSTAR am 10. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Dez. 2012 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Du verwendest für "docDrawing" und "PartDoc" beides mal das ActiveDocument. Welches Dokument ist nun aktiv? Müsste es nicht zB: Code: Set PartDoc = prdSource
heißen? Was passiert wenn es um eine Baugruppenzeichnung handelt (Dim PartDoc as Partdocument)?Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 10. Dez. 2012 17:31 <-- editieren / zitieren --> Unities abgeben:
docDrawing soll das aktive sein... mir is grad aufgefallen, dass ich mir die zeile mit ActiveDocument in der "Place..." Sektion auch sparen kann wenn ich das parameterset auf docDrawing bezieh. trotzdem funktioniert das ganze no immer ned und mir gehn langsam die ideen aus, woran es scheitert... kanns sein das mit den parameter typen irgendwas ned zam passt? CAD Material und NomEN sind vom typ "String", die CAD Masse is typ "Mass" hab mal ein screen von meinen relations dazugegeben. vll is ja da was nicht ganz io... gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Dez. 2012 17:39 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Kopiere mal den Code in den VBA-Editor und für deisen dort schrittweise aus. Im Watch-fester kannst du dann den "Objekten beim arbeiten" zusehen. Ich vermute, dass die Methode "getUserProperty" dir nur den Parameter zurück liefert und du den Wert noch auslesen muss zB sMass.Value oder sMass.ValueAsString Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 10. Dez. 2012 18:09 <-- editieren / zitieren --> Unities abgeben:
anscheinend dürfte das problem beim "ParamWorks" liegen Code:
Set ParamWorks = PartDoc.Product.UserRefProperties
ich hab nach dem sMaterial block einen haltepunkt gesetzt... Paramworks hat den Wert "Nothing", und sMaterial folglich auch weil er die function gar nicht so ausführt wies gedacht ist. PartDoc.Product.UserRefProperties hat den Wert "<Objektvariable oder With-Blockvariable nicht festgelegt>" was ist zu tun damit das ganze funktioniert? gruß martin ------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Dez. 2012 18:43 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Schau mal beim Objekt "PartDoc" wie du da zu den UserRefPropeties kommst (im Watchfenster ggf auch mal n der Doku schauen wo diese im Bezug zum Document zu finden sind). Gruß Bernd EDIT: Du schaltest oben im Code mit "On Error Resume Next" die Fehlerbehandlung aus. Nach dem dem Prüfen ob ein Dokument vorhanden ist solltet du diese wieder über "on error goto 0" einschalten. Sonst suchst du dir bei der Fehlersuche einen Wolf (es werden keine Fehler mehr ausgegeben). ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 10. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 13. Dez. 2012 12:38 <-- editieren / zitieren --> Unities abgeben:
bin beim debuggen grad auf folgenden fehler gestoßen... Code:
Dim prdSource As Product On Error Resume Next Set prdSource = gbBehaviour.Document . . Dim PartDoc As PartDocument Dim ParamWorks As Parameters Set PartDoc = prdSource Dim sMaterial As Parameter Set ParamWorks = PartDoc.Product.UserRefProperties Set sMaterial = getUserProperty(ParamWorks, "CAD Material") . .
Fehler: Typen unvertrgälich. prdSource is ja als Produkt deklariert und dann setzt ich aber ein PartDocument damit gleich. welchen typ brauch ich damit das ganze funktioniert? gruß martin ------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Dez. 2012 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Falls prdSource schon ein Product zurück liefert kannst du kannst du vermutlich auf das PartDocument verzichten und direkt mit "Set ParamWorks = prdSource.UserRefProperties" weiter machen. Was sagt das Watch-Fenster dazu? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 13. Dez. 2012 15:55 <-- editieren / zitieren --> Unities abgeben:
es funktioniert! hab mal die zip datei hochgeladen damit die nachwelt auch noch was davon hat. ich werd auch noch ein bisschen daran rumbstaeln (maßstab aus hauptansicht übernehmen, blattnummer, etc.) aber das wichtigste kann das teil auf jedne fall mal. updates lad ich ggf. nat auch noch hoch wenns welche gibt DANKE für eure geduld und die hilfreichen tipps gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 19. Dez. 2012 14:03 <-- editieren / zitieren --> Unities abgeben:
hey leute, bin noch auf eine grundlegende frage gestoßen. wie ruft catia die parameter ab? ich will zb die gesamtblattanzahl auslesen und in den schriftkopf einfügen. die ganzen infos liegen im parameters1 Set. nachdem ich das ganze über watch fenster mal beobachtet hab, hab ich dem eintrag gefunden, und will den so aufrugen/zuweisen Code:
Dim blattanzahl blattanzahl = parameters1.Item("RootParameterSet\Parent\Sheets\Count")
es funktioniert aber iwie ned...nach der zueisung steht für den wert von blattanzahl "leer". weis einer worans da hackt? und BTW weiß jemand wie/wo ich die nummer des aktuellen (aktiven) blattes herbekomm? gruß martin ------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Dez. 2012 14:13 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Die Seitenzahl kannst du über zB: Code: Dim blattanzahl blattanzahl = CATIA.ActiveDocument.Sheets.count
auslesen. Parameter sind in diesem Sinne nur Knowlegware-Paramter und User-Parameter.Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 19. Dez. 2012 15:03 <-- editieren / zitieren --> Unities abgeben:
alles klar, um die frage noch zu verfeinern... ich brauche noch .) die nummer des blattes selbst. diese info hab ich bis jetzt aber vergeblich in dem teil gesucht. es sollte am ende so im schriftkopf stehn 1/2, 2/2 .) den maßstab als x:x dargestellt. wenn ich den so auslese bekomm ich immer einen dezimal wert. und maßstab 0,5 schaut dann doch ziemlich dämlich aus ^^ gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 19. Dez. 2012 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
|
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 19. Dez. 2012 16:06 <-- editieren / zitieren --> Unities abgeben:
die idee kam mir auch schon, allerdings müsste ich ja dann eine fall unterscheidung machen wenn faktor größer-gleich bzw kleiner als 1 is...sonst is das ganze j ned universell anwendbar. ich dachte mir nur, dass es da vll einen befehl gibt um code zu sparen... gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Dez. 2012 16:07 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Zu der Blatt-Nummer: - Schleife über alle Blätter und dabei das ActiveSheet mit dem Blatt aus der Schleife vergleichen - der falls du sowieso mit einer Schleife alle Blätter abarbeitest alle Rahmen ausfüllst) hast du über den Zähler schon die Nummer des Blattes Hinweis: ggf musst du auch Prüfen auch bei der Blattanzahl) ob es sich um ein DetailSheet handelt (2D-Komponenten) vergleiche auch hier Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 19. Dez. 2012 17:15 <-- editieren / zitieren --> Unities abgeben:
nach der einen oder anderen meinungsverschiedenheit mit dem compiler hab ich mal das zusammengebracht. bei der for schleife für den sheet count dürfte aber was ned stimmen. da schreibt er mir bei jedem blatt eine 2 rein. das -2 kommt daher das ich in meiner vorlage zusätzliche blätter für eigene rahmen etc habe... Code:
Dim docDrawing As DrawingDocument Set docDrawing = CATIA.ActiveDocument Dim drwSheets As DrawingSheets Set drwSheets = docDrawing.Sheets ' get active sheet Dim shActiveSheet As DrawingSheet Set shActiveSheet = drwSheets.ActiveSheet . . ' place number of sheets Dim blattanzahl blattanzahl = CATIA.ActiveDocument.Sheets.Count - 2 Set strParam1 = parameters1.Item("Sheets") strParam1.Value = blattanzahl 'place scale Dim massstab Dim tempScale Dim tempScale1 Dim string1 As String Dim string2 As String Dim string3 As String Dim string4 As String Dim string5 As String Dim string6 As String Set drawingSheets1 = docDrawing.Sheets Set drawingSheet1 = drawingSheets1.Item("Sheet.1") Set drawingViews1 = drawingSheet1.Views Set drawingView1 = drawingViews1.Item("Front view") massstab = drawingView1.Scale If massstab > 1 Then tempScale = massstab string1 = tempScale string2 = ":1" string3 = string1 & string2 Set strParam1 = parameters1.Item("Scale") strParam1.Value = string3 Else tempScale1 = 1 / massstab string4 = "1:" string5 = tempScale1 string6 = string4 & string5 Set strParam1 = parameters1.Item("Scale") strParam1.Value = string6 End If ' place sheet number Dim j As Integer Dim doccount doccount = docDrawing.Sheets.Count - 2 For j = 1 To doccount If shActiveSheet = docDrawing.Sheets.j Then Set strParam1 = parameters1.Item("Sheet") strParam1.Value = j End If Next
zum code. ich weis das es ein wenig umständlich/unübersichtlich is, gesäubert wird erst wenns funktioniert wo liegt also da noch der fehler? gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 19. Dez. 2012 17:16 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Dez. 2012 17:20 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Ohne den Code getestet zu haben würde ich es so probieren (siehe auch Doku): Code:
For j = 1 To docDrawing.Sheets.Count If shActiveSheet = docDrawing.Sheets.item(j) Then Set strParam1 = parameters1.Item("Sheet") strParam1.Value = j End If Next
Gruß BerndEDIT: Was ist bei dir "strParam1"? Als Parameter macht es nicht unbedingt Sinn (Parameter gelten AFAIK für das ganze Dokument) ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 19. Dez. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 19. Dez. 2012 17:58 <-- editieren / zitieren --> Unities abgeben:
hab das jetzt mal getestet. er übernimmt für die blattnummer immer den letzten j wert. und (ich nehm an das is eher ein folgefehler vom ersten) er gibt dem zweiten blatt dieselbe nummer wie dem erste gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 19. Dez. 2012 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Wo/Wie trägst du die Blattnummer ein? Grob müsste es so aussehen: Code: for I = 1 to oSheets.Count Set oSheet = oSheets.item(I) Set TextfeldBlattnummer = oSheet.Views.item(2).texts.item("Blattnummer") 'im Blatthintergrund das Textfeld "Blattnummer" TextfeldBlattnummer.Text = CStr(I) next
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 20. Dez. 2012 14:50 <-- editieren / zitieren --> Unities abgeben:
was genau ist "oSheet" für ein befehl? wenn ich einen haltepunkt setze und den "wert" von oSheet abfrage steht da leer... gruß martin
------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 20. Dez. 2012 15:51 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus oSheet ist kein Befehl sondern ein Objekt. (bei dir entspricht dem "oSheets" das Objekt "drwSheets") Beim ersten Schleifen Durchlauf ist es die erste Seite (Laufvariable, hier "I", für die Seitenzahl) Der von mir gepostetet Code soll nur de groben Ablauf zeigen, diesen kannst du nicht 1:1 übernehmen (andere Objektnamen). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geeeSTAR Mitglied Techn. Zeichner
Beiträge: 17 Registriert: 27.11.2012 CATIA V5 R21 SP4 auf Win7 DELL Precision T3500 12GB Ram 2GB Nvidia Quadro 4000
|
erstellt am: 20. Dez. 2012 17:51 <-- editieren / zitieren --> Unities abgeben:
hey leute, nach langem kampf is das teil endlich am laufen so wie es das soll. ich habs noch um ein paar nützliche funktionen erweitert. danke aber auf alle fälle für eure hilfe, das nächste mal werd ich auf jeden fall schon mal mehr plan von der ganzen sachen haben BTW.: das makro hat ws noch einiges an verbesserungspotential, vor allem was aufbau und strukturierung angeht. das wird dann aber erst irgendwann geändert - hauptsache man kann damit arbeiten. gruß martin ------------------ Nimm nie einen Menschen, wenn du eine Maschine dafür nehmen kannst! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 06. Sep. 2013 14:56 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Hallo, ich bin das Thema soweit durchgangen und wollte es auf meine Bedürfnisse anpassen. Ich brauche eine Abfrage die Feststellt ob UserRefProperties mit einem bestimmten String vorhanden sind oder nicht. Sind diese Vorhanden sollen diese gelöscht und durch neue ersetzt werden. Ich wollte hierzu den Code zum auslesen von GeeeStar auf meine UserRefs anpassen. Der Code hierzu sieht bis jetzt folgender Maßen aus: Sub CATMain() Dim partDocument1 As Product On Error Resume Next Set partDocument1 = CATIA.ActiveDocument If (partDocument1 Is Nothing) Then MsgBox "Source Part document not found!", vbCritical Exit Sub End If Dim ParamWorks As Parameters Set ParamWorks = partDocument1.UserRefProperties Dim sMaterial As Parameter Set sMaterial = partDocument1.getUserProperty(ParamWorks, "TE01") Dim Box Box = MsgBox(sMaterial) End Sub Ich wollte über eine MsgBox testen ob es funktioniert. Ich bekomme jedoch nur eine leere MsgBox angezeigt. Unter VBA bekomme ich beim Debuggen auch nichts angezeigt.
Könnte Ihr mir helfen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Sep. 2013 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Folgende Fehler hatte dein Code: - du hast die Fehlbehandlung nicht wieder angeschaltet deshalb hat der Degugger auch keinen Fehler gebracht - die Funktion "getUserProperty" fehlt in deinem Code - "getUserProperty" liefert dir den Parameter zurück nicht den Wert Code: Sub CATMain()Dim oProduct As Product On Error Resume Next Set oProduct = CATIA.ActiveDocument.Product If (oProduct Is Nothing) Then MsgBox "Source Part document not found!", vbCritical Exit Sub End If On Error GoTo 0 Dim ParamWorks As Parameters Set ParamWorks = oProduct.UserRefProperties Dim sMaterial As Parameter Set sMaterial = getUserProperty(ParamWorks, "TE01") Dim Box Box = MsgBox(sMaterial.Value) End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter
Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 09. Sep. 2013 13:16 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Hallo, Danke das war mein Fehler. Jetzt wollte ich eine Abfrage schalten die Prüfen soll ob die UserRefProperties schon vorhanden sind, d. h. ob "TE*" schon angelegt sind. Die Abfrage habe ich wie folgt angelegt: Sub CATMain() Dim Product As Product On Error Resume Next Set Product = CATIA.ActiveDocument.Product If (Product Is Nothing) Then MsgBox "Source Part Document not found!", vbCritical Exit Sub End If On Error GoTo 0 Dim ParamWorks As Parameters Set ParamWorks = Product.UserRefProperties Dim Merkm01 As Parameter Set Merkm01 = getUserProperty(ParamWorks, "TE01") If Merkm01.Value >= 0 Then MsgBox (Merkm01.Value) Else MsgBox "Keine Merkmale vorhanden!", vbCritical Exit Sub End If End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter
Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next End Function Allerdings ist mir aufgefallen das ich so nur den Wert von "TE*" abfrage und nicht ob "TE*" überhaupt schon vorhanden ist.
Kann mir jemand weiterhelfen stehe grade auf dem Schlauch. Vielen Dank. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Sep. 2013 17:38 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Du könntest in der Function "getUserProperty" noch einbauen, dass wenn der Parameter nicht vorhanden ist NOTHING zurückgeben wird. Dies lässt sich dann auswerten. (oder gleich die Function erweitern, dass der Parameter angelegt wird?)
Code: Sub CATMain()Dim oProduct As Product On Error Resume Next Set oProduct = CATIA.ActiveDocument.Product If (oProduct Is Nothing) Then MsgBox "Source Part document not found!", vbCritical Exit Sub End If On Error GoTo 0 Dim ParamWorks As Parameters Set ParamWorks = oProduct.UserRefProperties Dim sMaterial As Parameter Set sMaterial = getUserProperty(ParamWorks, "TE01") If sMaterial Is Nothing Then MsgBox "Parameter nicht vorhanden" Exit Sub End If Dim Box Box = MsgBox(sMaterial.Value) End Sub Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter
Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next Set getUserProperty = Nothing End Function
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 10. Sep. 2013 15:45 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Danke so funktionierts. ich habe es auch so erweitert, wenn die Parameter nicht vorhanden sind diese eingetragen werden und wenn alte Parameter vorhanden sind, diese gelöscht werden. Jedoch bin ich am überlegen wie die Schleife aufgebaut werden muss, damit ich nach dem remove-Befehl die neuen Parameter eintragen kann. Sub CATMain() Dim oProduct As Product On Error Resume Next Set oProduct = CATIA.ActiveDocument.Product If (oProduct Is Nothing) Then MsgBox "Source Part document not found!", vbCritical Exit Sub End If On Error GoTo 0 Dim ParamWorks As Parameters Set ParamWorks = oProduct.UserRefProperties Dim sMaterial As Parameter Set sMaterial = getUserProperty(ParamWorks, "TE01") If sMaterial Is Nothing Then MsgBox "Parameter nicht vorhanden" - - - BEFEHLE ZUM EINFÜGEN - - Exit Sub Else ParamWorks.Remove "PR-Nr." ParamWorks.Remove "TE01" End If End Sub
Function getUserProperty(UserProperties As Parameters, ParameterName As String) As Parameter
Dim I As Integer For I = 1 To UserProperties.Count If Right(UserProperties.Item(I).Name, Len(ParameterName)) = ParameterName Then Set getUserProperty = UserProperties.Item(I) Exit Function End If Next Set getUserProperty = Nothing End Function Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Sep. 2013 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Warum willst du die Parameter löschen (obwohl du davor ihn direkt anlegst)? Wann soll welcher Parameter gelöscht werden und wann soll welcher Parameter angelegt werden? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 11. Sep. 2013 08:10 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Guten morgen, zum löschen. Es kann sein, das ältere Bauteile den Parameter besitzen, dieser sich aber nach einer Aktualisierung verändert hat. Aus diesem Grund möchte ich ihn löschen oder überschreiben. Grundsätzlich sollen alle ältere und zukünftige Bauteile diese Parameter in den UserRefProperties besitzen. Das Neuanlegen ist ja auch kein Problem, die Frage ist nur wenn eine Aktualisierung stattgefunden hat. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Sep. 2013 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
Servus Du kannst doch einfach jeden Parameter mit "getUserProperty" abfragen, falls vorhanden neuen Wert zuweisen. Falls nicht vorhanden,Parameter anlegen und Wert Zuweisen Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
buecherm83 Mitglied Ingenieur IT Application Software
Beiträge: 78 Registriert: 20.09.2011 SIEMENS NX10 CATIA V5 R26 VB7.1 Tecnomatix Process Designer/Simulate<P>Win7 64bit Office 2016
|
erstellt am: 12. Sep. 2013 09:15 <-- editieren / zitieren --> Unities abgeben: Nur für geeeSTAR
|