Пространства имен SVG
Introduction
В SVG документы, экспортированные из FreeCAD Модуля рисования и используемые в качестве страницы шаблонов, несколько пользовательских атрибутов могут использоваться первоначально для собственного внутреннего использования FreeCAD, но в будущем могут также использоваться другими приложениями, поддерживающими FreeCAD. Все эти атрибуты начинаются с префикса пространства имен "freecad:". URL-адрес пространства имен, определенный в этих документах SVG, относится к этой странице.
Like any XML document an SVG document consist of two sections:
- Head: just one line to declare which version of the XML language is used for the instructions in the body of this document.
- Body: a list of instructions. SVG documents enclose all instructions in <svg>-tags.
- The opening tag contains information about the size and the used SVG namespaces.
Default namespace
The default SVG namespace used by FreeCAD is declared with this line:
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.
Применение
Один пиксель = один миллиметр.
Вы должны вставить где-нибудь внутри вашего svg-кода, где вы хотите, чтобы отображалось содержимое чертежа (например, в конце файла, непосредственно перед последним тегом </svg>), следующую строку :
<!-- DrawingContent -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:freecad="http://www.freecadweb.org/wiki/index.php?title=Svg_Namespace"
Чтобы включить печать в масштабе, реальный размер текста должен быть указан в атрибутах ширины и высоты SVG-тега. Размер документа в пользовательских единицах (px) должен быть указан в атрибуте viewBox.
Следующее должно быть отформатировано, как в примере ниже, где:
- xxx = ширина в пикселях
- yyy = высота пикселях
width="xxxmm"
height="yyymm"
viewBox="0 0 xxx yyy"
Дополнительная информация для рабочего пространства и блока заголовка может быть добавлена и определена на странице стандартных шаблонов чертежей.
Атрибуты
freecad:EditableText
To use any of the freecad: attributes in your SVG documents, you must first define the freecad namespace as an attribute of the opening <svg> tag:
Defines a text in a template that can be edited by FreeCAD.
Пример:
<text freecad:EditableText="MyTitleText">
<tspan>This is a title</tspan>
</text>
freecad:basepoint1
Defines the first point of a Draft Dimension object (represented as a group in a SVG document). This attribute is used when importing the SVG fragment in FreeCAD, in order to recreate the dimension object. The group contains paths and other graphical items to correctly render the dimension object in other SVG applications.
Пример:
<g freecad:basepoint1="0.5 4.34" freecad:basepoint2="2.4 5.8" dimpoint="3.2 7.76">
<path d="...">
</g>
freecad:basepoint2
Defines the second point of a Draft Dimension object (represented as a group in a SVG document). This attribute is used when importing the SVG fragment in FreeCAD, in order to recreate the dimension object. The group contains paths and other graphical items to correctly render the dimension object in other SVG applications.
Example: see freecad:basepoint1
freecad:dimpoint
Defines the point of a Draft Dimension object through which the dimension line passes. This attribute is used when importing the SVG fragment in FreeCAD, in order to recreate the dimension object. The group contains paths and other graphical items to correctly render the dimension object in other SVG applications.
Example: see freecad:basepoint1
Example of code freecad:EditableText
This example is taken from a cartridge to a sheet A3_Landscape
1 : Title without 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>
2 : Title with 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>
Explanations
<g
Beginning of the framework
style="fill:none;stroke:#000000;stroke-width:0.13;stroke-linecap:butt;stroke-linejoin:miter"
id="g578-7"
transform="translate(0,4)">
Data on the framework
<text
Beginning of the text block
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"
All the information about the text that will be displayed
x="220.9935"
y="228.95425"
id="text3331"
sodipodi:linespacing="125%"
Coordinates and identity where the text will appear
freecad:editable="AuthorName"><tspan
Here AuthorName is the var managed by freecad:editable who saves the string to change that will be displayed
sodipodi:role="line"
id="tspan3333"
x="220.9935"
y="228.95425">AUTHOR NAME</tspan></text>
Coordinates and identity of the text that is displayed by default and </text> means the end of the block text
<text
...
...
...
... </text>
</g>
Other blocks texts and end </g> the framework grouping text blocks
It is possible after having worked the Inkscape SVG file as the file no longer works, it is possible that information has gone missing.
Then check that the edit text is not modified
Example :
- editable = "AuthorName"
- replace by freecad:editable = "AuthorName"
Other attributes availlables