Пример #1
0
    def set_cylinder_shape(
        self,
        axis_direction: QVector3D = QVector3D(0.0, 0.0, 1.0),
        height: float = 1.0,
        radius: float = 1.0,
        units: Union[str, bytes] = "m",
        pixel_data: PixelData = None,
    ) -> CylindricalGeometry:
        """
        Sets the shape of the component to be a cylinder
        Overrides any existing shape
        """
        self.remove_shape()
        validate_nonzero_qvector(axis_direction)

        shape_group = self.create_shape_nx_group(
            CYLINDRICAL_GEOMETRY_NEXUS_NAME, type(pixel_data) is PixelGrid
        )

        pixel_mapping = None
        if isinstance(pixel_data, PixelMapping):
            pixel_mapping = pixel_data

        vertices = calculate_vertices(axis_direction, height, radius)
        vertices_field = self.file.set_field_value(
            shape_group, CommonAttrs.VERTICES, vertices
        )
        # Specify 0th vertex is base centre, 1st is base edge, 2nd is top centre
        self.file.set_field_value(shape_group, "cylinders", np.array([0, 1, 2]))
        self.file.set_attribute_value(vertices_field, CommonAttrs.UNITS, units)
        return CylindricalGeometry(self.file, shape_group, pixel_mapping)
Пример #2
0
    def set_cylinder_shape(
        self,
        axis_direction: QVector3D = QVector3D(0.0, 0.0, 1.0),
        height: float = 1.0,
        radius: float = 1.0,
        units: Union[str, bytes] = "m",
        pixel_data=None,
    ) -> Optional[CylindricalGeometry]:
        if validate_nonzero_qvector(axis_direction):
            return None
        self.remove_shape()
        shape_group = _get_shape_group_for_pixel_data(pixel_data)
        geometry = CylindricalGeometry(shape_group)
        geometry.nx_class = CYLINDRICAL_GEOMETRY_NX_CLASS

        vertices = CylindricalGeometry.calculate_vertices(
            axis_direction, height, radius)
        geometry.set_field_value(CommonAttrs.VERTICES, vertices,
                                 ValueTypes.FLOAT)

        # # Specify 0th vertex is base centre, 1st is base edge, 2nd is top centre
        geometry.set_field_value(CYLINDERS, np.array([0, 1, 2]),
                                 ValueTypes.INT)
        geometry[CommonAttrs.VERTICES].attributes.set_attribute_value(
            CommonAttrs.UNITS, units)

        if isinstance(pixel_data, PixelMapping):
            geometry.detector_number = get_detector_number_from_pixel_mapping(
                pixel_data)
        self[shape_group] = geometry
        return geometry
def test_zero_qvector_raises_error_when_validated():
    test_vector = QVector3D(0, 0, 0)
    with raises(ValueError):
        validate_nonzero_qvector(test_vector)
def test_non_zero_qvector_does_not_raise_error_when_validated(
        nonzero_input_vector):
    try:
        validate_nonzero_qvector(nonzero_input_vector[0])
    except ValueError:
        fail("Expected non-zero vector to pass validation")
Пример #5
0
def test_non_zero_qvector_does_not_raise_error_when_validated(nonzero_input_vector):
    assert not validate_nonzero_qvector(nonzero_input_vector[0])
Пример #6
0
def test_zero_qvector_raises_error_when_validated():
    test_vector = QVector3D(0, 0, 0)
    assert validate_nonzero_qvector(test_vector)