• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.10/pyobjc-45/2.6/pyobjc/pyobjc-framework-Cocoa/Examples/AppKit/FieldGraph/
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