Wir möchten auf der Arbeit gerne den Maßstab einer Inventor-Zeichnung im Schriftfeld eingetragen haben. Bis jetzt haben wir das gelöst, indem wir eine Textbox vom Typ “Angeforderte Eingabe” und mit dem Namen “SCALE” im Schriftfeld haben, die der Benutzer selber ausfüllen muss. Das klappt an sich auch ganz gut, man neigt nur leider dazu, das Eintragen zu vergessen. ;)

Im Netz gibt es eine Lösung, wie man automatisch den Maßstab der Erstansicht ermitteln und als iProperty speichern kann. Dieses iProperty kann man dann auch im Schriftfeld anzeigen: Maßstab auch bei Inventor 2009 64-Bit automatisch im Schriftkopf einfügen

Leider hat diese Lösung einen Haken. Das iProperty wird global in der Zeichnung gespeichert und gilt für sämtliche Blätter. Es klappt also nicht, wenn die Blätter verschiedene Maßstäbe darstellen.

Um das Problem zu lösen, verwende ich kein iProperty sonder das “SCALE”-Textfeld in unserem Schriftfeld. Die Werte für die angeforderte Eingabe werden im jeweiligen Schriftfeld gespeichert und können Sie daher unterscheiden. Außerdem könnte die Benutzer den Wert bei Bedarf relativ einfach ändern…

Der Quelltext ist allerdings kein VBA-Code sondern in VB.NET geschrieben und wird in unserm Inventor-AddIn verwendet:

''' <summary>
''' Aktualisiert den "Maßstab" im Schriftfeld einer Zeichnung...
''' </summary>
''' <param name="drawDoc">Inventor-Zeichnung</param>
Public Sub RefreshDrawingTitleBlockScale(ByVal drawDoc As Inventor.DrawingDocument)
  If drawDoc IsNot Nothing Then 'Wenn eine Zeichnung übergeben wurde...
    Dim sScale As String

    For Each oSheet As Inventor.Sheet In drawDoc.Sheets 'Für alle Blätter...
      If oSheet.TitleBlock IsNot Nothing Then 'Wenn ein Schriftfeld vorhanden ist...
        Try
          sScale = ""
          If oSheet.DrawingViews.Count > 0 Then 'Wenn Ansichten vorhanden sind...
            sScale = ConvertDrawingScaleToText(oSheet.DrawingViews(1).Scale)
          End If

          For Each oTextBox As Inventor.TextBox In oSheet.TitleBlock.Definition.Sketch.TextBoxes 'Für alle Textfelder...
            If oTextBox.Text.Equals("SCALE") Then 'Wenn "Maßstab"-Textfeld...
              oSheet.TitleBlock.SetPromptResultText(oTextBox, sScale)
              drawDoc.Update()
              Exit For
            End If
          Next oTextBox
        Catch ex As Exception
          Continue For
        End Try
      End If
    Next oSheet
  End If
End Sub

''' <summary>
''' ...
''' </summary>
''' <param name="scale">Maßstab</param>
''' <returns>Maßstab-Text</returns>
Private Function ConvertDrawingScaleToText(ByVal scale As Double) As String
  If scale >= 1 Then '...
    If (10 * scale Mod 10) = 0 Then '...
      Return Format(scale, "0") & ":1"
    Else '...
      Return Format(scale, "0.0") & ":1"
    End If
  Else '...
    If (10 * (1 / scale) Mod 10) = 0 Then '...
      Return "1:" & Format(1 / scale, "0")
    Else '...
      Return "1:" & Format(1 / scale, "0.0")
    End If
  End If
  Return ""
End Function