---
- GuiCommand:
Name:Draft ShapeString
MenuLocation:Drafting → Shape from text
Workbenches:[Draft](Draft_Workbench.md), [Arch](Arch_Workbench.md)
Shortcut:
Version:0.14
SeeAlso:[Draft Text](Draft_Text.md), [Draft Label](Draft_Label.md), [Part Extrude](Part_Extrude.md)
---
The Draft ShapeString command creates a compound shape that represents a text string. This shape can be used to create 3D letters with the Part Extrude command.
The Draft ShapeString command is not intended for standard text annotations. The Draft Text command or the Draft Label command should be used for that purpose.
Single point required to position the ShapeString
For Windows users: please read the Font file selection on Windows paragraph first.
- There are several ways to invoke the command:
- Press the Draft ShapeString button.
- Select the Drafting → Shape from text option from the menu.
- The ShapeString task panel opens.
- Click a point in the 3D view, or type coordinates.
- Optionally press the Reset Point button to reset the point to the origin.
- Enter a String.
- Specify the Height.
- To select a font do one of the following:
- Enter a file path in the Font file input box.
- Press the ... button and select a file.
- Press the OK button to finish the command.
- Press Esc or the Cancel button to abort the command.
- Supported fonts include TrueType ({{FileName|.ttf}}), OpenType ({{FileName|.otf}}) and Type 1 ({{FileName|.pfb}}).
- The command is restricted to LTR (left-to-right) text. Therefore at the moment RTL (right-to-left + top-to-bottom) text isn't supported.
- Very small text heights may result in deformed character shapes due to loss of detail in scaling.
- Many fonts will generate problematic geometry. This is because font contours are allowed to overlap, have small gaps, and have varying directions within a glyph. These conditions are considered errors in wires used to define faces.
- Draft ShapeStrings can also be created with the Macro Fonts Win10 PYMP.
- To create Draft ShapeStrings arranged in a circular fashion use the Macro FCCircularText.
On Windows access to the default font folder is restricted. This affects the font file selection for ShapeStrings. There are three cases in FreeCAD where a font file for ShapeStrings can be specified: in the task panel of this command, when changing the Font File property of a ShapeString, and when specifying the default font file in the Preferences Editor.
Pressing the ... button and then selecting a file from the default Windows font folder is not possible when using the native file dialog. There are a number of workarounds:
- Make sure DontUseNativeFontDialog is set to {{True}}, which is the default value for this preference. This will only call a different, non-native, file dialog when pressing the ... in the task panel of this command. With this file dialog the default Windows font folder can be accessed.
- Change DontUseNativeDialog to {{True}}. This instructs FreeCAD to always use the non-native file dialog.
- Specify the font file in the input box. You can of course type the full path or copy-paste the path from the Windows File Explorer. But there is also another way to enter the path. If you enter {{Value|C:}} a dropdown list will appear. Select {{Value|Windows}} from that list and add {{Value|\F}}. Select {{Value|Fonts}} from the new dropdown list. Finally add {{Value|}} and the first letter of the font file, and then select it from the dropdown list.
- Create a custom folder for your font files.
See the Preferences paragraph below for the location of the mentioned preferences.
- Draft ShapeString tutorial: extrude a ShapeString, position it in 3D space, and create an engraving in another body.
- How to use ShapeStrings in PartDesign
See also: Preferences Editor and Draft Preferences.
- The default font file can be changed in the preferences: Edit → Preferences... → Draft → Texts and dimensions → Default ShapeString font file.
- For Windows users:
- Set Tools → Edit parameters... → BaseApp → Preferences → Dialog → DontUseNativeFontDialog to {{True}} to use the non-native file dialog when selecting a font file from the task panel of this command.
- Set Tools → Edit parameters... → BaseApp → Preferences → Dialog → DontUseNativeDialog to {{True}} to always use the non-native file dialog.
See also: Property editor.
A Draft ShapeString object is derived from a Part Part2DObject and inherits all its properties. It also has the following additional properties:
{{TitleProperty|Draft}}
-
Font File|File: specifies the path of the font file used to draw the text.
-
Size|Length: specifies the general height of the text.
-
String|String: specifies the text string to display. Unlike a Draft Text, a Draft ShapeString can only display a single text line.
-
Tracking|Length: specifies the additional inter-character spacing of the text.
{{TitleProperty|Draft}}
-
Pattern|Enumeration: specifies the Draft Pattern with which to fill the faces of the text. This property only works if Display Mode is {{value|Flat Lines}}.
-
Pattern Size|Float: specifies the size of the Draft Pattern.
See also: Autogenerated API documentation and FreeCAD Scripting Basics.
To create a Draft ShapeString use the make_shapestring
method ((v0.19) ) of the Draft module. This method replaces the deprecated makeShapeString
method.
shapestring = make_shapestring(String, FontFile, Size=100, Tracking=0)
-
Creates a
shapestring
compound shape using the specifiedString
and the full path of a supportedFontFile
. -
Size
is the height of the resulting text in millimeters. -
Tracking
is the additional inter-character spacing in millimeters.
The placement of the ShapeString can be changed by overwriting its Placement
attribute, or by individually overwriting its Placement.Base
and Placement.Rotation
attributes.
Example:
import FreeCAD as App
import Draft
doc = App.newDocument()
font1 = "/usr/share/fonts/truetype/msttcorefonts/Arial.ttf"
font2 = "/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf"
font3 = "/usr/share/fonts/truetype/freefont/FreeSerifItalic.ttf"
S1 = Draft.make_shapestring("This is a sample text", font1, 200)
S2 = Draft.make_shapestring("Inclined text", font2, 200, 10)
zaxis = App.Vector(0, 0, 1)
p2 = App.Vector(-1000, 500, 0)
place2 = App.Placement(p2, App.Rotation(zaxis, 45))
S2.Placement = place2
S3 = Draft.make_shapestring("Upside-down text", font3, 200, 10)
S3.Placement.Base = App.Vector(0, -1000, 0)
S3.Placement.Rotation = App.Rotation(zaxis, 180)
doc.recompute()
documentation index > Draft > Draft ShapeString