Skip to content

Commit 2ec28ed

Browse files
committed
replaced Customizer with ScadInterface
1 parent 57a31c8 commit 2ec28ed

File tree

9 files changed

+61
-41
lines changed

9 files changed

+61
-41
lines changed

solid/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
from .extensions.operators import __nothing__
66
from .extensions.convenience import *
77
from .extensions.access_syntax import __nothing__
8-
from .extensions.customizer import Customizer
8+
from .extensions.scad_interface import ScadInterface, scad_inline
99

solid/core/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,3 @@
66

77
from .scad_import import import_scad, use, include
88

9-
from .object_base import scad_inline

solid/core/object_base.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,6 @@ def __repr__(self):
105105
def _render(self):
106106
return self.name
107107

108-
def scad_inline(code):
109-
return OpenSCADConstant(code)
110-
111108
def py2openscad(o):
112109
if type(o) == bool:
113110
return str(o).lower()

solid/core/scad_render.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# =========================================
99
# = Rendering Python code to OpenSCAD code=
1010
# =========================================
11-
def scad_render(root, file_header = '', _fn=None):
11+
def scad_render(root, file_header = '', _fn=None, scad_interface=None):
1212
#get a list of all used and included files
1313
includes = get_include_string()
1414

@@ -29,17 +29,21 @@ def scad_render(root, file_header = '', _fn=None):
2929
if _fn:
3030
file_header += f'$fn = {_fn};\n\n'
3131

32+
if scad_interface != None:
33+
file_header += scad_interface.get_header_str()
34+
3235
return file_header + includes + extensions_header_str + scad_body \
3336
+ extensions_footer_str
3437

3538
def scad_render_to_file(scad_object, filename=None, out_dir='',
36-
file_header='', include_orig_code=True, _fn=None):
39+
file_header='', include_orig_code=True, _fn=None,
40+
scad_interface = None):
3741

3842
if out_dir == None:
3943
out_dir = ''
4044
header = f"// Generated by ExpSolidPython\n" + file_header + "\n"
4145

42-
rendered_string = scad_render(scad_object, header, _fn)
46+
rendered_string = scad_render(scad_object, header, _fn, scad_interface)
4347

4448
return _write_to_file(rendered_string, filename, out_dir)
4549

solid/examples/10-customizer.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99

1010
from solid import *
1111

12-
customizer = Customizer()
12+
scad = ScadInterface()
1313

1414
#register all the custom variables you want to use
15-
customizer.register("objects", "4", "[2, 4, 6]")
16-
customizer.register("side", "4")
17-
customizer.register("cube_pos", "[5, 5, 5]")
18-
customizer.register("cube_size", "5")
19-
customizer.register("text", '"customize me!"' ,' ["customize me!", "Thank you!"]')
15+
scad.register_customizer_var("objects", "4", "[2, 4, 6]")
16+
scad.register_customizer_var("side", "4")
17+
scad.register_customizer_var("cube_pos", "[5, 5, 5]")
18+
scad.register_customizer_var("cube_size", "5")
19+
scad.register_customizer_var("text", '"customize me!"' ,' ["customize me!", "Thank you!"]')
2020

2121
#use scad_inline to use them
2222
scene = scad_inline("""
@@ -29,13 +29,13 @@
2929

3030
#use the customizer.get function to use them as parameters
3131
py_factor = 2
32-
cube_size = customizer.get(f"cube_size - cube_pos[0] * {py_factor}")
32+
cube_size = scad.inline(f"cube_size - cube_pos[0] * {py_factor}")
3333

34-
scene += translate(customizer.get("cube_pos")) (
34+
scene += translate(scad.inline("cube_pos")) (
3535
cube(cube_size))
3636

3737
scene += translate([0, -20, 0]) (
38-
text(customizer.get("text")))
38+
text(scad.inline("text")))
3939

40-
scad_render_to_file(scene, file_header = customizer.header)
40+
scad_render_to_file(scene, scad_interface=scad)
4141

solid/examples/12-animation.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99

1010
from solid import *
1111

12-
view_port_magic = ("""
13-
$vpt = [4, 3, 15];
14-
$vpr = [60, 0, 360 * $t];
15-
$vpd = 100;
16-
""")
12+
scad = ScadInterface()
1713

18-
c = cube(scad_inline("$t*10"))
14+
scad.register_customizer_var("rotation_speed", 1.0)
1915

20-
scad_render_to_file(c, file_header=view_port_magic)
16+
scad.set_global_var("$vpt", [4, 3, 15])
17+
scad.set_global_var("$vpr", "[60, 0, 360 * $t * rotation_speed]")
18+
scad.set_global_var("$vpd", 100)
19+
20+
c = cube(scad.inline("$t * 10"))
21+
22+
scad_render_to_file(c, scad_interface=scad)
2123

solid/examples/13-animated-bouncing-ball.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,23 @@ def get_bouncing_ball_data(pos=np.array([0.0, 0.0, 0.0]), vel=np.array([5.0, 5.0
2929

3030
return data
3131

32+
scad = ScadInterface()
33+
scad.set_global_var("$vpt", [700, 900, 200])
34+
scad.set_global_var("$vpr", [80, 0, 20])
35+
scad.set_global_var("$vpd", 6000)
36+
3237
#store pre computed data in global OpenSCAD variable
33-
ball_data = f'bouncing_ball_data = {get_bouncing_ball_data()};'
38+
scad.set_global_var("bouncing_ball_data", get_bouncing_ball_data())
3439

3540
#get "dynamic ball position over time" from the data set
36-
ball_pos_over_time = scad_inline("bouncing_ball_data[$t * 1000]")
41+
ball_pos_over_time = scad.inline("bouncing_ball_data[$t * 1000]")
3742

3843
#do some regular solid stuff with it
3944
ball = translate(ball_pos_over_time)(sphere(ball_radius))
4045
floor = background(cube([2000, 2000, 0.01]))
4146

4247
#render it with the pre computed data stored in the header
43-
scad_render_to_file(ball + floor, file_header=ball_data)
48+
scad_render_to_file(ball + floor, scad_interface=scad)
4449

4550
# I think if you really want to do something like this you could put the data
4651
# into a seprate .scad file and include it into the main .scad file. You should

solid/extensions/customizer.py

Lines changed: 0 additions & 13 deletions
This file was deleted.

solid/extensions/scad_interface.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from ..core.object_base import OpenSCADConstant
2+
3+
class ScadInterface:
4+
def __init__(self):
5+
self.header = ''
6+
7+
def register_customizer_var(self, name, value, options=''):
8+
self.header += f'{name} = {value}; //{options}\n'
9+
10+
def set_global_var(self, name, value):
11+
self.header += f'{name} = {value};\n'
12+
13+
def get_header_str(self):
14+
return self.header
15+
16+
@staticmethod
17+
def get(name):
18+
return self.inline(name)
19+
20+
@staticmethod
21+
def inline(code):
22+
return scad_inline(code)
23+
24+
def scad_inline(code):
25+
return OpenSCADConstant(code)
26+

0 commit comments

Comments
 (0)