ColorPlugin.cc 24.1 KB
Newer Older
1
/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
2 3
*                                                                            *
*                              OpenFlipper                                   *
Martin Schultz's avatar
Martin Schultz committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
 *           Copyright (c) 2001-2015, RWTH-Aachen University                 *
 *           Department of Computer Graphics and Multimedia                  *
 *                          All rights reserved.                             *
 *                            www.openflipper.org                            *
 *                                                                           *
 *---------------------------------------------------------------------------*
 * This file is part of OpenFlipper.                                         *
 *---------------------------------------------------------------------------*
 *                                                                           *
 * Redistribution and use in source and binary forms, with or without        *
 * modification, are permitted provided that the following conditions        *
 * are met:                                                                  *
 *                                                                           *
 * 1. Redistributions of source code must retain the above copyright notice, *
 *    this list of conditions and the following disclaimer.                  *
 *                                                                           *
 * 2. Redistributions in binary form must reproduce the above copyright      *
 *    notice, this list of conditions and the following disclaimer in the    *
 *    documentation and/or other materials provided with the distribution.   *
 *                                                                           *
 * 3. Neither the name of the copyright holder nor the names of its          *
 *    contributors may be used to endorse or promote products derived from   *
 *    this software without specific prior written permission.               *
 *                                                                           *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       *
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           *
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  *
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,       *
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR        *
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    *
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      *
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        *
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              *
Jan Möbius's avatar
Jan Möbius committed
39
*                                                                            *
40 41 42
\*===========================================================================*/

/*===========================================================================*\
Jan Möbius's avatar
Jan Möbius committed
43 44 45 46 47
*                                                                            *
*   $Revision$                                                       *
*   $LastChangedBy$                                                *
*   $Date$                     *
*                                                                            *
48
\*===========================================================================*/
Jan Möbius's avatar
Jan Möbius committed
49

50
#include "ColorPlugin.hh"
Matthias Möller's avatar
Matthias Möller committed
51

52
#if QT_VERSION >= 0x050000
Matthias Möller's avatar
Matthias Möller committed
53 54 55
#else
  #include <QtGui>
#endif
Jan Möbius's avatar
 
Jan Möbius committed
56 57 58 59

#include <OpenFlipper/BasePlugin/PluginFunctions.hh>
#include <OpenFlipper/common/GlobalOptions.hh>

60 61 62 63 64 65 66 67 68 69 70 71

//-----------------------------------------------------------------------------

/** \brief Constructor
 *
 */
ColorPlugin::ColorPlugin() : optionsWidget_(0)
{

  //set default values for colors

  backgroundColorDefault_      = ACG::GLState::default_clear_color;
Jan Möbius's avatar
Jan Möbius committed
72 73
  backgroundColorPaper_        = OpenMesh::Vec4f(1.00f, 1.00f, 1.00f, 1.0f);
  backgroundColorPresentation_ = OpenMesh::Vec4f(0.0f, 0.188f, 0.062f, 1.0f);
74
  baseColorDefault_      = ACG::GLState::default_base_color;
Jan Möbius's avatar
Jan Möbius committed
75 76
  baseColorPaper_        = OpenMesh::Vec4f(0.00f, 0.00f, 0.00f, 1.0f);
  baseColorPresentation_ = OpenMesh::Vec4f(0.88f, 0.88f,  0.188f, 1.0f);
77
  materialColorDefault_      = ACG::GLState::default_diffuse_color;
Jan Möbius's avatar
Jan Möbius committed
78 79
  materialColorPaper_        = OpenMesh::Vec4f(0.12f, 0.76f, 0.62f, 1.0f);
  materialColorPresentation_ = OpenMesh::Vec4f(0.941f, 0.439f, 0.31f, 1.0f);
80 81 82 83 84 85 86 87 88 89 90 91 92

  lineWidthDefault_      = 1.0;
  lineWidthPaper_        = 2.0;
  lineWidthPresentation_ = 1.0;

}


//-----------------------------------------------------------------------------

/** \brief initialize the toolbar and menubar
 *
 */
Jan Möbius's avatar
 
Jan Möbius committed
93 94
void ColorPlugin::pluginsInitialized()
{
Jan Möbius's avatar
Jan Möbius committed
95 96 97
  // =============================================================================
  // Add a Menu for color selection
  // =============================================================================
Jan Möbius's avatar
Jan Möbius committed
98
  QMenu *colorMenu = new QMenu(tr("&Color schemes"));
Jan Möbius's avatar
Jan Möbius committed
99 100

  colorMenu->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"format-stroke-color.png"));
Jan Möbius's avatar
 
Jan Möbius committed
101
  emit addMenubarAction(colorMenu->menuAction(), VIEWMENU );
Jan Möbius's avatar
Jan Möbius committed
102

Jan Möbius's avatar
Jan Möbius committed
103 104 105
  // =============================================================================
  // Add Menu entries
  // =============================================================================
106
  WhatsThisGenerator whatsThis("Color");
Jan Möbius's avatar
Jan Möbius committed
107

Jan Möbius's avatar
Jan Möbius committed
108
  QAction* AC_set_Default_color = new QAction(tr("&Default colors"), this);
Jan Möbius's avatar
 
Jan Möbius committed
109
  AC_set_Default_color->setStatusTip(tr("Set Default Colors"));
110
  AC_set_Default_color->setWhatsThis(tr("Set colors to default colors. ")+whatsThis.generateLink());
Jan Möbius's avatar
Jan Möbius committed
111
  AC_set_Default_color->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"color-default.png"));
Jan Möbius's avatar
 
Jan Möbius committed
112 113
  connect(AC_set_Default_color, SIGNAL(triggered()), this, SLOT(setDefaultColor()));
  colorMenu->addAction(AC_set_Default_color);
Jan Möbius's avatar
Jan Möbius committed
114

115 116
  QAction* AC_set_Presentation_color = new QAction(tr("&Presentation colors"), this);
  AC_set_Presentation_color->setStatusTip(tr("Set Presentation Colors"));
117
  AC_set_Presentation_color->setWhatsThis(tr("Set colors to presentation colors. ")+whatsThis.generateLink());
Jan Möbius's avatar
Jan Möbius committed
118
  AC_set_Presentation_color->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"color-powerpoint.png"));
119 120
  connect(AC_set_Presentation_color, SIGNAL(triggered()), this, SLOT(setPresentationColor()));
  colorMenu->addAction(AC_set_Presentation_color);
Jan Möbius's avatar
Jan Möbius committed
121

Jan Möbius's avatar
Jan Möbius committed
122
  QAction* AC_set_Paper_color = new QAction(tr("&Paper colors"), this);
Jan Möbius's avatar
 
Jan Möbius committed
123
  AC_set_Paper_color->setStatusTip(tr("Set Paper Colors"));
124
  AC_set_Paper_color->setWhatsThis(tr("Set colors to colors for papers. ")+whatsThis.generateLink());
Jan Möbius's avatar
Jan Möbius committed
125
  AC_set_Paper_color->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"color-paper.png"));
Jan Möbius's avatar
 
Jan Möbius committed
126 127
  connect(AC_set_Paper_color, SIGNAL(triggered()), this, SLOT(setPaperColor()));
  colorMenu->addAction(AC_set_Paper_color);
Jan Möbius's avatar
Jan Möbius committed
128

Jan Möbius's avatar
Jan Möbius committed
129
  // =============================================================================
Jan Möbius's avatar
Jan Möbius committed
130
  // Create Tool bar with same contents
Jan Möbius's avatar
Jan Möbius committed
131 132
  // =============================================================================

Jan Möbius's avatar
Jan Möbius committed
133
  QToolBar* toolbar = new QToolBar(tr("Color Toolbar"));
Jan Möbius's avatar
 
Jan Möbius committed
134
  toolbar->addAction(AC_set_Default_color);
135
  toolbar->addAction(AC_set_Presentation_color);
Jan Möbius's avatar
 
Jan Möbius committed
136 137
  toolbar->addAction(AC_set_Paper_color);
  emit addToolbar( toolbar );
Jan Möbius's avatar
Jan Möbius committed
138

Jan Möbius's avatar
 
Jan Möbius committed
139 140
}

141 142 143 144 145 146

//-----------------------------------------------------------------------------

/** \brief set the defaultColor preset
 *
 */
Jan Möbius's avatar
 
Jan Möbius committed
147
void ColorPlugin::setDefaultColor() {
Jan Möbius's avatar
Jan Möbius committed
148

Jan Möbius's avatar
Jan Möbius committed
149 150 151
  // =============================================================================
  // Give user feedback
  // =============================================================================
Jan Möbius's avatar
 
Jan Möbius committed
152
  emit scriptInfo( "setDefaultColor()" );
Jan Möbius's avatar
Jan Möbius committed
153
  emit showStatusMessage( tr("Set to default Colors"), 4000 );
Jan Möbius's avatar
Jan Möbius committed
154

Jan Möbius's avatar
Jan Möbius committed
155 156
  // =============================================================================
  // Define the new colors
Jan Möbius's avatar
Jan Möbius committed
157
  // =============================================================================
158
  OpenMesh::Vec4f ambient_color,
Jan Möbius's avatar
Jan Möbius committed
159
                  diffuse_color,
160
                  specular_color;
Jan Möbius's avatar
Jan Möbius committed
161

162 163 164
  ambient_color  = 0.2f * materialColorDefault_;
  diffuse_color  = 0.6f * materialColorDefault_;
  specular_color = 0.8f * materialColorDefault_;
165 166 167
  ambient_color[3] = 1.0f;
  diffuse_color[3] = 1.0f;
  specular_color[3] = 1.0f;
Jan Möbius's avatar
Jan Möbius committed
168

Jan Möbius's avatar
Jan Möbius committed
169
  // Set background color
170
  PluginFunctions::setBackColor( backgroundColorDefault_ );
Jan Möbius's avatar
 
Jan Möbius committed
171

Jan Möbius's avatar
Jan Möbius committed
172 173
  // =============================================================================
  // Apply to all objects
Jan Möbius's avatar
Jan Möbius committed
174
  // =============================================================================
Jan Möbius's avatar
 
Jan Möbius committed
175
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; o_it != PluginFunctions::objectsEnd(); ++o_it) {
Jan Möbius's avatar
 
Jan Möbius committed
176
    MaterialNode* mat = o_it->materialNode();
177
    mat->set_base_color( baseColorDefault_ );
Jan Möbius's avatar
 
Jan Möbius committed
178 179 180
    mat->set_ambient_color(ambient_color);
    mat->set_diffuse_color(diffuse_color);
    mat->set_specular_color(specular_color);
181
    mat->set_line_width( lineWidthDefault_ );
Jan Möbius's avatar
 
Jan Möbius committed
182
  }
Jan Möbius's avatar
Jan Möbius committed
183

Jan Möbius's avatar
 
Jan Möbius committed
184
  emit updateView();
Jan Möbius's avatar
 
Jan Möbius committed
185 186
}

187 188 189 190 191 192 193

//-----------------------------------------------------------------------------

/** \brief Set the presentation color preset
 *
 */
void ColorPlugin::setPresentationColor() {
Jan Möbius's avatar
Jan Möbius committed
194

Jan Möbius's avatar
Jan Möbius committed
195 196 197
  // =============================================================================
  // Give user feedback
  // =============================================================================
198
  emit scriptInfo( "setPresentationColor()" );
Jan Möbius's avatar
Jan Möbius committed
199
  emit showStatusMessage( tr("Set to Presentation Colors"), 4000 );
Jan Möbius's avatar
Jan Möbius committed
200

Jan Möbius's avatar
Jan Möbius committed
201 202
  // =============================================================================
  // Define the new colors
Jan Möbius's avatar
Jan Möbius committed
203
  // =============================================================================
204
  OpenMesh::Vec4f ambient_color,
Jan Möbius's avatar
Jan Möbius committed
205
                  diffuse_color,
206 207 208 209 210
                  specular_color;

  ambient_color  = 0.2f * materialColorPresentation_;
  diffuse_color  = 0.6f * materialColorPresentation_;
  specular_color = 0.8f * materialColorPresentation_;
211 212 213
  ambient_color[3] = 1.0f;
  diffuse_color[3] = 1.0f;
  specular_color[3] = 1.0f;
Jan Möbius's avatar
Jan Möbius committed
214

Jan Möbius's avatar
Jan Möbius committed
215
  // Set background color
216
  PluginFunctions::setBackColor( backgroundColorPresentation_ );
Jan Möbius's avatar
 
Jan Möbius committed
217

Jan Möbius's avatar
Jan Möbius committed
218 219 220
  // =============================================================================
  // Apply to all objects
  // =============================================================================
Jan Möbius's avatar
 
Jan Möbius committed
221
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; o_it != PluginFunctions::objectsEnd(); ++o_it) {
Jan Möbius's avatar
Jan Möbius committed
222
    MaterialNode* mat = o_it->materialNode();
223
    mat->set_base_color( baseColorPresentation_ );
Jan Möbius's avatar
Jan Möbius committed
224 225 226
    mat->set_ambient_color(ambient_color);
    mat->set_diffuse_color(diffuse_color);
    mat->set_specular_color(specular_color);
227
    mat->set_line_width( lineWidthPresentation_ );
Jan Möbius's avatar
Jan Möbius committed
228
  }
Jan Möbius's avatar
Jan Möbius committed
229

Jan Möbius's avatar
 
Jan Möbius committed
230
  emit updateView();
Jan Möbius's avatar
 
Jan Möbius committed
231 232
}

233 234 235 236 237 238

//-----------------------------------------------------------------------------

/** \brief set the paperColor Preset
 *
 */
Jan Möbius's avatar
 
Jan Möbius committed
239
void ColorPlugin::setPaperColor() {
Jan Möbius's avatar
Jan Möbius committed
240

Jan Möbius's avatar
Jan Möbius committed
241 242 243
  // =============================================================================
  // Give user feedback
  // =============================================================================
Jan Möbius's avatar
 
Jan Möbius committed
244
  emit scriptInfo( "setPaperColor()" );
Jan Möbius's avatar
Jan Möbius committed
245
  emit showStatusMessage( tr("Set to Paper Colors"), 4000 );
Jan Möbius's avatar
Jan Möbius committed
246

Jan Möbius's avatar
Jan Möbius committed
247 248
  // =============================================================================
  // Define the new colors
Jan Möbius's avatar
Jan Möbius committed
249
  // =============================================================================
250
  OpenMesh::Vec4f ambient_color,
Jan Möbius's avatar
Jan Möbius committed
251
                  diffuse_color,
252 253 254 255 256
                  specular_color;

  ambient_color  = 0.2f * materialColorPaper_;
  diffuse_color  = 0.5f * materialColorPaper_;
  specular_color = 0.8f * materialColorPaper_;
257 258 259
  ambient_color[3] = 1.0f;
  diffuse_color[3] = 1.0f;
  specular_color[3] = 1.0f;
Jan Möbius's avatar
Jan Möbius committed
260

Jan Möbius's avatar
Jan Möbius committed
261
  // Set background color
262
  PluginFunctions::setBackColor( backgroundColorPaper_ );
Jan Möbius's avatar
Jan Möbius committed
263

Jan Möbius's avatar
Jan Möbius committed
264 265 266
  // =============================================================================
  // Apply to all objects
  // =============================================================================
Jan Möbius's avatar
 
Jan Möbius committed
267
  for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; o_it != PluginFunctions::objectsEnd(); ++o_it) {
Jan Möbius's avatar
Jan Möbius committed
268
    MaterialNode* mat = o_it->materialNode();
269
    mat->set_base_color( baseColorPaper_ );
Jan Möbius's avatar
Jan Möbius committed
270 271 272
    mat->set_ambient_color(ambient_color);
    mat->set_diffuse_color(diffuse_color);
    mat->set_specular_color(specular_color);
273
    mat->set_line_width( lineWidthPaper_ );
Jan Möbius's avatar
Jan Möbius committed
274
  }
Jan Möbius's avatar
Jan Möbius committed
275

Jan Möbius's avatar
 
Jan Möbius committed
276
  emit updateView();
Jan Möbius's avatar
 
Jan Möbius committed
277 278
}

279

Jan Möbius's avatar
 
Jan Möbius committed
280 281
//-----------------------------------------------------------------------------

282 283 284 285
/** \brief Set the backgroundColor
 *
 * @param _color a color
 */
Jan Möbius's avatar
 
Jan Möbius committed
286
void ColorPlugin::setBackgroundColor( Vector _color ) {
Jan Möbius's avatar
Jan Möbius committed
287
  emit scriptInfo( "setBackgroundColor()" );
Jan Möbius's avatar
Jan Möbius committed
288
  emit showStatusMessage( tr("Set background color"), 4000 );
Jan Möbius's avatar
Jan Möbius committed
289

Jan Möbius's avatar
 
Jan Möbius committed
290 291 292 293 294
  ACG::Vec4f color;
  color[0] = _color[0];
  color[1] = _color[1];
  color[2] = _color[2];
  color[3] = 1.0;
Jan Möbius's avatar
Jan Möbius committed
295

Jan Möbius's avatar
 
Jan Möbius committed
296 297 298
  PluginFunctions::setBackColor(color);
}

299 300
//-----------------------------------------------------------------------------

301 302 303 304 305
/** Sets the emissive color of an object
 *
 * @param _objectId  Id of an Object
 * @param _color     Color to be set
 */
306 307 308 309 310 311 312 313 314 315 316
void ColorPlugin::setObjectEmissiveColor(int _objectId , Vector4 _color) {

  BaseObjectData* object;
  if ( ! PluginFunctions::getObject(_objectId,object) ) {
    return;
  }

  OpenMesh::Vec4f tmp = OpenMesh::Vec4f(_color);
  object->materialNode()->set_base_color(tmp);

}
Jan Möbius's avatar
 
Jan Möbius committed
317

318 319
//-----------------------------------------------------------------------------

320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370
/** Sets the ambient color of an object
 *
 * @param _objectId  Id of an Object
 * @param _color     Color to be set
 */
void ColorPlugin::setObjectAmbientColor(int _objectId , Vector4 _color) {
  BaseObjectData* object;
  if ( ! PluginFunctions::getObject(_objectId,object) ) {
    return;
  }

  OpenMesh::Vec4f tmp = OpenMesh::Vec4f(_color);
  object->materialNode()->set_ambient_color(tmp);
}

//-----------------------------------------------------------------------------

/** Sets the diffuse color of an object
 *
 * @param _objectId  Id of an Object
 * @param _color     Color to be set
 */
void ColorPlugin::setObjectDiffuseColor(int _objectId , Vector4 _color) {
  BaseObjectData* object;
  if ( ! PluginFunctions::getObject(_objectId,object) ) {
    return;
  }

  OpenMesh::Vec4f tmp = OpenMesh::Vec4f(_color);
  object->materialNode()->set_diffuse_color(tmp);
}

//-----------------------------------------------------------------------------

/** Sets the specular color of an object
 *
 * @param _objectId  Id of an Object
 * @param _color     Color to be set
 */
void ColorPlugin::setObjectSpecularColor(int _objectId , Vector4 _color) {
  BaseObjectData* object;
  if ( ! PluginFunctions::getObject(_objectId,object) ) {
    return;
  }

  OpenMesh::Vec4f tmp = OpenMesh::Vec4f(_color);
  object->materialNode()->set_specular_color(tmp);
}

//-----------------------------------------------------------------------------

371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623
/** \brief Generate an icon with given color
 *
 * @param _color a color vector
 * @return an icon
 */
QIcon ColorPlugin::generateIcon(OpenMesh::Vec4f _color){

  QColor color;
  color.setRgbF(_color[0], _color[1], _color[2], _color[3] );

  QPixmap pic(32,32);
  pic.fill( color );

  return QIcon( pic );
}


//-----------------------------------------------------------------------------

/** \brief Generate an icon with given color
 *
 * @param _color a color
 * @return the icon
 */
QIcon ColorPlugin::generateIcon(QRgb _color){

  QColor color(_color);

  QPixmap pic(32,32);
  pic.fill( color );

  return QIcon( pic );
}


//-----------------------------------------------------------------------------

/** \brief Get the color of an icon
 *
 * @param _icon an icon
 * @return its color
 */
QRgb ColorPlugin::getIconColor(QIcon _icon){

  QRgb rgb = _icon.pixmap(32,32).toImage().pixel(0,0);

  return rgb;
}


//-----------------------------------------------------------------------------

/** \brief convert an icons color to a Vec4f
 *
 * @param _icon an icon
 * @param _color reference to a color vector
 */
void ColorPlugin::setNewColor(QIcon _icon, OpenMesh::Vec4f& _color){

  QColor color( getIconColor(_icon) );

  _color[0] = color.redF();
  _color[1] = color.greenF();
  _color[2] = color.blueF();
  _color[3] = color.alphaF();
}

//-----------------------------------------------------------------------------

/** \brief show a colorDialog and store the chosen value in the icon of the sender()
 *
 */
void ColorPlugin::getColorDialog(){

  QPushButton* button = dynamic_cast< QPushButton* > ( sender() );

  if (button != 0){

    bool ok;

    QRgb newColor = QColorDialog::getRgba ( getIconColor( button->icon() ) , &ok );

    if (ok)
      button->setIcon( generateIcon(newColor) );

  }
}


//-----------------------------------------------------------------------------

/** \brief generate an optionsWidget to change color presets
 *
 * @param _widget reference to the generated widget
 * @return return true if the widget was successfully generated
 */
bool ColorPlugin::initializeOptionsWidget(QWidget*& _widget){

  if (optionsWidget_ == 0){

    optionsWidget_ = new ColorOptions();

    //connect the signals
    connect(optionsWidget_->backgroundDefault,      SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
    connect(optionsWidget_->backgroundPaper,        SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
    connect(optionsWidget_->backgroundPresentation, SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );

    connect(optionsWidget_->baseDefault,      SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
    connect(optionsWidget_->basePaper,        SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
    connect(optionsWidget_->basePresentation, SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );

    connect(optionsWidget_->materialDefault,      SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
    connect(optionsWidget_->materialPaper,        SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
    connect(optionsWidget_->materialPresentation, SIGNAL( clicked() ), this, SLOT( getColorDialog() ) );
  }

  //put values into the optionsWidget
  optionsWidget_->backgroundDefault->setIcon( generateIcon( backgroundColorDefault_ ) );
  optionsWidget_->backgroundPaper->setIcon( generateIcon( backgroundColorPaper_ ) );
  optionsWidget_->backgroundPresentation->setIcon( generateIcon( backgroundColorPresentation_ ) );

  optionsWidget_->baseDefault->setIcon( generateIcon( baseColorDefault_ ) );
  optionsWidget_->basePaper->setIcon( generateIcon( baseColorPaper_ ) );
  optionsWidget_->basePresentation->setIcon( generateIcon( baseColorPresentation_ ) );

  optionsWidget_->materialDefault->setIcon( generateIcon( materialColorDefault_ ) );
  optionsWidget_->materialPaper->setIcon( generateIcon( materialColorPaper_ ) );
  optionsWidget_->materialPresentation->setIcon( generateIcon( materialColorPresentation_ ) );

  optionsWidget_->lineDefault->setValue( lineWidthDefault_ );
  optionsWidget_->linePaper->setValue( lineWidthPaper_ );
  optionsWidget_->linePresentation->setValue( lineWidthPresentation_ );

  _widget = optionsWidget_;

  return true;
}


//-----------------------------------------------------------------------------

/** \brief Store the changed color presets when the apply Button was hit
 *
 */
void ColorPlugin::applyOptions(){

  setNewColor(optionsWidget_->backgroundDefault->icon(),      backgroundColorDefault_);
  setNewColor(optionsWidget_->backgroundPaper->icon(),        backgroundColorPaper_);
  setNewColor(optionsWidget_->backgroundPresentation->icon(), backgroundColorPresentation_);

  setNewColor(optionsWidget_->baseDefault->icon(),      baseColorDefault_);
  setNewColor(optionsWidget_->basePaper->icon(),        baseColorPaper_);
  setNewColor(optionsWidget_->basePresentation->icon(), baseColorPresentation_);

  setNewColor(optionsWidget_->materialDefault->icon(),      materialColorDefault_);
  setNewColor(optionsWidget_->materialPaper->icon(),        materialColorPaper_);
  setNewColor(optionsWidget_->materialPresentation->icon(), materialColorPresentation_);

  lineWidthDefault_      = optionsWidget_->lineDefault->value();
  lineWidthPaper_        = optionsWidget_->linePaper->value();
  lineWidthPresentation_ = optionsWidget_->linePresentation->value();
}


//-----------------------------------------------------------------------------

/** \brief convert between uint and Vec4f
 *
 * @param _color given color
 * @param _vector color vector to convert to
 */
void ColorPlugin::convertColor(uint _color, OpenMesh::Vec4f& _vector){

  QColor color;
  color.setRgba( _color );

  _vector[0] = color.redF();
  _vector[1] = color.greenF();
  _vector[2] = color.blueF();
  _vector[3] = color.alphaF();
}


//-----------------------------------------------------------------------------

/** \brief convert between uint and Vec4f
 *
 * @param _vector reference to a color vector
 * @return same color as uint
 */
uint ColorPlugin::convertColor(OpenMesh::Vec4f& _vector){

  QColor color;
  color.setRgbF(_vector[0], _vector[1], _vector[2], _vector[3] );

  return (uint) color.rgba();
}


//-----------------------------------------------------------------------------

/** \brief read color preset from ini file
 *
 * @param _ini file to read from
 */
void ColorPlugin::loadIniFileOptions(INIFile& _ini){

  if ( _ini.section_exists("ColorPlugin") ){

    uint color = 0;

    if ( _ini.get_entry( color, "ColorPlugin" , "backgroundColorDefault") )
      convertColor( color, backgroundColorDefault_ );
    if ( _ini.get_entry( color, "ColorPlugin" , "backgroundColorPaper") )
      convertColor( color, backgroundColorPaper_ );
    if ( _ini.get_entry( color, "ColorPlugin" , "backgroundColorPresentation") )
      convertColor( color, backgroundColorPresentation_ );

    if ( _ini.get_entry( color, "ColorPlugin" , "baseColorDefault") )
      convertColor( color, baseColorDefault_ );
    if ( _ini.get_entry( color, "ColorPlugin" , "baseColorPaper") )
      convertColor( color, baseColorPaper_ );
    if ( _ini.get_entry( color, "ColorPlugin" , "baseColorPresentation") )
      convertColor( color, baseColorPresentation_ );

    if ( _ini.get_entry( color, "ColorPlugin" , "materialColorDefault") )
      convertColor( color, materialColorDefault_ );
    if ( _ini.get_entry( color, "ColorPlugin" , "materialColorPaper") )
      convertColor( color, materialColorPaper_ );
    if ( _ini.get_entry( color, "ColorPlugin" , "materialColorPresentation") )
      convertColor( color, materialColorPresentation_ );

    double width;

    if ( _ini.get_entry( width, "ColorPlugin" , "lineWidthDefault") )
      lineWidthDefault_ = width;
    if ( _ini.get_entry( width, "ColorPlugin" , "lineWidthPaper") )
      lineWidthPaper_ = width;
    if ( _ini.get_entry( width, "ColorPlugin" , "lineWidthPresentation") )
      lineWidthPresentation_ = width;

  }
}


//-----------------------------------------------------------------------------

/** \brief Store current color preset to an ini file
 *
 * @param _ini file to store color presets in
 */
void ColorPlugin::saveIniFileOptions(INIFile& _ini){
std::cerr << "save to ini file\n";
624

625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642

  _ini.add_entry("ColorPlugin","backgroundColorDefault",      convertColor( backgroundColorDefault_ )  );
  _ini.add_entry("ColorPlugin","backgroundColorPaper",        convertColor( backgroundColorPaper_ )  );
  _ini.add_entry("ColorPlugin","backgroundColorPresentation", convertColor( backgroundColorPresentation_ )  );

  _ini.add_entry("ColorPlugin","baseColorDefault",      convertColor( baseColorDefault_ )  );
  _ini.add_entry("ColorPlugin","baseColorPaper",        convertColor( baseColorPaper_ )  );
  _ini.add_entry("ColorPlugin","baseColorPresentation", convertColor( baseColorPresentation_ )  );

  _ini.add_entry("ColorPlugin","materialColorDefault",      convertColor( materialColorDefault_ )  );
  _ini.add_entry("ColorPlugin","materialColorPaper",        convertColor( materialColorPaper_ )  );
  _ini.add_entry("ColorPlugin","materialColorPresentation", convertColor( materialColorPresentation_ )  );

  _ini.add_entry("ColorPlugin","lineWidthDefault",      lineWidthDefault_ );
  _ini.add_entry("ColorPlugin","lineWidthPaper",        lineWidthPaper_   );
  _ini.add_entry("ColorPlugin","lineWidthPresentation", lineWidthPresentation_ );
}

Matthias Möller's avatar
Matthias Möller committed
643
#if QT_VERSION < 0x050000
Jan Möbius's avatar
 
Jan Möbius committed
644
Q_EXPORT_PLUGIN2( colorplugin , ColorPlugin );
Matthias Möller's avatar
Matthias Möller committed
645 646
#endif

Jan Möbius's avatar
 
Jan Möbius committed
647