From 91152e529b76c26b5aa4c77641deac146a3ff645 Mon Sep 17 00:00:00 2001 From: gregw <> Date: Mon, 15 Apr 2002 20:20:22 +0000 Subject: [PATCH] *** empty log message *** --- .../src/directdevices/DirectDeviceManager.py | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/direct/src/directdevices/DirectDeviceManager.py b/direct/src/directdevices/DirectDeviceManager.py index d849bb1d3b..626a4d326a 100644 --- a/direct/src/directdevices/DirectDeviceManager.py +++ b/direct/src/directdevices/DirectDeviceManager.py @@ -6,6 +6,7 @@ from PandaModules import * ANALOG_MIN = -0.95 ANALOG_MAX = 0.95 ANALOG_DEADBAND = 0.125 +ANALOG_CENTER = 0.0 try: myBase = base @@ -97,6 +98,8 @@ class DirectAnalogs(AnalogNode, DirectObject): ANALOG_MIN) self.analogMax = myBase.config.GetFloat('vrpn-analog-max', ANALOG_MAX) + self.analogMax = myBase.config.GetFloat('vrpn-analog-center', + ANALOG_CENTER) self.analogRange = self.analogMax - self.analogMin @@ -114,7 +117,10 @@ class DirectAnalogs(AnalogNode, DirectObject): def disable(self): self.nodePath.reparentTo(myBase.dataUnused) - def normalize(self, val, minVal = -1, maxVal = 1): + def normalizeWithoutCentering(self, val, minVal = -1, maxVal = 1): + # + # This is the old code that doesn't incorporate the centering fix + # # First record sign if val < 0: sign = -1 @@ -122,12 +128,32 @@ class DirectAnalogs(AnalogNode, DirectObject): sign = 1 # Zero out values in deadband val = sign * max(abs(val) - self.analogDeadband, 0.0) - # Now clamp value between minVal and maxVal + # Clamp value between analog range min and max and scale about center val = min( max( val, self.analogMin ), self.analogMax ) -# val = CLAMP(val, self.analogMin, self.analogMax) + # Normalize values to given minVal and maxVal range return (((maxVal - minVal) * ((val - self.analogMin) / self.analogRange)) + minVal) - + + + def normalize(self, val, minVal = -1, maxVal = 1): + max = self.analogMax + min = self.analogMin + center = self.analogCenter + deadband = self.analogDeadband + range = self.analogRange + # Clamp value between min and max and scale around center + if (val >= center): + val = (val - center) / (max - center) + else: + val = (val - center) / (center - min) + # Zero out values in deadband + if (abs(val) <= deadband): + val = 0.0 + # Normalize values to given minVal and maxVal range + return (((maxVal - minVal) * + ((val - min) / range)) + minVal) + + def normalizeChannel(self, chan, minVal = -1, maxVal = 1): try: return self.normalize(self[chan], minVal, maxVal)