# how to assign letters/numbers

Posted by appjaws1
 how to assign letters/numbers October 15, 2015 11:14AM Registered: 9 years ago Posts: 780
I have only seen the use of lettering when the actual letter/numbers are defined.
What I would like to do, if possible, is to have a routine that will print a letter/number that has been calculated.

This is what I have at the moment ( with a lot of help)

Size=3.0;
NumHoles = 8; // Number of holes
Gap = 2.5; // Gap between holes
First=Size; // Diamater of first hole
Increase=0.05; // Radius size increase per hole
Margin=Size+1; // Border around block
base=3;
HolesX=2*(NumHoles*First/2)+(NumHoles-1)*(Gap+NumHoles*Increase); // Total X length of holes
HolesY=2*(First/2+(NumHoles-1)*Increase); // Diameter of largest hole
font = "Liberation Sans";
letter_size = Size-1;
letter_height = 5;

module Holes(){
for(i=[0:NumHoles-1])
{
translate([i*(Gap+First+i*Increase),0,-0.5])
cylinder(r=First/2+i*Increase, h=base+1, \$fn=20);
}}

module letter(l) {
linear_extrude(height = letter_height) {
text(l, size = letter_size, font = font, halign = "center", valign = "center", \$fn = 100);
}}

difference()
{
translate([-Margin-First/2,-Margin-HolesY/2,0])
cube ([2*Margin+HolesX,2*Margin+HolesY,base]);
Holes();
translate([0,-Margin/2-HolesY/2, base-2]) rotate([0, 0, 0]) letter("3.0");
translate([(HolesX-HolesY+0.5)/2,-Margin/2-HolesY/2, base-2]) rotate([0, 0, 0]) letter("0.05 mm steps");
translate([HolesX-HolesY+0.5,-Margin/2-HolesY/2, base-2]) rotate([0, 0, 0]) letter("3.35");
}

I would like the letters/numbers to be the result of a calculation, i.e. First, Increase, HolesY

Is this possible?

Thanks for any help
Paul

appjaws - Core XYUV Duet Ethernet Duex5
firmware 3.1.1 Web Interface 3.1.1
Ormerod 1-converted to laser engraver, Duet wifi
slic3r-1.3.0, Simplify3D 4.1.2, Cura-4.4.1
 Re: how to assign letters/numbers October 15, 2015 02:50PM Registered: 8 years ago Posts: 590
You could use OpenScad's str() function to convert numbers to strings and concatenate strings, see here. E.g.
```letter(str(Increment," mm step"));
```
 Re: how to assign letters/numbers October 16, 2015 02:26AM Registered: 9 years ago Posts: 780
Quote
enif
You could use OpenScad's str() function to convert numbers to strings and concatenate strings, see here. E.g.
```letter(str(Increment," mm step"));
```

Brilliant, thank you works great.

Is there a way to force 1 decimal place, at the moment I have Size=3.0, First=Size but if I use letter(str(First,".0")); I get just 3 not 3.0

edit: sorry the line should be:-
Is there a way to force 1 decimal place, at the moment I have Size=3.0, First=Size but if I use letter(str(First)); I get just 3 not 3.0 so I am using --- letter(str(First,".0")) which solves the problem but only if the First is a whole number.

Edited 1 time(s). Last edit at 10/16/2015 11:10AM by appjaws1.

appjaws - Core XYUV Duet Ethernet Duex5
firmware 3.1.1 Web Interface 3.1.1
Ormerod 1-converted to laser engraver, Duet wifi
slic3r-1.3.0, Simplify3D 4.1.2, Cura-4.4.1
 Re: how to assign letters/numbers October 16, 2015 08:17AM Registered: 8 years ago Posts: 590
I don't see any easy solution for forcing decimals. If you need to force just the first decimal, I can always decompose the value "manually", with something like:
`str(floor(First),".",floor(10*(First-floor(First))+0.5));`
 Re: how to assign letters/numbers October 16, 2015 11:19AM Registered: 9 years ago Posts: 780
Quote
enif
`str(floor(First),".",floor(10*(First-floor(First))+0.5));`

`translate([0,-Margin/2-HolesY/2, 1]) letter(str(floor(First),".",floor(10*(First-floor(First))+0.5)));`

Thank you enif

appjaws - Core XYUV Duet Ethernet Duex5
firmware 3.1.1 Web Interface 3.1.1
Ormerod 1-converted to laser engraver, Duet wifi