Inkscape and Freecad: svg Shapes and Objects/Formes et Objets/Formen und Objekte/Forme e Oggetti

en/fr/de/it


svg ellipses, circles and lines  inside Inkscape and FreeCAD
fr/de/it
Inside Inkscape you can draw circle and ellipse selecting the button from the toolbar and then drawing the shape. circlellipsarcOnce placed your ellipse, you can keep it complete or reduce it just to a segment, with the “arc” function, selecting also whether to show or not the two radii. segmentBehind the shape of your ellipse there’s a “path” svg object stored in the xml code of the svg file. This Bezier’s curve is the only alternative to allow the  very useful “arc” function, but it is unfortunately not easily handle (if at all) by FreeCAD. Moreover, it is sometimes desirable to export the “ellipse” object (which is, by the way, importable and recognized by FreeCAD). Very often the ellipse arcs are used to draw special profiles, so you don’t know in advance the size and the position of the ellipse itself, you just draw it, stretch it and drag it until it fits the desired shape. The trick is then: start the xml editor through the Inkscape menu “Edit->XML Editor” (unless you want to edit it by hand, and if you’re really tough, using vi as an editor … as I tried to do 😉 ) select “new element node” and create the element “svg:ellipse”. In the editor the attributes appear, enter the radii and the center coordinates. It is advisable to start with “rx” and “ry” both equal to “1” and possibly to center it at “0,0”. ellipse_xmlThe ellipse appears and you can then drag it and stretch it until it matches the original arc. If you look at the object then in the xml file in the editor, you can see among the attributes the “transform”, defined by a matrix. Detailed descriptions of the svg matrix transformation are available on the internet. In this case, symplifying it, the value is “matrix(sx,0,0,sy,tx,ty)”, where “sx” and “sy” are the horizontal and the vertical scaling, while “tx” and “ty” are the horizontal and vertical translations from the original center. FreeCAD cannot handle completely the “matrix” definition of the “transform” attribute (I found problems with the vertical and horizontal scaling factors, while the translation worked fine), therefore I had to redefine the same ellipse object, recalculating the final center and “rx”,”ry” value, according to the matrix (practically I applied by hand the anti-transform). Having the center values “0,0” and the “rx” and “ry” both “1”, it has been quite easy to apply the changes: just assign the values of “tx” and “ty” to “cx” and “cy” and “sx”, “sy” to”rx” and “ry” (instead of subtracting or dividing by the original value). I experienced a different behaviour between macOS and Linux: the Inkscape verison I use on MacOS does not use the “transform” attribute, but updates the coordinated of the center and the dimensions of the radii automatically in teh xml code of the svg file when stretching and translating the ellipse in the svg file.

The abovedescribed technique worked pretty well, untill I wanted to import this drawing with the big ellipse: FreeCAD imported all the rest as it was, excepted this big one one which was shifted upwards and in the data showed a rotation of 90 degrees, which was inexplicable. With a little bit of investigation I found out that this ellipse was the only one with the horizontal radius (“rx”) smaller than the vertical radius (“ry”): the only “vertical” ellipse among other “horizontal” ellipses, which were not automatically rotated. This hint gave me the idea for the trick: inside the Inkscape xml editor I recreated the  ellipse_rotatedsame shape, exchanging “ry” and “rx” and then rotating it of 90 degrees: instead of a “vertical” ellipse I created a rotated “horizontal” ellipse. ellipse_verticalThe “horizontal” ellipse was read in by FreeCAD, together with the Inkscape rotation, and shown in the exact position as in the original drawing from Inkscape.ell_vert_turn_frCAD

Back to the top of page.


Le Titre
en/de/it
Cet est le text.
Retour en haut de page.


Der Titel
en/fr/it
Das ist das Text.
Zurück nach oben.


ellissi, cerchi e linee svg con Inkscape e FreeCAD
en/fr/de

Con Inkscape si possono disegnare cerchi ed ellissi premendo il bottone nella toolbar poi disegnando la forma. circlellipsarcUna volta instanziat al’ellisse, la si può lasciare completa, oppure si può disegnarne un arco, con la funzione “arc”, scegliendo anche se lasciare visibili o meno i due raggi. segmentL’ellisse è un oggetto svg “path” scritto nel codice xml code del file svg. Questa curva di Bezier curve è l’unica alternativa che permette la funzione “arc”, ma purtroppo by FreeCAD non riesce a maneggiarla in tutte le sue funzionalità. Inoltre, si può voler esportare l’oggetto svg “ellipse” (che FreeCAD può importare e riconoscere). Spesso si usano gli archi di ellisse per disegnare profili particolari non conoscendo in anticipo le dimensioni e la posizione: si disegna l’arco, lo si estende e trasla fino a sovrapporlo al profilo desiderato. Il trucco è il seguente: si apre l’editor xml cin il menu “Edit->XML Editor” di Inkscape (a meno di non voler aprire e ssmanettare direttamente il file svg, magari usando vi come editor per chi è duro e puro… come ho provato a fare io 😉 ) si seleziona “new element node” e si crea un elemento”svg:ellipse”. Nell’ editor appaiono gli attributi dell’oggetto: si inseriscono i valori delle coordinate del centro e le dimensioni dei raggi. Si consiglia di assegnare il valore “1” sia a “rx” che a “ry” e di centrarla in “0,0”. ellipse_xmlL’ellisse appare nel disegno, la si può ridimensionare e traslare fino a sovrapporla all’arco originale. Il file nell’xml editor viene automaticamente aggiornato: tra gli attributi appare “transform”, definito da una matrice. Si trovano parecchie descrizioni dettagliate della matrice “transformation” in svg su internet. In questo caso, semplificando, il valore è “matrix(sx,0,0,sy,tx,ty)”, con “sx” e “sy” i fattori dui scala risp. orizzontale e verticale,  “tx” e “ty” le traslazioni in orizzontale e in verticale del centro. FreeCAD non riesce a maneggiare completamente la definizione “matrix” dell’attributo “transform” (ho avuto problemi con il fattore di scala orizzomntale e verticale, mentre l’attributo “translate” ha funzionato bene), perciò ho dovuto ridefinire l’oggetto “ellipse”, assegnando i valori assoluti delle coordinate del centro e ricalcolando i valori di “rx”,”ry”, in relazione al fattore di scala (in pratica ho fatto l’antitrasformazione a mano). La scelta iniziale di “0,0” per le coordinate del centro e “rx” e “ry” pari a “1”, ha facilitato ora il caclcolo: basta assegnare i valori di “tx” e “ty” a “cx” e “cy”, i valori di   “sx” e”sy” risp. a”rx” e “ry” (invece di dividere o sottrarre dal valore iniziale). Ho notato comportamenti diversi tra Linux e MacOS: la versione di Inkscape che ho installata su MacOS non usa l’attributo “transform”, ma aggiorna automaticamente le coordinate del centro e le dimensioni dei raggi nel codice xml del file svg quando si applicano cambiano dimensioni e posizione dell’ellisse.

Questa tecnica ha funzionato bene fino a quando ho cercato di importare questo disegno con l’ellisse grande: FreeCAD ha importato tutto il resto esattamente com’era, tranne questa grande ellisse, che era traslata in alto e nel tab “data” mostrava una rotazione di 90 gradi, apprentemente inesplicabile. Investigando un po’ ho scoperto che questa ellisse era l’unica con il raggio orizzontale (“rx”) più piccolo di quelllo verticale (“ry”): l’unica ellisse “verticale” tra le altre ellissi “orizzontali” che non venivano ruotate.Questo indizio mi ha dato l’idea: con l’editor xml dentro Inkscape ho creato la stessa ellisse, scambiando i valori di “rx” e “ry”, poi ho aggiunto una rotazione di 90 gradi: al posto di un’ellisse “verticale” ho creato un’ellisse “orizzontale” ruotata. FreeCAD ha importato l’ellisse “orizzontale”, ha interpretato la rotazione e ha mostrato nel disegno l’ellisse “verticale” originale nella posizione corretta.

Ritorno all’inizio della pagina.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s