In diesem Tutorial zeigen wir Schritt für Schritt, wie man aus einem Foto des Neuperver Tors eine OpenSCAD-Silhouette erstellt und daraus eine Liniengrafik ableitet.
Als Beispiel verwenden wir dieses Foto aus der Wikipedia (https://de.wikipedia.org/wiki/Datei:Salzwedel_Neuperver_Tor.jpg):
Die linke Hälfte des Tors wurde aus dem Foto abgelesen und als Polygon definiert:
use <showit.scad>
// linke Hälfte
p = [ [20, 0], [20, 67], [28, 67], [28, 76], [34, 76], [34, 0] ];
echo(p=p);
color("green", 0.2)
polygon(p); // Polygon zeichnen
showit(p, sz=2.5); // Punkte markieren
Rendering der Polygonhälfte:
Die linke Hälfte wird gespiegelt, der Mittelteil ergänzt und die Toröffnung ausgeschnitten:
use <showit.scad>
$fn=12;
// linke Hälfte
p = [ [20, 0], [20, 67], [28, 67], [28, 76], [34, 76], [34, 0] ];
echo(p=p);
tr = 7;
module neuperver_sil()
{
// links
color("green") polygon(p);
showit(p, sz=2.5);
// Bogen
translate([34 + 4, 76])
circle(4);
// Fläche unter Bogen
polygon([[34,0], [34, 76], [34+8, 76], [34+8, 0], [34,0] ]);
// rechts
color("red", 0.2)
translate([64 + 12 , 0])
mirror([1, 0])
polygon(p);
}
module neu_perver()
{
difference()
{
neuperver_sil();
// Tor
x_links = p[3][0] + (p[4][0] - p[3][0])/2;
translate([x_links, 0, 0])
{
square([14, 13]);
translate([tr, 13])
circle(r = tr);
}
}
}
neu_perver();
Rendering der Silhouette:
Für Drahtlinien- oder Gravurdarstellung kann die Silhouette mit offset() verarbeitet werden:
$fn=12;
// linke Hälfte
p = [ [20, 0], [20, 67], [28, 67], [28, 76], [34, 76], [34, 0] ];
echo(p=p);
tr = 7;
module neuperver_sil()
{
// links
color("green")
polygon(p);
// Bogen
translate([34 + 4, 76])
circle(4);
// Fläche unter Bogen
polygon([[34,0], [34, 76], [34+8, 76], [34+8, 0], [34,0] ]);
// rechts
color("red", 0.2)
translate([64 + 12 , 0])
mirror([1, 0])
polygon(p);
}
module neu_perver()
{
difference()
{
neuperver_sil();
// Tor
x_links = p[3][0] + (p[4][0] - p[3][0])/2;
translate([x_links, 0, 0])
{
square([14, 13]);
translate([tr, 13])
circle(r = tr);
}
}
}
difference()
{
offset(delta=+1) neu_perver();
neu_perver();
}
Rendering der Liniengrafik:
Titelbildquelle: eigenes Bild
... because software matters