Skip to content

Commit 27f5e2d

Browse files
committed
improve frontend method chaining for add
1 parent 5bb155c commit 27f5e2d

File tree

5 files changed

+46
-34
lines changed

5 files changed

+46
-34
lines changed

examples/cards.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
" _x, _y = make_row(i+1, _x, _y)\n",
4949
"\n",
5050
"scene.add(\"sphere\").at(-2,1,0).jitter().velocity(2.3,0,0)\n",
51-
"scene.add_invisible_wall([0,0,0],[0,1,0])\n",
51+
"scene.add.invisible.wall([0,0,0],[0,1,0])\n",
5252
"\n",
5353
"fixed = scene.build().report()\n",
5454
"fixed.preview();"

examples/frontend/_scene_.py

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,44 @@ def __init__(self, name: str, scene: "Scene"):
542542
self.name = name
543543

544544

545+
class InvisibleAdder:
546+
def __init__(self, scene: "Scene"):
547+
self._scene = scene
548+
549+
def sphere(self, position: list[float], radius: float) -> Sphere:
550+
sphere = Sphere().add(position, radius)
551+
self._scene._sphere.append(sphere)
552+
return sphere
553+
554+
def wall(self, position: list[float], normal: list[float]) -> Wall:
555+
wall = Wall().add(position, normal)
556+
self._scene._wall.append(wall)
557+
return wall
558+
559+
560+
class SessionAdder:
561+
def __init__(self, scene: "Scene"):
562+
self._scene = scene
563+
self.invisible = InvisibleAdder(scene)
564+
565+
def __call__(self, mesh_name: str, ref_name: str = "") -> "Object":
566+
if ref_name == "":
567+
ref_name = mesh_name
568+
count = 0
569+
while ref_name in self._scene._object.keys():
570+
count += 1
571+
ref_name = f"{mesh_name}_{count}"
572+
mesh_list = self._scene._asset.list()
573+
if mesh_name not in mesh_list:
574+
raise Exception(f"mesh_name '{mesh_name}' does not exist")
575+
elif ref_name in self._scene._object.keys():
576+
raise Exception(f"ref_name '{ref_name}' already exists")
577+
else:
578+
obj = Object(self._scene._asset, mesh_name)
579+
self._scene._object[ref_name] = obj
580+
return obj
581+
582+
545583
class Scene:
546584
def __init__(self, name: str, plot: PlotManager, asset: AssetManager, save_func):
547585
self._name = name
@@ -551,45 +589,19 @@ def __init__(self, name: str, plot: PlotManager, asset: AssetManager, save_func)
551589
self._object = {}
552590
self._sphere = []
553591
self._wall = []
592+
self.add = SessionAdder(self)
554593
self.info = SceneInfo(name, self)
555594

556595
def clear(self) -> "Scene":
557596
self._object.clear()
558597
return self
559598

560-
def add(self, mesh_name: str, ref_name: str = "") -> "Object":
561-
if ref_name == "":
562-
ref_name = mesh_name
563-
count = 0
564-
while ref_name in self._object.keys():
565-
count += 1
566-
ref_name = f"{mesh_name}_{count}"
567-
mesh_list = self._asset.list()
568-
if mesh_name not in mesh_list:
569-
raise Exception(f"mesh_name '{mesh_name}' does not exist")
570-
elif ref_name in self._object.keys():
571-
raise Exception(f"ref_name '{ref_name}' already exists")
572-
else:
573-
obj = Object(self._asset, mesh_name)
574-
self._object[ref_name] = obj
575-
return obj
576-
577599
def pick(self, name: str) -> "Object":
578600
if name not in self._object.keys():
579601
raise Exception(f"object {name} does not exist")
580602
else:
581603
return self._object[name]
582604

583-
def add_invisible_sphere(self, position: list[float], radius: float) -> Sphere:
584-
sphere = Sphere().add(position, radius)
585-
self._sphere.append(sphere)
586-
return sphere
587-
588-
def add_invisible_wall(self, position: list[float], normal: list[float]) -> Wall:
589-
wall = Wall().add(position, normal)
590-
self._wall.append(wall)
591-
return wall
592-
593605
def build(self) -> FixedScene:
594606
pbar = tqdm(total=10, desc="build", ncols=70)
595607
concat_count = 0

examples/stack.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"app.asset.add.tet(\"sphere\", V, F, T)\n",
1919
"\n",
2020
"scene = app.scene.create(\"ten-sheets\")\n",
21-
"scene.add_invisible_wall([0,0,0],[0,1,0])\n",
21+
"scene.add.invisible.wall([0,0,0],[0,1,0])\n",
2222
"\n",
2323
"n, space = 10, 0.05\n",
2424
"for i in range(n):\n",

examples/trampoline.ipynb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
"armadillo.at(0,1,0).jitter().velocity(0,-5,0)\n",
2727
"\n",
2828
"gap = 0.025\n",
29-
"scene.add_invisible_wall([1+gap,0,0],[-1,0,0])\n",
30-
"scene.add_invisible_wall([-1-gap,0,0],[1,0,0])\n",
31-
"scene.add_invisible_wall([0,0,1+gap],[0,0,-1])\n",
32-
"scene.add_invisible_wall([0,0,-1-gap],[0,0,1])\n",
29+
"scene.add.invisible.wall([1+gap,0,0],[-1,0,0])\n",
30+
"scene.add.invisible.wall([-1-gap,0,0],[1,0,0])\n",
31+
"scene.add.invisible.wall([0,0,1+gap],[0,0,-1])\n",
32+
"scene.add.invisible.wall([0,0,-1-gap],[0,0,1])\n",
3333
"\n",
3434
"fixed = scene.build().report()\n",
3535
"fixed.preview();"

examples/trapped.ipynb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"\n",
1717
"scene = app.scene.create(\"sphere-trap\")\n",
1818
"\n",
19-
"scene.add_invisible_sphere([0,0,0],0.7).invert().radius(0.15,3).radius(100,4)\n",
19+
"scene.add.invisible.sphere([0,0,0],0.7).invert().radius(0.15,3).radius(100,4)\n",
2020
"scene.add(\"armadillo\").jitter().rotate(180,\"y\")\n",
2121
"\n",
2222
"fixed = scene.build().report()\n",

0 commit comments

Comments
 (0)