diff --git a/src/bcf/bcf/geometry.py b/src/bcf/bcf/geometry.py index c32ae7619a..b8969d4837 100644 --- a/src/bcf/bcf/geometry.py +++ b/src/bcf/bcf/geometry.py @@ -6,7 +6,7 @@ from numpy.typing import NDArray def camera_vectors_from_element_placement( elem_placement: NDArray[np.float64], -) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: +) -> tuple[list[float], list[float], list[float]]: """ Calculate the vectors of a camera pointing to an element. @@ -22,7 +22,7 @@ def camera_vectors_from_element_placement( def camera_vectors_from_target_position( target_position: NDArray[np.float64], offset: Optional[NDArray[np.float64]] = None -) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]: +) -> tuple[list[float], list[float], list[float]]: """ Calculate the vectors of a camera pointing to a target point. @@ -38,16 +38,7 @@ def camera_vectors_from_target_position( camera_direction = unit_vector(-camera_offset) # pylint: disable=invalid-unary-operand-type camera_right = unit_vector(np.cross(np.array([0.0, 0.0, 1.0]), camera_direction)) camera_up = unit_vector(np.cross(camera_direction, camera_right)) - return camera_position, camera_direction, camera_up - # rotation_transform = np.eye(4) - # rotation_transform[0, :3] = camera_right - # rotation_transform[1, :3] = camera_up - # rotation_transform[2, :3] = camera_direction - # translation_transform = np.eye(4) - # translation_transform[:3, -1] = -camera_position - # look_at_transform = np.matmul(rotation_transform, translation_transform) - # mat = np.linalg.inv(look_at_transform) - # return camera_position, -mat[:3, 2], mat[:3, 1] + return camera_position.tolist(), camera_direction.tolist(), camera_up.tolist() def unit_vector(v: NDArray[np.float64]) -> NDArray[np.float64]: diff --git a/src/bcf/bcf/v2/visinfo.py b/src/bcf/bcf/v2/visinfo.py index d0056ec407..46d274ea1d 100644 --- a/src/bcf/bcf/v2/visinfo.py +++ b/src/bcf/bcf/v2/visinfo.py @@ -319,9 +319,7 @@ def build_viewpoint(element: entity_instance) -> mdl.VisualizationInfo: ifc_file = element.wrapped_data.file unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) elem_placement = ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement) - elem_placement[0][3] *= unit_scale - elem_placement[1][3] *= unit_scale - elem_placement[2][3] *= unit_scale + elem_placement[:3, 3] *= unit_scale return mdl.VisualizationInfo( guid=str(uuid.uuid4()), @@ -381,7 +379,7 @@ def build_camera(elem_placement: NDArray[np.float64]) -> mdl.PerspectiveCamera: def build_camera_from_vectors( - camera_position: NDArray[np.float64], camera_dir: NDArray[np.float64], camera_up: NDArray[np.float64] + camera_position: list[float], camera_dir: list[float], camera_up: list[float] ) -> mdl.PerspectiveCamera: """ Return a BCF camera for an IFC element placement matrix. diff --git a/src/bcf/bcf/v3/visinfo.py b/src/bcf/bcf/v3/visinfo.py index 1cb442aa83..7880ddb10f 100644 --- a/src/bcf/bcf/v3/visinfo.py +++ b/src/bcf/bcf/v3/visinfo.py @@ -319,9 +319,7 @@ def build_viewpoint(element: entity_instance) -> mdl.VisualizationInfo: ifc_file = element.wrapped_data.file unit_scale = ifcopenshell.util.unit.calculate_unit_scale(ifc_file) elem_placement = ifcopenshell.util.placement.get_local_placement(element.ObjectPlacement) - elem_placement[0][3] *= unit_scale - elem_placement[1][3] *= unit_scale - elem_placement[2][3] *= unit_scale + elem_placement[:3, 3] *= unit_scale return mdl.VisualizationInfo( guid=str(uuid.uuid4()), @@ -381,7 +379,7 @@ def build_camera(elem_placement: NDArray[np.float64]) -> mdl.PerspectiveCamera: def build_camera_from_vectors( - camera_position: NDArray[np.float64], camera_dir: NDArray[np.float64], camera_up: NDArray[np.float64] + camera_position: list[float], camera_dir: list[float], camera_up: list[float] ) -> mdl.PerspectiveCamera: """ Return a BCF camera for an IFC element placement matrix.