Svg Namensraum
Einleitung
FreeCAD kann SVG-Dokumente importieren und exportieren, die Code enthalten, der zu einem bestimmten Namensraum gehört, der eine Untermenge der XML-Befehle ist.
Wie alle XML-Dokumente enthält auch ein SVG-Dokument zwei Abschnitte:
- Kopf (Head): eine einzelne Zeile, die angibt, welche Version der Sprache XML für die Befehle im Körper dieses Dokuments verwendet wird.
- Körper (Body): eine Liste von Befehlen. SVG-Dokumente schließen alle Befehle in <svg>-Tags (Markierungen) ein.
- Der öffnende Tag enthält Informationen über die (Zeichenblatt-) Größe und den verwendeten SVG-Namensraum.
Standard-Namensraum
Der von FreeCAD verwendete Standard-SVG-Namensraum wird mit dieser Zeile angegeben:
xmlns="http://www.w3.org/2000/svg" version="1.1"
The external link leads to a web site containing information about the namespace and its set of instructions. Attributes of this namespace are used without prefix.
Namespace extension
Attributes missing from the SVG namespace can be added by namespace extensions. FreeCAD uses such an extension for drawing templates. Templates for the Drawing workbench used four custom attributes which are marked with a "freecad:" prefix:
- freecad:EditableText, this is still used with templates for the TechDraw workbench.
- freecad:basepoint1
- freecad:basepoint2
- freecad:dimpoint
A namespace declaration is used to introduce the prefix and the link to the related web site, this page:
xmlns:freecad="http://www.freecadweb.org/wiki/index.php?title=Svg_Namespace"
The link is not used to retrieve information or values at runtime, but it is the key to activate the custom attributes.
Drawing templates
In the SVG documents exported by FreeCAD's Drawing Workbench and used as (Drawing) page templates, the custom attributes can be used, originally for FreeCAD's own internal use, but could also be used by other FreeCAD-aware applications in the future. These attributes all use the freecad: namespace prefix. The namespace URL defined in those SVG documents refers to this page.
- The Drawing workbench is no longer included in FreeCAD version 0.21 and above and so these Drawing templates are obsolate now.
TechDraw templates
The TechDraw workbench also uses SVG templates but can not create and export templates. It relies on freecad:EditableText for entries in title blocks.
Migration to freecad.org
Since the FreeCAD wiki, including this page, was migrated from freecadweb.org to freecad.org in version 0.21 the link has to be updated accordingly to:
xmlns:freecad="http://www.freecad.org/wiki/index.php?title=Svg_Namespace"
Updated TechDraw templates now contain a key that can not activate the custom attributes when used with FreeCAD version 0.20 and below and as a result editable texts of recent templates are not recognised and so handled as plain text.
- In such cases the "web" has to be manually re-inserted into the namespace declaration of the template.
It seems like version 0.21 and above can deal with either link address.
Anwendung
1 pixel = 1 mm
An irgendeiner Stelle im SVG-Code muss angegeben werden, wo sich die Inhalte der Zeichnung befinden sollen, z.B. am Ende der Datei, direkt vor dem letzten </svg> tag. Die folgende Zeile:
<!-- DrawingContent -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:freecad="http://www.freecadweb.org/wiki/index.php?title=Svg_Namespace"
Um das Bedrucken der Skalen zu ermöglichen, muss die tatsächliche Wortgröße in den Attributen 'Breite' und 'Höhe' des SVG-Tags angegeben werden. Die Größe des Dokumentes in Benutzereinheiten (px) muss im viewBox-Attribut angegeben werden.
Das Folgende muss wie im nachfolgenden Beispiel formattiert werden:
- xxx = Pixel-Breite
- yyy = Pixel-Höhe
width="xxxmm"
height="yyymm"
viewBox="0 0 xxx yyy"
Zusätzliche Informationen zum Arbeitsbereich (Working space) und dem Titelblock können eingefügt werden und werden auf der Seite Zeichnungsvorlagen vorgegeben.
Attribute
freecad:EditierbarerText
Um freecad: Attribute im SVG-Dokumenten zu nutzen, muss der FreeCAD Namensraum als Attribut des Eröffnungstags <svg> definiert werden.
Dies beschreibt einen Text, der in FreeCAD geändert werden kann.
Beispiel:
<text freecad:EditableText="MyTitleText">
<tspan>This is a title</tspan>
</text>
freecad:basepoint1 (Basispunkt 1)
Definiert den ersten Basispunkt eines Entwurf Abmessung-Objektes, als Gruppe in einem SVG-Dokument dargestellt. Dieses Attribut wird verwendet, wenn das SVG-Teilstück (Fragment) in FreeCAD importiert wird, um das Objekt 'Dimension' neu zu erzeugen/zu ändern. Die Gruppe enthält Pfade und andere graphische Punkte, um das Objekt Dimensionen in anderen SVG-Anwendungen richtig wiederzugeben.
Beispiel:
<g freecad:basepoint1="0.5 4.34" freecad:basepoint2="2.4 5.8" dimpoint="3.2 7.76">
<path d="...">
</g>
freecad:basepoint2 (Basispunkt 2)
Definiert den zweiten Basispunkt des Entwurf Abmessung Objektes, als Gruppe in einem SVG-Dokument dargestellt. Dieses Attribut wird verwendet, wenn das SVG-Teilstück (Fragment) in FreeCAD importiert wird, um das Objekt 'Dimension' neu zu erzeugen / zu ändern. Die Gruppe enthält Pfade und andere graphische Punkte, um das Objekt Dimensionen in anderen SVG-Anwendungen richtig wiederzugeben.
Beispiel: siehe freecad:basepoint1
freecad:dimpoint
Definiert den Punkt eines Entwurf Abmessung Objektes, durch den die Bemaßungslinie läuft. Dieses Attribut wird verwendet, wenn das SVG-Teilstück (Fragment) in FreeCAD importiert wird, um das Objekt 'Dimension' neu zu erzeugen/zu ändern. Die Gruppe enthält Pfade und andere graphische Punkte, um das Objekt Dimensionen in anderen SVG-Anwendungen richtig wiederzugeben.
Beispiel: siehe freecad:basepoint1
Beispiel eines freecad-Codes:EditierbarerText
Diese Beispiel wurde von einer Kartusche auf ein Blatt übertragen A3_Landscape
1 : Titel ohne Textbearbeitung (textedit)
<g
id="g3587">
<text
sodipodi:linespacing="119.00001%"
id="text3482"
y="229.10912"
x="220.8476"
style="font-size:1.97555566px;font-style:normal;font-weight:normal;line-height:119.00000572%;letter-spacing:0.01975556px;word-spacing:0.00846667px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
xml:space="preserve"><tspan
y="229.10912"
x="220.8476"
id="tspan3484"
sodipodi:role="line">AUTHOR NAME :</tspan></text>
1 : Titel mit Textbearbeitung (textedit)
<g
style="fill:none;stroke:#000000;stroke-width:0.13;stroke-linecap:butt;stroke-linejoin:miter"
id="g578-7"
transform="translate(0,4)">
<text
xml:space="preserve"
style="font-size:4px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:sans;-inkscape-font-specification:sans"
x="220.9935"
y="228.95425"
id="text3331"
sodipodi:linespacing="125%"
freecad:editable="AuthorName"><tspan
sodipodi:role="line"
id="tspan3333"
x="220.9935"
y="228.95425">AUTHOR NAME</tspan></text>
<text
...
...
...
... </text>
</g>
Erklärungen
<g
Beginn der Rahmensumbebung (framework)
style="fill:none;stroke:#000000;stroke-width:0.13;stroke-linecap:butt;stroke-linejoin:miter"
id="g578-7"
transform="translate(0,4)">
Datum (data) in der Rahmensumgebung (framework)
<text
Beginn des Textblockes
xml:space="preserve"
style="font-size:4px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:sans;-inkscape-font-specification:sans"
Alle Informationen über den Text, der angezeigt wird
x="220.9935"
y="228.95425"
id="text3331"
sodipodi:linespacing="125%"
Koordiniert und identifiziert den Text, wo dieser angezeigt wird
freecad:editable="AuthorName"><tspan
Hier ist AuthorName die Variable, die durch freecad:editable gemanaged wird und den zu ändernden Text (string) speichert, der angezeigt wird.
sodipodi:role="line"
id="tspan3333"
x="220.9935"
y="228.95425">AUTHOR NAME</tspan></text>
Koordiniert und identifiziert den vorgegebenen Text, der angezeigt wird. </text> ist das Ende des Blockes 'Text'.
<text
...
...
...
... </text>
</g>
Andere Textblöcke und das Ende </g> der Rahmensumgebung 'Gruppe Textblöcke'.
Es ist möglich, dass nach dem Bearbeiten der 'Inkscape SVG-Datei' die Datei nicht mehr funktioniert. Möglicherweise sind Informationen verloren gegangen.
Prüfen, ob der bearbeitete Text geändert wurde
Beispiel:
- editable = "AuthorName"
- replace by freecad:editable = "AuthorName"
Andere, verfügbare Attribute
Siehe Zeichnungsvorlagen