ADD Files
This commit is contained in:
parent
23e6f0970f
commit
18cf682079
BIN
openscad/Fonts/CharGraphFont2.ttf
Normal file
BIN
openscad/Fonts/CharGraphFont2.ttf
Normal file
Binary file not shown.
16
openscad/GoticFour.svg
Normal file
16
openscad/GoticFour.svg
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:odm="http://product.corel.com/CGS/11/cddns/" viewBox="0 0 978 1078.2">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #1f1a17;
|
||||
fill-rule: evenodd;
|
||||
stroke: #1f1a17;
|
||||
stroke-miterlimit: 8.7;
|
||||
stroke-width: 2.2px;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<!-- Generator: Rainer Wieland -->
|
||||
<path class="cls-1" d="M0,952.6c114.7-36.8,227.3-75.8,331.2-138.6-108.2-164.5-192.7-337.7-236-528.3C266.3,207.8,428.7,116.9,569.4,0c125.6,142.9,259.8,279.3,407,402.7-93.1,168.9-236,313.9-383.2,450.3l168.9,123.4-108.2,99.6-210-151.5c-108.2,60.6-225.2,110.4-346.4,151.5L0,952.6ZM281.4,368l253.3-158c73.6,80.1,155.9,155.9,249,223-88.8,125.6-194.8,223-313.9,303.1-80.1-112.6-145.1-236-188.4-368Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 815 B |
297
openscad/model.scad
Normal file
297
openscad/model.scad
Normal file
|
|
@ -0,0 +1,297 @@
|
|||
clock_text_default =
|
||||
"ESHISTRBALDFÜNFASTZEHNVIERTELSVORJNACHWHALBKOSECHSIEBEN-----------ZEHNEUNACHTDREIELFVIERZWÖLFÜNFACWIZWEINSAUHR";
|
||||
|
||||
echo("SCAD-Script V0.1");
|
||||
echo(clock_text_default = clock_text_default);
|
||||
echo(clock_text_override = clock_text_override);
|
||||
|
||||
echo(thickness_override = thickness_override);
|
||||
echo(frame_override = frame_override);
|
||||
|
||||
$fn = 120; // number of fragments. usually 0. >100 not advisable.
|
||||
|
||||
// Parameter
|
||||
panel_length = 178.5;
|
||||
panel_width = 178.5;
|
||||
frame_thickness = 0.5;
|
||||
|
||||
echo(panel_length = panel_length);
|
||||
echo(panel_width = panel_width);
|
||||
|
||||
|
||||
FontFaktor = 22;
|
||||
cols = 11;
|
||||
rows = 10;
|
||||
|
||||
// texts and minute holes
|
||||
use <./Fonts/CharGraphFont2.ttf>;
|
||||
Font = "WordclockFont2:style=Regular";
|
||||
FONT = "WordclockFontBold:style=Regular";
|
||||
// fp_size = [panel_length, panel_width, panel_thickness];
|
||||
// Font_size = fp_size/FontFaktor; // 8 seems to be a good value
|
||||
Font_size_min = 8;
|
||||
Font_size_max = 8;
|
||||
|
||||
// shift everything down by a bit:
|
||||
tanslatedown = 4;
|
||||
|
||||
min_hole_dia = 3;
|
||||
|
||||
// minute LEDs spacing on the strip
|
||||
minute_led_period = 2;
|
||||
|
||||
// LED Strips
|
||||
led_distance = 13.9;
|
||||
led_distance_min_holes = minute_led_period*(led_distance);
|
||||
|
||||
// this is special because the PCB has already been built and the entire set of letters and minute LEDs
|
||||
// needs to fit into a centered square which is 11 x 11 pixels
|
||||
textarea = [(cols-1)*led_distance, (cols-1)*led_distance];
|
||||
|
||||
// vertical position of 4 minutes LEDs
|
||||
//row below the letters...
|
||||
min_row_fp = (panel_width-textarea[1])/2 + textarea[1]/(cols-1) - textarea[1]/(cols-1) ;
|
||||
|
||||
|
||||
// Template
|
||||
//clock_text = "
|
||||
//ESHISTAFÜNF
|
||||
//ZEHNVIERTEL
|
||||
//VORBALDNACH
|
||||
//HALBIZWEINS
|
||||
//DG6MSMARTIN
|
||||
//DREINSIEBEN
|
||||
//ELFZWÖLFÜNF
|
||||
//USECHSVIERQ
|
||||
//ZEHNEUNACHT
|
||||
//RWDFACWEUHR";
|
||||
|
||||
module GoticFour()
|
||||
{
|
||||
difference() {
|
||||
scale([9/1078.2, 9/1078.2, 0])
|
||||
import("/app/scripts/GoticFour.svg",
|
||||
center = true, dpi = 25.4, $fn = 120);
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 36]) // 60° Winkel der Geraden
|
||||
translate([1.4, 1.2, 0])
|
||||
square([2, 0.8]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
|
||||
module LettersAndMinutes2D()
|
||||
{
|
||||
// hier wird clock_text zur Renderzeit aus Default/Override gebaut
|
||||
clock_text =
|
||||
is_undef(clock_text_override)
|
||||
? clock_text_default
|
||||
: clock_text_override;
|
||||
|
||||
echo(clock_text = clock_text);
|
||||
// the letterblock
|
||||
|
||||
echo("-------> horizontal pitch = ",textarea[0]/(cols-1));
|
||||
echo("-------> vertical pitch = ",textarea[1]/(cols-1));
|
||||
|
||||
|
||||
// alles ein bisschen nach unten schieben
|
||||
|
||||
translate([0,-tanslatedown])
|
||||
{
|
||||
translate([(panel_length-textarea[0])/2, (panel_width-textarea[1])/2,0])
|
||||
{
|
||||
//square(size = [textarea[0],textarea[1]], center = false);
|
||||
for (col=[0:cols-1])
|
||||
{
|
||||
for (row=[0:rows-1])
|
||||
{
|
||||
letter = clock_text[row*cols+col];
|
||||
|
||||
variable_font_size = Font_size_min + (row/(rows-1))*(Font_size_max-Font_size_min);
|
||||
|
||||
translate([col * textarea[0]/(cols-1), (cols-1-row) * textarea[1]/(cols-1), 0])
|
||||
if (letter == "&")
|
||||
{
|
||||
difference() {
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 60]) // 60° Winkel der Geraden
|
||||
{
|
||||
translate([-20, 0.4, 0])
|
||||
square([18, 1]); // Rechteck als "Gerade"
|
||||
translate([2, 0.4, 0])
|
||||
square([20, 1]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (letter == ".")
|
||||
{
|
||||
translate([0, -3.3, 0]) // negative Y-Verschiebung nach unten
|
||||
circle(min_hole_dia/5);
|
||||
}
|
||||
else if (letter == "W")
|
||||
{
|
||||
scale([0.9, 1.0]) text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
}
|
||||
else if (letter == "Q")
|
||||
{
|
||||
translate([0,-0.4,0]) text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
}
|
||||
else if (letter == "Ä" || letter == "Ö" || letter == "Ü")
|
||||
{
|
||||
translate([0,0.6,0]) text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
}
|
||||
else if (letter == "0")
|
||||
{
|
||||
difference() {
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 60]) // 60° Winkel der Geraden
|
||||
translate([-4, -1, 0])
|
||||
square([40, 1]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
else if (letter == "4")
|
||||
{
|
||||
difference() {
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 60]) // 60° Winkel der Geraden
|
||||
translate([-0.5, -0.33, 0])
|
||||
square([10, 1]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
else if (letter == "6")
|
||||
{
|
||||
difference() {
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 91]) // 60° Winkel der Geraden
|
||||
translate([-0.6, 0.42, 0])
|
||||
square([1.7, 1]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
else if (letter == "8")
|
||||
{
|
||||
difference() {
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 50]) // 60° Winkel der Geraden
|
||||
translate([1, 0.1, 0])
|
||||
square([5, 1]); // Rechteck als "Gerade"
|
||||
rotate([0, 0, 50]) // 60° Winkel der Geraden
|
||||
translate([-5, -1, 0])
|
||||
square([5, 1]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
else if (letter == "9")
|
||||
{
|
||||
difference() {
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
// Schräge Gerade zum Unterbrechen
|
||||
rotate([0, 0, 90]) // 60° Winkel der Geraden
|
||||
translate([-1.0, -1.6, 0])
|
||||
square([2, 1]); // Rechteck als "Gerade"
|
||||
}
|
||||
}
|
||||
else if (letter == "x")
|
||||
{
|
||||
GoticFour();
|
||||
}
|
||||
else
|
||||
{
|
||||
text(letter, font=Font, size=variable_font_size, halign= "center", valign="center");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// the 4 minute holes
|
||||
echo("-------> distance last letter row to minutes row = ", (panel_width-textarea[1])/2 + ( textarea[1]/(cols-1) ) - min_row_fp);
|
||||
|
||||
translate([panel_length/2 - 3*led_distance_min_holes/2, min_row_fp,0])
|
||||
{
|
||||
for (i=[0:3])
|
||||
translate([i*led_distance_min_holes,0,0]) circle(min_hole_dia/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
module frontpanel_2d() {
|
||||
difference()
|
||||
{
|
||||
// adding in
|
||||
union()
|
||||
{
|
||||
square([panel_length, panel_width], center = false);
|
||||
}
|
||||
// subtracting
|
||||
union()
|
||||
{
|
||||
LettersAndMinutes2D();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module FrontPanel3D(panel_thickness) {
|
||||
linear_extrude(panel_thickness)
|
||||
frontpanel_2d();
|
||||
}
|
||||
|
||||
module RaisedFrameOuter(frame_height, panel_thickness) {
|
||||
translate([0,0,-frame_height])
|
||||
linear_extrude(frame_height+panel_thickness)
|
||||
difference() {
|
||||
offset(delta = +frame_thickness) frontpanel_2d();
|
||||
frontpanel_2d();
|
||||
union()
|
||||
{
|
||||
LettersAndMinutes2D();
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
module panel_plain_2d() {
|
||||
square([panel_length, panel_width], center = false);
|
||||
}
|
||||
|
||||
module frontpanel_2d() {
|
||||
difference() {
|
||||
panel_plain_2d(); // Platte
|
||||
LettersAndMinutes2D(); // Buchstaben und Minutenlöcher ausschneiden
|
||||
}
|
||||
}
|
||||
|
||||
module FrontPanel3D(panel_thickness) {
|
||||
linear_extrude(panel_thickness)
|
||||
frontpanel_2d(); // -> Platte MIT ausgeschnittenen Buchstaben
|
||||
}
|
||||
|
||||
module RaisedFrameOuter(frame_height, panel_thickness) {
|
||||
translate([0,0,-frame_height])
|
||||
linear_extrude(frame_height + panel_thickness)
|
||||
difference() {
|
||||
offset(delta = +frame_thickness) panel_plain_2d();
|
||||
panel_plain_2d();
|
||||
LettersAndMinutes2D(); // optional, für Freistellungen im Rahmen
|
||||
}
|
||||
}
|
||||
|
||||
module main() {
|
||||
panel_thickness =
|
||||
is_undef(thickness_override) ? 0.8 : thickness_override;
|
||||
frame_height =
|
||||
is_undef(frame_override) ? 11 : frame_override;
|
||||
|
||||
rotate([180, 0, 180])
|
||||
union() {
|
||||
FrontPanel3D(panel_thickness); // enthält die Buchstaben
|
||||
RaisedFrameOuter(frame_height, panel_thickness);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
|
||||
5
openscad/readme.md
Normal file
5
openscad/readme.md
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
## Weiterführende Ressourcen
|
||||
|
||||
- [OpenSCAD auf GitHub](https://github.com/openscad/openscad) - Für parametrische CAD-Modellierung mit Code
|
||||
- [Fusion 360 Community](https://www.autodesk.com/community/fusion-360)
|
||||
- [JLCPCB Dokumentation](https://jlcpcb.com/help)
|
||||
21
openscad/testmodel.scad
Normal file
21
openscad/testmodel.scad
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
clock_text_def =
|
||||
"ESHISTRBALDFÜNFASTZEHNVIERTELSVORJNACHWHALBKOSECHSIEBEN-----------ZEHNEUNACHTDREIELFVIERZWÖLFÜNFACWIZWEINSAUHR";
|
||||
|
||||
module main() {
|
||||
// HIER, innerhalb des Moduls, wird der -D-Wert sicher gesehen
|
||||
clock_txt =
|
||||
is_undef(ovclock_text)
|
||||
? clock_text_def
|
||||
: ovclock_text;
|
||||
|
||||
echo("SCAD-Script V0.1");
|
||||
echo(clock_text_default = clock_text_def);
|
||||
echo(ovclock_text = ovclock_text);
|
||||
echo(clock_txt = clock_txt);
|
||||
|
||||
// ab hier clock_txt verwenden
|
||||
// z.B.:
|
||||
// text(clock_txt, size = 10);
|
||||
}
|
||||
|
||||
main();
|
||||
Loading…
Reference in New Issue
Block a user