annotate Source/MyPlot.cpp @ 13:989865d55c73 tip

Commit.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Thu, 27 Sep 2012 23:30:29 +0100
parents 87dc3d84c120
children
rev   line source
martin@0 1 //
martin@0 2 // MyPlot.cpp
martin@12 3 // ClassicAmbiDec
martin@0 4 //
martin@0 5 // Created by Martin Morrell on 25/06/2012.
martin@0 6 // Copyright (c) 2012 __MyCompanyName__. All rights reserved.
martin@0 7 //
martin@0 8
martin@0 9 #include "MyPlot.h"
martin@0 10
martin@0 11
martin@0 12
martin@7 13
martin@7 14 polarPlot::polarPlot(const CRect &size): CView (size)
martin@6 15 {
martin@7 16 stereo_mode = 0;
martin@7 17 pattern = 0.5;
martin@7 18 width = 45;
martin@8 19 centre_pattern = 0.5;
martin@8 20 centre_gain = 0;
martin@8 21 surround_mode = 0;
martin@8 22 surround_pattern = 0.5;
martin@8 23 surround_width = 60;
martin@8 24 surround_mode = 0;
martin@9 25 decoder_mode = 0;
martin@9 26 decoder_prev = 0;
martin@7 27 };
martin@6 28
martin@6 29
martin@7 30
martin@7 31
martin@7 32 void polarPlot::draw (CDrawContext* context)
martin@7 33 {
martin@7 34 //Plot background circle
martin@7 35 circle(context);
martin@7 36
martin@8 37
martin@8 38 //Plot Needed Polar Patterns
martin@8 39 switch (decoder_mode) {
martin@8 40 case 2:
martin@8 41 //Stereo Mic Patterns
martin@8 42 leftMicPattern(context);
martin@8 43 rightMicPattern(context);
martin@8 44 break;
martin@8 45
martin@8 46 case 3:
martin@8 47 //2.1 Mic Patterns
martin@8 48 leftMicPattern(context);
martin@8 49 rightMicPattern(context);
martin@8 50 break;
martin@8 51
martin@8 52 case 4:
martin@8 53 //Quad Mic Patterns
martin@8 54 leftMicPattern(context);
martin@8 55 rightMicPattern(context);
martin@8 56 lsMicPattern(context);
martin@8 57 rsMicPattern(context);
martin@8 58 break;
martin@8 59
martin@8 60 case 5:
martin@9 61 switch (decoder_mode5x) {
martin@9 62 case 0:
martin@9 63 //5.0 Mic Patterns
martin@9 64 leftMicPattern(context);
martin@9 65 rightMicPattern(context);
martin@9 66 centreMicPattern(context);
martin@9 67 lsMicPattern(context);
martin@9 68 rsMicPattern(context);
martin@9 69 break;
martin@9 70 case 1:
martin@9 71 //Heller 1 Plot
martin@9 72 heller1Pattern(context);
martin@9 73 break;
martin@9 74 case 2:
martin@9 75 //Heller 2 Plot
martin@9 76 heller2Pattern(context);
martin@9 77 break;
martin@9 78
martin@9 79 default:
martin@9 80 break;
martin@9 81 }
martin@9 82
martin@8 83 break;
martin@8 84
martin@8 85 case 6:
martin@9 86 switch (decoder_mode5x) {
martin@9 87 case 0:
martin@9 88 //5.1 Mic Patterns
martin@9 89 leftMicPattern(context);
martin@9 90 rightMicPattern(context);
martin@9 91 centreMicPattern(context);
martin@9 92 lsMicPattern(context);
martin@9 93 rsMicPattern(context);
martin@9 94 break;
martin@9 95 case 1:
martin@9 96 //Heller 1 Plot
martin@9 97 heller1Pattern(context);
martin@9 98 break;
martin@9 99 case 2:
martin@9 100 //Heller 2 Plot
martin@9 101 heller2Pattern(context);
martin@9 102 break;
martin@9 103
martin@9 104 default:
martin@9 105 break;
martin@9 106 }
martin@8 107 break;
martin@8 108
martin@8 109
martin@8 110 default:
martin@8 111 break;
martin@8 112 }
martin@8 113
martin@7 114 setDirty(false);
martin@0 115 };
martin@0 116
martin@0 117
martin@7 118 void polarPlot::circle(CDrawContext *context)
martin@7 119 {
martin@12 120 //Plot Ellipse - Background Circle
martin@7 121 context->setLineWidth (3);
martin@7 122 CColor eclColor = CColor(120,120,120,125);
martin@7 123 context->setFrameColor(eclColor);
martin@7 124 ;
martin@7 125 CRect circleSize = CRect(size.getCenter().x-size.getHeight()/2*0.82, size.getCenter().y-size.getHeight()/2*0.82, size.getCenter().x+size.getHeight()/2*0.82, size.getCenter().y+size.getHeight()/2*0.82);
martin@7 126 context->drawEllipse(circleSize);
martin@7 127 };
martin@0 128
martin@0 129
martin@7 130
martin@7 131 void polarPlot::leftMicPattern(CDrawContext* context)
martin@7 132 {
martin@7 133 CColor redColor = CColor(255,0,0,255);
martin@7 134 double radius, x, y, ptA, ptB;
martin@7 135 int ang = 0;
martin@7 136
martin@7 137
martin@7 138 while (ang<360) {
martin@7 139
martin@7 140 switch (stereo_mode) {
martin@7 141 case 0:
martin@7 142 {
martin@7 143 radius = fabs(pattern+(1-pattern)*(cos((ang-width)/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@7 144 break;
martin@7 145 }
martin@7 146 case 1:
martin@7 147 {
martin@7 148 ptA = cos(width/180.0*M_PI) * (pattern + (1-pattern)*(cos(ang/180.0*M_PI)));
martin@7 149 ptB = sin(width/180.0*M_PI) * (sin(ang/180.0*M_PI));
martin@7 150
martin@7 151 radius = fabs(ptA + ptB) * size.getHeight()/2*0.8;
martin@7 152 break;
martin@7 153 }
martin@7 154
martin@7 155 default:
martin@7 156 break;
martin@7 157 }
martin@7 158
martin@12 159
martin@9 160 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 161 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@7 162
martin@7 163 context->beginDraw();
martin@7 164 CPoint point = CPoint((int)x, (int)y);
martin@7 165 context->drawPoint(point, redColor);
martin@7 166 context->endDraw();
martin@7 167
martin@7 168 ang++;
martin@7 169 }
martin@7 170 };
martin@7 171
martin@7 172
martin@7 173 void polarPlot::rightMicPattern(CDrawContext* context)
martin@7 174 {
martin@7 175 CColor blueColor = CColor(0,0,255,255);
martin@7 176 double radius, x, y, ptA, ptB;
martin@7 177 int ang = 0;
martin@7 178
martin@7 179 while (ang<360) {
martin@7 180
martin@7 181 switch (stereo_mode) {
martin@7 182 case 0:
martin@7 183 {
martin@7 184 radius = fabs(pattern+(1-pattern)*(cos((ang+width)/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@7 185 break;
martin@7 186 }
martin@7 187 case 1:
martin@7 188 {
martin@7 189 ptA = cos(width/180.0*M_PI) * (pattern + (1-pattern)*(cos(ang/180.0*M_PI)));
martin@7 190 ptB = sin(width/180.0*M_PI) * (sin(ang/180.0*M_PI));
martin@7 191
martin@7 192 radius = fabs(ptA - ptB) * size.getHeight()/2*0.8;
martin@7 193 break;
martin@7 194 }
martin@7 195
martin@7 196 default:
martin@7 197 break;
martin@7 198 }
martin@7 199
martin@7 200
martin@8 201 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@8 202 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@7 203
martin@7 204 context->beginDraw();
martin@7 205 CPoint point = CPoint((int)x, (int)y);
martin@7 206 context->drawPoint(point, blueColor);
martin@7 207 context->endDraw();
martin@7 208
martin@8 209 ang++;
martin@8 210 }
martin@8 211 };
martin@8 212
martin@8 213
martin@8 214
martin@12 215 void polarPlot::centreMicPattern(CDrawContext* context)
martin@8 216 {
martin@9 217 CColor yellowColor = CColor(255,215,0,255);
martin@8 218 double radius, x, y;
martin@8 219 int ang = 0;
martin@8 220
martin@8 221 while (ang<360) {
martin@8 222 radius = fabs(centre_pattern+(1-centre_pattern)*(cos((ang)/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@8 223
martin@9 224 x = size.getCenter().x - (sin(ang/180.0*M_PI)*(radius*(pow(10,centre_gain/gFactor/20))));
martin@9 225 y = size.getCenter().y - (cos(ang/180.0*M_PI)*(radius*(pow(10,centre_gain/gFactor/20))));
martin@8 226
martin@8 227 context->beginDraw();
martin@8 228 CPoint point = CPoint((int)x, (int)y);
martin@8 229 context->drawPoint(point, yellowColor);
martin@8 230 context->endDraw();
martin@7 231
martin@7 232 ang++;
martin@7 233 }
martin@7 234 };
martin@8 235
martin@8 236
martin@8 237
martin@8 238
martin@8 239
martin@8 240 void polarPlot::lsMicPattern(CDrawContext* context)
martin@8 241 {
martin@8 242 CColor greenColor = CColor(0,255,0,255);
martin@8 243 double radius, x, y, ptA, ptB;
martin@8 244 int ang = 0;
martin@7 245
martin@8 246 while (ang<360) {
martin@8 247 switch (surround_mode) {
martin@8 248 case 0:
martin@8 249 {
martin@8 250 radius = fabs(surround_pattern+(1-surround_pattern)*(cos((ang-surround_width-180)/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@8 251 break;
martin@8 252 }
martin@8 253 case 1:
martin@8 254 {
martin@8 255 ptA = cos(surround_width/180.0*M_PI) * (surround_pattern + (1-surround_pattern)*(cos((ang-180)/180.0*M_PI)));
martin@8 256 ptB = sin(surround_width/180.0*M_PI) * (sin((ang-180)/180.0*M_PI));
martin@8 257
martin@8 258 radius = fabs(ptA + ptB) * size.getHeight()/2*0.8;
martin@8 259 break;
martin@8 260 }
martin@8 261
martin@8 262 default:
martin@8 263 break;
martin@8 264 }
martin@8 265
martin@8 266
martin@8 267
martin@9 268 x = size.getCenter().x + (sin(ang/180.0*M_PI)*(radius*(pow(10,surround_gain/gFactor/20))));
martin@9 269 y = size.getCenter().y - (cos(ang/180.0*M_PI)*(radius*(pow(10,surround_gain/gFactor/20))));
martin@8 270
martin@8 271 context->beginDraw();
martin@8 272 CPoint point = CPoint((int)x, (int)y);
martin@8 273 context->drawPoint(point, greenColor);
martin@8 274 context->endDraw();
martin@8 275
martin@8 276 ang++;
martin@8 277 }
martin@8 278 };
martin@7 279
martin@7 280
martin@8 281 void polarPlot::rsMicPattern(CDrawContext* context)
martin@8 282 {
martin@8 283 CColor brownColor = CColor(139,69,19,255);
martin@8 284 double radius, x, y, ptA, ptB;
martin@8 285 int ang = 0;
martin@8 286
martin@8 287 while (ang<360) {
martin@8 288 switch (surround_mode) {
martin@8 289 case 0:
martin@8 290 {
martin@8 291 radius = fabs(surround_pattern+(1-surround_pattern)*(cos((ang-180+surround_width)/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@8 292 break;
martin@8 293 }
martin@8 294 case 1:
martin@8 295 {
martin@8 296 ptA = cos(surround_width/180.0*M_PI) * (surround_pattern + (1-surround_pattern)*(cos((ang-180)/180.0*M_PI)));
martin@8 297 ptB = sin(surround_width/180.0*M_PI) * (sin((ang-180)/180.0*M_PI));
martin@8 298
martin@8 299 radius = fabs(ptA - ptB) * size.getHeight()/2*0.8;
martin@8 300 break;
martin@8 301 }
martin@8 302
martin@8 303 default:
martin@8 304 break;
martin@8 305 }
martin@8 306
martin@9 307 x = size.getCenter().x + (sin(ang/180.0*M_PI)*(radius*(pow(10,surround_gain/gFactor/20))));
martin@9 308 y = size.getCenter().y - (cos(ang/180.0*M_PI)*(radius*(pow(10,surround_gain/gFactor/20))));
martin@8 309
martin@8 310 context->beginDraw();
martin@8 311 CPoint point = CPoint((int)x, (int)y);
martin@8 312 context->drawPoint(point, brownColor);
martin@8 313 context->endDraw();
martin@8 314
martin@8 315 ang++;
martin@8 316 }
martin@8 317 };
martin@7 318
martin@7 319
martin@9 320 void polarPlot::heller1Pattern(VSTGUI::CDrawContext *context)
martin@9 321 {
martin@9 322 double radius, x, y;
martin@9 323 int ang = 0;
martin@9 324
martin@9 325 //Left Polar
martin@9 326 CColor redColor = CColor(255,0,0,255);
martin@9 327 while (ang<360) {
martin@9 328 radius = 1.4017195157709*fabs(0.28205165*(1/sqrt(2.0)) +0.24760232*(cos(ang/180.0*M_PI)) +0.18790454*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@7 329
martin@9 330 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 331 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 332
martin@9 333 context->beginDraw();
martin@9 334 CPoint point = CPoint((int)x, (int)y);
martin@9 335 context->drawPoint(point, redColor);
martin@9 336 context->endDraw();
martin@9 337
martin@9 338 ang++;
martin@9 339 }
martin@7 340
martin@9 341 //Right Polar
martin@9 342 CColor blueColor = CColor(0,0,255,255);
martin@9 343 ang = 0;
martin@9 344 while (ang<360) {
martin@9 345 radius = 1.4017195157709*fabs(0.28204229*(1/sqrt(2.0)) +0.24758662*(cos(ang/180.0*M_PI)) -0.18792311*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 346
martin@9 347 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 348 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 349
martin@9 350 context->beginDraw();
martin@9 351 CPoint point = CPoint((int)x, (int)y);
martin@9 352 context->drawPoint(point, blueColor);
martin@9 353 context->endDraw();
martin@9 354
martin@9 355 ang++;
martin@9 356 }
martin@9 357
martin@9 358
martin@9 359 //SL Polar Pattern
martin@9 360 CColor greenColor = CColor(0,255,0,255);
martin@9 361 ang = 0;
martin@9 362 while (ang<360) {
martin@9 363 radius = 1.40171951577099*fabs(0.44947336*(1/sqrt(2.0)) -0.23381746*(cos(ang/180.0*M_PI)) +0.31911519*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 364
martin@9 365 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 366 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 367
martin@9 368 context->beginDraw();
martin@9 369 CPoint point = CPoint((int)x, (int)y);
martin@9 370 context->drawPoint(point, greenColor);
martin@9 371 context->endDraw();
martin@9 372
martin@9 373 ang++;
martin@9 374 }
martin@9 375
martin@9 376 //SR Polar Pattern
martin@9 377 CColor brownColor = CColor(139,69,19,255);
martin@9 378 ang = 0;
martin@9 379 while (ang<360) {
martin@9 380 radius = 1.4017195157709*fabs(0.44945895*(1/sqrt(2.0)) -0.23380219*(cos(ang/180.0*M_PI)) -0.31911386*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 381
martin@9 382 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 383 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 384
martin@9 385 context->beginDraw();
martin@9 386 CPoint point = CPoint((int)x, (int)y);
martin@9 387 context->drawPoint(point, brownColor);
martin@9 388 context->endDraw();
martin@9 389
martin@9 390 ang++;
martin@9 391 }
martin@9 392
martin@9 393 //C Polar Pattern
martin@9 394 CColor yellowColor = CColor(255,215,0,255);
martin@9 395 ang = 0;
martin@9 396 while (ang<360) {
martin@9 397 radius = 1.4017195157709*fabs(-0.04881270*(1/sqrt(2.0)) -0.02756928*(cos(ang/180.0*M_PI)) +0.00001724*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 398
martin@9 399 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 400 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 401
martin@9 402 context->beginDraw();
martin@9 403 CPoint point = CPoint((int)x, (int)y);
martin@9 404 context->drawPoint(point, yellowColor);
martin@9 405 context->endDraw();
martin@9 406
martin@9 407 ang++;
martin@9 408 }
martin@9 409 };
martin@9 410
martin@9 411
martin@9 412 void polarPlot::heller2Pattern(VSTGUI::CDrawContext *context)
martin@9 413 {
martin@9 414 double radius, x, y;
martin@9 415 int ang = 0;
martin@9 416
martin@9 417 //Left Polar
martin@9 418 CColor redColor = CColor(255,0,0,255);
martin@9 419 while (ang<360) {
martin@9 420 radius = 1.38921598327229*fabs(0.21426224*(1/sqrt(2.0)) +0.19218459*(cos(ang/180.0*M_PI)) +0.20409261*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 421
martin@9 422 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 423 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 424
martin@9 425 context->beginDraw();
martin@9 426 CPoint point = CPoint((int)x, (int)y);
martin@9 427 context->drawPoint(point, redColor);
martin@9 428 context->endDraw();
martin@9 429
martin@9 430 ang++;
martin@9 431 }
martin@9 432
martin@9 433 //Right Polar
martin@9 434 CColor blueColor = CColor(0,0,255,255);
martin@9 435 ang = 0;
martin@9 436 while (ang<360) {
martin@9 437 radius = 1.38921598327229*fabs(0.21426400*(1/sqrt(2.0)) +0.19218379*(cos(ang/180.0*M_PI)) -0.20409362*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 438
martin@9 439 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 440 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 441
martin@9 442 context->beginDraw();
martin@9 443 CPoint point = CPoint((int)x, (int)y);
martin@9 444 context->drawPoint(point, blueColor);
martin@9 445 context->endDraw();
martin@9 446
martin@9 447 ang++;
martin@9 448 }
martin@9 449
martin@9 450
martin@9 451 //SL Polar Pattern
martin@9 452 CColor greenColor = CColor(0,255,0,255);
martin@9 453 ang = 0;
martin@9 454 while (ang<360) {
martin@9 455 radius = 1.38921598327229*fabs(0.44287748*(1/sqrt(2.0)) -0.27006948*(cos(ang/180.0*M_PI)) +0.30405695*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 456
martin@9 457 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 458 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 459
martin@9 460 context->beginDraw();
martin@9 461 CPoint point = CPoint((int)x, (int)y);
martin@9 462 context->drawPoint(point, greenColor);
martin@9 463 context->endDraw();
martin@9 464
martin@9 465 ang++;
martin@9 466 }
martin@9 467
martin@9 468 //SR Polar Pattern
martin@9 469 CColor brownColor = CColor(139,69,19,255);
martin@9 470 ang = 0;
martin@9 471 while (ang<360) {
martin@9 472 radius = 1.38921598327229*fabs(0.44287676*(1/sqrt(2.0)) -0.27006941*(cos(ang/180.0*M_PI)) -0.30405595*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 473
martin@9 474 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 475 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 476
martin@9 477 context->beginDraw();
martin@9 478 CPoint point = CPoint((int)x, (int)y);
martin@9 479 context->drawPoint(point, brownColor);
martin@9 480 context->endDraw();
martin@9 481
martin@9 482 ang++;
martin@9 483 }
martin@9 484
martin@9 485 //C Polar Pattern
martin@9 486 CColor yellowColor = CColor(255,215,0,255);
martin@9 487 ang = 0;
martin@9 488 while (ang<360) {
martin@9 489 radius = 1.38921598327229*fabs(0.09993309*(1/sqrt(2.0)) +0.15577050*(cos(ang/180.0*M_PI)) +0.00000000*(sin(ang/180.0*M_PI))) * size.getHeight()/2*0.8;
martin@9 490
martin@9 491 x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
martin@9 492 y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
martin@9 493
martin@9 494 context->beginDraw();
martin@9 495 CPoint point = CPoint((int)x, (int)y);
martin@9 496 context->drawPoint(point, yellowColor);
martin@9 497 context->endDraw();
martin@9 498
martin@9 499 ang++;
martin@9 500 }
martin@9 501 };
martin@9 502