[BACK]Return to MyOpenGLController.m CVS log [TXT][DIR] Up to [local] / OpenXM / src / cfep

Annotation of OpenXM/src/cfep/MyOpenGLController.m, Revision 1.4

1.1       takayama    1: //
                      2: //  MyOpenGLController.m
                      3: //  cfep
                      4: //
                      5: //  Created by Nobuki Takayama on 06/02/18.
                      6: //  Copyright 2006 OpenXM.org. All rights reserved.
                      7: //
                      8:
                      9: #import "MyOpenGLController.h"
                     10:
                     11: // MyOpenGL window id (gid) is an indeger.
1.4     ! takayama   12: static MyOpenGLController *oglWindow[MY_GID_MAX];  // gid --> MyOpenGLController instance.
        !            13: static MyDocument *oglParent[MY_GID_MAX];           // gid --> parent MyDocument.
1.1       takayama   14: static int MyOpenGLControllerInitialized = 0;
                     15: static int Gid=0;
                     16:
                     17:
                     18: @implementation MyOpenGLController
                     19: +(void) initMyOpenGLController {
                     20:   int i;
                     21:   if (MyOpenGLControllerInitialized) return;
1.4     ! takayama   22:   for (i=0; i<MY_GID_MAX; i++) { oglWindow[i] = nil; oglParent[i] = nil; }
1.1       takayama   23:   MyOpenGLControllerInitialized = 1;
                     24: }
                     25: +(MyOpenGLController *)getOglWindow: (int) tid {
                     26:   return oglWindow[tid];
                     27: }
                     28: +(MyDocument *)getOglParent: (int) tid {
                     29:   return oglParent[tid];
                     30: }
                     31:
                     32: +(int) myOpenGLControllerOwnedBy: (MyDocument *) owner with: (int) tid {
                     33:    MyOpenGLController *ogl;
1.4     ! takayama   34:    if ((tid >= 0) && (tid <MY_GID_MAX)) {
1.1       takayama   35:      if (oglWindow[tid]) return tid;
                     36:         else {
                     37:                ogl = [[MyOpenGLController allocWithZone:[MyOpenGLController zone]] init];
                     38:                [ogl setGid: tid];
                     39:                [ogl retain];
                     40:                [ogl showWindow: nil];
                     41:                oglWindow[tid] = ogl;
                     42:                oglParent[tid] = owner;
                     43:                return tid;
                     44:        }
                     45:    }
                     46:    return -1;
                     47: }
                     48: +(int) myOpenGLControllerOwnedBy: (MyDocument *) owner {
                     49:    int tid;
                     50:
                     51:    [MyOpenGLController initMyOpenGLController];
                     52:    tid = Gid;
1.4     ! takayama   53:    if (tid < MY_GID_MAX) {
1.1       takayama   54:     Gid++;
                     55:        return [MyOpenGLController myOpenGLControllerOwnedBy: owner with: tid];
                     56:    }else{
                     57:     return -1;
                     58:    }
                     59: }
                     60: +(void) removeMyOpenGLControllerOwnedBy: (MyDocument *) owner {
                     61:   int i;
                     62:   [MyOpenGLController initMyOpenGLController];
1.4     ! takayama   63:   for (i=0; i<MY_GID_MAX; i++) {
1.1       takayama   64:     if (oglParent[i] == owner) {
                     65:           [MyOpenGLController removeMyOpenGLControllerWithGid: i];
                     66:        }
                     67:   }
                     68: }
                     69: +(MyOpenGLController *) removeMyOpenGLControllerWithGid: (int) tid {
                     70:   MyOpenGLController *oglC;
                     71:   [MyOpenGLController initMyOpenGLController];
                     72:   oglC = oglWindow[tid];
                     73:   if (oglWindow[tid]) [oglWindow[tid] closeMyOpenGL: oglParent[tid]];
                     74:   oglWindow[tid] = nil;
                     75:   oglParent[tid] = nil;
                     76:   [oglC autorelease]; // it is OK?
                     77:   return oglC;
                     78: }
                     79:
                     80: /*  They are put at oxEvaluateSelected in MyDocument.m to test the system. --> gtest.rr
                     81:    [MyOpenGLController addOglComm: @"[glColor4f,1.0,0.0,0.0,1.0]" to: 0 from: self];
                     82:    [MyOpenGLController addOglComm: @"[glRectf,-0.5,-0.5,0.5,0.5]" to: 0 from: self];
                     83:    [MyOpenGLController addOglComm: @"[glib_flush0]" to: 0 from: self];
                     84: */
                     85:
                     86: +(void) addOglComm:     (NSString *)comm to: (int) tid from: (MyDocument *) owner {
1.4     ! takayama   87:   if ((0<=tid) && (tid<MY_GID_MAX)) {
1.1       takayama   88:        if (oglWindow[tid] == nil) {
                     89:          tid = [MyOpenGLController myOpenGLControllerOwnedBy: owner with: tid];
                     90:        }
                     91:     if (tid >= 0) [oglWindow[tid] addOglComm: comm];
                     92:   }else ;
                     93: }
                     94: +(void) addOglInitComm: (NSString *)comm to: (int) tid from: (MyDocument *) owner {
1.4     ! takayama   95:   if ((0<=tid) && (tid<MY_GID_MAX)) {
1.1       takayama   96:        if (oglWindow[tid] == nil) {
                     97:          tid = [MyOpenGLController myOpenGLControllerOwnedBy: owner with: tid];
                     98:        }
                     99:     if (tid >= 0) [oglWindow[tid] addOglInitComm: comm];
                    100:   }else ;
                    101: }
                    102:
                    103:
                    104: -(id) init {
                    105:   self = [self initWithWindowNibName: @"MyOpenGL"];
                    106:   if (self) [self setWindowFrameAutosaveName: @"cfep OpenGLView"];
                    107:   return self;
                    108: }
                    109: -(void) setGid: (int) mygid {
                    110:   gid = mygid;
                    111: }
                    112: -(int)getGid {
                    113:   return gid;
                    114: }
                    115:
                    116: -(void) windowDidLoad {
                    117:   [super windowDidLoad];
1.2       takayama  118:   [myogl setGid: gid];
                    119:   // [self showCount];
1.1       takayama  120: }
                    121:
                    122: -(void) dealloc {
                    123:   NSLog(@"dealloc of MyOpenGL instance.\n");
                    124:   // [[NSNotificationCenter defaultCenter] removeObserver: self];
                    125:   [super dealloc];
                    126: }
                    127:
                    128: -(void) closeMyOpenGL: (MyDocument *) md {
                    129:   NSLog(@"closeMyOpenGL. \n");
                    130:   [self close];
                    131: }
                    132:
                    133: -(BOOL) windowShouldClose: (NSWindow *)sender {
                    134:    // p.299 of O'reilly book.  Connect "Window --> file's owner" to connect the delegate outlet of the window
                    135:    //                          to MyOpenGLController.
                    136:    NSLog(@"x is clicked.\n");
                    137:    [MyOpenGLController removeMyOpenGLControllerWithGid: [self getGid]];
                    138:    return YES;
                    139: }
                    140: -(void) addOglComm: (NSString *)comm {
                    141:   [myogl addOglComm: comm by: self];
                    142: }
                    143: -(void) addOglInitComm: (NSString *)comm {
                    144:   [myogl addOglInitComm: comm by: self];
                    145: }
1.2       takayama  146:
                    147: -(int) countOfOglComm {return [myogl countOfOglComm];}
                    148: -(int) countOfOglInitComm {return [myogl countOfOglInitComm];}
                    149: -(int) removeLastOfOglComm {return [myogl removeLastOfOglComm];}
                    150: -(int) removeLastOfOglInitComm {return [myogl removeLastOfOglInitComm];}
                    151: -(int) removeAllOfOglComm { return [myogl removeAllOfOglComm];}
                    152: -(int) removeAllOfOglInitComm {return [myogl removeAllOfOglInitComm];}
                    153: -(NSMutableArray *) getListOfOglComm { return [myogl getListOfOglComm];}
                    154: -(NSMutableArray *) getListOfOglInitComm { return [myogl getListOfOglInitComm]; }
                    155: -(void) showEyeX: (float) x Y: (float) y Z: (float) z {
                    156:   [self clearOutput];
1.3       takayama  157:   [self output: [NSString stringWithFormat: @"gid=%d, n=%d, position of your eye:(%1.2f,%1.2f,%1.2f), nc=%d, ni=%d",gid,[self countOfOglComm],x,y,z,[myogl getOglCommSize],[myogl getOglInitCommSize]]];
1.2       takayama  158: }
                    159: -(void) showCount {
                    160:   [self clearOutput];
                    161:   [self output: [NSString stringWithFormat: @"gid=%d, number of OpenGL commands=%d, init=%d",
                    162:                                                gid, [self countOfOglComm], [self countOfOglInitComm]]];
                    163: }
                    164: -(void) clearOutput { [mymessage setBackgroundColor: [NSColor whiteColor]]; } //does it work?
1.1       takayama  165: -(void) output: (NSString *)msg {
                    166:   [mymessage setStringValue: msg];
                    167: }
                    168:
                    169: @end

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>