RSS

(root)/iphone/common : 61 : MarineCompass/source/MarineCompassAppDelegate.m

« back to all changes in this revision

Viewing changes to MarineCompass/source/MarineCompassAppDelegate.m

Dömötör Gulyás
2010-01-18 09:03:51
Revision ID: dognotdog@gmail.com-20100118080351-ib2knxvk4w8ssw3h
made common a nested tree

Show diffs side-by-side

added added

removed removed

1
 
//
2
 
//  MarineCompassAppDelegate.m
3
 
//  MarineCompass
4
 
//
5
 
//  Created by döme on 26.07.2009.
6
 
//  Copyright __MyCompanyName__ 2009. All rights reserved.
7
 
//
8
 
 
9
 
#import "MarineCompassAppDelegate.h"
10
 
#import "EAGLView.h"
11
 
#import "CompassViewController.h"
12
 
#import "ElAnimation.h"
13
 
 
14
 
#import <UIKit/UIKit.h>
15
 
#import <CoreLocation/CoreLocation.h>
16
 
 
17
 
#import <QuartzCore/QuartzCore.h>
18
 
#import <OpenGLES/EAGLDrawable.h>
19
 
#import <CoreGraphics/CoreGraphics.h>
20
 
 
21
 
@implementation MarineCompassAppDelegate
22
 
 
23
 
 
24
 
- (void)applicationDidFinishLaunching:(UIApplication *)application
25
 
{
26
 
        self.view;
27
 
}
28
 
 
29
 
- (void) startAnimation
30
 
{
31
 
        ElCallbackAnimation* anim = [[[ElCallbackAnimation alloc] init] autorelease];
32
 
        [anim setTarget: glView];
33
 
        [anim setCallback: @selector(animationCallback:)];
34
 
        [anim setDuration: HUGE_VALF];
35
 
        [anim queueForKey: @"glViewAnimation" atBeginning: NO cancelPending: NO];
36
 
}
37
 
 
38
 
- (void) stopAnimation
39
 
{
40
 
        [[[[ElAnimation alloc] init] autorelease] queueForKey: @"glViewAnimation" atBeginning: YES cancelPending: YES];
41
 
}
42
 
 
43
 
- (void) viewDidLoad
44
 
{
45
 
 
46
 
        [window addSubview: [self view]];
47
 
        
48
 
        lman = [[CLLocationManager alloc] init];
49
 
        
50
 
        [lman setDelegate: self];
51
 
        
52
 
        [lman startUpdatingHeading];
53
 
 
54
 
        UIAccelerometer* accm = [UIAccelerometer sharedAccelerometer];
55
 
        [accm setDelegate: self];
56
 
        [accm setUpdateInterval: 0.01];
57
 
        
58
 
        rawBaseTransform                = midentity();
59
 
        baseCompassTransform    = midentity();
60
 
        compassDiskTransform    = midentity();
61
 
        
62
 
        [self startAnimation];
63
 
 
64
 
        mag = (v3){0.1,0.2,0.3};
65
 
 
66
 
 
67
 
 
68
 
/*
69
 
        unsigned int cp0 = 0;
70
 
        __asm__(
71
 
    "MRC p15, 0, %0, c0, 0, 0"
72
 
    : "=r" (cp0)
73
 
        );
74
 
*/
75
 
}
76
 
 
77
 
 
78
 
- (void)applicationWillResignActive:(UIApplication *)application {
79
 
 
80
 
}
81
 
 
82
 
 
83
 
- (void)applicationDidBecomeActive:(UIApplication *)application {
84
 
 
85
 
}
86
 
 
87
 
- (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)manager
88
 
{
89
 
        return YES;
90
 
}
91
 
 
92
 
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)heading
93
 
{
94
 
        v3 v = { [heading x], [heading y], [heading z] };
95
 
        
96
 
        v = mtransformdir3(mtranspose(baseCompassTransform), v);
97
 
        
98
 
        // clamp delta
99
 
        v3 dv = vsub(v, prevm);
100
 
        dv = vclamp(dv, -0.2, 0.2);
101
 
 
102
 
        v = vadd(prevm, dv);
103
 
 
104
 
        mag = v;
105
 
 
106
 
        double ffactor = 0.05;
107
 
 
108
 
 
109
 
        v3 cv = mag;
110
 
        v3 cvflat = cv;
111
 
        cvflat.v.z = 0.0;
112
 
        cvflat = vnormalize(cvflat);
113
 
    
114
 
        cvfp = vnormalize(vadd(vmul(cvfp, 1.0-ffactor), vmul(cvflat, ffactor)));
115
 
 
116
 
        v3 Z = {0.0,0.0,1.0};
117
 
        v3 cright = vnormalize(vcross(Z, cvfp));
118
 
                
119
 
        compassDiskTransform = mcreatefrombases(vnegate(cvfp), vnegate(cright), Z);
120
 
        
121
 
        prevm = v;
122
 
 
123
 
        [label setText: [NSString stringWithFormat: @"%.1f µT", vlength(mag)]];
124
 
}
125
 
 
126
 
- (void) accelerometer: (UIAccelerometer *) accelerometer didAccelerate: (UIAcceleration*) acceleration
127
 
{
128
 
        v3 v = { [acceleration x], [acceleration y], [acceleration z] };
129
 
        
130
 
 
131
 
 
132
 
        double ffactor = 0.02;
133
 
        
134
 
        acc = vnormalize(vadd(vmul(acc, 1.0-ffactor), vmul(v, ffactor)));
135
 
 
136
 
 
137
 
//      v3 up = vnormalize(vnegate(acc));
138
 
 
139
 
        //v3 oldForward = {baseCompassTransform.a[4], baseCompassTransform.a[5], baseCompassTransform.a[6]};
140
 
        v3 oldForward = mtransformdir3(baseCompassTransform, cvfp);
141
 
        
142
 
        m16 newBaseCompassTransform = computeAlignedBasesFromDownVector2(acc, oldForward);      
143
 
                        
144
 
        m16 newRawBaseTransform = computeAlignedBasesFromDownVector2(v, oldForward);    
145
 
        
146
 
        cvfp = mtransformdir3(baseCompassTransform, cvfp);
147
 
        cvfp = mtransformdir3(mtranspose(newBaseCompassTransform), cvfp);
148
 
        cvfp.v.z = 0.0;
149
 
        cvfp = vnormalize(cvfp);
150
 
 
151
 
        baseCompassTransform = newBaseCompassTransform;
152
 
        rawBaseTransform = newRawBaseTransform;
153
 
}
154
 
 
155
 
- (IBAction) toggleCamera: (id) sender
156
 
{
157
 
        UIBarButtonItemStyle style = [sender style];
158
 
 
159
 
        if (style != UIBarButtonItemStyleDone)
160
 
        {
161
 
        
162
 
                if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
163
 
                {
164
 
                
165
 
                        //[compassViewController.view removeFromSuperview];
166
 
 
167
 
                        
168
 
                        [self.view setBackgroundColor: [UIColor clearColor]];
169
 
                        [glView setBackgroundColor: [UIColor clearColor]];
170
 
                        
171
 
                        self.view.layer.opaque = NO;
172
 
                        glView.layer.opaque = NO;
173
 
                        
174
 
                        [glView.layer setOpacity: 0.5f];
175
 
 
176
 
                        if (!imagePicker)
177
 
                                imagePicker = [[UIImagePickerController alloc] init];
178
 
 
179
 
                        [imagePicker setSourceType: UIImagePickerControllerSourceTypeCamera];
180
 
                        [imagePicker setDelegate: self];
181
 
                        [imagePicker setShowsCameraControls: NO];
182
 
                        
183
 
                        [self.view setFrame: CGRectMake(0.0f,0.0f, 320.0f, 480.0f)];
184
 
                        
185
 
                        [imagePicker setCameraOverlayView: self.view];
186
 
                        
187
 
 
188
 
                        [self presentModalViewController: imagePicker animated: NO];
189
 
                        
190
 
                        //[self.view setFrame: [[self.view superview] bounds]];
191
 
 
192
 
//                      [viewpointButton setEnabled: NO];
193
 
 
194
 
                        [sender setStyle: UIBarButtonItemStyleDone];
195
 
                }
196
 
        }
197
 
        else
198
 
        {
199
 
                CALayer *eaglLayer = glView.layer;
200
 
                        
201
 
                [self.view setBackgroundColor: [UIColor blackColor]];
202
 
                [glView setBackgroundColor: [UIColor clearColor]];
203
 
 
204
 
                eaglLayer.opaque = YES;
205
 
                
206
 
                [self.view setAlpha: 1.0f];
207
 
 
208
 
                [self dismissModalViewControllerAnimated: NO];
209
 
                
210
 
                [window addSubview: [self view]];
211
 
                [self.view setFrame: [[self.view superview] bounds]];
212
 
                
213
 
//              [viewpointButton setEnabled: YES];
214
 
                                
215
 
                [sender setStyle: UIBarButtonItemStyleBordered];
216
 
        }
217
 
}
218
 
 
219
 
 
220
 
- (void)dealloc
221
 
{
222
 
        [lman release];
223
 
        [window release];
224
 
        [glView release];
225
 
        [super dealloc];
226
 
}
227
 
 
228
 
@synthesize baseCompassTransform, compassDiskTransform;
229
 
 
230
 
@end

Loggerhead 1.17 is a web-based interface for Bazaar branches