SolidWorks MakroMania - Setze Textbreite für Zeilenumbruch

SolidWorks MakroMania ist eine Beispielsammlung einiger Makros, die Ihnen eine Vorstellung davon geben soll, was man auch schon mit Makros in SolidWorks alles anstellen kann. Der Code des Makros sollte so gut dokumentiert sein, dass Sie damit ohne weitere Anleitung verstehen, was gemacht wird.

< voriges
MakroMania
Übersicht


nächstes >

Nummer 28
Setze Textbreite Zeilenumbruch

Download
ZIP, 19 KB

Ich übernehme keine Haftung für die korrekte Funktion der Routinen oder irgendwelcher Schäden bei der Anwendung dieser Beispiele. Das gesamte Risiko trägt der Benutzer selbst. - Sorry, muss sein.

Dieses Makro setzt die Breite für selektierte Texte. Dies ist für Texte notwendig, die einen automatischen Zeilenumbruch bei einer bestimmten Breite durchführen soll; es ist nicht möglich, solche Eigenschaften "normalen" Texten interaktiv mitzugeben.

ACHTUNG: der Text verliert die "Benutze Dokumenten Schriftart" Eigenschaft

' **********************************************************************
' * Macro sets textwidth for selected texts. This is useful for all
' * texts which should perform a automatic word wrap, for there is
' * no way in SolidWorks itself to enter a text with a specific width
' * which will automatically word wrap.
' * ATTENTION: the annotation will lose "Use document font" property
' *
' * Dieses Makro setzt die Breite für selektierte Texte. Dies ist für
' * Texte notwendig, die einen automatischen Zeilenumbruch bei einer
' * bestimmten Breite durchführen soll; es ist nicht möglich, solche
' * Eigenschaften "normalen" Texten interaktiv mitzugeben.
' * ACHTUNG: der Text verliert die "Benutze Dokumenten Schriftart"
' * Eigenschaft
' *
' * Many thanks to Wayne Tiffany for his feedback and suggestions
' *
' * 12.04.2004 Stefan Berlitz (stefan.berlitz@swtools.cad.de)
' * http://solidworks.cad.de
' * http://swtools.cad.de
' *
' **********************************************************************

Sub main()
    ' everything is in the userform
    ' Alles ist in der Userform enthalten
    UserForm1.Show vbModeless
End Sub

   mehrsprachiges Dialogfeld (wird automatisch erkannt und
   umgeschaltet, deutsch und englisch bereits vorhanden)

 

In der Userform ist alles untergebracht, was für die Funktionen benötigt wird. Hier der Codeteil:

Dim msgtext(10) As String

Const swDocDrawing = 3
Const swSelNOTES = 15
Public Enum swLengthUnit_e
    swMM = 0
    swCM = 1
    swMETER = 2
    swINCHES = 3
    swFEET = 4
    swFEETINCHES = 5
    swANGSTROM = 6
    swNANOMETER = 7
    swMICRON = 8
    swMIL = 9
    swUIN = 10
End Enum

Dim SwApp As Object
Dim DrawingDoc As Object

Sub SetTextWidth()


    Dim SelMgr As Object
    Dim SelCount As Long
    Dim Note As Object
    Dim Annotation As Object
    Dim TextFormat As Object

    Dim i, ac As Long
    Dim conv As Double

    ' conversion factor ; SolidWorks always uses Meters
    Select Case cmbUnits.List(cmbUnits.ListIndex)
        Case "mm"
            conv = 0.001
        Case "cm"
            conv = 0.01
        Case "m"
            conv = 1
        Case "inch"
            conv = 0.0254
        Case "ft"
            conv = 0.3048
    End Select

    ' die selektierten Objekte abklappern
    Set SelMgr = DrawingDoc.SelectionManager
    ' wenn überhaupt was selektiert ist
    SelCount = SelMgr.GetSelectedObjectCount

    ' nothing selected
    If SelCount = 0 Then MsgBox msgtext(0)

    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 Bemaßung ist
        ' die genutzte Funktion gibt es erst ab der SW2003 SP1, für
        ' ältere Versionen gibt es leider nicht diesen einfachen Weg
        ' an die DisplayDimensions zu kommen

        ' wrong type selected
        If SelMgr.GetSelectedObjectType2(i) = swSelNOTES Then
            Set Note = SelMgr.GetSelectedObject4(i)
            Set Annotation = Note.GetAnnotation

            For ac = 0 To Annotation.GetTextFormatCount - 1
                Set TextFormat = Annotation.GetTextFormat(ac)

                ' Change text linelength to 25mm
                TextFormat.LineLength = txtTextWidth.Text * conv

                Debug.Print Annotation.SetTextFormat(ac, False, TextFormat)
            Next ac
        End If
    Next i

    ' ER Wayne Tiffany: reset Focus and select all text to rapidly change
    ' values with the numeric keypad until I get the correct one
    txtTextWidth.SetFocus
    txtTextWidth.SelStart = 0
    txtTextWidth.SelLength = Len(txtTextWidth.Text)

End Sub

Private Sub cmdExit_Click()
    End
End Sub

Private Sub cmdSetTextWidth_Click()
    SetTextWidth
End Sub

Private Sub Label1_Click()

End Sub

Private Sub UserForm_Initialize()

    ' check which language to apply. To make another language
    ' copy one of Subs called XyzString and make your changes
    '
    ' Hier ausgucken welche Sprache benutzt wird. Um weitere
    ' Sprachen zu unterstützen unten einer der Subs kopieren
    ' Anpassungen machen und aufrufen

    Set SwApp = CreateObject("SldWorks.Application")
    Select Case SwApp.GetCurrentLanguage
    Case "german"
        GermanString
    Case "english"
        EnglishString
'    Case "spanish"
'    Case "french"
'    Case "italian"
'    Case "japanese"
    Case Else
        EnglishString
    End Select

    ' on first initialisation get pointer to active dicument
    ' beim ersten Aufruf Pointer auf aktives Dokument holen
    Set DrawingDoc = SwApp.ActiveDoc
    If DrawingDoc Is Nothing Then
        MsgBox msgtext(8)
        End
    End If

    ' default values
    ' Vorgabewerte
    ' einheiten
    cmbUnits.AddItem "mm"
    cmbUnits.AddItem "cm"
    cmbUnits.AddItem "m"
    cmbUnits.AddItem "inch"
    cmbUnits.AddItem "ft"
    Select Case DrawingDoc.LengthUnit
        Case swMM
            cmbUnits.ListIndex = 0
        Case swCM
            cmbUnits.ListIndex = 1
        Case swMETER
            cmbUnits.ListIndex = 2
        Case swINCHES
            cmbUnits.ListIndex = 3
        Case swFEET
            cmbUnits.ListIndex = 4
        Case swFEETINCHES
            cmbUnits.ListIndex = 4
        'Case swANGSTROM
        'Case swNANOMETER
        'Case swMICRON
        'Case swMIL
        'Case swUIN
    End Select

    txtTextWidth.SetFocus
    txtTextWidth.Text = 100
    txtTextWidth.SelStart = 0
    txtTextWidth.SelLength = Len(txtTextWidth.Text)

End Sub

Private Sub GermanString()
    ' used Strings in German
    ' benutzte Zeichenketten in Deutsch
    UserForm1.Caption = "Setze Textbreite"
    lblTop.Caption = "In SolidWorks können Texte nicht mit automatischen Wortumbruch eingegeben werden. Mit diesem Makro können Sie für die ausgewählten Texte eine Breite vorgeben und der Text wird dann umgebrochen." & vbCrLf & "Nur Beschriftungen möglich"
    lblTextWidth.Caption = "Textbreite und Einheit setzen"
    cmdSetTextWidth.Caption = "Setze Textbreite"
    cmdExit.Caption = "Beenden"

    ' ein paar Texte, üblicherweise Warnungen und Fehler
    msgtext(0) = "Bitte Text selektieren"
    msgtext(1) = ""
    msgtext(2) = ""
    msgtext(3) = ""
    msgtext(4) = ""
    msgtext(5) = ""
    msgtext(6) = ""
    msgtext(7) = ""
    msgtext(8) = "Kein aktives Dokument"
    msgtext(9) = "Keine Zeichnung aktiv"
    msgtext(10) = ""
End Sub

Private Sub EnglishString()
    ' used Strings in english
    UserForm1.Caption = "Set textwidth"
    lblTop.Caption = "SolidWorks texts don't make an automatic word wrap. With this macro you can set the textwidth and the text will wrap. " & vbCrLf & "Only notes allowed"
    lblTextWidth.Caption = "Enter textwidth and unit"
    cmdSetTextWidth.Caption = "Set text width"
    cmdExit.Caption = "Exit"
    ' some text, usually warning or error messages
    msgtext(0) = "Please select text first"
    msgtext(1) = ""
    msgtext(2) = ""
    msgtext(3) = ""
    msgtext(4) = ""
    msgtext(5) = ""
    msgtext(6) = ""
    msgtext(7) = ""
    msgtext(8) = "No active document"
    msgtext(9) = "No drawing active"
    msgtext(10) = ""
End Sub

Zurück zum Seitenanfang

hr.gif (4491 Byte)

counter Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40