Dieses Blog durchsuchen

Sonntag, 10. Januar 2016

3D - Text in DesignSpark hinzufügen

DesignSpark (DS) in der freien Version von RS-Components kann keine Texte erzeugen und in Designs einfügen.
Schriftzüge müssen deshalb extern erzeugt und dann in DS importiert werden.
Nach einigenVersuchen, passende Texte mit anderer Software zu erzeugen (u.a. 123Design, FreeCad, SketchUp), die entweder an den wenigen Importformaten von DS gescheitert sind, oder aber zu unflexibel in der Anwendung waren, bin ich (wieder mal) bei OpenSCAD gelandet, mit dem ich auch schon sehr erfolgreich parametrisierte Schrauben und Mutten, sowie Legosteine berechnet habe.
Neben einfachen Texten auf einer Ebene, will ich auch Texte auf die Oberflächen von Körper legen (Zylinder, Kugeln etc.) können.
Mit OpenSCAD sind hier eine ganze Menge Dinge möglich, allerdings kann man in DS nicht alle Körper nach dem Import in beliebiger Weise weiterverwenden:
  • Das "Auflegen" von 3D-Texten auf Körper, die in DS erzeugt werden (also erhabenen Text auf einem Körper) funktioniert gut. Dazu muß der Text schon in OpenSCAD in den richtigen Dimensionen erzeugt werden, in DS importiert und passend aufgelegt werden.
  • Ausgestanzter Text lässt sich so nicht erzeugen, da DS den importierten Text nicht ziehen und damit in einen Volumenkörper drücken kann. Soll Text in einen Körper gestanzt sein, so wird der Körper mit Text bereits in OpenSCAD erzeugt und dann als STL-Datei in DS importiert.
Die OpenSCAD-Library text_on erlaubt relativ einfach die passende Texterzeugung in OpenSCAD, weshalb ich inzwischen jede Art von Text auf Körpern (erhaben oder ausgestanzt) komplett in OpenSCAD erzeuge und dann in DS importiere.

Die Anwendung ist einfach:
use <text_on/text_on.scad>
translate([0,0,0])
{
text_on_cylinder(t="Demo text goes here! [äöüÄÖÜß]",locn_vec=[0,0,0],r=30,h=1,font="Liberation Mono:style=Bold",direction="ltr",spacing=1,size=5,extrusion_height=1);
}
Dieses Beispiel erzeugt einen Text und legt diesen auf eine (unsichtsichtbare) Zylinderoberfläche mit dem Radius 30:

Die Fonts, die in OpenSCAD verwendbar sind, lassen sich über das Menü "Hilfe --> Fontliste" abrufen und dort in der richtigen Bezeichnung kopieren und in das Script einsetzen.
Im Beispiel verwende ich einen monospaced Font (unter Windows).
Bei der Benutzung von proportionalen Schriften (z. B. Arial) konnte ich beobachten, daß über den Text verteilt unschöne Unterschiede in den Abständen der Buchstaben untereinander entstehen. Hier ist mir noch nicht klar, ob das irgendwie zu verhindern ist.
Der angegebene Radius (im Beispiel 30) liegt genau in der Mitte der Höhe (extrusion_height) der Buchstaben.

Um den fertigen Text in DS weiterzuverwenden benutze ich folgenden Workflow:
  • Schriftzug in OpenSCAD erzeugen und rendern (mit dem richtigen Radius, um hinterher nicht skalieren zu müssen, was wahrscheinlich nicht zu einem guten Ergebnis führt)
  • In OpenSCAD als STL-Datei abspeichern
  • In DS eine neue Zeichenfläche erzeugen und auf dieser die STL-Datei importieren.
    Im Beispiel hier habe ich vorher einen Kreis mit Durchmesser 60 in DS erzeugt.
  • Im Strukturbaum das Konstruktionsnetz des importiertern Texts mit Rechtsklick in einen Volumenkörper umwandeln
  • Der Text ist in DS wie ein regulärer Volumenkörper handhabbar. Im Beispiel unten auf der Mantelfläche des zum Zylinder extrudierten Kreises


Hier noch ein Beispiel für die Erzeugung von verschiedenen geometrischen Körpern mit unterschiedlichen Textausprägungen, die man einzeln erzeugen und als STL-Exporte in DS ganz gut weiterverwenden kann. Das Beispiel ist in OpenSCAD unter Windows erzeugt, in Linux (und wahrscheinlich auch auf dem Mac) heissen die Schriftarten anders und müssen ggfls. angepasst werden:


//Demo for rendering text on 3d-shapes in OpenSCAD using the "on_text" library by brodykenrick on github.com/brodykenrick/text_on_OpenSCAD
use <text_on/text_on.scad>
    translate([0,0,0])
    {
    difference()  //Alle erzeugten Körper werden aus dem ersten erzeugten ausgeschnitten
      {
        $fn=100;  //facetten des Zylinders  
        cylinder(r=30,h=8, center=true);   
        text_on_cylinder(t="Demo cylinder",locn_vec=[0,0,0],r=30,h=1,font="Liberation Mono:style=Bold",direction="ltr",spacing=1,size=5,extrusion_height=4);
      }
     
    translate([0,0,10])
    {
        non_cubic_dimensions=[40,10,8];  //Werte für einen Quader (||Würfel)
        cube (non_cubic_dimensions,center=true);
        color("red");
        text_on_cube("Demo out",locn_vec=[0,0,0],cube_size=non_cubic_dimensions,font="Liberation Mono:style=Bold",face="front",updown=0,rightleft=0,direction="ltr",spacing=1,size=5,extrusion_height=2);
    }
    }
   
    translate([0,0,20])
    {
    difference()  //Alle erzeugten Körper werden aus dem ersten erzeugten ausgeschnitten
      {
        non_cubic_dimensions=[40,10,8];
        cube (non_cubic_dimensions,center=true);    
        text_on_cube("Demo in",locn_vec=[0,0,0],cube_size=non_cubic_dimensions,font="Liberation Mono:style=Bold",face="front",updown=0,rightleft=0,direction="ltr",spacing=1,size=5,extrusion_height=2);
      }
    }
       
    translate([0,0,40])
    {
    difference()  //Alle erzeugten Körper werden aus dem ersten erzeugten ausgeschnitten
      {
        $fn=300; //Anzahl der erzeugten Facetten der Kugel
        sphere(15);
        text_on_sphere("Demo sphere",r=15,font="Liberation Mono:style=Bold",extrusion_height=2,spin=0,northsouth=0,rotate=0,east=10,size=5,rounded=false);
      }
    }
   

Keine Kommentare:

Kommentar veröffentlichen