1from Foundation import * 2from PyObjCTools import AppHelper 3 4from CGraphModel import * 5from CGraphView import * 6from fieldMath import * 7 8 9#____________________________________________________________ 10class CGraphController(NSObject): 11 graphModel = objc.IBOutlet() 12 graphView = objc.IBOutlet() 13 fieldNormalizeCheck = objc.IBOutlet() 14 settingDrawer = objc.IBOutlet() 15 fieldSlider0 = objc.IBOutlet() 16 fieldSlider1 = objc.IBOutlet() 17 fieldSlider2 = objc.IBOutlet() 18 phaseSlider0 = objc.IBOutlet() 19 phaseSlider1 = objc.IBOutlet() 20 phaseSlider2 = objc.IBOutlet() 21 spacingSlider = objc.IBOutlet() 22 fieldDisplay0 = objc.IBOutlet() 23 fieldDisplay1 = objc.IBOutlet() 24 fieldDisplay2 = objc.IBOutlet() 25 phaseDisplay0 = objc.IBOutlet() 26 phaseDisplay1 = objc.IBOutlet() 27 phaseDisplay2 = objc.IBOutlet() 28 RMSGainDisplay = objc.IBOutlet() 29 spacingDisplay = objc.IBOutlet() 30 31#____________________________________________________________ 32# Update GUI display and control values 33 34 def awakeFromNib(self): 35 self.mapImage = NSImage.imageNamed_("Map") 36 self.graphView.setMapImage(self.mapImage) 37 self.drawGraph() 38 39 def drawGraph(self): 40 self.spacingDisplay.setFloatValue_(radToDeg(self.graphModel.getSpacing())) 41 self.spacingSlider.setFloatValue_(radToDeg(self.graphModel.getSpacing())) 42 self.fieldDisplay0.setFloatValue_(self.graphModel.getField(0)) 43 self.fieldDisplay1.setFloatValue_(self.graphModel.getField(1)) 44 self.fieldDisplay2.setFloatValue_(self.graphModel.getField(2)) 45 self.fieldSlider0.setFloatValue_(self.graphModel.getField(0)) 46 self.fieldSlider1.setFloatValue_(self.graphModel.getField(1)) 47 self.fieldSlider2.setFloatValue_(self.graphModel.getField(2)) 48 self.phaseDisplay0.setFloatValue_(radToDeg(self.graphModel.getPhase(0))) 49 self.phaseDisplay1.setFloatValue_(radToDeg(self.graphModel.getPhase(1))) 50 self.phaseDisplay2.setFloatValue_(radToDeg(self.graphModel.getPhase(2))) 51 self.phaseSlider0.setFloatValue_(radToDeg(self.graphModel.getPhase(0))) 52 self.phaseSlider1.setFloatValue_(radToDeg(self.graphModel.getPhase(1))) 53 self.phaseSlider2.setFloatValue_(radToDeg(self.graphModel.getPhase(2))) 54 55 totalField = self.graphModel.getField(0) + self.graphModel.getField(1) + self.graphModel.getField(2) 56 57 RMSGain = self.graphModel.fieldGain() 58 self.graphView.setGain(RMSGain, totalField) 59 self.RMSGainDisplay.setFloatValue_(RMSGain*100.0) 60 61 path, maxMag = self.graphModel.getGraph() 62 self.graphView.setPath(path, maxMag) 63 64 65#____________________________________________________________ 66# Handle GUI values 67 68 @objc.IBAction 69 def fieldDisplay0_(self, sender): 70 self.setNormalizedField(0, sender.floatValue()) 71 self.drawGraph() 72 73 @objc.IBAction 74 def fieldDisplay1_(self, sender): 75 self.setNormalizedField(1, sender.floatValue()) 76 self.drawGraph() 77 78 @objc.IBAction 79 def fieldDisplay2_(self, sender): 80 self.setNormalizedField(2, sender.floatValue()) 81 self.drawGraph() 82 83 @objc.IBAction 84 def fieldSlider0_(self, sender): 85 self.setNormalizedField(0, sender.floatValue()) 86 self.drawGraph() 87 88 @objc.IBAction 89 def fieldSlider1_(self, sender): 90 self.setNormalizedField(1, sender.floatValue()) 91 self.drawGraph() 92 93 @objc.IBAction 94 def fieldSlider2_(self, sender): 95 self.setNormalizedField(2, sender.floatValue()) 96 self.drawGraph() 97 98 def setNormalizedField(self, t, v): 99 if self.fieldNormalizeCheck.intValue(): 100 f = [0, 0, 0] 101 cft = 0 102 for i in range(3): 103 f[i] = self.graphModel.getField(i) 104 cft += f[i] 105 106 aft = cft - v 107 if aft < 0.001: 108 v = cft - 0.001 109 aft = 0.001 110 f[t] = v 111 112 nft = 0 113 for i in range(3): 114 nft += f[i] 115 r = aft / (nft - f[t]) 116 117 for i in range(3): 118 self.graphModel.setField(i, f[i] * r) 119 self.graphModel.setField(t, v) 120 121 else: 122 self.graphModel.setField(t, v) 123 124 125 @objc.IBAction 126 def phaseDisplay0_(self, sender): 127 self.graphModel.setPhase(0, degToRad(sender.floatValue())) 128 self.drawGraph() 129 130 @objc.IBAction 131 def phaseDisplay1_(self, sender): 132 self.graphModel.setPhase(1, degToRad(sender.floatValue())) 133 self.drawGraph() 134 135 @objc.IBAction 136 def phaseDisplay2_(self, sender): 137 self.graphModel.setPhase(2, degToRad(sender.floatValue())) 138 self.drawGraph() 139 140 @objc.IBAction 141 def phaseSlider0_(self, sender): 142 self.graphModel.setPhase(0, degToRad(sender.floatValue())) 143 self.drawGraph() 144 145 @objc.IBAction 146 def phaseSlider1_(self, sender): 147 self.graphModel.setPhase(1, degToRad(sender.floatValue())) 148 self.drawGraph() 149 150 @objc.IBAction 151 def phaseSlider2_(self, sender): 152 self.graphModel.setPhase(2, degToRad(sender.floatValue())) 153 self.drawGraph() 154 155 @objc.IBAction 156 def spacingDisplay_(self, sender): 157 self.graphModel.setSpacing(degToRad(sender.floatValue())) 158 self.drawGraph() 159 160 @objc.IBAction 161 def spacingSlider_(self, sender): 162 self.graphModel.setSpacing(degToRad(sender.floatValue())) 163 self.drawGraph() 164 165 @objc.IBAction 166 def settingDrawerButton_(self, sender): 167 self.settingDrawer.toggle_(self) 168