| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | SPS |
Autor
|
Thema: API: GetTextFormat / SetTextFormat (2067 mal gelesen)
|
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 30. Sep. 2003 10:27 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe mal wieder ein kleines Problem: Ich sollte in einer Drawing das Schrift-Format eines Textes bzw. Bezugshinweises auslesen bzw. vor allem setzen. Das Beispiel von der SolidWorks-API-Support Seite "How to retrieve the text formatting for sketch text" bezieht sich auf Bezugshinweise in Parts. Ich habe etwas Schwierigkeiten, das auf Zeichungen umzusetzen- noch dazu haben diese Zeichnungen keine Zeichenansichten, sondern die Texte stehen in der Vorlage oder eben direkt auf dem Zeichenblatt. Die Aufgabe ist eigentlich ganz einfach: Einen bestimmten Text an eine bestimmte Stelle im Blatt schreiben (klappt) und dann formatieren (klappt nicht). so sieht das bisher aus: Sub SetzeText(TXT As String, X As Long, Y As Long) 'TXT wird an der Stelle X/Y abgesetzt. Set note = Part.InsertNote(TXT) Set Annotation = note.GetAnnotation() If Not Annotation Is Nothing Then 'Kein Bezugspfeil longstatus = Annotation.SetLeader2(False, 0, True, False, False, False) 'Schieben an Position (X, Y in m) boolstatus = Annotation.SetPosition(X / 1000, y / 1000, 0) 'und jetzt würde ich gerne das Format auslesen 'weiss aber nicht, wie (was muss z.B. bei GetTextFormat als Index stehen?). swTextFormat = Annotation.GetTextFormat() ' ??? 'und wie sieht dann das dazugehörige SetTextFormat aus? End If Hat da jemand schon mal etwas gemacht oder kann mit jemand einen Tipp geben, wie ich da zum Ziel komme?
Bitte sagt alle JA!
------------------ Klaus Massler, Alois Kober GmbH www.al-ko.de privat www.masslers.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 30. Sep. 2003 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für KMassler
Hallo Klaus, mit GetTextFormat bekommst du ein Objekt zurück, eben das Textformat, also in jedem Fall musst du das entsprechend deklarieren und mit Set zuweisen. Hab mal ein Beispiel gestrickt, dass alle selektierten Beschriftungen auf Arial, 20 Pt setzt:
Code:
' ********************************************************************** ' * Makro setzt für alle selektierten Beschriftungen das Textformat. ' * ' * 30.09.2003 Stefan Berlitz (stefan.berlitz@solidworks.cad.de) ' * http://solidworks.cad.de ' * http://swtools.cad.de ' **********************************************************************' zunächst mal ein paar Deklarartionen die gebraucht werden Dim swApp As Object Dim ModelDoc As Object Dim SelMgr As Object Dim SelCount As Long Dim Note As Object Dim TextFormat As Object Dim i As Long ' aus der swconst.bas Const swSelNOTES = 15 ' "NOTE" Sub main() Set swApp = CreateObject("SldWorks.Application") Set ModelDoc = swApp.ActiveDoc ' die selektierten Objekte abklappern Set SelMgr = ModelDoc.SelectionManager ' wenn überhaupt was selektiert ist SelCount = SelMgr.GetSelectedObjectCount For i = 1 To SelCount ' wenn nix selektiert war wird die Schleife gar nicht durchlaufen ' ansonsten ein Objekt nach dem anderen holen und ' schauen, ob es eine Beschriftung ist If (SelMgr.GetSelectedObjectType(i) = swSelNOTES) Then Set Note = SelMgr.GetSelectedObject4(i) ' dann das Textformatobjekt vorbereiten, in dem wir die ' aktuellen Werte holen Set TextFormat = Note.GetTextFormat ' zur Info auf das Direktfenster ausgeben Debug.Print TextFormat.BackWards Debug.Print TextFormat.Bold Debug.Print TextFormat.CharHeight Debug.Print TextFormat.CharHeightInPts Debug.Print TextFormat.Escapement Debug.Print TextFormat.IsHeightSpecifiedInPts Debug.Print TextFormat.Italic Debug.Print TextFormat.LineLength Debug.Print TextFormat.LineSpacing Debug.Print TextFormat.ObliqueAngle Debug.Print TextFormat.Strikeout Debug.Print TextFormat.TypeFaceName Debug.Print TextFormat.Underline Debug.Print TextFormat.UpsideDown Debug.Print TextFormat.Vertical Debug.Print TextFormat.WidthFactor ' dann das Ändern, was man möchte, z.B. die Texthöhe und den Font TextFormat.TypeFaceName = "Arial" TextFormat.CharHeightInPts = 20 ' und dann wieder zuweisen MsgBox Note.SetTextFormat(0, TextFormat) End If Next i End Sub
Ich hoffe, du verstehst wie ich das gemeint habe und es hilft dir weiter. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 01. Okt. 2003 09:32 <-- editieren / zitieren --> Unities abgeben:
Hervorragend, meinen herzlichen Dank! Ich habe das mit dem Objekt mal wieder übersehen, da sieht man mal wieder, dass mir das mit dem "objektorientierten Programmieren" wohl noch nicht so richtig in Fleisch und Blut übergegangen ist . Aber mit dem Hinweis hats geklappt, also ist vielleicht doch noch nicht Hopfen und Malz verloren. ciao ------------------ Klaus Massler, Alois Kober GmbH www.al-ko.de privat www.masslers.de PS: Und der Trick mit dem "MsgBox" am Ende ist alleine schon 10 U's wert! Auf so'ne Idee muß man erst mal kommen. [Diese Nachricht wurde von KMassler am 01. Oktober 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KMassler Ehrenmitglied V.I.P. h.c. CAD Admin + Mädchen für Alles...
Beiträge: 2675 Registriert: 06.11.2000 SolidWorks Start 1999 ** CSWP 01/2008 ** ------------------ Zuletzt beruflich: - SWX2020 SP5; - SAP/PLM+ECTR; - DriveWorks Pro; - Programmierung: VBA, aktuell Visual Studio 2022/VB.Net ------------------ ab 2024 (privat): Onshape und anderes
|
erstellt am: 08. Okt. 2003 11:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, noch ein kleiner Hinweis, falls es jemand auch nutzen will. Was vielleicht für Ottonormalprogrammierer nicht ganz klar ist: Der Wert Textformat.ObliqueAngle ist keineswegs den Winkel des Textes, wie er im Eigenschaftmanager bei Bezugshinweisen angegeben wird. Wenn man z.B. einen Text senkrecht schreiben will, dann muss man den Winkel im Bogenmaß der Eigenschaft Textformat.Escapement zuweisen. Also bei 90 Grad (vereinfacht): TextFormat.Escapement = 90/57 Ciao ------------------ Klaus Massler, Alois Kober GmbH www.al-ko.de privat www.masslers.de PS: Was der Parameter .ObliqueAngle sein soll, ist mir allerdings noch nicht klar geworden. [Diese Nachricht wurde von KMassler am 08. Oktober 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|