regex fix, camera default fix

This commit is contained in:
alcoholicgirl
2026-04-27 23:31:38 +08:00
parent 7ba3035006
commit 8f1e0b11a0
3 changed files with 10 additions and 8 deletions

View File

@ -25,7 +25,7 @@ class Command:
class CommandChainParser: class CommandChainParser:
CHAIN_PATTERN = r"^(([a-zA-Z0-9]+(?:\(([^()]*|(?1)+)(\s*\,\s*(?1))*\))?)(\.(?1))*)" CHAIN_PATTERN = r"^(([a-zA-Z0-9\-+]+(?:\(([^()]*|(?1)+)(\s*\,\s*(?1))*\))?)(\.(?1))*)"
def __init__(self, _command_chain: str) -> None: def __init__(self, _command_chain: str) -> None:
self.command_chain = _command_chain self.command_chain = _command_chain

View File

@ -271,7 +271,7 @@ class Camera(Object):
def __init__(self, _focus: float = 2.0) -> None: def __init__(self, _focus: float = 2.0) -> None:
super().__init__() super().__init__()
self.focus = _focus self.focus = _focus
self.transform.translate(8.0, 8.0, 8.0).lookat(0.0, 0.0, 0.0) # self.transform.translate(8.0, 8.0, 8.0).lookat(0.0, 0.0, 0.0)
def parse_args(self, args: list[str]): def parse_args(self, args: list[str]):
self.focus = ArgParser.as_float(args) self.focus = ArgParser.as_float(args)

View File

@ -14,12 +14,14 @@ class Scene:
from konabot.plugins.marchtoy.obj import Object, Camera, OBJECT_ENTRIES from konabot.plugins.marchtoy.obj import Object, Camera, OBJECT_ENTRIES
logger.info(f"building scene: {_instruction}") logger.info(f"building scene: {_instruction}")
self.canvas_objs: list[tuple[Object, str]] = [] self.canvas_objs: list[tuple[Object, str]] = []
self.camera: Camera = Camera() self.camera: Camera = Camera(1.0 / np.tan(np.deg2rad(30.0)))
self.camera.transform.translate(8.0, 8.0, 8.0).lookat(0.0, 0.0, 0.0)
for raw_cmd in CommandChainParser(_instruction): for raw_cmd in CommandChainParser(_instruction):
cmd_queue = CommandParser(raw_cmd) cmd_queue = CommandParser(raw_cmd)
cmd_obj = next(cmd_queue) cmd_obj = next(cmd_queue)
obj_id, obj_args = cmd_obj.id, cmd_obj.args obj_id, obj_args = cmd_obj.id, cmd_obj.args
# logger.info(f"parsing object: {obj_id} with args {obj_args}") logger.info(f"parsing object: {obj_id} with args {obj_args}")
obj_instance: Optional[Object] = None obj_instance: Optional[Object] = None
if obj_id in OBJECT_ENTRIES: if obj_id in OBJECT_ENTRIES:
obj_cls = OBJECT_ENTRIES[obj_id] obj_cls = OBJECT_ENTRIES[obj_id]
@ -35,11 +37,11 @@ class Scene:
) from e ) from e
else: else:
raise Exception(f"{obj_id} is not a valid object type.") raise Exception(f"{obj_id} is not a valid object type.")
# logger.info(f"parsed object {obj_id}({obj_args})") logger.info(f"parsed object {obj_id}({obj_args})")
if obj_instance != None: if obj_instance != None:
for cmd in cmd_queue: for cmd in cmd_queue:
op_id, op_args = cmd.id, cmd.args op_id, op_args = cmd.id, cmd.args
# logger.info(f"parsing operation {op_id} with args {op_args}") logger.info(f"parsing operation {op_id} with args {op_args}")
if op_id in OPERATION_ENTRIES: if op_id in OPERATION_ENTRIES:
op_func = OPERATION_ENTRIES[op_id] op_func = OPERATION_ENTRIES[op_id]
if not callable(op_func): if not callable(op_func):
@ -47,12 +49,12 @@ class Scene:
op_func(obj_instance, op_args) op_func(obj_instance, op_args)
else: else:
raise Exception(f"{op_id} is not a valid operation.") raise Exception(f"{op_id} is not a valid operation.")
# logger.info(f"parsed operation {op_id}({op_args})") logger.info(f"parsed operation {op_id}({op_args})")
try: try:
sdf_block = obj_instance.sdf_block_glsl() sdf_block = obj_instance.sdf_block_glsl()
self.canvas_objs.append((obj_instance, sdf_block)) self.canvas_objs.append((obj_instance, sdf_block))
# logger.info(f"parsed sdf {sdf_block}") logger.info(f"parsed sdf {sdf_block}")
except: except:
# logger.info(f"parsed camera") # logger.info(f"parsed camera")
if type(obj_instance) == Camera: if type(obj_instance) == Camera: