ATLAS Offline Software
VP1MaterialButton.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // //
8 // Implementation of class VP1MaterialButton //
9 // //
10 // Author: Thomas Kittelmann <Thomas.Kittelmann@cern.ch> //
11 // //
12 // Initial version: September 2007 //
13 // //
15 
16 //Todo:
17 // ~32 colours directly in simple gui + more button launching colour browser.
18 // mode switching closes all open colour dialogs!
19 
22 #include "VP1Base/VP1QtUtils.h"
24 #include "ui_vp1materialbuttonform.h"
25 #include "VP1Base/VP1Serialise.h"
26 #include "VP1Base/VP1Deserialise.h"
27 
28 #include "Inventor/nodes/SoSwitch.h"
29 #include "Inventor/nodes/SoCube.h"
30 #include "Inventor/nodes/SoCone.h"
31 #include "Inventor/nodes/SoComplexity.h"
32 #include "Inventor/nodes/SoDrawStyle.h"
33 #include "Inventor/nodes/SoMaterial.h"
34 #include <Inventor/nodes/SoSeparator.h>
35 
36 #include <QTimer>
37 #include <QByteArray>
38 #include <QBuffer>
39 #include <QDataStream>
40 #include <QMouseEvent>
41 #include <QDragEnterEvent>
42 #include <QDropEvent>
43 #include <QShortcut>
44 #include <QMimeData>
45 #include <QDrag>
46 
47 //____________________________________________________________________
49 public:
51 
53 
54  bool simplemode;
55 
56  int dim;
57 
58  QString materialtext;
59  QWidget * editwindow;
60  SoMaterial * preview_material;
61  Ui::VP1MaterialButtonForm editwindow_ui;
62  void initEditWindow();
63 
64  SoQtRenderArea * renderarea;
65  SoSwitch * previewswitch;
66 
67  void applyValuesToMaterial(SoMaterial*, bool preview = false);
68  QList<SoMaterial*> handledmaterials;
69 
70  static SbColor qcol2sbcol(const QColor&);
71  static QColor sbcol2qcol(const SbColor&);
72  static double distSq(const QColor& a, const QColor& b);
73  static bool equal(const QColor& a, const QColor& b, const double& tol = 1.0e-6);
74 
75  //Settings returned from the gui, with correct dependency on simplemode:
76  QColor guiAmbientColour() const;
77  QColor guiDiffuseColour() const;
78  QColor guiSpecularColour() const;
79  QColor guiEmissiveColour() const;
80  int guiTransparency() const;
81  int guiShininess() const;
82 
83  //Last applied settings:
90  int lastapplied_brightness;//redundant but we use it to give exact
91  //reset functionality to simple mode.
92 
93  QString printFloat(const double& d) {
94  if (d==0)
95  return "0";
96  QString s = QString::number(d,'f',5);
97  while (s.right(1)=="0"&&s.contains("."))
98  s = s.left(s.count()-1);
99  if (s=="0.") return "0";
100  if (s=="1.") return "1";
101  return s;
102  }
103  QString toSbColTxt(const QColor& c) { return "SbColor("+printFloat(c.redF())+","
104  +printFloat(c.greenF())+","+printFloat(c.blueF())+")";}
106  bool previewEqualToLastApplied() const;
108  void adaptGuiForMode();
111 
112  QColor emissiveColourFromSimpleParameters(const QColor& simpleColour, const double& brightness) const;
113  double brightnessEstimateFromDetailedParameters( const QColor& diffuseColour, const QColor& emissiveColour ) const;
114 
116  void blockGuiSignals(bool);
117 
118  static QColor simpleAmbient() { return QColor::fromRgbF(0.2,0.2,0.2); }
119  static QColor simpleSpecular() { return Qt::black; }
120  static int simpleShininess() { return 0; }
121 };
122 
123 //____________________________________________________________________
125  : VP1MaterialButtonBase(parent,0,"VP1MaterialButton"), m_d(new Imp)
126 {
127  m_d->simplemode = false;
128  m_d->dim = dim;
129  m_d->theclass = this;
130  m_d->editwindow = 0;
131  m_d->preview_material = 0;
132  m_d->renderarea = 0;
133  m_d->previewswitch = 0;
134  m_d->blockcount = 0;
135  connect(this,SIGNAL(clicked()),this,SLOT(showEditMaterialDialog()));
136 
137  m_d->lastapplied_ambient = QColor::fromRgbF(0.2,0.2,0.2);
138  m_d->lastapplied_diffuse = QColor::fromRgbF(0.8,0.8,0.8);
139  m_d->lastapplied_specular = Qt::black;
140  m_d->lastapplied_emissive = Qt::black;
144  setMaterialText("");
145  setAcceptDrops(true);
146  QTimer::singleShot(0, this, SLOT(updateButton()));
147 }
148 
149 //____________________________________________________________________
151 {
153  setUpdatesEnabled(false);
154  if (m_d->renderarea) {
155  m_d->renderarea->setAutoRedraw(false);
156  SoNode * root = m_d->renderarea->getSceneGraph();
157  root->ref();
158  m_d->renderarea->setSceneGraph(0);
159  delete m_d->renderarea;
160  root->unref();
161  }
162  delete m_d->editwindow;
163  delete m_d;
164 }
165 
166 //____________________________________________________________________
171 double VP1MaterialButton::lastAppliedTransparency() const { return std::max<double>(0.0,std::min<double>(1.0,m_d->lastapplied_transparency/100.0)); }
172 double VP1MaterialButton::lastAppliedShininess() const { return std::max<double>(0.0,std::min<double>(1.0,m_d->lastapplied_shininess/100.0)); }
173 double VP1MaterialButton::lastAppliedBrightness() const { return std::max<double>(0.0,std::min<double>(1.0,m_d->lastapplied_brightness/100.0)); }
174 
176  if (!m_d->editwindow)
177  m_d->initEditWindow();
178  return *(m_d->editwindow);
179 }
180 
181 //____________________________________________________________________
183 {
184  if (editWindow().isHidden())
185  editWindow().show();
186  else
187  editWindow().hide();
188 }
189 
190 //____________________________________________________________________
192 {
193  m_d->materialtext = ( t.isEmpty() ? "Edit Material" : "Edit Material "+t );
194  if (m_d->editwindow)
195  m_d->editwindow->setWindowTitle(m_d->materialtext);
196  setToolTip(m_d->materialtext);
197 }
198 
199 //____________________________________________________________________
201 {
203 
204  if (VP1Msg::verbose()) {
205  theclass->messageVerbose("Copied values from material: "
206  "diffuse="+str(lastapplied_diffuse)
207  +", ambient="+str(lastapplied_ambient)
208  +", specular="+str(lastapplied_specular)
209  +", emissive="+str(lastapplied_emissive)
210  +", shininess="+str(lastapplied_shininess)
211  +", transparency="+str(lastapplied_transparency)
212  );
213  }
214 
215  if (editwindow) {
216  if (VP1Msg::verbose()){
217  theclass->messageVerbose(" => and updating preview.");
218  }
219  blockGuiSignals(true);
220  editwindow_ui.colbutton_ambient->setColor(lastapplied_ambient);
221  editwindow_ui.colbutton_diffuse->setColor(lastapplied_diffuse);
222  editwindow_ui.colbutton_specular->setColor(lastapplied_specular);
223  editwindow_ui.colbutton_emissive->setColor(lastapplied_emissive);
224  editwindow_ui.slider_shininess->setValue(lastapplied_shininess);
225  editwindow_ui.label_num_shininess->setNum(lastapplied_shininess);
226  editwindow_ui.colbutton_simple_colour->setColor(lastapplied_diffuse);
227  editwindow_ui.slider_simple_transparency->setValue(lastapplied_transparency);
228  if (lastapplied_brightness!=-1) {
229  editwindow_ui.slider_simple_brightness->setValue(lastapplied_brightness);
230  editwindow_ui.label_num_simple_brightness->setNum(lastapplied_brightness);
231  }
232  editwindow_ui.slider_transparency->setValue(lastapplied_transparency);
233  editwindow_ui.label_num_transparency->setNum(lastapplied_transparency);
234  editwindow_ui.label_num_simple_transparency->setNum(lastapplied_transparency);
235  blockGuiSignals(false);
237  }
238  theclass->apply();
240 }
241 
242 //____________________________________________________________________
244 {
245  if (!m) {
246  message("VP1MaterialButton::copyValuesFromMaterial Error: Passed material is null!!");
247  return;
248  }
249  m->ref();
250  if (m->ambientColor.getNum()!=1
251  ||m->diffuseColor.getNum()!=1
252  ||m->specularColor.getNum()!=1
253  ||m->emissiveColor.getNum()!=1
254  ||m->transparency.getNum()!=1
255  ||m->shininess.getNum()!=1) {
256  message("VP1MaterialButton::copyValuesFromMaterial Error: Passed material must have exactly one value in each of the 6 fields!!");
257  m->unrefNoDelete();
258  return;
259  }
260 
261  int new_shininess = std::min(std::max(0,static_cast<int>(m->shininess[0]*100.0f+0.5f)),100);
262  int new_transparency = std::min(std::max(0,static_cast<int>(m->transparency[0]*100.0f+0.5f)),100);
263 
264  m_d->lastapplied_ambient = m_d->sbcol2qcol(m->ambientColor[0]);
265  m_d->lastapplied_diffuse = m_d->sbcol2qcol(m->diffuseColor[0]);
266  m_d->lastapplied_specular = m_d->sbcol2qcol(m->specularColor[0]);
267  m_d->lastapplied_emissive = m_d->sbcol2qcol(m->emissiveColor[0]);
268  m_d->lastapplied_shininess = new_shininess;
269  m_d->lastapplied_transparency = new_transparency;
270  m_d->lastapplied_brightness = std::max<int>(0,std::min<int>(100,static_cast<int>(100*m_d->brightnessEstimateFromDetailedParameters(m_d->lastapplied_diffuse,m_d->lastapplied_emissive)+0.5)));
271 
272  m->unrefNoDelete();
273 
275 
276  emit lastAppliedChanged();
277 }
278 
279 //____________________________________________________________________
281 {
282  if (b)
283  ++blockcount;
284  else
285  --blockcount;
286  if ( (b&&blockcount==1) || (!b&&blockcount==0) ) {
287  editwindow_ui.colbutton_ambient->blockSignals(b);
288  editwindow_ui.colbutton_diffuse->blockSignals(b);
289  editwindow_ui.colbutton_specular->blockSignals(b);
290  editwindow_ui.colbutton_emissive->blockSignals(b);
291  editwindow_ui.slider_shininess->blockSignals(b);
292  editwindow_ui.colbutton_simple_colour->blockSignals(b);
293  editwindow_ui.slider_simple_brightness->blockSignals(b);
294  editwindow_ui.slider_simple_transparency->blockSignals(b);
295  editwindow_ui.slider_transparency->blockSignals(b);
296  editwindow_ui.radioButton_cone->blockSignals(b);
297  editwindow_ui.radioButton_lines->blockSignals(b);
298  editwindow_ui.radioButton_box->blockSignals(b);
299  editwindow_ui.pushButton_apply->blockSignals(b);
300  editwindow_ui.pushButton_reset->blockSignals(b);
301  editwindow_ui.pushButton_switch_mode->blockSignals(b);
302  }
303 }
304 
305 
306 //____________________________________________________________________
308 {
309  if (editwindow)
310  return;
311  if(VP1Msg::verbose()){
312  theclass->messageVerbose("Initialising material editor dialog");
313  }
314  editwindow = new QWidget(0,Qt::WindowStaysOnTopHint);
315  editwindow_ui.setupUi(editwindow);
316  editwindow_ui.colbutton_ambient->setColor(lastapplied_ambient);
317  editwindow_ui.colbutton_diffuse->setColor(lastapplied_diffuse);
318  editwindow_ui.colbutton_specular->setColor(lastapplied_specular);
319  editwindow_ui.colbutton_emissive->setColor(lastapplied_emissive);
320  editwindow_ui.slider_shininess->setValue(lastapplied_shininess);
321  editwindow_ui.label_num_shininess->setNum(lastapplied_shininess);
322  editwindow_ui.slider_transparency->setValue(lastapplied_transparency);
323  editwindow_ui.slider_simple_transparency->setValue(lastapplied_transparency);
324  editwindow_ui.label_num_transparency->setNum(lastapplied_transparency);
325  editwindow_ui.label_num_simple_transparency->setNum(lastapplied_transparency);
326  editwindow_ui.slider_simple_brightness->setValue(lastapplied_brightness);
327  editwindow_ui.label_num_simple_brightness->setNum(lastapplied_brightness);
328  editwindow_ui.colbutton_simple_colour->setColor(lastapplied_diffuse);
329 
330  #if defined BUILDVP1LIGHT
331  bool checkDisallowMultipleChannels = VP1QtUtils::expertSettingIsOn("general","ExpertSettings/VP1_DISALLOW_MULTIPLE_CHANNELS");
332  #else
333  bool checkDisallowMultipleChannels = VP1QtUtils::environmentVariableIsOn("VP1_DISALLOW_MULTIPLE_CHANNELS");
334  #endif
335 
336  if (!checkDisallowMultipleChannels) {
337  SoSeparator * userroot = new SoSeparator;
338  SoComplexity * complexity = new SoComplexity;
339  complexity->value = 1.0;
340  userroot->addChild(complexity);
341  preview_material = new SoMaterial;
342  userroot->addChild(preview_material);
343  previewswitch = new SoSwitch;
344  previewswitch->addChild(new SoCube);
345  previewswitch->addChild(new SoCone);
346  SoSeparator * linesep = new SoSeparator;
347  SoDrawStyle * linedrawstyle = new SoDrawStyle;
348  linedrawstyle->style = SoDrawStyleElement::LINES;
349  linedrawstyle->lineWidth = 2;
350  linesep->addChild(linedrawstyle);
351  linesep->addChild(new SoCube);
352  previewswitch->addChild(linesep);
353  previewswitch->whichChild = 0;
354  userroot->addChild(previewswitch);
355  VP1ExaminerViewer * viewer = new VP1ExaminerViewer(editwindow_ui.widget_3dpreview,false);
356  viewer->setDecoration(false);
357  viewer->removeDecorationMenuOption();
358  viewer->setTransparencyType( SoGLRenderAction::DELAYED_BLEND );
359  viewer->viewAll();
360  renderarea=viewer;
361  renderarea->setAntialiasing(true,4);
362  renderarea->setSceneGraph(userroot);
363  renderarea->setBackgroundColor(SbColor(0.0f, 0.0f, 0.0f));
364  } else {
365  //Put some sort of warning in that 'preview disabled by VP1_DISALLOW_MULTIPLE_CHANNELS env. var.'
366  //int editwindow_ui.widget_3dpreview. Fixme.
367  }
368 
369  connect(editwindow_ui.colbutton_ambient,SIGNAL(colorChanged(const QColor&)),theclass,SLOT(updatePreview()));
370  connect(editwindow_ui.colbutton_diffuse,SIGNAL(colorChanged(const QColor&)),theclass,SLOT(updatePreview()));
371  connect(editwindow_ui.colbutton_specular,SIGNAL(colorChanged(const QColor&)),theclass,SLOT(updatePreview()));
372  connect(editwindow_ui.colbutton_emissive,SIGNAL(colorChanged(const QColor&)),theclass,SLOT(updatePreview()));
373  connect(editwindow_ui.slider_shininess,SIGNAL(valueChanged(int)),theclass,SLOT(updatePreview()));
374  connect(editwindow_ui.colbutton_simple_colour,SIGNAL(colorChanged(const QColor&)),theclass,SLOT(updatePreview()));
375  connect(editwindow_ui.slider_simple_brightness,SIGNAL(valueChanged(int)),theclass,SLOT(updatePreview()));
376  //Transparency sliders needs to be coordinated:
377  connect(editwindow_ui.slider_simple_transparency,SIGNAL(valueChanged(int)),theclass,SLOT(transparencyChanged()));
378  connect(editwindow_ui.slider_transparency,SIGNAL(valueChanged(int)),theclass,SLOT(transparencyChanged()));
379 
380  editwindow_ui.radioButton_cone->setChecked(true);
381 
382  switchModeBasedOnLastApplied();
383 
384  theclass->updatePreviewSceneAndBgd();
385 
386  connect(editwindow_ui.radioButton_cone,SIGNAL(toggled(bool)),theclass,SLOT(updatePreviewSceneAndBgd()));
387  connect(editwindow_ui.radioButton_box,SIGNAL(toggled(bool)),theclass,SLOT(updatePreviewSceneAndBgd()));
388 
389  theclass->updatePreview();
390  setLastAppliedFromCurrent();
391 
392  connect(editwindow_ui.pushButton_apply,SIGNAL(clicked()),theclass,SLOT(apply()));
393  connect(editwindow_ui.pushButton_reset,SIGNAL(clicked()),theclass,SLOT(reset()));
394  connect(editwindow_ui.pushButton_switch_mode,SIGNAL(clicked()),theclass,SLOT(switchMode()));
395 
396  adaptGuiForMode();
397 
398  connect(new QShortcut(QKeySequence(Qt::Key_Escape), editwindow),
399  SIGNAL(activated()),editwindow,SLOT(hide()));
400 
401 }
402 
403 
404 //____________________________________________________________________
405 void VP1MaterialButton::Imp::applyValuesToMaterial(SoMaterial* m, bool preview)
406 {
407  if (!m)
408  return;
409  bool save = m->enableNotify(false);
410  if (preview) {
411  //Take value directly from gui:
412  if (!editwindow)
413  initEditWindow();
414  m->ambientColor.setValue(qcol2sbcol(guiAmbientColour()));
415  m->diffuseColor.setValue(qcol2sbcol(guiDiffuseColour()));
416  m->specularColor.setValue(qcol2sbcol(guiSpecularColour()));
417  m->emissiveColor.setValue(qcol2sbcol(guiEmissiveColour()));
418  m->shininess.setValue(std::max(0.0f,std::min(1.0f,guiShininess()/100.0f)));
419  m->transparency.setValue(std::max(0.0f,std::min(1.0f,guiTransparency()/100.0f)));
420  } else {
421  //Take values from stored "last" settings:
422  m->ambientColor.setValue(qcol2sbcol(lastapplied_ambient));
423  m->diffuseColor.setValue(qcol2sbcol(lastapplied_diffuse));
424  m->specularColor.setValue(qcol2sbcol(lastapplied_specular));
425  m->emissiveColor.setValue(qcol2sbcol(lastapplied_emissive));
426  m->shininess.setValue(std::max(0.0f,std::min(1.0f,lastapplied_shininess/100.0f)));
427  m->transparency.setValue(std::max(0.0f,std::min(1.0f,lastapplied_transparency/100.0f)));
428  }
429  if (save) {
430  m->enableNotify(true);
431  m->touch();
432  }
433 }
434 
435 //____________________________________________________________________
437 {
438  if (!m||m_d->handledmaterials.contains(m))
439  return false;
440  m->ref();
441  m_d->handledmaterials << m;
443  return true;
444 }
445 
446 //____________________________________________________________________
448 {
449  if (!m)
450  return false;
451  m->ref();
453  bool ok = handleMaterial(m);
454  m->unrefNoDelete();
455  return ok;
456 }
457 
458 //____________________________________________________________________
460 {
461  if (!m||!m_d->handledmaterials.contains(m))
462  return false;
463  m_d->handledmaterials.removeAll(m);
464  m->unref();
465  return true;
466 }
467 
468 //____________________________________________________________________
470 {
471  for (SoMaterial * m : m_d->handledmaterials)
472  m->unref();
473  m_d->handledmaterials.clear();
474 }
475 
476 //____________________________________________________________________
478 {
479  if (!m_d->editwindow)
480  return;
481  if (m_d->preview_material)
484 }
485 
486 //____________________________________________________________________
488 {
490  return;
491 
492  if (m_d->editwindow_ui.radioButton_box->isChecked())
493  m_d->previewswitch->whichChild = 0;
494  else
495  m_d->previewswitch->whichChild = (m_d->editwindow_ui.radioButton_cone->isChecked() ? 1 : 2);
496 }
497 
498 //____________________________________________________________________
500 {
501  return SbColor( col.red()/255.0, col.green()/255.0, col.blue()/255.0 );
502 }
503 
504 //____________________________________________________________________
506 {
507  float r,g,b;
508  col.getValue(r,g,b);
509  return QColor::fromRgbF( r,g,b );
510 }
511 
512 //____________________________________________________________________
513 double VP1MaterialButton::Imp::distSq(const QColor& a, const QColor& b)
514 {
515  const double dRed(a.redF()-b.redF());
516  const double dGreen(a.greenF()-b.greenF());
517  const double dBlue(a.blueF()-b.blueF());
518  return dRed*dRed+dGreen*dGreen+dBlue*dBlue;
519 }
520 
521 //____________________________________________________________________
522 bool VP1MaterialButton::Imp::equal(const QColor& a, const QColor& b, const double& tol)
523 {
524  return a == b || distSq(a,b) < tol;
525 }
526 
527 //____________________________________________________________________
528 QColor VP1MaterialButton::Imp::emissiveColourFromSimpleParameters(const QColor& simpleColour, const double& brightness) const
529 {
530  return QColor::fromRgbF(std::min(1.0,std::max(0.0,brightness*simpleColour.redF())),
531  std::min(1.0,std::max(0.0,brightness*simpleColour.greenF())),
532  std::min(1.0,std::max(0.0,brightness*simpleColour.blueF())));
533 }
534 
535 //____________________________________________________________________
536 double VP1MaterialButton::Imp::brightnessEstimateFromDetailedParameters( const QColor& diffuseColour, const QColor& emissiveColour ) const
537 {
538  double df_r(diffuseColour.redF()),df_g(diffuseColour.greenF()),df_b(diffuseColour.blueF());
539  double em_r(emissiveColour.redF()),em_g(emissiveColour.greenF()),em_b(emissiveColour.blueF());
540  const double dotp = em_r*df_r + em_g*df_g + em_b*df_b;
541  const double df_mag2 = df_r*df_r + df_g*df_g + df_b*df_b;
542  return std::max<double>(0.0,std::min<double>(100.0,dotp/df_mag2));
543 }
544 
545 //____________________________________________________________________
547 {
548  return simplemode ? simpleAmbient() : editwindow_ui.colbutton_ambient->color();
549 }
550 
551 //____________________________________________________________________
553 {
554  return simplemode ? editwindow_ui.colbutton_simple_colour->color() : editwindow_ui.colbutton_diffuse->color();
555 }
556 
557 //____________________________________________________________________
559 {
560  return simplemode ? simpleSpecular() : editwindow_ui.colbutton_specular->color();
561 }
562 
563 //____________________________________________________________________
565 {
566  if (simplemode)
567  return emissiveColourFromSimpleParameters(editwindow_ui.colbutton_simple_colour->color(),editwindow_ui.slider_simple_brightness->value()/100.0);
568  else
569  return editwindow_ui.colbutton_emissive->color();
570 }
571 
572 //____________________________________________________________________
574 {
575  return simplemode ? editwindow_ui.slider_transparency->value() : editwindow_ui.slider_simple_transparency->value();
576 }
577 
578 
579 //____________________________________________________________________
581 {
582  return simplemode ? simpleShininess() : editwindow_ui.slider_shininess->value();
583 }
584 
585 //____________________________________________________________________
587 {
588  if (!editwindow)
589  return;
590  lastapplied_ambient = guiAmbientColour();
591  lastapplied_diffuse = guiDiffuseColour();
592  lastapplied_specular = guiSpecularColour();
593  lastapplied_emissive = guiEmissiveColour();
594  lastapplied_shininess = guiShininess();
595  lastapplied_transparency = guiTransparency();
596  lastapplied_brightness = std::max<int>(0,std::min<int>(100,static_cast<int>(100*brightnessEstimateFromDetailedParameters(lastapplied_diffuse,lastapplied_emissive)+0.5)));
597  updateApplyResetButtons();
598 
599  emit theclass->lastAppliedChanged();
600 
601 }
602 
603 //____________________________________________________________________
605 {
606  if (!editwindow)
607  return false;
608  return (equal(lastapplied_ambient,guiAmbientColour())
609  &&equal(lastapplied_diffuse,guiDiffuseColour())
610  &&equal(lastapplied_specular,guiSpecularColour())
611  &&equal(lastapplied_emissive,guiEmissiveColour())
612  &&lastapplied_shininess==guiShininess()
613  &&lastapplied_transparency==guiTransparency());
614 }
615 
616 //____________________________________________________________________
618 {
619  if (!editwindow)
620  return;
621  if (previewEqualToLastApplied()) {
622  editwindow_ui.pushButton_apply->setEnabled(false);
623  editwindow_ui.pushButton_reset->setEnabled(false);
624  } else {
625  editwindow_ui.pushButton_apply->setEnabled(true);
626  editwindow_ui.pushButton_reset->setEnabled(true);
627  }
628 
629 }
630 
631 //____________________________________________________________________
633 {
635  for (SoMaterial * m : m_d->handledmaterials)
637  updateButton();
638 }
639 
640 //____________________________________________________________________
642 {
644 }
645 
646 //____________________________________________________________________
647 QList<SoMaterial*> VP1MaterialButton::handledMaterials() const
648 {
649  return m_d->handledmaterials;
650 }
651 
652 //____________________________________________________________________
653 void VP1MaterialButton::setText ( const QString & s )
654 {
655  if (!s.isEmpty())
656  messageDebug("VP1MaterialButton::setText() called (with '"+s+"'), but not allowed");
657  //Forbidden!! Only here since Designer generated code needs it in public.
658 }
659 
660 //____________________________________________________________________
662 {
663  if (objectName().isEmpty()){
664  setObjectName("VP1MaterialButton");
665  }
666  if(VP1Msg::verbose()){
667  messageVerbose("setColButtonProperties: color=" + str(m_d->lastapplied_diffuse));
668  }
670 }
671 
672 //____________________________________________________________________
674 {
675  if (m_d->dim == dim)
676  return;
677  m_d->dim = dim;
678  updateButton();
679 }
680 
681 //____________________________________________________________________
683 {
684  QSlider * slider1(0);
685  QSlider * slider2(0);
686  if (sender()==m_d->editwindow_ui.slider_simple_transparency) {
687  slider1 = m_d->editwindow_ui.slider_simple_transparency;
688  slider2 = m_d->editwindow_ui.slider_transparency;
689  } else {
690  slider1 = m_d->editwindow_ui.slider_transparency;
691  slider2 = m_d->editwindow_ui.slider_simple_transparency;
692  }
693  bool save = slider2->blockSignals(true);
694  slider2->setValue(slider1->value());
695  slider2->blockSignals(save);
696  m_d->editwindow_ui.label_num_transparency->setNum(slider1->value());
697  m_d->editwindow_ui.label_num_simple_transparency->setNum(slider1->value());
698 
699  updatePreview();
700 }
701 
702 //____________________________________________________________________
704 {
705  if (!editwindow)
706  return;
707  editwindow_ui.stackedWidget->setCurrentWidget(simplemode?editwindow_ui.page_simple:editwindow_ui.page_detailed);
708  editwindow_ui.pushButton_switch_mode->setText("&Switch to "+QString(simplemode?"detailed":"simple")+" mode");
709  if (simplemode)
710  editwindow_ui.pushButton_switch_mode->setToolTip("Switch to detailed material editing for more options.");
711  else
712  editwindow_ui.pushButton_switch_mode->setToolTip("Switch to a simpler material editing. This might discard some information.");
713 }
714 
715 //____________________________________________________________________
717 {
718  if (!editwindow)
719  return;
720 
721  bool lastappliedaresimple(false);
722 
723  if (lastapplied_shininess==simpleShininess()
724  &&equal(lastapplied_specular,simpleSpecular())
725  &&equal(lastapplied_ambient,simpleAmbient())) {
726  //Could be simple - test if emissive can be described as a
727  //brightness multiplied by diffusive:
728  double brightness = brightnessEstimateFromDetailedParameters(lastapplied_diffuse,lastapplied_emissive);
729  if (brightness<1.0e-4) {
730  lastappliedaresimple = equal(lastapplied_emissive,Qt::black);
731  } else if (brightness>(1.0-1.0e-4)) {
732  lastappliedaresimple = equal(lastapplied_emissive,lastapplied_diffuse);
733  } else {
734  lastappliedaresimple = equal(lastapplied_emissive,
735  emissiveColourFromSimpleParameters(lastapplied_diffuse, brightness));
736  }
737  }
738 
739  if (lastappliedaresimple!=simplemode)
740  theclass->switchMode();
741 }
742 
743 
744 //____________________________________________________________________
746 {
747  if (!m_d->editwindow)
748  return;
749 
750  const bool new_simplemode = !m_d->simplemode;
751 
752  //Transparency sliders should already be updated.
753 
754  m_d->blockGuiSignals(true);
755 
756  if (new_simplemode) {
757  //Update detailed gui elements from simple gui elements. NB: All
758  //the m_d->guiXX() methods returns detailed parameters until we
759  //update m_d->simplemode below.
761  int brightness_i = std::max<int>(0,std::min<int>(100,static_cast<int>(brightness*100+0.5)));
762  QColor col = m_d->guiDiffuseColour();
763  m_d->editwindow_ui.colbutton_simple_colour->setColor(col);
764  m_d->editwindow_ui.slider_simple_brightness->setValue(brightness_i);
765  m_d->editwindow_ui.label_num_simple_brightness->setNum(brightness_i);
766  } else {
767  //Update detailed gui elements from simple gui elements. NB: All
768  //the m_d->guiXX() methods returns simple parameters until we
769  //update m_d->simplemode below.
770  m_d->editwindow_ui.colbutton_ambient->setColor(m_d->guiAmbientColour());
771  m_d->editwindow_ui.colbutton_diffuse->setColor(m_d->guiDiffuseColour());
772  m_d->editwindow_ui.colbutton_specular->setColor(m_d->guiSpecularColour());
773  m_d->editwindow_ui.colbutton_emissive->setColor(m_d->guiEmissiveColour());
774  m_d->editwindow_ui.slider_shininess->setValue(m_d->guiShininess());
775  m_d->editwindow_ui.label_num_shininess->setNum(m_d->guiShininess());
776  }
777 
778  m_d->simplemode = new_simplemode;
779  m_d->adaptGuiForMode();
780 
781  m_d->blockGuiSignals(false);
782  updatePreview();
783 }
784 
785 //____________________________________________________________________
786 SoMaterial* VP1MaterialButton::createMaterial( const QColor& col, const double& brightness, const double& transp )
787 {
788  SoMaterial * m = new SoMaterial;
789  setMaterialParameters(m,col,brightness,transp);
790  return m;
791 }
792 
793 //____________________________________________________________________
794 SoMaterial* VP1MaterialButton::createMaterial( const double& r, const double& g, double b, const double& brightness,const double& transp )
795 {
796  SoMaterial * m = new SoMaterial;
797  setMaterialParameters(m,r,g,b,brightness,transp);
798  return m;
799 }
800 
801 //____________________________________________________________________
802 void VP1MaterialButton::setMaterialParameters( SoMaterial * m, const QColor& col, const double& brightness, const double& transp )
803 {
804  setMaterialParameters( m, col.redF(), col.greenF(), col.blueF(), brightness, transp);
805 }
806 
807 //____________________________________________________________________
808 void VP1MaterialButton::setMaterialParameters( SoMaterial * m, const double& in_r, const double& in_g, const double& in_b,
809  const double& in_brightness, const double& in_transp )
810 {
811  if (!m)
812  return;
813 
814  m->ref();
815  bool save = m->enableNotify(false);
816 
817  const double r(std::max(0.0,std::min(1.0,in_r)));
818  const double g(std::max(0.0,std::min(1.0,in_g)));
819  const double b(std::max(0.0,std::min(1.0,in_b)));
820  const double brightness(std::max(0.0,std::min(1.0,in_brightness)));
821 
822 
823  m->diffuseColor.setValue(SbColor(r,g,b));
824  m->emissiveColor.setValue(SbColor(std::max(0.0f,std::min(1.0f,float(brightness*r))),
825  std::max(0.0f,std::min(1.0f,float(brightness*g))),
826  std::max(0.0f,std::min(1.0f,float(brightness*b)))));
827  m->transparency.setValue(std::max<float>(0.0f,std::min<float>(1.0f,in_transp)));
828  m->shininess.setValue(std::max<float>(0.0f,std::min<float>(1.0f,Imp::simpleShininess()/100.0f)));
829  m->ambientColor.setValue(Imp::qcol2sbcol(Imp::simpleAmbient()));
830  m->specularColor.setValue(Imp::qcol2sbcol(Imp::simpleSpecular()));
831 
832  if (save) {
833  m->enableNotify(true);
834  m->touch();
835  }
836  m->unrefNoDelete();
837 }
838 
839 //____________________________________________________________________
841 {
842  if (event->button() == Qt::LeftButton)
843  m_d->dragStartPosition = event->pos();
844  QPushButton::mousePressEvent(event);
845 }
846 
847 //____________________________________________________________________
849 {
850  if (!(event->buttons() & Qt::LeftButton))
851  return;
852  if ((event->pos() - m_d->dragStartPosition).manhattanLength()
853  < QApplication::startDragDistance())
854  return;
855 
856  QDrag *drag = new QDrag(this);
857  QMimeData *mimeData = new QMimeData;
858 
860  // For dragging state onto other material buttons: //
862 
863  QByteArray byteArray;
864  QBuffer buffer(&byteArray);
865  buffer.open(QIODevice::WriteOnly);
866  QDataStream out(&buffer);
874  buffer.close();
875  mimeData->setData("vp1/material", byteArray);
876 
878  // For dragging c++ code for defining this material //
879  // into e.g. an editor: //
881 
882  QString s = "SoMaterial * mat = new SoMaterial;\n";
883  QString str_ambient = m_d->toSbColTxt(m_d->lastapplied_ambient);
884  if (str_ambient!="SbColor(0.2,0.2,0.2)")
885  s += "mat->ambientColor.setValue("+str_ambient+");\n";
886  QString str_diffuse = m_d->toSbColTxt(m_d->lastapplied_diffuse);
887  if (str_diffuse!="SbColor(0.8,0.8,0.8)")
888  s += "mat->diffuseColor.setValue("+str_diffuse+");\n";
889  QString str_specular = m_d->toSbColTxt(m_d->lastapplied_specular);
890  if (str_specular!="SbColor(0,0,0)")
891  s += "mat->specularColor.setValue("+str_specular+");\n";
892  QString str_emissive = m_d->toSbColTxt(m_d->lastapplied_emissive);
893  if (str_emissive!="SbColor(0,0,0)")
894  s += "mat->emissiveColor.setValue("+str_emissive+");\n";
895  QString str_shininess = m_d->printFloat(m_d->lastapplied_shininess/100.0);
896  if (str_shininess!="0.2")
897  s += "mat->shininess.setValue("+str_shininess+");\n";
898  QString str_transparency = m_d->printFloat(m_d->lastapplied_transparency/100.0);
899  if (str_transparency!="0")
900  s += "mat->transparency.setValue("+str_transparency+");\n";
901  mimeData->setText(s);
902 
903  //Execute drag:
904  drag->setMimeData(mimeData);//drag assumes ownership of mimeData
905  drag->exec(Qt::CopyAction | Qt::MoveAction);
906 }
907 
908 //____________________________________________________________________
910 {
911  if (event->source()!=this && event->mimeData()->hasFormat("vp1/material"))
912  event->acceptProposedAction();
913 }
914 
915 //____________________________________________________________________
917 {
918  QByteArray data = event->mimeData()->data("vp1/material");
919  event->acceptProposedAction();
920 
921  QBuffer buffer(&data);
922  buffer.open(QIODevice::ReadOnly);
923  QDataStream state(&buffer);
924  state >> m_d->lastapplied_ambient;
925  state >> m_d->lastapplied_diffuse;
926  state >> m_d->lastapplied_specular;
927  state >> m_d->lastapplied_emissive;
928  state >> m_d->lastapplied_shininess;
929  state >> m_d->lastapplied_transparency;
930  state >> m_d->lastapplied_brightness;
931  buffer.close();
933 }
934 
935 QByteArray VP1MaterialButton::saveState() const{
936  VP1Serialise serialise(1/*version*/);
937  serialise.save(this);
938  return serialise.result();
939 }
940 
941 void VP1MaterialButton::restoreFromState( const QByteArray& ba){
942  VP1Deserialise state(ba,systemBase());
943  if (state.version()<0||state.version()>1)
944  return;//Ignore silently
945  state.restore(this);
946 }
VP1Serialise.h
VP1MaterialButton::Imp::theclass
VP1MaterialButton * theclass
Definition: VP1MaterialButton.cxx:50
VP1MaterialButton::Imp::simpleShininess
static int simpleShininess()
Definition: VP1MaterialButton.cxx:120
beamspotman.r
def r
Definition: beamspotman.py:676
VP1MaterialButton::updateButton
void updateButton()
Definition: VP1MaterialButton.cxx:661
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
VP1MaterialButton::Imp::sbcol2qcol
static QColor sbcol2qcol(const SbColor &)
Definition: VP1MaterialButton.cxx:505
VP1MaterialButton::lastAppliedAmbientColour
QColor lastAppliedAmbientColour() const
Definition: VP1MaterialButton.cxx:168
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
VP1MaterialButton::apply
void apply()
Definition: VP1MaterialButton.cxx:632
VP1Deserialise.h
yodamerge_tmp.dim
dim
Definition: yodamerge_tmp.py:239
VP1Serialise
Definition: VP1Serialise.h:45
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
VP1MaterialButton::updatePreview
void updatePreview()
Definition: VP1MaterialButton.cxx:477
VP1MaterialButton::Imp::previewswitch
SoSwitch * previewswitch
Definition: VP1MaterialButton.cxx:65
max
#define max(a, b)
Definition: cfImp.cxx:41
VP1MaterialButton::Imp::setLastAppliedFromCurrent
void setLastAppliedFromCurrent()
Definition: VP1MaterialButton.cxx:586
VP1MaterialButton::Imp::applyValuesToMaterial
void applyValuesToMaterial(SoMaterial *, bool preview=false)
Definition: VP1MaterialButton.cxx:405
VP1MaterialButton::transparencyChanged
void transparencyChanged()
Definition: VP1MaterialButton.cxx:682
RoiUtil::serialise
void serialise(const std::vector< const IRoiDescriptor * > &rois, roiserial_type &s)
serialise an entire vector of IRoiDescriptors
Definition: RoiSerialise.cxx:45
VP1ExaminerViewer::removeDecorationMenuOption
virtual void removeDecorationMenuOption()
Definition: VP1ExaminerViewer.cxx:1377
VP1MaterialButton::saveState
QByteArray saveState() const
fill out with the state of the object (used for drag and drop etc)
Definition: VP1MaterialButton.cxx:935
VP1MaterialButton.h
VP1MaterialButton::Imp::guiDiffuseColour
QColor guiDiffuseColour() const
Definition: VP1MaterialButton.cxx:552
VP1MaterialButton::VP1MaterialButton
VP1MaterialButton(QWidget *parent=0, int dim=25)
Definition: VP1MaterialButton.cxx:124
hist_file_dump.d
d
Definition: hist_file_dump.py:137
VP1MaterialButton
Definition: VP1MaterialButton.h:46
VP1MaterialButton::Imp::emissiveColourFromSimpleParameters
QColor emissiveColourFromSimpleParameters(const QColor &simpleColour, const double &brightness) const
Definition: VP1MaterialButton.cxx:528
VP1HelperClassBase::messageVerbose
void messageVerbose(const QString &) const
Definition: VP1HelperClassBase.cxx:78
fillPileUpNoiseLumi.connect
string connect
Definition: fillPileUpNoiseLumi.py:70
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
VP1MaterialButton::Imp::lastapplied_transparency
int lastapplied_transparency
Definition: VP1MaterialButton.cxx:89
VP1MaterialButton::Imp::preview_material
SoMaterial * preview_material
Definition: VP1MaterialButton.cxx:60
VP1MaterialButton::Imp::lastapplied_diffuse
QColor lastapplied_diffuse
Definition: VP1MaterialButton.cxx:85
VP1QtUtils.h
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
VP1MaterialButton::Imp::guiShininess
int guiShininess() const
Definition: VP1MaterialButton.cxx:580
VP1ExaminerViewer::setAntialiasing
virtual void setAntialiasing(SbBool smoothing, int numPasses)
Definition: VP1ExaminerViewer.cxx:1648
VP1MaterialButton::Imp::adaptGuiAndMaterialsToLastApplied
void adaptGuiAndMaterialsToLastApplied()
Definition: VP1MaterialButton.cxx:200
VP1MaterialButton::Imp::guiEmissiveColour
QColor guiEmissiveColour() const
Definition: VP1MaterialButton.cxx:564
VP1MaterialButton::Imp::distSq
static double distSq(const QColor &a, const QColor &b)
Definition: VP1MaterialButton.cxx:513
VP1MaterialButton::Imp::lastapplied_emissive
QColor lastapplied_emissive
Definition: VP1MaterialButton.cxx:87
VP1MaterialButton::Imp::lastapplied_ambient
QColor lastapplied_ambient
Definition: VP1MaterialButton.cxx:84
VP1MaterialButton::Imp::dragStartPosition
QPoint dragStartPosition
Definition: VP1MaterialButton.cxx:52
sendEI_SPB.root
root
Definition: sendEI_SPB.py:34
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
VP1MaterialButton::Imp::brightnessEstimateFromDetailedParameters
double brightnessEstimateFromDetailedParameters(const QColor &diffuseColour, const QColor &emissiveColour) const
Definition: VP1MaterialButton.cxx:536
VP1MaterialButton::lastAppliedDiffuseColour
QColor lastAppliedDiffuseColour() const
Definition: VP1MaterialButton.cxx:167
VP1ExaminerViewer::setTransparencyType
virtual void setTransparencyType(SoGLRenderAction::TransparencyType)
Definition: VP1ExaminerViewer.cxx:1731
VP1MaterialButton::Imp::equal
static bool equal(const QColor &a, const QColor &b, const double &tol=1.0e-6)
Definition: VP1MaterialButton.cxx:522
VP1String::str
static QString str(const QString &s)
Definition: VP1String.h:49
LINES
bool LINES
Definition: computils.cxx:39
VP1HelperClassBase::messageDebug
void messageDebug(const QString &) const
Definition: VP1HelperClassBase.cxx:65
VP1ColorSelectButton::setColButtonProperties
static void setColButtonProperties(QPushButton *, const QColor &col, int dim)
Definition: VP1ColorSelectButton.cxx:49
VP1MaterialButton::Imp::blockcount
int blockcount
Definition: VP1MaterialButton.cxx:115
VP1MaterialButton::Imp::handledmaterials
QList< SoMaterial * > handledmaterials
Definition: VP1MaterialButton.cxx:68
VP1ExaminerViewer::viewAll
virtual void viewAll()
Definition: VP1ExaminerViewer.cxx:1457
VP1MaterialButton::mousePressEvent
void mousePressEvent(QMouseEvent *event)
Definition: VP1MaterialButton.cxx:840
VP1MaterialButton::Imp::guiAmbientColour
QColor guiAmbientColour() const
Definition: VP1MaterialButton.cxx:546
CxxUtils::fpcompare::equal
bool equal(double a, double b)
Compare two FP numbers, working around x87 precision issues.
Definition: fpcompare.h:114
VP1MaterialButton::Imp::editwindow_ui
Ui::VP1MaterialButtonForm editwindow_ui
Definition: VP1MaterialButton.cxx:61
VP1MaterialButton::dropEvent
void dropEvent(QDropEvent *event)
Definition: VP1MaterialButton.cxx:916
VP1MaterialButton::stopHandlingMaterial
bool stopHandlingMaterial(SoMaterial *)
Definition: VP1MaterialButton.cxx:459
VP1Deserialise::version
qint32 version() const
Definition: VP1Deserialise.cxx:143
VP1MaterialButton::Imp::printFloat
QString printFloat(const double &d)
Definition: VP1MaterialButton.cxx:93
checkTP.save
def save(self, fileName="./columbo.out")
Definition: checkTP.py:178
VP1MaterialButton::handledMaterials
QList< SoMaterial * > handledMaterials() const
Definition: VP1MaterialButton.cxx:647
createCoolChannelIdFile.buffer
buffer
Definition: createCoolChannelIdFile.py:12
VP1ExaminerViewer.h
VP1MaterialButton::Imp::guiSpecularColour
QColor guiSpecularColour() const
Definition: VP1MaterialButton.cxx:558
VP1MaterialButton::~VP1MaterialButton
virtual ~VP1MaterialButton()
Definition: VP1MaterialButton.cxx:150
VP1MaterialButton::dragEnterEvent
void dragEnterEvent(QDragEnterEvent *event)
Definition: VP1MaterialButton.cxx:909
VP1MaterialButton::Imp::toSbColTxt
QString toSbColTxt(const QColor &c)
Definition: VP1MaterialButton.cxx:103
VP1MaterialButton::Imp::initEditWindow
void initEditWindow()
Definition: VP1MaterialButton.cxx:307
event
POOL::TEvent event(POOL::TEvent::kClassAccess)
VP1QtUtils::environmentVariableIsOn
static bool environmentVariableIsOn(const QString &name)
Definition: VP1QtUtils.cxx:127
VP1MaterialButton::Imp::adaptGuiForMode
void adaptGuiForMode()
Definition: VP1MaterialButton.cxx:703
VP1MaterialButton::setMaterialParameters
static void setMaterialParameters(SoMaterial *m, const QColor &, const double &brightness=0.0, const double &transp=0.0)
Definition: VP1MaterialButton.cxx:802
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
VP1MaterialButton::lastAppliedBrightness
double lastAppliedBrightness() const
Definition: VP1MaterialButton.cxx:173
VP1MaterialButton::Imp::lastapplied_specular
QColor lastapplied_specular
Definition: VP1MaterialButton.cxx:86
VP1MaterialButton::Imp
Definition: VP1MaterialButton.cxx:48
test_pyathena.parent
parent
Definition: test_pyathena.py:15
VP1MaterialButton::Imp::switchModeBasedOnLastApplied
void switchModeBasedOnLastApplied()
Definition: VP1MaterialButton.cxx:716
VP1MaterialButton::setText
void setText(const QString &)
Definition: VP1MaterialButton.cxx:653
VP1MaterialButton::lastAppliedSpecularColour
QColor lastAppliedSpecularColour() const
Definition: VP1MaterialButton.cxx:169
VP1Deserialise::restore
void restore(QCheckBox *sb)
Definition: VP1Deserialise.cxx:245
VP1QtUtils::expertSettingIsOn
static bool expertSettingIsOn(const QString &type, const QString &name)
Definition: VP1QtUtils.cxx:60
VP1MaterialButton::Imp::blockGuiSignals
void blockGuiSignals(bool)
Definition: VP1MaterialButton.cxx:280
VP1MaterialButton::updatePreviewSceneAndBgd
void updatePreviewSceneAndBgd()
Definition: VP1MaterialButton.cxx:487
VP1ColorSelectButton.h
VP1Deserialise
Definition: VP1Deserialise.h:44
VP1MaterialButton::Imp::previewEqualToLastApplied
bool previewEqualToLastApplied() const
Definition: VP1MaterialButton.cxx:604
VP1MaterialButton::lastAppliedChanged
void lastAppliedChanged()
min
#define min(a, b)
Definition: cfImp.cxx:40
VP1MaterialButton::Imp::guiTransparency
int guiTransparency() const
Definition: VP1MaterialButton.cxx:573
VP1MaterialButton::copyValuesFromMaterial
void copyValuesFromMaterial(SoMaterial *)
Definition: VP1MaterialButton.cxx:243
VP1MaterialButton::Imp::updateApplyResetButtons
void updateApplyResetButtons()
Definition: VP1MaterialButton.cxx:617
VP1MaterialButton::setMaterial
bool setMaterial(SoMaterial *)
Definition: VP1MaterialButton.cxx:447
VP1MaterialButton::Imp::renderarea
SoQtRenderArea * renderarea
Definition: VP1MaterialButton.cxx:64
VP1HelperClassBase::systemBase
IVP1System * systemBase() const
Definition: VP1HelperClassBase.h:50
python.selection.number
number
Definition: selection.py:20
VP1MaterialButton::Imp::dim
int dim
Definition: VP1MaterialButton.cxx:56
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
VP1MaterialButton::Imp::lastapplied_brightness
int lastapplied_brightness
Definition: VP1MaterialButton.cxx:90
VP1MaterialButton::createMaterial
static SoMaterial * createMaterial(const QColor &, const double &brightness=0.0, const double &transp=0.0)
Definition: VP1MaterialButton.cxx:786
VP1MaterialButton::Imp::materialtext
QString materialtext
Definition: VP1MaterialButton.cxx:58
VP1MaterialButton::Imp::simpleAmbient
static QColor simpleAmbient()
Definition: VP1MaterialButton.cxx:118
VP1MaterialButton::setDimension
void setDimension(int dim)
Definition: VP1MaterialButton.cxx:673
query_example.col
col
Definition: query_example.py:7
VP1MaterialButtonBase
Definition: VP1MaterialButton.h:25
VP1MaterialButton::lastAppliedShininess
double lastAppliedShininess() const
Definition: VP1MaterialButton.cxx:172
VP1MaterialButton::reset
void reset()
Definition: VP1MaterialButton.cxx:641
VP1MaterialButton::showEditMaterialDialog
void showEditMaterialDialog()
Definition: VP1MaterialButton.cxx:182
VP1MaterialButton::mouseMoveEvent
void mouseMoveEvent(QMouseEvent *event)
Definition: VP1MaterialButton.cxx:848
VP1MaterialButton::editWindow
QWidget & editWindow()
Definition: VP1MaterialButton.cxx:175
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
a
TList * a
Definition: liststreamerinfos.cxx:10
VP1MaterialButton::Imp::lastapplied_shininess
int lastapplied_shininess
Definition: VP1MaterialButton.cxx:88
VP1MaterialButton::Imp::simplemode
bool simplemode
Definition: VP1MaterialButton.cxx:54
VP1MaterialButton::restoreFromState
void restoreFromState(const QByteArray &)
Definition: VP1MaterialButton.cxx:941
VP1HelperClassBase::message
void message(const QString &) const
Definition: VP1HelperClassBase.cxx:49
VP1MaterialButton::setMaterialText
void setMaterialText(const QString &)
Definition: VP1MaterialButton.cxx:191
VP1MaterialButton::switchMode
void switchMode()
Definition: VP1MaterialButton.cxx:745
VP1Msg::verbose
static bool verbose()
Definition: VP1Msg.h:31
VP1MaterialButton::Imp::simpleSpecular
static QColor simpleSpecular()
Definition: VP1MaterialButton.cxx:119
VP1MaterialButton::clearHandledMaterials
void clearHandledMaterials()
Definition: VP1MaterialButton.cxx:469
VP1MaterialButton::Imp::editwindow
QWidget * editwindow
Definition: VP1MaterialButton.cxx:59
VP1MaterialButton::lastAppliedTransparency
double lastAppliedTransparency() const
Definition: VP1MaterialButton.cxx:171
VP1MaterialButton::lastAppliedEmissiveColour
QColor lastAppliedEmissiveColour() const
Definition: VP1MaterialButton.cxx:170
VP1MaterialButton::Imp::qcol2sbcol
static SbColor qcol2sbcol(const QColor &)
Definition: VP1MaterialButton.cxx:499
python.compressB64.c
def c
Definition: compressB64.py:93
VP1ExaminerViewer
Definition: VP1ExaminerViewer.h:30
VP1MaterialButton::m_d
Imp * m_d
Definition: VP1MaterialButton.h:119
VP1MaterialButton::handleMaterial
bool handleMaterial(SoMaterial *)
Definition: VP1MaterialButton.cxx:436