def _default_area(self): """ Create the area based on the size specified by the Device Driver """ d = self.declaration area = AreaBase() w = parse_unit(d.width) if d.length: h = parse_unit(d.length) else: h = 900000 area.size = [w, h] return area
def _default_step_time(self): """ Determine the step time based on the device speed setting """ #: Convert speed to px/s then to mm/s units = self.speed_units.split("/")[0] speed = parse_unit('%s%s' % (self.speed, units)) speed = to_unit(speed, 'mm') if speed == 0: return 0 #: No determine the time and convert to ms return max(0, round(1000 * self.step_size / speed))
def _default_step_time(self): """ Determine the step time based on the device speed setting """ #: Convert speed to px/s then to mm/s units = self.speed_units.split("/")[0] speed = parse_unit('%s%s' % (self.speed, units)) speed = to_unit(speed, 'mm') if speed == 0: return 0 #: No determine the time and convert to ms return max(0, round(1000*self.step_size/speed))
class DeviceConfig(Model): """ The default device configuration. Custom devices may want to subclass this. """ #: Time between each path command #: Time to wait between each step so we don't get #: way ahead of the cutter and fill up it's buffer step_time = Float(strict=False).tag(config=True) custom_rate = Float(-1, strict=False).tag(config=True) #: Distance between each command in user units #: this is effectively the resolution the software supplies step_size = Float(parse_unit('1mm'), strict=False).tag(config=True) #: Interpolate paths breaking them into small sections that #: can be sent. This allows pausing mid plot as many devices do not have #: a cancel command. interpolate = Bool(False).tag(config=True) #: How often the position will be updated in ms. Low power devices should #: set this to a high number like 2000 or 3000 sample_rate = Int(100).tag(config=True) #: Final output rotation rotation = Enum(0, 90, -90).tag(config=True) #: Final out scaling scale = ContainerList(Float(strict=False), default=[1, 1]).tag(config=True) #: In cm/s speed = Float(4, strict=False).tag(config=True) speed_units = Enum('in/s', 'cm/s').tag(config=True) speed_enabled = Bool().tag(config=True) #: Force in g force = Float(40, strict=False).tag(config=True) force_units = Enum('g').tag(config=True) force_enabled = Bool().tag(config=True) #: Use absolute coordinates absolute = Bool().tag(config=True) #: Device output is spooled by an external service #: this will cause the job to run with no delays between commands spooled = Bool().tag(config=True) #: Use a virtual connection test_mode = Bool().tag(config=True) #: Initi commands commands_before = Unicode().tag(config=True) commands_after = Unicode().tag(config=True) commands_connect = Unicode().tag(config=True) commands_disconnect = Unicode().tag(config=True) def _default_step_time(self): """ Determine the step time based on the device speed setting """ #: Convert speed to px/s then to mm/s units = self.speed_units.split("/")[0] speed = parse_unit('%s%s' % (self.speed, units)) speed = to_unit(speed, 'mm') if speed == 0: return 0 #: No determine the time and convert to ms return max(0, round(1000 * self.step_size / speed)) @observe('speed', 'speed_units', 'step_size') def _update_step_time(self, change): if change['type'] == 'update': self.step_time = self._default_step_time()