def __init__(self, scanWidth=1, scanLength=1, resolution=1, passes=1, filePath=None, saveScan=False): Task.__init__(self, "scan") self.logger = logging.getLogger("dobozweb.core.Automation.ScanTask") self.logger.setLevel(logging.ERROR) self.width = scanWidth self.length = scanLength self.resolution = resolution self.filePath = filePath self.saveScan = saveScan self.point_cloud = PointCloud() self.pointCloudBuilder = PointCloudBuilder(resolution=resolution, width=scanWidth, length=scanLength, passes=passes) totalPoints = (int(scanWidth / resolution) + 1) * (int(scanLength / resolution) + 1) * passes self.logger.info("Total scan points %d", totalPoints) self.progressFraction = float(100.00 / float(totalPoints)) self.logger.info("Progress Fraction set by scan to %s", str(self.progressFraction)) self.logger.critical("Task Init Done")
def __init__(self,scanWidth=1,scanLength=1,resolution=1,passes=1,filePath=None,saveScan=False): Task.__init__(self,"scan") self.logger=logging.getLogger("dobozweb.core.Automation.ScanTask") self.logger.setLevel(logging.ERROR) self.width=scanWidth self.length=scanLength self.resolution=resolution self.filePath=filePath self.saveScan=saveScan self.point_cloud=PointCloud() self.pointCloudBuilder=PointCloudBuilder(resolution=resolution,width=scanWidth,length=scanLength,passes=passes) totalPoints=(int(scanWidth/resolution)+1)*(int(scanLength/resolution)+1)*passes self.logger.info("Total scan points %d",totalPoints) self.progressFraction=float(100.00/float(totalPoints)) self.logger.info("Progress Fraction set by scan to %s",str(self.progressFraction)) self.logger.critical("Task Init Done")
class ScanTask(Task): """For all things related to the scanning """ def __init__(self,scanWidth=1,scanLength=1,resolution=1,passes=1,filePath=None,saveScan=False): Task.__init__(self,"scan") self.logger=logging.getLogger("dobozweb.core.Automation.ScanTask") self.logger.setLevel(logging.ERROR) self.width=scanWidth self.length=scanLength self.resolution=resolution self.filePath=filePath self.saveScan=saveScan self.point_cloud=PointCloud() self.pointCloudBuilder=PointCloudBuilder(resolution=resolution,width=scanWidth,length=scanLength,passes=passes) totalPoints=(int(scanWidth/resolution)+1)*(int(scanLength/resolution)+1)*passes self.logger.info("Total scan points %d",totalPoints) self.progressFraction=float(100.00/float(totalPoints)) self.logger.info("Progress Fraction set by scan to %s",str(self.progressFraction)) self.logger.critical("Task Init Done") def __str__(self): string='{"id": "%s", "type": "%s", "width": %s, "height":%f, "resolution": %s}' %(str(self.id), self.type,self.width,self.length,self.resolution) return string def connect(self,connector): self.connector=connector if hasattr(self.connector, 'events'): self.connector.events.OnDataRecieved+=self._data_recieved # self.connector.events.OnDisconnected+=self.on_connector_disconnect # self.connector.events.OnReconnected+=self.on_connector_reconnect def disconnect(self): """Dsiconnected the task from the connector: to remove event handling """ self.connector.events.OnDataRecieved-=self._data_recieved self.connector=None def start(self): self.status="SR"#actual first start self.events.OnEntered(self,"Entered") ####################### #Initialize base position self.connector.send_command("G21") self.connector.send_command("G90") self.connector.send_command("G92") ptBld=self.pointCloudBuilder.currentPoint self.connector.send_command("G1 X"+str(ptBld.x)+" Y"+str(ptBld.y)) def stop(self): self.status="NP" self.events.OnExited(self,"OnExited") def _do_action_step(self): #move the printhead , ask for scan, wait for answer if not self.pointCloudBuilder.finished: self.progress+=self.progressFraction ptBld=self.pointCloudBuilder.currentPoint ptStr="G1 X"+str(ptBld.x)+" Y"+str(ptBld.y) self.connector.send_command(ptStr) else: self.progress=100 self.point_cloud=self.pointCloudBuilder.point_cloud self.status="F"#finished if self.saveScan: if self.filePath: self.point_cloud.save(self.filePath) else: pass self.connector.send_command("G1 X0 Y0") self.total_time+=time.time()-self.start_time self.start_time=time.time() def _data_recieved(self,args,kargs): """ Function that gets called each time a new serial event is recieved. If the last command was confirmed, move to next position and get height info """ self.logger.info("event recieved from reprap %s",str(kargs)) if self.status!="F": if "ok" in kargs: if "height" in kargs: try: height=float(kargs.split(' ')[2]) height=height/50 self.logger.info("Scan thing %s",str(height)) #self.events.OnScanHeightRecieved(height) self.pointCloudBuilder.add_point(height) self.logger.critical("current point %s",str(self.pointCloudBuilder.currentPoint)) self.pointCloudBuilder.next_point_continuous() self.point_cloud=self.pointCloudBuilder.point_cloud except: pass if self.status!="NP" and self.status!="SP": self._do_action_step() else: if not "G92" in kargs and not "G90" in kargs and not "G21" in kargs and "G1" in kargs and self.status!="NP" and self.status!="SP" : self.connector.send_command("M180") else: if "ok" in kargs and "G1" in kargs: self.events.OnExited(self,"OnExited")
class ScanTask(Task): """For all things related to the scanning """ def __init__(self, scanWidth=1, scanLength=1, resolution=1, passes=1, filePath=None, saveScan=False): Task.__init__(self, "scan") self.logger = logging.getLogger("dobozweb.core.Automation.ScanTask") self.logger.setLevel(logging.ERROR) self.width = scanWidth self.length = scanLength self.resolution = resolution self.filePath = filePath self.saveScan = saveScan self.point_cloud = PointCloud() self.pointCloudBuilder = PointCloudBuilder(resolution=resolution, width=scanWidth, length=scanLength, passes=passes) totalPoints = (int(scanWidth / resolution) + 1) * (int(scanLength / resolution) + 1) * passes self.logger.info("Total scan points %d", totalPoints) self.progressFraction = float(100.00 / float(totalPoints)) self.logger.info("Progress Fraction set by scan to %s", str(self.progressFraction)) self.logger.critical("Task Init Done") def __str__(self): string = '{"id": "%s", "type": "%s", "width": %s, "height":%f, "resolution": %s}' % ( str(self.id), self.type, self.width, self.length, self.resolution) return string def connect(self, connector): self.connector = connector if hasattr(self.connector, 'events'): self.connector.events.OnDataRecieved += self._data_recieved # self.connector.events.OnDisconnected+=self.on_connector_disconnect # self.connector.events.OnReconnected+=self.on_connector_reconnect def disconnect(self): """Dsiconnected the task from the connector: to remove event handling """ self.connector.events.OnDataRecieved -= self._data_recieved self.connector = None def start(self): self.status = "SR" #actual first start self.events.OnEntered(self, "Entered") ####################### #Initialize base position self.connector.send_command("G21") self.connector.send_command("G90") self.connector.send_command("G92") ptBld = self.pointCloudBuilder.currentPoint self.connector.send_command("G1 X" + str(ptBld.x) + " Y" + str(ptBld.y)) def stop(self): self.status = "NP" self.events.OnExited(self, "OnExited") def _do_action_step(self): #move the printhead , ask for scan, wait for answer if not self.pointCloudBuilder.finished: self.progress += self.progressFraction ptBld = self.pointCloudBuilder.currentPoint ptStr = "G1 X" + str(ptBld.x) + " Y" + str(ptBld.y) self.connector.send_command(ptStr) else: self.progress = 100 self.point_cloud = self.pointCloudBuilder.point_cloud self.status = "F" #finished if self.saveScan: if self.filePath: self.point_cloud.save(self.filePath) else: pass self.connector.send_command("G1 X0 Y0") self.total_time += time.time() - self.start_time self.start_time = time.time() def _data_recieved(self, args, kargs): """ Function that gets called each time a new serial event is recieved. If the last command was confirmed, move to next position and get height info """ self.logger.info("event recieved from reprap %s", str(kargs)) if self.status != "F": if "ok" in kargs: if "height" in kargs: try: height = float(kargs.split(' ')[2]) height = height / 50 self.logger.info("Scan thing %s", str(height)) #self.events.OnScanHeightRecieved(height) self.pointCloudBuilder.add_point(height) self.logger.critical( "current point %s", str(self.pointCloudBuilder.currentPoint)) self.pointCloudBuilder.next_point_continuous() self.point_cloud = self.pointCloudBuilder.point_cloud except: pass if self.status != "NP" and self.status != "SP": self._do_action_step() else: if not "G92" in kargs and not "G90" in kargs and not "G21" in kargs and "G1" in kargs and self.status != "NP" and self.status != "SP": self.connector.send_command("M180") else: if "ok" in kargs and "G1" in kargs: self.events.OnExited(self, "OnExited")