def test_given_a_basic_mapping_yields_expected_results_with_scale_change(self): height = 1.0 lower_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } upper_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } scale = 0.5 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0]] expected_points_pre = [(0.75, 0.75), (0.25, 0.25), (0.5, 0.5), (0.625, 0.625)] expected_points_post = [(1.0, 1.0), (0.0, 0.0), (0.5, 0.5), (0.75, 0.75)] actual_points_pre = [transformer.transform(point) for point in test_points] transformer.set_scale(1.0) actual_points_post = [transformer.transform(point) for point in test_points] self.assertEquals(expected_points_pre, actual_points_pre) self.assertEquals(expected_points_post, actual_points_post)
def test_given_a_basic_mapping_yields_expected_results(self): height = 1.0 lower_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } upper_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } scale = 1.0 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [ [1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0], [1.0, 1.0, 2.5], [-1.0, -1.0, 2.5], [0.0, 0.0, 2.5], [0.5, 0.5, 2.5], [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0]] expected_points = [((x + 1.0) / 2.0, (y + 1.0) / 2.0) for (x, y, z) in test_points] actual_points = [transformer.transform(point) for point in test_points] self.assertEquals(expected_points, actual_points)
def test_given_a_basic_mapping_yields_expected_results_with_scale(self): height = 1.0 lower_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } upper_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } scale = 0.5 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0]] expected_points = [(0.75, 0.75), (0.25, 0.25), (0.5, 0.5), (0.625, 0.625)] actual_points = [transformer.transform(point) for point in test_points] self.assertEquals(expected_points, actual_points)
def test_given_a_basic_mapping_yields_expected_results(self): height = 1.0 lower_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } upper_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } scale = 1.0 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0], [1.0, 1.0, 2.5], [-1.0, -1.0, 2.5], [0.0, 0.0, 2.5], [0.5, 0.5, 2.5], [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0]] expected_points = [((x + 1.0) / 2.0, (y + 1.0) / 2.0) for (x, y, z) in test_points] actual_points = [transformer.transform(point) for point in test_points] self.assertEquals(expected_points, actual_points)
def _apply_calibration(self): self._path_to_points.set_transformer( HomogenousTransformer( self._configuration.calibration.max_deflection, self._configuration.calibration.height, self._configuration.calibration.lower_points, self._configuration.calibration.upper_points))
def test_given_a_basic_mapping_yields_expected_results_2(self): height = 2.0 lower_points = { (0.75, 0.75): (4.0, 4.0), (0.25, 0.75): (-4.0, 4.0), (0.75, 0.25): (4.0, -4.0), (0.25, 0.25): (-4.0, -4.0) } upper_points = { (1.0, 1.0): (4.0, 4.0), (0.0, 1.0): (-4.0, 4.0), (1.0, 0.0): (4.0, -4.0), (0.0, 0.0): (-4.0, -4.0) } scale = 1.0 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [ [4.0, 4.0, 0.0], [4.0, 4.0, 2.0], # [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0], # [1.0, 1.0, 2.5], [-1.0, -1.0,2.5], [0.0, 0.0,2.5], [0.5, 0.5,2.5], # [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0] ] expected_points = [ (0.75, 0.75), (1.0, 1.0), # (0.3750, 0.3750), (0.5000, 0.5000), (0.5625, 0.5625), # (0.6667, 0.6667), (0.3333, 0.3333), (0.5000, 0.5000), (0.5833, 0.5833), # (1.0000, 1.0000), (0.0000, 0.0000), (0.5000, 0.5000), (0.7500, 0.7500) ] actual_points = [transformer.transform(point) for point in test_points] for idx in range(0, len(test_points)): self.assertAlmostEquals(expected_points[idx][0], actual_points[idx][0]) self.assertAlmostEquals(expected_points[idx][1], actual_points[idx][1])
def test_points_outside_range_clip(self): height = 1.0 lower_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } upper_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } scale = 1.0 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [[-2.0, -2.0, 0.0], [2.0, 2.0, 0.0]] results = [] for test_point in test_points: results.append(transformer.transform(test_point)) self.assertEquals([(0.0, 0.0), (1.0, 1.0)], results)
def test_given_a_basic_mapping_yields_expected_results_2(self): height = 2.0 lower_points = { (0.75, 0.75): (4.0, 4.0), (0.25, 0.75): (-4.0, 4.0), (0.75, 0.25): (4.0, -4.0), (0.25, 0.25): (-4.0, -4.0) } upper_points = { (1.0, 1.0): (4.0, 4.0), (0.0, 1.0): (-4.0, 4.0), (1.0, 0.0): (4.0, -4.0), (0.0, 0.0): (-4.0, -4.0) } scale = 1.0 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [ [4.0, 4.0, 0.0], [4.0, 4.0, 2.0], # [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0], # [1.0, 1.0, 2.5], [-1.0, -1.0,2.5], [0.0, 0.0,2.5], [0.5, 0.5,2.5], # [1.0, 1.0, 5.0], [-1.0, -1.0, 5.0], [0.0, 0.0, 5.0], [0.5, 0.5, 5.0] ] expected_points = [ (0.75, 0.75), (1.0, 1.0), # (0.3750, 0.3750), (0.5000, 0.5000), (0.5625, 0.5625), # (0.6667, 0.6667), (0.3333, 0.3333), (0.5000, 0.5000), (0.5833, 0.5833), # (1.0000, 1.0000), (0.0000, 0.0000), (0.5000, 0.5000), (0.7500, 0.7500) ] actual_points = [transformer.transform(point) for point in test_points] for idx in range(0,len(test_points)): self.assertAlmostEquals(expected_points[idx][0], actual_points[idx][0]) self.assertAlmostEquals(expected_points[idx][1], actual_points[idx][1])
def test_given_a_basic_mapping_yields_expected_results_with_scale_change( self): height = 1.0 lower_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } upper_points = { (1.0, 1.0): (1.0, 1.0), (0.0, 1.0): (-1.0, 1.0), (1.0, 0.0): (1.0, -1.0), (0.0, 0.0): (-1.0, -1.0) } scale = 0.5 transformer = HomogenousTransformer(scale, height, lower_points, upper_points) test_points = [[1.0, 1.0, 0.0], [-1.0, -1.0, 0.0], [0.0, 0.0, 0.0], [0.5, 0.5, 0.0]] expected_points_pre = [(0.75, 0.75), (0.25, 0.25), (0.5, 0.5), (0.625, 0.625)] expected_points_post = [(1.0, 1.0), (0.0, 0.0), (0.5, 0.5), (0.75, 0.75)] actual_points_pre = [ transformer.transform(point) for point in test_points ] transformer.set_scale(1.0) actual_points_post = [ transformer.transform(point) for point in test_points ] for idx in range(0, len(expected_points_pre)): self.assertAlmostEquals(expected_points_pre[idx][0], actual_points_pre[idx][0]) self.assertAlmostEquals(expected_points_pre[idx][1], actual_points_pre[idx][1]) self.assertAlmostEquals(expected_points_post[idx][0], actual_points_post[idx][0]) self.assertAlmostEquals(expected_points_post[idx][1], actual_points_post[idx][1])
def print_layers(self, layer_generator, print_sub_layers=True, dry_run=False, force_source_speed=False): logger.info("Shuffled: %s" % self._configuration.options.use_shufflelayers) logger.info("Sublayered: %s" % self._configuration.options.use_sublayers) logger.info("Overlapped: %s" % self._configuration.options.use_overlap) if self._configuration.options.use_sublayers and print_sub_layers: layer_generator = SubLayerGenerator( layer_generator, self._configuration.options.sublayer_height_mm) if self._configuration.options.use_shufflelayers: layer_generator = ShuffleGenerator( layer_generator, self._configuration.options.shuffle_layers_amount) if self._configuration.options.use_overlap: layer_generator = OverLapGenerator( layer_generator, self._configuration.options.overlap_amount) if self._configuration.serial.on: self._commander = SerialCommander(self._configuration.serial.port) else: self._commander = NullCommander() self.laser_control = LaserControl( self._configuration.cure_rate.override_laser_power_amount) transformer = HomogenousTransformer( self._configuration.calibration.max_deflection, self._configuration.calibration.height, self._configuration.calibration.lower_points, self._configuration.calibration.upper_points, ) state = MachineState() self._status = MachineStatus() if dry_run: abort_on_error = False else: abort_on_error = True self._zaxis = self._get_zaxis(dry_run) disseminator = self._get_digital_disseminator(dry_run) path_to_points = PathToPoints( disseminator.samples_per_second, transformer, self._configuration.options.laser_thickness_mm) if force_source_speed: override_draw_speed = None override_move_speed = None else: override_draw_speed = self._configuration.cure_rate.draw_speed if self._configuration.cure_rate.use_draw_speed else None override_move_speed = self._configuration.cure_rate.move_speed if self._configuration.cure_rate.use_draw_speed else None pre_layer_delay = self._configuration.options.pre_layer_delay if self._configuration.options.pre_layer_delay else 0.0 post_fire_delay_speed = None slew_delay_speed = None if self._configuration.options.post_fire_delay: post_fire_delay_speed = self._configuration.options.laser_thickness_mm / ( float(self._configuration.options.post_fire_delay) / 1000.0) if self._configuration.options.slew_delay: slew_delay_speed = self._configuration.options.laser_thickness_mm / ( float(self._configuration.options.slew_delay) / 1000.0) if self._configuration.options.wait_after_move_milliseconds > 0: wait_speed = self._configuration.options.laser_thickness_mm / ( float(self._configuration.options.wait_after_move_milliseconds) / 1000.0) else: wait_speed = None self._writer = LayerWriter(disseminator, path_to_points, self.laser_control, state, move_distance_to_ignore=self._configuration. options.laser_thickness_mm, override_draw_speed=override_draw_speed, override_move_speed=override_move_speed, wait_speed=wait_speed, post_fire_delay_speed=post_fire_delay_speed, slew_delay_speed=slew_delay_speed) self._layer_processing = LayerProcessing( self._writer, state, self._status, self._zaxis, self._configuration.dripper.max_lead_distance_mm, self._commander, pre_layer_delay, self._configuration.serial.layer_started, self._configuration.serial.layer_ended, self._configuration.serial.print_ended, self._configuration.serial.on_command, self._configuration.serial.off_command, ) if self._zaxis: self._zaxis.set_call_back(self._status.drip_call_back) self._zaxis.start() self._controller = Controller( self._writer, self._layer_processing, layer_generator, self._status, abort_on_error=abort_on_error, ) self._controller.start()