from Foundation import *
from PyObjCTools import AppHelper
from CGraphModel import *
from CGraphView import *
from fieldMath import *
#____________________________________________________________
class CGraphController(NSObject):
graphModel = objc.IBOutlet()
graphView = objc.IBOutlet()
fieldNormalizeCheck = objc.IBOutlet()
settingDrawer = objc.IBOutlet()
fieldSlider0 = objc.IBOutlet()
fieldSlider1 = objc.IBOutlet()
fieldSlider2 = objc.IBOutlet()
phaseSlider0 = objc.IBOutlet()
phaseSlider1 = objc.IBOutlet()
phaseSlider2 = objc.IBOutlet()
spacingSlider = objc.IBOutlet()
fieldDisplay0 = objc.IBOutlet()
fieldDisplay1 = objc.IBOutlet()
fieldDisplay2 = objc.IBOutlet()
phaseDisplay0 = objc.IBOutlet()
phaseDisplay1 = objc.IBOutlet()
phaseDisplay2 = objc.IBOutlet()
RMSGainDisplay = objc.IBOutlet()
spacingDisplay = objc.IBOutlet()
#____________________________________________________________
# Update GUI display and control values
def awakeFromNib(self):
self.mapImage = NSImage.imageNamed_("Map")
self.graphView.setMapImage(self.mapImage)
self.drawGraph()
def drawGraph(self):
self.spacingDisplay.setFloatValue_(radToDeg(self.graphModel.getSpacing()))
self.spacingSlider.setFloatValue_(radToDeg(self.graphModel.getSpacing()))
self.fieldDisplay0.setFloatValue_(self.graphModel.getField(0))
self.fieldDisplay1.setFloatValue_(self.graphModel.getField(1))
self.fieldDisplay2.setFloatValue_(self.graphModel.getField(2))
self.fieldSlider0.setFloatValue_(self.graphModel.getField(0))
self.fieldSlider1.setFloatValue_(self.graphModel.getField(1))
self.fieldSlider2.setFloatValue_(self.graphModel.getField(2))
self.phaseDisplay0.setFloatValue_(radToDeg(self.graphModel.getPhase(0)))
self.phaseDisplay1.setFloatValue_(radToDeg(self.graphModel.getPhase(1)))
self.phaseDisplay2.setFloatValue_(radToDeg(self.graphModel.getPhase(2)))
self.phaseSlider0.setFloatValue_(radToDeg(self.graphModel.getPhase(0)))
self.phaseSlider1.setFloatValue_(radToDeg(self.graphModel.getPhase(1)))
self.phaseSlider2.setFloatValue_(radToDeg(self.graphModel.getPhase(2)))
totalField = self.graphModel.getField(0) + self.graphModel.getField(1) + self.graphModel.getField(2)
RMSGain = self.graphModel.fieldGain()
self.graphView.setGain(RMSGain, totalField)
self.RMSGainDisplay.setFloatValue_(RMSGain*100.0)
path, maxMag = self.graphModel.getGraph()
self.graphView.setPath(path, maxMag)
#____________________________________________________________
# Handle GUI values
@objc.IBAction
def fieldDisplay0_(self, sender):
self.setNormalizedField(0, sender.floatValue())
self.drawGraph()
@objc.IBAction
def fieldDisplay1_(self, sender):
self.setNormalizedField(1, sender.floatValue())
self.drawGraph()
@objc.IBAction
def fieldDisplay2_(self, sender):
self.setNormalizedField(2, sender.floatValue())
self.drawGraph()
@objc.IBAction
def fieldSlider0_(self, sender):
self.setNormalizedField(0, sender.floatValue())
self.drawGraph()
@objc.IBAction
def fieldSlider1_(self, sender):
self.setNormalizedField(1, sender.floatValue())
self.drawGraph()
@objc.IBAction
def fieldSlider2_(self, sender):
self.setNormalizedField(2, sender.floatValue())
self.drawGraph()
def setNormalizedField(self, t, v):
if self.fieldNormalizeCheck.intValue():
f = [0, 0, 0]
cft = 0
for i in range(3):
f[i] = self.graphModel.getField(i)
cft += f[i]
aft = cft - v
if aft < 0.001:
v = cft - 0.001
aft = 0.001
f[t] = v
nft = 0
for i in range(3):
nft += f[i]
r = aft / (nft - f[t])
for i in range(3):
self.graphModel.setField(i, f[i] * r)
self.graphModel.setField(t, v)
else:
self.graphModel.setField(t, v)
@objc.IBAction
def phaseDisplay0_(self, sender):
self.graphModel.setPhase(0, degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def phaseDisplay1_(self, sender):
self.graphModel.setPhase(1, degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def phaseDisplay2_(self, sender):
self.graphModel.setPhase(2, degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def phaseSlider0_(self, sender):
self.graphModel.setPhase(0, degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def phaseSlider1_(self, sender):
self.graphModel.setPhase(1, degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def phaseSlider2_(self, sender):
self.graphModel.setPhase(2, degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def spacingDisplay_(self, sender):
self.graphModel.setSpacing(degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def spacingSlider_(self, sender):
self.graphModel.setSpacing(degToRad(sender.floatValue()))
self.drawGraph()
@objc.IBAction
def settingDrawerButton_(self, sender):
self.settingDrawer.toggle_(self)
|