def test_can_set_off_geometry_properties(): component = Component("test") vertices = [ QVector3D(0.0, 0.0, 1.0), QVector3D(0.0, 1.0, 0.0), QVector3D(0.0, 0.0, 0.0), QVector3D(0.0, 1.0, 1.0), ] faces = [[0, 1, 2, 3]] shape = OFFGeometryNoNexus(vertices, faces) component.set_off_shape(shape) nexus_shape, _ = component.shape vertex_2_x = 0.5 vertex_2_y = -0.5 vertex_2_z = 0 new_vertices = [ QVector3D(-0.5, -0.5, 0), QVector3D(0, 0.5, 0), QVector3D(vertex_2_x, vertex_2_y, vertex_2_z), ] triangle = [0, 1, 2] new_faces = [triangle] nexus_shape.vertices = new_vertices nexus_shape.faces = new_faces assert nexus_shape.faces == new_faces assert nexus_shape.vertices[2].x() == approx(vertex_2_x) assert nexus_shape.vertices[2].y() == approx(vertex_2_y) assert nexus_shape.vertices[2].z() == approx(vertex_2_z)
def test_can_get_off_geometry_properties(): component = Component("test") vertex_3_x = 0.0 vertex_3_y = 1.0 vertex_3_z = 1.0 vertices = [ QVector3D(0, 0, 1), QVector3D(0, 1, 0), QVector3D(0, 0, 0), QVector3D(vertex_3_x, vertex_3_y, vertex_3_z), ] faces = [[0, 1, 2, 3]] shape = OFFGeometryNoNexus(vertices, faces) component.set_off_shape(shape) nexus_shape, _ = component.shape assert isinstance(nexus_shape, OFFGeometryNexus) assert nexus_shape.faces == faces assert nexus_shape.vertices[3].x() == approx(vertex_3_x) assert nexus_shape.vertices[3].y() == approx(vertex_3_y) assert nexus_shape.vertices[3].z() == approx(vertex_3_z)
def replace_pixel_mapping_in_off_component(component: Component, pixel_mapping: PixelMapping, off_geometry: OFFGeometryNexus): """ Change the pixel mapping that is currently stored in a Component. Used to see if everything behaves correctly even for pixel data with 'special' properties. :param component: The component to have its pixel data replaced. :param pixel_mapping: The PixelMapping or PixielGrid object. :param off_geometry: The OffGeometry. """ component.record_pixel_mapping(pixel_mapping) component.set_off_shape(off_geometry, pixel_data=pixel_mapping)
def generate_geometry_model(self, component: Component, pixel_data: PixelData = None): """ Generates a geometry model depending on the type of geometry selected and the current values of the line edits that apply to the particular geometry type. :return: The generated model. """ if self.CylinderRadioButton.isChecked(): geometry = component.set_cylinder_shape( QVector3D( self.cylinderXLineEdit.value(), self.cylinderYLineEdit.value(), self.cylinderZLineEdit.value(), ), self.cylinderHeightLineEdit.value(), self.cylinderRadiusLineEdit.value(), self.unitsLineEdit.text(), pixel_data=pixel_data, ) if not geometry: show_warning_dialog( "3D vector is zero length in cylinder geometry.", "") elif self.boxRadioButton.isChecked(): component.set_box_shape( self.boxLengthLineEdit.value(), self.boxWidthLineEdit.value(), self.boxHeightLineEdit.value(), self.unitsLineEdit.text(), ) elif self.meshRadioButton.isChecked() and self.cad_file_name: mesh_geometry = OFFGeometryNoNexus() geometry_model = load_geometry(self.cad_file_name, self.unitsLineEdit.text(), mesh_geometry) # Units have already been used during loading the file, but we store them and file name # so we can repopulate their fields in the edit component window geometry_model.units = self.unitsLineEdit.text() geometry_model.file_path = self.cad_file_name component.set_off_shape( geometry_model, units=self.unitsLineEdit.text(), filename=self.fileLineEdit.text(), pixel_data=pixel_data, )
def _set_slit_geometry(component: Component): slit_geometry = SlitGeometry(component) component.set_off_shape(slit_geometry.create_slit_geometry())