Manche Konzepte in 4D sind lange verwirrend, bis nie oder 3 Tage später der Groschen fällt.

Listbox ohne Variablen-Namen

Ich vergebe überhaupt keinen Variablennamen mehr an Listboxen.

Arrays waren schon kompliziert. Arrays in 4D sind immer zwei Objekte in einem Variablennamen. Das eine Objekt ist das Array mit dem Variablennamen, dem ich einen Datentyp zuordne. Das zweite Objekt ist eine Integer-Variable unter gleichem Namen. In der Integervariable steht die Nummer der zuletzt ausgewählten Zeile. Listboxen setzen noch eins drauf. Der Variablenname der Listbox bezeichnet drei Objekte: das eigentliche Listbox-Objekt plus das Array Boolean, das für jede ausgewählten Listbox-Zeile auf Wahr steht, plus die Integervariable, die die ausgewählte Zeilenummer des Array Boolean enthält.

Mit SVG ist es ähnlich. Stelle ich das SVG im Bildfeld dar, ist es ein Bild. Nutze ich ein Textfeld, ist das SVG vom Typ Text. Greife ich mit XML-Befehlen darauf zu, ist es ein XML. Außerdem kann ich SVGs mit den Befehlen aus der 4D SVG-Komponente ansprechen.

Glücklicherweise kann ich in 4D alle Arten mit SVG umzugehen kombinieren. Der Wechsel läuft über mehrere Befehl ab. SVG EXPORT TO PICTURE und SVG_Export_to_picture konvertiert ein XML-SVG in ein Bild. SVG_Open_picture konvertiert ein SVG-Bild in eine XML-Referenz. DOM EXPORT TO VAR und SVG_SAVE_AS_TEXT konvertieren das SVG aus dem XML-Format in einen Text. SVG_Export_to_XML konvertiert in XML.

Will ich zwei SVGs kombinieren, habe ich viele Optionen.

  1. sind die SVGs Bilder nehme ich die Bild-Operatoren. Bilder kann ich nebeneinander, untereinander, übereinander, mit Versatz oder ohne, nur ein Ausschnitt oder im Ganzen, in gleichen oder in unterschiedlichen Maßstäben zusammensetzen.
  2. sind die SVGs XML nehme ich die DOM XML-Befehle. Mit DOM Insert XML element läßt sich eine XML-Struktur in eine andere einsetzen.
  3. sind die SVGs XML-Objekte und bearbeite ich sie mit der 4D SVG-Komponente, definierte ich das einzusetzende SVG als Symbol via SVG_Define_symbol und setze es ins Ziel-SVG via SVG_Use ein.*
  4. sind die SVGs Text, setzte ich im Ziel-SVG an der Zielstelle im Text einen 4D Tag und platziere das einzusetzende SVG via PROCESS 4D TAGS. Dazu ein Beispiel

Stellt Ihnen also jemand die Frage

How Embed other SVG images within an SVG Image

können Sie nur mit einer Gegenfrage antworte. Wie denken Sie in SVG: Bild, XML, 4D SVG Komponente oder Text?


* Schauen Sie sich das transform="translate(x;y)"-Attribut an. Ist in SVG_SET_TRANSFORM_TRANSLATE der 4D SVG-Komponente einfach anzusprechen.

 




Sometimes the concepts of 4D are difficult to digest.

Listbox ohne Variablen-Namen

I hardly use variablenames with listboxes anymore.

As we learned the hard way, arrays of 4D are two objects with the same variable name. One is the array itself, of different datatypes. The second is an integer-variable containing the last selected linenumber of the array. List boxes are even worse, it’s three uses for the same variablename: the listbox itself, the boolean array, to ask for the selected lines, and the integer variable to contain the last selected line of that boolean array.

SVG is similar, kind of. Do I use a picture variable, the SVG is a picture. Do I use a textfield, SVG can be text. Do I access with XML-commands, then it’s an XML. Besides that, I could also access the SVG with 4D SVG-component.

Us 4D developers can be happy, we can combine all those kinds of SVG as needed. We switch context with these commands. SVG EXPORT TO PICTURE and SVG_Export_to_picture convert XML-SVG into a picture. SVG_Open_picture converts a SVG-Picture into XML-reference. DOM EXPORT TO VAR and SVG_SAVE_AS_TEXT convert an SVG into plain text. SVG_Export_to_XML converts SVG into XML.

The options to combine two SVGs are as plentiful as expected.

  1. combine with picture-operators if SVGs are picture. Arrange them horizontally, vertically, atop each other, with offset or without, same scale or different ones.
  2. if you prefer XML use DOM XML-commands. Use DOM Insert XML element to insert one XML-structure into another.
  3. are you working with 4D SVG-component, define the to be placed SVG as symbol via SVG_Define_symbol. Then use that symbol SVG_Use*.
  4. do you treat SVG as text, insert a 4D Tag at the appropriate spot and insert via PROCESS 4D TAGS. Further reading.

So if somebody is asking you

How Embed other SVG images within an SVG Image

there is no easy solution. Ask if the questioner is thinking of SVG as picture, XML, 4D SVG component or text?


* You might want to check the transform="translate(x;y)"-attribute, which seems easy with SVG_SET_TRANSFORM_TRANSLATE, for that purpose.