r1 = RotationEvent(1, 1, 1) r2 = RotationEvent(2, 2, 3) r3 = RotationEvent(3, 1, 4) r4 = RotationEvent(4, 1, 5) r5 = RotationEvent(5, -2, 3) r6 = RotationEvent(1, 1, 1) r7 = RotationEvent(2, -1, 0) r8 = RotationEvent(3, 2, 2) r9 = RotationEvent(4, 4, 6) r10 = RotationEvent(5, -2, 3) m1 = Motion() m2 = Motion() m1.addEvent(r1) m1.addEvent(r2) m1.addEvent(r3) m1.addEvent(r4) m1.addEvent(r5) m2.addEvent(r6) m2.addEvent(r7) m2.addEvent(r8) m2.addEvent(r9) m2.addEvent(r10) c = Calculator() print(c.getMotionDifference(m1, m2))
def transformMotion(self, signals): self.signals = signals interpolator = Interpolator() n = 64 startTime = None endTime = None for event in self.signals: if startTime == None: startTime = event.getTime() elif startTime > event.getTime(): startTime = event.getTime() if endTime == None: endTime = event.getTime() elif endTime < event.getTime(): endTime = event.getTime() if isinstance(event, RotationEvent): self.recordedRotations.append(event) elif isinstance(event, ButtonEvent): self.recordedButtons.append(event) elif isinstance(event, TouchEvent): #self.recordedTouches.append(event) if event.getLocation is None: raise NameError('Hier ist ein Fehler aufgetreten') #Sort Touches by Locations if event.getLocation() not in self.touches: self.touches[event.getLocation()] = [] self.touches[event.getLocation()].append(event) else: pass if startTime is None or endTime is None: raise NotEnoughSignals() #Construct Motion transformedMotion = Motion() transformedMotion.setStartTime(startTime) transformedMotion.setEndTime(endTime) self.addNeutralValues(startTime, endTime) #print('ROTATIONS') #print(self.recordedRotations) #print('BUTTONS') #print(self.recordedButtons) #print('TOUCHES ARRAY') #print(self.recordedTouches) #print('TOUCHES DIC') #print(self.touches) #return #Rotation Part of Motion if len(self.recordedRotations) > 0: result = interpolator.linearInterpolation(self.recordedRotations, n) transformedTime = result[0] transformedSum = result[1] for i in range(len(transformedTime)): event = RotationEvent(transformedTime[i], None, transformedSum[i]) transformedMotion.addEvent(event) else: print('Es wurde keine Rotation hinzugefügt') #Button Part of Motion if len(self.recordedButtons) > 0: result = interpolator.linearInterpolation(self.recordedButtons, n) transformedTime = result[0] transformedValue = result[1] for i in range(len(transformedTime)): event = ButtonEvent(transformedTime[i], transformedValue[i]) transformedMotion.addEvent(event) else: print('Es wurde kein Button hinzugefügt') #Touch Part of Motion for location in self.touches: touchEvents = self.touches[location] result = interpolator.linearInterpolation(touchEvents, n) transformedTime = result[0] transformedValue = result[1] for i in range(len(transformedTime)): event = TouchEvent(transformedTime[i], location, transformedValue[i]) transformedMotion.addEvent(event) #Scaling and adjustment self.scaleMotion(transformedMotion) self.adjustValues(transformedMotion) return transformedMotion
def transformMotion(self, signals): self.signals = signals interpolator = Interpolator() n = 64 startTime = None endTime = None for event in self.signals: if startTime == None: startTime = event.getTime() elif startTime > event.getTime(): startTime = event.getTime() if endTime == None: endTime = event.getTime() elif endTime < event.getTime(): endTime = event.getTime() if isinstance(event, RotationEvent): self.recordedRotations.append(event) elif isinstance(event, ButtonEvent): self.recordedButtons.append(event) elif isinstance(event, TouchEvent): self.recordedTouches.append(event) else: pass if startTime is None or endTime is None: raise NotEnoughSignals() #Construct Motion transformedMotion = Motion() transformedMotion.setStartTime(startTime) transformedMotion.setEndTime(endTime) self.addNeutralValues(startTime, endTime) #Rotation Part of Motion result = interpolator.linearInterpolation(self.recordedRotations, n) transformedTime = result[0] transformedSum = result[1] for i in range(len(transformedTime)): event = RotationEvent(transformedTime[i], None, transformedSum[i]) transformedMotion.addEvent(event) #Button Part of Motion result = interpolator.linearInterpolation(self.recordedButtons, n) transformedTime = result[0] transformedValue = result[1] for i in range(len(transformedTime)): event = ButtonEvent(transformedTime[i], transformedValue[i]) transformedMotion.addEvent(event) #Touch Part of Motion touchEventDictionary = self.sortTouches() for touchLocation in touchEventDictionary: result = interpolator.linearInterpolation(touchLocation[1], n) transformedTime = result[0] transformedValue = result[1] for i in range(len(transformedTime)): event = TouchEvent(transformedTime[i], touchLocation[0], transformedValue[i]) transformedMotion.addEvent(event) #Scaling and adjustment self.scaleMotion(transformedMotion) self.adjustValues(transformedMotion) return transformedMotion
def getMotion(self, path): deviceManager = DeviceManager() f = open(path, 'r') motion = Motion() for line in f: if line[:len("Name")] == "Name": motion.setName(line[len("Name:"):line.find(";")]) continue elif line[:len("Device")] == "Device": deviceName = line[len("Device:"):line.find(";")] if deviceName == 'None': continue device = deviceManager.getDevice(deviceName) motion.assignDevice(device) continue elif line[:len("Function")] == "Function": functionName = line[len("Function:"):line.find(";")] if functionName == 'None': continue device = motion.getAssignedDevice() function = getattr(device, functionName) motion.assignFunction(function) continue time = line[line.find("Time:") + len("Time:"):line.find(";")] time = Decimal(time) line = line[line.find(";") + 1:] event = line[line.find("Event:") + len("Event:"):line.find(";")] line = line[line.find(";") + 1:] location = line[line.find("Location:") + len("Location:"):line.find(";")] line = line[line.find(";") + 1:] if location == 'None': location = None value = line[line.find("Value:") + len("Value:"):line.find(";")] if value == 'None': value = None else: value = Decimal(value) line = line[line.find(";") + 1:] sum = line[line.find("Sum:") + len("Sum:"):line.find(";")] if sum == 'None': sum = None else: sum = Decimal(sum) line = line[line.find(";"):] if event == EVENT_BASE: event = BaseEvent(time) elif event == EVENT_ROTATE: event = RotationEvent(time, value, sum) elif event == EVENT_BUTTON: event = ButtonEvent(time, value) elif event == EVENT_TOUCH: event = TouchEvent(time, location, value) motion.addEvent(event) return motion