def test_reflect(): """Test the Plane reflect method.""" pt = Point3D(2, 2, 2) vec = Vector3D(0, 2, 0) plane = Plane(vec, pt) origin_1 = Point3D(0, 1, 2) origin_2 = Point3D(1, 1, 2) normal_1 = Vector3D(0, 1, 0) normal_2 = Vector3D(-1, 1, 0).normalize() assert plane.reflect(normal_1, origin_1).o == Point3D(2, 0, 2) assert plane.reflect(normal_1, origin_1).n == Vector3D(0, -1, 0) assert plane.reflect(normal_1, origin_2).o == Point3D(2, 0, 2) assert plane.reflect(normal_1, origin_2).n == Vector3D(0, -1, 0) test_1 = plane.reflect(normal_2, origin_2) assert test_1.o == Point3D(2, 2, 2) assert test_1.n.x == pytest.approx(1, rel=1e-3) assert test_1.n.y == pytest.approx(0, rel=1e-3) assert test_1.n.z == pytest.approx(0, rel=1e-3) test_2 = plane.reflect(normal_2, origin_1) assert test_2.o.x == pytest.approx(1, rel=1e-3) assert test_2.o.y == pytest.approx(3, rel=1e-3) assert test_2.o.z == pytest.approx(2, rel=1e-3) assert test_2.n.x == pytest.approx(1, rel=1e-3) assert test_2.n.y == pytest.approx(0, rel=1e-3) assert test_2.n.z == pytest.approx(0, rel=1e-3)
def reflect(self, plane): """Reflect this view across a plane. Args: plane: A ladybug_geometry Plane across which the object will be reflected. """ view_up_vector = pv.Vector3D(*self.up_vector) view_position = pv.Point3D(*self.position) view_direction = pv.Vector3D(*self.direction) view_plane = Plane(n=view_up_vector, o=view_position, x=view_direction) ref_plane = view_plane.reflect(plane.n, plane.o) self._apply_plane_properties(ref_plane, view_direction, view_up_vector)