From 56dfcaf8ff08d0510432a76dbc355acd0520699d Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Tue, 6 Aug 2013 14:37:10 +0000 Subject: [PATCH] Set x/y/z view with quaternion (iOS) --- contrib/mobile/drawContext.cpp | 14 +++++++++++ .../mobile/iOS/Onelab/DetailViewController.mm | 25 ++++++++++--------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/contrib/mobile/drawContext.cpp b/contrib/mobile/drawContext.cpp index cfe5073a10..2e84944457 100644 --- a/contrib/mobile/drawContext.cpp +++ b/contrib/mobile/drawContext.cpp @@ -94,6 +94,9 @@ void drawContext::load(std::string filename) void drawContext::eventHandler(int event, float x, float y) { this->_current.set(this->_scale, this->_translate, this->_right, this->_left, this->_bottom, this->_top, this->_width, this->_height, x, y); + double xx[3] = {1.,0.,0.}; + double yy[3] = {0.,1.,0.}; + double q[4]; switch(event) { case 0: // finger(s) press the screen @@ -121,6 +124,17 @@ void drawContext::eventHandler(int event, float x, float y) case 4: // release the finger(s) // Do nothink ? break; + case 5: // X view + axis_to_quat(xx, M_PI/2, q); + setQuaternion(q[0], q[1], q[2], q[3]); + break; + case 6: // Y view + axis_to_quat(yy, M_PI/2, q); + setQuaternion(q[0], q[1], q[2], q[3]); + break; + case 7: // Z view + setQuaternion(0., 0., 0., 1.); + break; default: // all other reset the position setQuaternion(0., 0., 0., 1.); for(int i = 0; i < 3; i++){ diff --git a/contrib/mobile/iOS/Onelab/DetailViewController.mm b/contrib/mobile/iOS/Onelab/DetailViewController.mm index ab97d6b339..6ad70a7fd6 100644 --- a/contrib/mobile/iOS/Onelab/DetailViewController.mm +++ b/contrib/mobile/iOS/Onelab/DetailViewController.mm @@ -26,7 +26,6 @@ { if (_detailItem != newDetailItem) { _detailItem = newDetailItem; - // Update the view. [self configureView]; } @@ -39,17 +38,20 @@ - (void)configureView { // Update the user interface for the detail item. - if (self.detailItem) { self.detailDescriptionLabel.text = [self.detailItem description]; } } +-(void)viewDidAppear:(BOOL)animated +{ + if(self.initialModel != nil) [self.glView load:self.initialModel]; +} + - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestRender) name:@"requestRender" object:nil]; [self configureView]; scaleFactor = 1.; setObjCBridge((__bridge void*) self); @@ -59,16 +61,16 @@ UIBarButtonItem *more = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showMore:)]; UIBarButtonItem *model = [[UIBarButtonItem alloc] initWithTitle:@"Load model" style:UIBarButtonItemStyleBordered target:self action:@selector(showModelsList)]; NSArray *btns = [[NSArray alloc] initWithObjects:settings, postpro, more, nil]; - [self.navigationController.navigationItem setLeftBarButtonItems:btns]; - [self.navigationController.navigationItem setRightBarButtonItem:model]; + [self.navigationItem setLeftBarButtonItems:btns]; + [self.navigationItem setRightBarButtonItem:model]; } else { + UIBarButtonItem *model = [[UIBarButtonItem alloc] initWithTitle:@"Models list" style:UIBarButtonItemStyleBordered target:self action:@selector(showModelsList)]; UIBarButtonItem *postpro = [[UIBarButtonItem alloc] initWithTitle:@"Post processing" style:UIBarButtonItemStyleBordered target:self action:@selector(showPostpro)]; UIBarButtonItem *more = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showMore:)]; - UIBarButtonItem *model = [[UIBarButtonItem alloc] initWithTitle:@"Load model" style:UIBarButtonItemStyleBordered target:self action:@selector(showModelsList)]; NSArray *btns = [[NSArray alloc] initWithObjects:postpro, more, nil]; - self.navigationItem.rightBarButtonItem = model; - self.navigationItem.leftBarButtonItems = btns; + [self.navigationItem setLeftBarButtonItem:model]; + [self.navigationItem setRightBarButtonItems:btns]; } } @@ -335,14 +337,13 @@ else if([text isEqualToString:@"Show geometry"]) glView->mContext->showGeom(); else if([text isEqualToString:@"Set X view"]){ - /*glView->mContext->setRotation(0, 0, 0); - glView->mContext->setRotation(90, 0, 0);*/ + glView->mContext->eventHandler(5); } else if([text isEqualToString:@"Set Y view"]){ - //glView->mContext->setRotation(0, 90, 0); + glView->mContext->eventHandler(6); } else if([text isEqualToString:@"Set Z view"]){ - //glView->mContext->setRotation(0, 0, 0); + glView->mContext->eventHandler(7); } [glView drawView]; } -- GitLab