| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. |
| |
| KISTERS 3DViewStation: Neuer Strukturvergleich ab sofort verfügbar, eine Pressemitteilung
|
Autor
|
Thema: Abfragen einer Textfeldgröße bei einem selektiertem Textfeld (615 / mal gelesen)
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 24. Nov. 2023 08:25 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Community ich möchte die Größe (insbesondere die Länge) eines selektiertem Textfeldes in eine Variablen speichern. Ich gehe mal davon aus, dass das mit der Eigenschaft WrappingWidth gehen sollte. Laut Beschreibung kann die Eigenschaft die Wrapping Width zurückgeben oder setzen. Obwohl ich jetzt schon ein paar varianten ausprobiert habe, bringt mir der Debugger immer einen Fehler. Auszug desQuellcode (USel ist: Set USel = CATIA.ActiveDocument.Selection): Dim I As Integer For I = 1 To USel.Count 'local variable for the If Condition Dim InObText As DrawingText Dim InObDimension 'As DrawingDimension Dim MyText As DrawingText Dim cView As DrawingView 'cView define the current View Dim cDrawingTexts As DrawingTexts 'cDrawingTexts define the current Texts List Dim WrWidth As Double Dim sca As Double Dim iFontSize As Double Dim iWrappingWidth As Double Dim pX As Double Dim pY As Double '*********************************************************************************************************************************** If USel.Item(I).Type = "DrawingText" Then Set InObText = USel.Item(I).Value Set cView = InObText.Parent.Parent 'InObText.Parent.Parent set the DrawingView from InObText into the cView object Set cDrawingTexts = cView.Texts 'cView.Texts creat the cDrawingsTexts object WrWidth = InObText.WrappingWidth oder InObText.WrappingWidth(WrWidth) Ich weiß wirklich nicht wo hier der Fehler liegt ... Oder ist WrappingWidth hierfür einfach nicht die richtige Eigenschaft
Könnt ihr mir da helfen? Danke schonmal. Grüße Andy
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 467 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 24. Nov. 2023 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 24. Nov. 2023 10:14 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
|
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 24. Nov. 2023 10:22 <-- editieren / zitieren --> Unities abgeben:
Hi Lionel, ja ok. Da hast natürlich recht. Nachfolgend eine deutlich verkürzte variante des gesamten Codes (Testprogram). Mit dem Teste ich es auch gerade. Wenn hier die WrappingWidth Eigenschaften aus kommentiert sind, kann ein Textfeld ausgewählt werden und es wird dann ein zusätzliches Textfeld mit Rahmen um das ausgewählte erzeugt. Code:
Option Explicit Public drawingDocument1 As DrawingDocument Public drawingSheets1 As DrawingSheets Public drawingSheet1 As DrawingSheet Public drwViews1 As DrawingViews Public drwView1 As DrawingView Public USel Public TextField As String Public Pi As Double Sub CATMain()
Set drawingDocument1 = CATIA.ActiveDocument 'selection active DRW documents Set drawingSheets1 = drawingDocument1.Sheets 'select all sheets of active DRW documents Set drawingSheet1 = drawingSheets1.ActiveSheet 'select the first sheet of the active DRW document Set drwViews1 = drawingSheet1.Views 'creat a list of all Drawing Views Set drwView1 = drwViews1.ActiveView 'selection of the first DrawingView Pi = 4 * Atn(1) Set USel = CATIA.ActiveDocument.Selection If USel.Count > 0 Then 'local variable for the If Condition Dim InObText As DrawingText Dim MyText As DrawingText Dim cView As DrawingView 'cView define the current View Dim cDrawingTexts As DrawingTexts 'cDrawingTexts define the current Texts List Dim WrWidth As Double Dim sca As Double Dim iFontSize As Double Dim iWrappingWidth As Double Dim pX As Double Dim pY As Double If USel.Item(1).Type = "DrawingText" Then Set InObText = USel.Item(1).Value Set cView = InObText.Parent.Parent 'InObText.Parent.Parent set the DrawingView from InObText into the cView object Set cDrawingTexts = cView.Texts 'cView.Texts creat the cDrawingsTexts object 'variables for positioning 'WrWidth = InObText.WrappingWidth InObText.WrappingWidth (WrWidth) MsgBox WrWidth sca = cView.Scale2 pX = InObText.x pY = InObText.y '--- --- --- If sca <> 1 Then Set MyText = cDrawingTexts.Add(TextField, pX, pY) ' + (7 / sca)) Else Set MyText = cDrawingTexts.Add(TextField, pX, pY) ' + 7) End If '--- --- --- MyText.AssociativeElement = InObText 'creat positional link from MyText to InObDimension 'creat a TextBox with Frame and a FontSize 2.5 MyText.FrameType = catOblong iFontSize = 4 MyText.SetFontSize 0, 0, iFontSize 'iWrappingWidth = 75 'MyText.WrappingWidth = iWrappingWidth Else 'no further action End If End If End Sub Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 24. Nov. 2023 10:46 <-- editieren / zitieren --> Unities abgeben:
Hi Randle, im Anhang hab ich ein Bild mit der Fehleranzeige und gelb markiert die Zeilen, wo der Fehler ist. Wenn ich die Zeile WrWidth = InObText.WrappingWidth verwende und die Zeile InObText.WrappingWidth (WrWidth) aus kommentiere, bringt der Debugger den Fehler: Method 'WrappingWidth' of object 'DrawingText' faild. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 24. Nov. 2023 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Hallo, versuche doch mal statt ... Code: InObText.WrappingWidth (WrWidth)
mal...
Code: WrWidth = InObText.WrappingWidth
Abgesehen davon: WrappingWidth ist meines Wissens nach die Breite ab der der Text des Textfeldes umgebrochen wird (neue Zeile). Gruß Randle ------------------ Planung ersetzt Fehler durch Irrtum! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 24. Nov. 2023 12:20 <-- editieren / zitieren --> Unities abgeben:
Hi Randle, ja wenn ich das Versuche --> WrWidth = InObText.WrappingWidth kommt der Fehler --> Methode 'WrappingWidth' of object 'DrawingText' failed. Ja das dachte ich tatsächlich auch, dass das die länge ist bis ein Zeilenumbruch kommt. Aber wenn ich einem neu erzeugtem Textfeld einen WrappingWidth-Wert zuteile kann ich damit die länge des Textfelds verändern (ps: das funktioniert nämlich ) zB.: ________________________________________________________________________________________ Dim MyText As Drawing Text Dim iFontSize As Double Dim iWrappingWidth As Double Set MyText = DrawingTexts.Add("Hallo",0,0) MyText.FrameType = catOblong iFontSize = 4 MyText.SetFontSize 0, 0, iFontSize iWrappingWidth = 75 MyText.WrappingWidth = iWrappingWidth __________________________________________________________________________________________________ Kennst du eine andere Möglichkeit wie ich die Läge eines selektierten Textfeldes abfragen kann? Ich weiß, bei DrawingDimensions gibt es die Möglichkeit über die Methode 'GetBounderyBox'. Aber die steht bei einem Textfeld meines Wissens ja nicht zur verfügung. Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 24. Nov. 2023 12:43 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Hallo, um die "WrappingWidth" auslesen zu können, muss der im angehängten Screenshot gezeigt Haken bei "Word Wrap" gesetzt sein. Ist der nicht gesetzt, kannst du ihn per Makro nur aktivieren indem du der "WrappingWidth" einen Wert zuweist (z.B. InObText.WrappingWidth = 22). In deinem Anwendungsfall ist das natürlich kontraproduktiv. Gruß Randle
------------------ Planung ersetzt Fehler durch Irrtum! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 24. Nov. 2023 12:58 <-- editieren / zitieren --> Unities abgeben:
Hi Randle, danke erstmal dass du das herausgefunden hast. Das ist aber natürlich etwas Käse . Weil in der Tat, wenn ich den Hacken am selektierten Textfeldsetze funktioniert das wunderbar. Weißt du zufällig ob ich mit Adminrechten den Hacken standardmäßig bei Catia setzen kann bzw. kann ich den mit Hilfe des VBA Code bei den selektierten Textfeldern setzen? Und die letzte Frage ... Oder gibt es eine andere Möglichkeit die länge eines Textfeldes zumindest abzuschätzen, in dem ich z.B. die Ziffern o.ä. zähle? Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 24. Nov. 2023 13:03 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Hallo, also ich habe keinen Weg gefunden den Haken per Makro zu ändern/setzen, ohne das man der "Wrapping Width" einen Wert zuweist. Ein administrativer Weg diesen Haken per Default zu setzen ist mir nicht bekannt. Du könntest natürlich den Textinhalt analysieren (längste Zeile raussuchen und die Zeichenanzahl auslesen). Allerdings musst du hier die Schriftart und Schriftgröße berücksichtigen. Vielleicht mal anders gefragt: Was ist den eigentlich das Ziel das du erreichen möchtest? Gruß Randle ------------------ Planung ersetzt Fehler durch Irrtum! [Diese Nachricht wurde von Randle am 24. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 24. Nov. 2023 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Nachtrag: Vielleicht geht es so: Anzahl der Zeilen des Textfelds auslesen WrappingWidth Wert großzügig setzen und dann die WrappingWidth solange verändern (verkleinern) bis sich die Zeilenanzahl ändert (erhöht). Der letzte WrappingWidth Wert vor der Änderung/Erhöhung der Zeilenanzahl ist dann die Textfeldbreite (ca.). ------------------ Planung ersetzt Fehler durch Irrtum! [Diese Nachricht wurde von Randle am 24. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AndyMattes Mitglied Key User for CAD,PLM and FEM Software
Beiträge: 55 Registriert: 13.05.2022
|
erstellt am: 28. Nov. 2023 15:02 <-- editieren / zitieren --> Unities abgeben:
Hi Randle, sorry für die verspätete Antwort, ich war ein paar Tage außer Haus. Ich habe von unserer Entwicklungsabteilung und der QM-Abteilung folgende Vorgaben erhalten. Sie wollen zukünftig zwischen Prüfmaßen, Prozessfähigkeitsmaßen und Prüf+Prozessfähigkeitsmaßen unterscheiden. Hierbei bekommen die: - reinen Prozessfähigkeitsmaße einen gestrichelten Rahmen - Prüfmaße wie gehabt einen geschlossenen Rahmen (gibt es ja bereits in Catia) - und Prüf + Prozessfähigkeitsmaße einen geschlossenen sowie einen gestrichelten Rahmen (siehe Bild im Anhang) Über Sinn und Unsinn des ganzen Unterfangens lässt sich sicherlich nach Herzenslust diskutieren. Ich bin zum Glück derjenige, der "nur" die Methode dafür zur Verfügung stellen muss . Für Objekt des Typs "DrawingDimensions" ist der Programmieraufwand gut machbar da rel. viel über die Funktion GetBounderyBox (+ etwas Fleißarbeit beim Winkelrechnen ) erledigt werden kann. Unerwarteter weise sind die Objekte des Typs "DrawingText" aufwendiger, da dieser Typ gar nicht so viel Funktionen bietet bzw. nur über Umwege (z.B. VisPropertySet) zu erreichen sind. Das einzig gute daran ist, dass dieser Typ in der Anwendung nicht so häufig vorkommt. Deshalb überlege ich mir gerade, für den Fall dass ein Textfeld einen Doppelrahmen bekommen soll, ob es nicht zu akzeptieren ist dass der Haken manuell gesetzt werden muss. Dann sollte ich aber wenigsten die Möglichkeit haben (sofern vergessen wurde den Haken zu setzen) den Fehler abzufangen, z.B. mit der Meldung das der Haken nicht gesetzt wurde oder noch eleganter, dass dann das Eigenschaftsfenster des Textfeldes automatisch geöffnet wird. Ich weiß allerdings noch nicht ob das technisch im VBA Makro überhaut möglich ist bzw. wie groß der Aufwand dafür wäre. Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 744 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 28. Nov. 2023 15:21 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Moin, danke für die ausführliche Erklärung. Das Abfangen für den Fall das der Haken nicht gesetzt ist, sollte doch möglich sein. Wenn das Auslesen der WrappingWidth fehlschlägt, ist der Haken nicht gesetzt. Das Eigenschaftsfenster solltest du öffnen können indem du den Text selektierst und dann mit Catia.StartCommand das Eigenschaftsfenster aufrufst. Gruß Randle ------------------ Planung ersetzt Fehler durch Irrtum! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12014 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 28. Nov. 2023 16:25 <-- editieren / zitieren --> Unities abgeben: Nur für AndyMattes
Servus Andy Manuell würde ich den Doppelrahmen so erstellen: - "Texteditor" öffnen
- Text selektieren und Rahmen definieren
- "Texteditor" verlassen und dem ganzen "Textfeld" einen Rahmen über die Eigenschaften zufügen
Das wird vermutlich auch über ein Makro so möglich sein. EDIT: Texte mit Zeichenumbruch sehen bescheiden aus Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |