Autor
|
Thema: Parameter_CatDrawing (2764 mal gelesen)
|
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 06. Mai. 2015 01:07 <-- editieren / zitieren --> Unities abgeben:
Hallo miteinander ich habe mal wieder ein Problem... Es geht darum ein Startmodell einer CatDrawing zu erstellen. Aktueller Versuch ist über einen Parameter die Sprache zu ändern. Folgende Punkte funktionieren bisher wunderbar: 1) Parameter in dem die Sprache geändert wird 2) Weitergabe an Reaction 3) Reaction starten im CatDrawing enthaltene Makros abhängig von 1) 4) Umbenennung der Parameter in der oberen Struktur (Diese Parameter steuern direkte Eingaben z.B. Projektnummer / Konstrukteur usw.) Nun befinden sich in einem Parameterset innerhalb des Rootparametersets viele weitere Parameter, welche die Angaben in den jeweiligen Stempeln steuern sollen (Textfelder wie Datum / Maßstab usw.). Mein Problem ist nun wie spreche ich diese Parameter an?! >>> In Schritt 4) werden die Namen der Parameter geändert! >>> In Schritt 5) sollen die Werte der Parameter geändert werden! Struktur: RootParameterset -Para1 -Para2 . . . TextfeldSet -Para1 -Para2 . . . Scriptausschnitt bisher: Sub CATMain() 'Alle Parameter in Englisch umbenennen Set oDraw = CATIA.ActiveDocument Set oPara = oDraw.Parameters On Error Resume Next Set String1 = oPara.Item("Auftrags_Nr") String1.Rename "Order_No" If Err.Number <> 0 Then ..... End If 'Alle Textfelder in Englisch umbenennen On Error Resume Next Set String1 = oPara.Item.Value("Fertigungsauftrag")Name des Parameter der angesprochen werden soll String1.Rename "Production Order"Wert der eingetragen werden soll If Err.Number <> 0 Then RetCode = MsgBox("Fehler." ,48, "Warning") End If 'Alle Blätter in Englisch umbenennen ... End Sub [Diese Nachricht wurde von shoutz000 am 06. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Mai. 2015 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Das kommt mir recht komplex vor. Könntest du nicht: a) einfach zwei Zeichnungsrahmen (englisch/deutsch) verwenden b) über eine Konstruktionstabelle die Werte zwischen deutsch/englisch umschalten und dann über eine Attribut Verknüpfung die Parameter in die Textfelder eintragen c) je ein Textfeld für deutsch und englisch anlegen (zb Unterscheidung durch Präfix "de" und "en") und dann über ein Makro zb nur die "de"-Felder einblenden Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 06. Mai. 2015 15:23 <-- editieren / zitieren --> Unities abgeben:
Hey vielen Dank nein da die Zeichnung komplett funktionsfähig sein soll, ohne externe Referenzen, um diese dann auch unabhängig an Zulieferer weitergeben zu können. Ich muss nur wissen wie ich auf die Werte der Parameter in dem Parameterset innerhalb des Hauptparametersets zugreifen kann. Das ist aktuell das einzige Problem. Über ein internes Makro ist das ganze auch besser zu lösen, da es nicht bei Englsch und Deutsch bleibt sondern auf mehrere Sprachen erweitert wird... Globalisierung halt :-P Hat da jemand eine Idee? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Mai. 2015 15:36 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Du kannst leider den Parameter nicht direkt per Namen ansprechen. Entweder musst du den Pfad zum Parameter zusammensetzen (zb "Drawing\Set2\meinTestParameter") oder per Schleife die letzten Ziechen vergleichen: Code: Sub CatMain()Dim drawingDocument1 As DrawingDocument Set drawingDocument1 = CATIA.ActiveDocument Dim parameters1 As Parameters Set parameters1 = drawingDocument1.Parameters Dim parameterSet1 As ParameterSet Set parameterSet1 = parameters1.RootParameterSet Dim parameterSets1 As ParameterSets Set parameterSets1 = parameterSet1.ParameterSets Dim parameterSet2 As ParameterSet Set parameterSet2 = parameterSets1.Item("Set2") Dim MyParameter As parameter For Each MyParameter In parameterSet2.DirectParameters If Right(MyParameter.Name, Len("meinTestParameter")) = "meinTestParameter" Then Exit For End If Next MsgBox MyParameter.ValueAsString End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 06. Mai. 2015 16:19 <-- editieren / zitieren --> Unities abgeben:
|
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 06. Mai. 2015 19:39 <-- editieren / zitieren --> Unities abgeben:
Megaaaaa. Vielen Dank. Also ich ändere die untergeordneten Parameter jetzt so: ------------------------------------------ Set oDraw = CATIA.ActiveDocument Set oPara = oDraw.Parameters . . . . Set TextPara = oPara.Item("Drawing\Details\Fertigungsauftrag") TextPara.Value = "Production Order" >>> da das Set in der Vorlage fix ist, ist der feste Pfad für mich in diesem Fall kein Problem ------------------------------------------ Ok gleich noch eine Frage xD. Damit habe ich mich noch nicht befasst, da ich noch nicht so weit bin, aber vielleicht weiß ja jemand bereits wie man das realisieren kann. Und zwar haben wir für jedes A0-Blatt einen Zeichnungskopf (Detail). Die Brennteilblätter oder Wasserstrahlblätter haben andere Zeichenköpfe, welche auch anderst benannt sind. Nun benenne ich ja per Makro alle Blätter um in Blatt_XXX. Brennteilblätter heißen aber bei uns Blatt_XXX(Brennteile). Kann ich nun prüfen ob sich auf einem der Blätter das Detail Brennteilkopf befindet und wenn ja hinter das Blatt_XXX das (Brennteile) einfügen? Vielen Dank schon mal und sorry das ich die Frage schon stell bevor ich es selber überhaupt versucht habe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 06. Mai. 2015 19:45 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Entweder über die Selektion nach dem Detail suchen (Makrorekorder sollte den Filter liefern), oder eben eine Schleife über die Views/Components auf dem Blatt. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Mai. 2015 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Was mich wundert: Warum legst du für jedes "Beschriftung"-Textfeld einen Parameter an? Wenn du eh die Werte (Zeichnungsnummer/Drawing number/ ...) hard codest, könntest du auch gleich das entsprechende Textfeld per Makro ansprechen (ist bestimmt übersichtlicher). Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 07. Mai. 2015 19:53 <-- editieren / zitieren --> Unities abgeben:
Stimmt... türlich So inetwa meinst Du oder? 'Stringaustausch CATIA.HSOSynchronized=False Set oSel = oDoc.Selection Dim sALT(11) As String Dim sNEU(11) As String sALT(01) = "Allgemeintoleranz" sNEU(01) = "General Tolerance" sALT(02) = "Blatt" sNEU(02) = "Sheet" . . . For i=1 to 11 Search = sALT(i) oSel.Search "CATDrwSearch.DrwText.TextString='"&Search&"',all" For k = 1 to oSel.count Set ModText = oSel.Item(k).Value ModText.text= Replace(ModText.text,Search, sNEU(i)) Next oSel.clear Next CATIA.HSOSynchronized=True End If Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Mai. 2015 19:56 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Ich würde den Textfeldern sprechende Namen geben, dann kann ich einfach direkt per Namen auf das Textfeld zugreifen und den Text rein schreiben. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 07. Mai. 2015 20:09 <-- editieren / zitieren --> Unities abgeben:
Ok wie sprech ich die Textfelder dann per Namen an? Und wenn ich ein Textfeld habe das Abätze besitzt, kann ich dann diese Absätze dann auch per Makro an das Textfeld senden? So wie in der MsgBox zum Beispiel? Also so: Text Text Text Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 07. Mai. 2015 20:29 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Per Namen ansprechen geht leider nicht direkt, also entweder per Suche oder per Schleife. Mehrzeilig: Code: MyDrawingText.Text = "1. Zeile" & Chr(10) & "2. Zeile"
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 08. Mai. 2015 10:19 <-- editieren / zitieren --> Unities abgeben:
|
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 08. Mai. 2015 11:45 <-- editieren / zitieren --> Unities abgeben:
ich stell mich zu blöd an oO ich suche so nach den Textfeldern und nichts passiert?! Sub CATMain() Set oDraw = CATIA.ActiveDocument CATIA.HSOSynchronized=False Set oSel = oDraw.Selection For i = 1 To oSel.Count oDrawText = oSel.Item(i) If oDrawText.Name = Kanten Then oDrawText.Text = ("Edges Broken") End If Next CATIA.HSOSynchronized=True End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Mai. 2015 13:06 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus was willst du jetzt: über die Selektion Suchen oder per Schleife alle Textfelder abarbeiten. Dein Code ist ein Mischmasch von beidem. zB alle Texte deren Namen nicht mit "Text" beginnen im Hintergrund selektieren Code: Sub CATMain()Dim drawingDocument1 As DrawingDocument Set drawingDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = drawingDocument1.Selection selection1.Clear selection1.Add drawingDocument1.Sheets.ActiveSheet.Views.Item(2) selection1.Search "(Name!=Text* & CATDrwSearch.DrwText),sel" End Sub
Danach die Selektion mit einer Schleife abarbeiteten und zB per Case-Select die "richtigen" gleich bearbeiten Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 08. Mai. 2015 14:12 <-- editieren / zitieren --> Unities abgeben:
Soooo jetzt funzt es xD Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSel = oDraw.Selection CATIA.HSOSynchronized=False oSel.Search "CATDrwSearch.DrwText.Name=Kanten, all" For n = 1 to oSel.Count Set oText = oSel.Item(n).Value oText.Text = "Edges Broken" Next oSel.Clear CATIA.HSOSynchronized=True End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 08. Mai. 2015 17:02 <-- editieren / zitieren --> Unities abgeben:
Jetzt versuche ich die Blattendung anzupassen, falls sich auf dem Sheet im Backround das entsprechende Deteil befindet. Das Makro erwartet aber einen weiteren Befehl und kein End Sub?! Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oPara = oDraw.Parameters Set oSheets = oDraw.Sheets qSheets = oSheets.Count
For i = 1 To qSheets IsDetail = qSheets.Item(i).IsDetail If IsDetail = False Then For s = 1 to oSheets.Count Set active_sheet = oSheets.Item(s) active_sheet.Activate oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Brennteil-Stempel, all" If oSel <> 0 Then tmp_str = oSheets.Item(s).Name Sheet_Name = tmp_str & "(Brennteile)" oSheets.Item(s).Name = Sheet_Name End If oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Wasserstrahl-Stempel, all" If oSel <> 0 Then tmp_str = oSheets.Item(s).Name Sheet_Name = tmp_str & "(Wasserstrahlteile)" oSheets.Item(s).Name = Sheet_Name End If Next End If End Sub
[Diese Nachricht wurde von shoutz000 am 08. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 08. Mai. 2015 18:03 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Rück mal den Code ein wie es sich gehört, wann wirst du sehen dass du irgendwo zB "End if" oder ein "Next" vergessen hast. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 08. Mai. 2015 22:35 <-- editieren / zitieren --> Unities abgeben:
Hi habe ich bei mir auch immer nur hier muss man es immer manuell nochmal machen. Also ich find den Fehler einfach nicht... Vielleicht habe ich auch wieder was vermischt oder so oO Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSheets = oDraw.Sheets Set oSel = oDraw.Selection
For i = 1 To oSel.Count IsDetail = oSel.Item(i).IsDetail If IsDetail = False Then For s = 1 to oSheets.Count Set active_sheet = oSheets.Item(s) active_sheet.Activate oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Brennteil-Stempel, all" If oSel <> 0 Then tmp_str = oSheets.Item(s).Name Sheet_Name = tmp_str & "(Brennteile)" oSheets.Item(s).Name = Sheet_Name End If oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Wasserstrahl-Stempel, all" If oSel <> 0 Then tmp_str = oSheets.Item(s).Name Sheet_Name = tmp_str & "(Wasserstrahlteile)" oSheets.Item(s).Name = Sheet_Name End If Next End If End Sub
[Diese Nachricht wurde von shoutz000 am 08. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Mai. 2015 09:07 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Wenn du den Code zwischen die Tags "[CODE][/CODE]" kopierst sollten die Einrückungen erhalten bleiben. Bei deinem Code fällt mir auf: - zwei For-Schleifen aber nur eine wird per "next" abgeschlossen - die erste Schleife über die Selektion macht für mich wenig Sinn - die Abfrage nach IsDetail muss wahrscheinlich innerhalb der Schleife über alle Sheets angeordnet werden Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 09. Mai. 2015 10:35 <-- editieren / zitieren --> Unities abgeben:
Oh ja des is eindeutig n schnitzer gewesen xD Also ich rate mich grad nur durch ka. Habe es jetzt umgestellt und jetzt kommt ständig eine Fehlermeldung bei If oSel <> 0 Then oO Ist der Suchbefehl vllt falsch?! Code:
Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSheets = oDraw.Sheets Set oSel = oDraw.Selection For s = 1 to oSheets.Count IsDetail = oSheets.Item(s).IsDetail If IsDetail = False Then Set active_sheet = oSheets.Item(s) active_sheet.Activate oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Brennteil-Stempel, all" If oSel <> 0 Then tmp_str = oSheets.Item(s).Name Sheet_Name = tmp_str & "(Brennteile)" oSheets.Item(s).Name = Sheet_Name End If oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Wasserstrahl-Stempel, all" If oSel <> 0 Then tmp_str = oSheets.Item(s).Name Sheet_Name = tmp_str & "(Wasserstrahlteile)" oSheets.Item(s).Name = Sheet_Name End If End If Next End Sub
[Diese Nachricht wurde von shoutz000 am 09. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 10. Mai. 2015 01:11 <-- editieren / zitieren --> Unities abgeben:
Servus. Also wenn ich die Suche nach den Details per Namen weg lass, dann werden alle "normalen" Sheets mit beiden Endungen versehen. Dann stimmt irgendwas mit der Suche nach den Schriftköpfen nicht oder?! Und was genau? Ich komm absolut net weiter :-( Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Mai. 2015 10:57 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus In so einem Fall bietet es sich an die Suche manuell nachzuprüfen. Dann würdest du feststellen, dass die Suche auf allen Seiten gleichzeitig sucht. Also entweder muss du die Selektion nur auf das aktuelle Blatt einschränken (Blatt selektieren und in Selektion suchen) oder nur einmal die Suche starten und auswerten wo überall die 2D-Componente gefunden wurde Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 10. Mai. 2015 13:07 <-- editieren / zitieren --> Unities abgeben:
Soo also ich glaube ich bin jetzt ein wenig weiter gekommen. So das aktuelle Script mit Anmerkungen. Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSheets = oDraw.Sheets Set oSel = oDraw.Selection qSheets = oSheets.Count For i = 1 To qSheets 'Alle Blätter durchlaufen IsDetail = oSheets.Item(i).IsDetail If IsDetail = False Then 'Suche auf "normale" Sheets einschränken Set active_sheet = oSheets.Item(i) active_sheet.Activate oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Brennteil-Stempel, active_sheet" 'Suche nach dem Detail auf dem aktuellen Sheet For n = 1 To oSel.Count If oSel <> 0 Then 'Wenn Deteil vorhanden dann Endung anhängen tmp_str = oSheets.Item(i).Name Sheet_Name = tmp_str & "(Brennteile)" oSheets.Item(i).Name = Sheet_Name End If Next oSel.Search "CATDrwSearch.DrwDetail.Name=A0-Wasserstrahl-Stempel, active_sheet" For s = 1 To oSel.Count If oSel <> 0 Then tmp_str = oSheets.Item(i).Name Sheet_Name = tmp_str & "(Wasserstrahlteile)" oSheets.Item(i).Name = Sheet_Name End If Next End If Next End Sub Es werden auch alle "normalen" Sheets durchgegangen. Problem ist nur das ansonsten nichts passiert, da ich nur nach Details suche. Die verwendten Details sind ja aber DrawingComponents und ich weiß nicht wie ich diese suchen kann. Ein weiteres Problem ist die Namenserweiterung denke ich. Wenn ich das Deteil verwende, hängt Catia eine Nummerierung an den namen der DrawingComponent dran.
>>>A0-Wasserstrahl-Stempel.1 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Mai. 2015 14:23 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Probier mal deinen Code im VBA-Editor, IMHO kann der so nicht funktionieren. Zum Suchstring: probiere es mal mit dem Makrorekorder einen sinnvollen Filter zu finden. zB (ungetestet) Code: For i = 1 To qSheets 'Alle Blätter durchlaufen IsDetail = oSheets.Item(i).IsDetail If IsDetail = False Then 'Suche auf "normale" Sheets einschränken Set active_sheet = oSheets.Item(i) oSel.Clear osel.add active_sheet 'blatt selektieren um darin zu suchen oSel.Search "CATDrwSearch.DrwDitto.Name=A0-Brennteil-Stempel*, sel" 'Nur in der Selektion suchen, mit Wildcard weitere Endungen mit einschließen If oSel.count <> 0 Then 'Wenn Deteil vorhanden dann Endung anhängen tmp_str = active_sheet.Name Sheet_Name = tmp_str & "(Brennteile)" active_sheet.Name = Sheet_Name End If End If Next
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 10. Mai. 2015 18:33 <-- editieren / zitieren --> Unities abgeben:
Also ich habe jetzt viele Versionen ausprobiert und das Ergebnis ist immer das selbe. Das Makro läuft eindeutig über die normalen Sheets drüber aber es passiert rein gar nichts mit dem Namen. Die Makroaufzeichnung liefert absolut nichts außer wenn ich z.B. in den Backround gehe... Der VB-Editor läuft ohne zu meckern durch... so der Stand: Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSheets = oDraw.Sheets Set oSel = oDraw.Selection qSheets = oSheets.Count For i = 1 To qSheets IsDetail = oSheets.Item(i).IsDetail If IsDetail = False Then Set active_sheet = oSheets.Item(i) oSel.Clear osel.add active_sheet oSel.Search "CATDrwSearch.DrwDitto.Name=A0-Brennteil-Stempel*, sel" If oSel.Count <> 0 Then tmp_str = active_sheet.Name Sheet_Name = tmp_str & "(Brennteile)" active_sheet.Name = Sheet_Name End If oSel.Search "CATDrwSearch.DrwDitto.Name=A0-Wasserstrahl-Stempel*, sel" If oSel.Count <> 0 Then tmp_str = active_sheet.Name Sheet_Name = tmp_str & "(Wasserstrahlteile)" active_sheet.Name = Sheet_Name End If End If Next End Sub Das ausgegebene Makro während das Script oben läuft lässt für mich, auch den Anschein erwecken das alles richtig läuft...?! [Diese Nachricht wurde von shoutz000 am 10. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 10. Mai. 2015 19:50 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Hast du schon mal das Makro schrittweise abgearbeitet? Wird die 2D-Componente überhaupt gefunden? Stimmt der Inhalt der Objekte/Variablen? Nach dem oSel.Search ist die Selektion leer/bzw nur die 2D-Componente selektiert. Wenn du wieder darin suchen willst musst du wieder die Selektion leeren und das Blatt hinzufügen. Gruß Bernd PS: Kannst du bitte den Code in "[CODE][/CODE]"-Tags posten?
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 11. Mai. 2015 15:01 <-- editieren / zitieren --> Unities abgeben:
Ich versteh grad ehrlich gesagt nix xD. Schrittweise ka?! Ich schreiben in der regel nur CatScript und das direkt unter Makros/Edit. Den VB-Editor habe ich bisher kaum verwendet. Die Variablen müssten alle stimmen die 2D-Komponente ist auch richtig benannt... also ich weiß nemmer weiter... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 11. Mai. 2015 16:09 <-- editieren / zitieren --> Unities abgeben:
Ich habe es jetzt mal so geprüft und es wird definitiv keine komponente gefunden... Code:
Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSheets = oDraw.Sheets Set oSel = oDraw.Selection qSheets = oSheets.CountFor i = 1 To qSheets IsDetail = oSheets.Item(i).IsDetail If IsDetail = False Then Set active_sheet = oSheets.Item(i) oSel.Clear osel.add active_sheet oSel.Search "CATDrwSearch.DrwDitto.Name=A0-Brennteil-Stempel*, sel" If oSel.Count <> 0 Then RetCode = MsgBox( "Fund") End If oSel.Search "CATDrwSearch.DrwDitto.Name=A0-Wasserstrahl-Stempel*, sel" If oSel.Count <> 0 Then RetCode = MsgBox( "Fund") End If End If Next End Sub
[Diese Nachricht wurde von shoutz000 am 11. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 11. Mai. 2015 16:42 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
|
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 11. Mai. 2015 18:32 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 12. Mai. 2015 09:25 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Dann führe eben mal manuell die Suche aus. Wird dann was gefunden? Wie sieht dann der Suchstring aus (Makrorekorder)? Gruß Bernd PS: Ohne Beispieldaten oder genaue Erklärungen von dir (bzw auch detaillierte Untersuchungen von dir an was es liegen könnte) können wir nur raten an was es hängt. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 12. Mai. 2015 17:07 <-- editieren / zitieren --> Unities abgeben:
Was meinst du mit manueller suche?! Wenn ich aufzeichnen lass und zum den Namen unter Properties ändere dann kommt nur sowas: Code:
Language="VBSCRIPT"Sub CATMain() Set drawingDocument1 = CATIA.ActiveDocument Set drawingSheets1 = drawingDocument1.Sheets Set drawingSheet1 = drawingSheets1.Item("Details") drawingSheet1.Activate Set drawingViews1 = drawingSheet1.Views Set drawingView1 = drawingViews1.Item("A0-Brennteil-Stempel") drawingView1.Activate Set drawingSheet2 = drawingSheets1.Item("Blatt_011") drawingSheet2.Activate End Sub
[Diese Nachricht wurde von shoutz000 am 12. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 12. Mai. 2015 17:21 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Manuelle Suche: in Catia -> bearbeiten -> Suchen -> Typ "aus Element" -> gesuchten Elementtyp selektieren -> Suchen (und dies aufzeichnen) Welche Blätter willst du nun umbenennen/suchen, das Detail-Blatt oder Blätter in der solch ein Detail eingefügt wurde? (kannst du mal ein Bild posten oder die (vereinfachte) Zeichnung hochladen) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 12. Mai. 2015 17:51 <-- editieren / zitieren --> Unities abgeben:
Achsooo :-) das mit der Suche war ne gut Idee. Das ist das Ergebnis: Code:
Language="VBSCRIPT"Sub CATMain() Set drawingDocument1 = CATIA.ActiveDocument Set selection1 = drawingDocument1.Selection selection1.Search "(Name=A0'-'Brennteil'-'Stempel* & (CAT2DLSearch.DrwDetail + CATDrwSearch.DrwDetail)),all" Set selection2 = drawingDocument1.Selection selection2.Search "Type=*,all" Set selection3 = drawingDocument1.Selection selection3.Search "(Name=A0'-'Wasserstrahl'-'Stempel* & CATDrwSearch.DrwDitto),all" End Sub
Im Anhang die Zeichnung. Gesucht werden soll das vervielfältigte Element des Details auf den normalen Sheets. Also ein 2D Component. Vervielfältigt mit Instantiate 2D-Component. Befinden tun sich die Stempel-Kopien auf Blatt 011 (Brennteile) + 012(Wasserstrahlteile) [Diese Nachricht wurde von shoutz000 am 12. Mai. 2015 editiert.]
[Diese Nachricht wurde von shoutz000 am 21. Mai. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 13. Mai. 2015 18:59 <-- editieren / zitieren --> Unities abgeben:
Unglaublich... jetzt werden sie gefunden aber es werden alle Sheets der Selection umbenannt... Code:
Sub CATMain() Set oDraw = CATIA.ActiveDocument Set oSheets = oDraw.Sheets Set oSel = oDraw.Selection qSheets = oSheets.CountFor i = 1 To qSheets IsDetail = oSheets.Item(i).IsDetail If IsDetail = False Then Set active_sheet = oSheets.Item(i) oSel.Clear oSel.Add active_sheet active_sheet.Activate oSel.Search "(Name='A0'-'Brennteilstempel* & CATDrwSearch.DrwDetail), oSel" If oSel.Count <> 0 Then tmp_str = active_sheet.Name Sheet_Name = tmp_str & "(Brennteile)" active_sheet.Name = Sheet_Name End If oSel.Search "(Name='A0'-'Wasserstrahlstempel* & CATDrwSearch.DrwDetail), oSel" If oSel.Count <> 0 Then tmp_str = active_sheet.Name Sheet_Name = tmp_str & "(Wasserstrahlteile)" active_sheet.Name = Sheet_Name End If End If Next End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Mai. 2015 19:07 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Und was hast du schon alles probiert? Meine Ideen dazu: Beim Search folgendes ändern: Code: oSel.Search "(Name='A0'-'Brennteilstempel* & CATDrwSearch.DrwDetail), sel"
Nach dem ersten oSel.Search muss du die Selektion wieder leeren und die Ansicht neu hinzufügen Code: oSel.Clear oSel.add oSel.Add active_sheet
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 13. Mai. 2015 19:14 <-- editieren / zitieren --> Unities abgeben:
|
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 13. Mai. 2015 19:29 <-- editieren / zitieren --> Unities abgeben:
Hab aber grad raus gefunden das mit "CATDrwSearch.DrwDitto" gesucht werden muss! Dann ändert er nichts wenn sich keine Kopie auf den Sheets befindet. Bei CATDrwSearch.DrwDeteil werden auch dann die Sheets geändert obwohl nur das original Detail auf dem Detailsheet vorhanden ist?! Obwohl wir nur auf den normalen Sheets suchen?! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 13. Mai. 2015 19:42 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Ich hab mal ein bischen am Code rumgebastel. Bei mir läuft er so. Code: Sub CATMain()Dim odraw As DrawingDocument Dim oSheets As DrawingSheets Dim osel As Selection Dim osheet As DrawingSheet Dim i As Integer Dim IsDetail As Boolean Set odraw = CATIA.ActiveDocument Set oSheets = odraw.Sheets Set osel = odraw.Selection For i = 1 To oSheets.Count Set osheet = oSheets.Item(i) IsDetail = osheet.IsDetail If IsDetail = False Then osel.Clear osel.Add osheet osel.Search "(Name=A0'-'Brennteil'-'Stempel* & CATDrwSearch.DrwDitto),sel" If osel.Count <> 0 Then osheet.Name = osheet.Name & "(Brennteile)" End If osel.Clear osel.Add osheet osel.Search "(Name=A0'-'Wasserstrahl'-'Stempel* & CATDrwSearch.DrwDitto),sel" If osel.Count <> 0 Then osheet.Name = osheet.Name & "(Wasserstrahlteile)" End If End If Next End Sub
Gruß Bernd PS: unter catvbs müssen die ganzen "Dim" raus. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 13. Mai. 2015 20:01 <-- editieren / zitieren --> Unities abgeben:
Hammer ... ja bei mir jetzt auch. Ich versteh bloß nicht so ganz warum?! Ich habe das Sheet viel umständlicher umbenannt als Du ok. Und ich habe mit dem active_sheet noch gearbeitet oO gibt wohl noch vieeel zu lernen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 15. Mai. 2015 16:14 <-- editieren / zitieren --> Unities abgeben:
Ok doch noch ne Kleinigkeit :-) habe dazu nichts gefunden! Ich erstelle gerade Checks um die Parameterwerte zu prüfen, was auch soweit wunderbar funktioniert: Die Nummer muss so aussehen 20150000-3-01 ES_Nr .Length()==13 AND ES_Nr .Extract(8,1)=="-" AND ES_Nr .Extract(10,1)=="-" Nun möchte ich noch die Stellen zwischen den "-" überprüfen ob da nur Zahlen enthalten sind, weil da keine Buchstaben sein dürfen. Wie kann das bewerkstelligt werden? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
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: 15. Mai. 2015 17:17 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Aus der Doku zu 'IsNumeric' Code:
Dim MyVar, MyCheck MyVar = "53" ' Assign value. MyCheck = IsNumeric(MyVar) ' Returns True.MyVar = "459.95" ' Assign value. MyCheck = IsNumeric(MyVar) ' Returns True. MyVar = "45 Help" ' Assign value. MyCheck = IsNumeric(MyVar) ' Returns False.
Tschau, Joe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 15. Mai. 2015 21:47 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Mai. 2015 22:05 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Servus Wenn nichts dazu in CATIA-Hilfe steht wird es wohl nicht gehen. Kannst du in einem Check auch ein VB-Script aufrufen? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
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: 15. Mai. 2015 23:04 <-- editieren / zitieren --> Unities abgeben: Nur für shoutz000
Mit Checks hab ich noch nicht gespielt, aber ... Um zu Fuss auf numerische Eingabe zu prüfen - und falls das mit checks geht - kann man auch Größenvergleiche heranziehen, zumindest in VB. if ES_Nr .Extract(9,1) > 0 and ES_Nr .Extract(9,1) < 9 then (oder so ähnlich :-) ) aufbauend auf den Ascii-Werten für die ziffern 0-9. Geht natürlich nur für jeweils eine Ziffer. Vielleicht hilft's. Tschau, Joe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
shoutz000 Mitglied Techn. Produktdesigner
Beiträge: 168 Registriert: 19.08.2013 CatiaV5 R19 CatiaV5 R24 Windows 7 Professional
|
erstellt am: 16. Mai. 2015 00:46 <-- editieren / zitieren --> Unities abgeben:
Die Catia Hilfe steht mir nicht zur verfügung. Soweit ich weiß kann ein Makro nicht in einem Check gestartet werden das geht nur in einer Rule. Bisher habe ich noch nichts sinnvolles gefunden... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |