Changeset 72a4c1 for src/UIElements


Ignore:
Timestamp:
Jul 27, 2012, 2:29:50 PM (13 years ago)
Author:
Michael Ankele <ankele@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
22d99f
Parents:
b7b752
Message:

GL: using multiple levels of detail for the meshes

Location:
src/UIElements/Views/Qt4/Qt3D
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.cpp

    rb7b752 r72a4c1  
    4747
    4848
    49 GLMoleculeObject::GLMoleculeObject(QGLSceneNode *mesh, QObject *parent)
     49double GLMoleculeObject::detailMinDistance[GLMoleculeObject::DETAILTYPES_MAX] = {0, 15, 30, 42};
     50
     51GLMoleculeObject::GLMoleculeObject(QGLSceneNode *mesh[], QObject *parent)
    5052   : QObject(parent)
    5153{
    5254   //mesh->setParent(this);
    53    m_mesh = mesh;
     55   for (int i=0;i<DETAILTYPES_MAX;i++)
     56     m_mesh[i] = mesh[i];
    5457   m_scale = 1.0f;
    5558   m_scaleZ = 1.0f;
     
    6770{
    6871   scene->setParent(this);
    69    m_mesh = scene->mainNode();
     72   m_mesh[0] = scene->mainNode();
     73   m_mesh[1] = scene->mainNode();
     74   m_mesh[2] = scene->mainNode();
    7075   m_scale = 1.0f;
    7176   m_scaleZ = 1.0f;
     
    118123}
    119124
    120 void GLMoleculeObject::draw(QGLPainter *painter)
     125void GLMoleculeObject::draw(QGLPainter *painter, const QVector4D &cameraPlane)
    121126{
    122127   // Position the model at its designated position, scale, and orientation.
     
    154159
    155160   // Draw the geometry mesh.
    156    m_mesh->draw(painter);
     161   QVector4D pos4d(m_position, -1);
     162   qreal distance = QVector4D::dotProduct(cameraPlane, pos4d);
     163
     164   if (distance > detailMinDistance[DETAIL_LOW])
     165     m_mesh[DETAIL_LOW]->draw(painter);
     166   else if (distance > detailMinDistance[DETAIL_MEDIUM])
     167     m_mesh[DETAIL_MEDIUM]->draw(painter);
     168   else if (distance > detailMinDistance[DETAIL_HIGH])
     169     m_mesh[DETAIL_HIGH]->draw(painter);
     170   else if (distance > detailMinDistance[DETAIL_HIGHEST])
     171     m_mesh[DETAIL_HIGHEST]->draw(painter);
    157172
    158173   // Draw a box around the mesh, if selected.
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject.hpp

    rb7b752 r72a4c1  
    3737   friend class GLWorldScene;
    3838public:
    39    explicit GLMoleculeObject(QGLSceneNode *mesh, QObject *parent=0);
     39   explicit GLMoleculeObject(QGLSceneNode *mesh[], QObject *parent=0);
    4040   explicit GLMoleculeObject(QGLAbstractScene *scene, QObject *parent=0);
    4141   virtual ~GLMoleculeObject();
     
    7070   void initStaticMaterials();
    7171   void initialize(QGLView *view, QGLPainter *painter);
    72    void draw(QGLPainter *painter);
     72   void draw(QGLPainter *painter, const QVector4D &cameraPlane);
    7373   void drawSelectionBox(QGLPainter *painter);
    7474
     
    9191   static ElementMaterialMap ElementNoMaterialMap;
    9292
     93public:
     94   enum{DETAIL_HIGHEST, DETAIL_HIGH, DETAIL_MEDIUM, DETAIL_LOW, DETAILTYPES_MAX} DetailType;
     95
    9396private:
    9497
    95    QGLSceneNode *m_mesh;
     98   static double detailMinDistance[DETAILTYPES_MAX];
     99
     100   QGLSceneNode *m_mesh[DETAILTYPES_MAX];
    96101   QGLAbstractScene *m_scene;
    97102   QVector3D m_position;
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.cpp

    rb7b752 r72a4c1  
    3636#include "World.hpp"
    3737
    38 GLMoleculeObject_atom::GLMoleculeObject_atom(QGLSceneNode *mesh, QObject *parent, const atom *atomref) :
     38GLMoleculeObject_atom::GLMoleculeObject_atom(QGLSceneNode *mesh[], QObject *parent, const atom *atomref) :
    3939  GLMoleculeObject(mesh, parent),
    4040  Observer(std::string("GLMoleculeObject_atom")+toString(atomref->getId())),
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_atom.hpp

    rb7b752 r72a4c1  
    2727  Q_OBJECT
    2828public:
    29   GLMoleculeObject_atom(QGLSceneNode *mesh, QObject *parent, const atom *atomref);
     29  GLMoleculeObject_atom(QGLSceneNode *mesh[], QObject *parent, const atom *atomref);
    3030  virtual ~GLMoleculeObject_atom();
    3131
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.cpp

    rb7b752 r72a4c1  
    3737#include "LinearAlgebra/Vector.hpp"
    3838
    39 GLMoleculeObject_bond::GLMoleculeObject_bond(QGLSceneNode *mesh, QObject *parent, const bond *bondref, const enum SideOfBond side) :
     39GLMoleculeObject_bond::GLMoleculeObject_bond(QGLSceneNode *mesh[], QObject *parent, const bond *bondref, const enum SideOfBond side) :
    4040  GLMoleculeObject(mesh, parent),
    4141  Observer(std::string("GLMoleculeObject_bond")
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_bond.hpp

    rb7b752 r72a4c1  
    2828  enum SideOfBond { left, right };
    2929
    30   GLMoleculeObject_bond(QGLSceneNode *mesh, QObject *parent, const bond *bondref, const enum SideOfBond side);
     30  GLMoleculeObject_bond(QGLSceneNode *mesh[], QObject *parent, const bond *bondref, const enum SideOfBond side);
    3131  virtual ~GLMoleculeObject_bond();
    3232
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp

    rb7b752 r72a4c1  
    3939#include "World.hpp"
    4040
    41 GLMoleculeObject_molecule::GLMoleculeObject_molecule(QGLSceneNode *mesh, QObject *parent, const molecule *molref) :
     41GLMoleculeObject_molecule::GLMoleculeObject_molecule(QGLSceneNode *mesh[], QObject *parent, const molecule *molref) :
    4242  GLMoleculeObject(mesh, parent),
    4343  Observer(std::string("GLMoleculeObject_molecule")+toString(molref->getId())),
  • src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp

    rb7b752 r72a4c1  
    2828  Q_OBJECT
    2929public:
    30   GLMoleculeObject_molecule(QGLSceneNode *mesh, QObject *parent, const molecule *molref);
     30  GLMoleculeObject_molecule(QGLSceneNode *mesh[], QObject *parent, const molecule *molref);
    3131  virtual ~GLMoleculeObject_molecule();
    3232
  • src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp

    rb7b752 r72a4c1  
    6161     hoverAtom(NULL)
    6262{
    63   QGLBuilder builder0;
    64   meshEmpty = builder0.finalizedSceneNode();
    65   QGLBuilder builder1;
    66   builder1 << QGLSphere(2.0, 5);
    67   meshSphereHi = builder1.finalizedSceneNode();
    68   QGLBuilder builder2;
    69   builder2 << QGLSphere(2.0, 1);
    70   meshSphereLo = builder2.finalizedSceneNode();
    71   QGLBuilder builder3;
    72   builder3 << QGLCylinder(.25,.25,1.0,16);
    73   meshCylinderHi = builder3.finalizedSceneNode();
    74   QGLBuilder builder4;
    75   builder4 << QGLCylinder(.25,.25,1.0,16);
    76   meshCylinderLo = builder4.finalizedSceneNode();
    77 
    78   meshSphereHi->setOption(QGLSceneNode::CullBoundingBox, true);
    79   meshSphereLo->setOption(QGLSceneNode::CullBoundingBox, true);
    80   meshCylinderHi->setOption(QGLSceneNode::CullBoundingBox, true);
    81   meshCylinderLo->setOption(QGLSceneNode::CullBoundingBox, true);
     63  int sphereDetails[] = {5, 3, 2, 0};
     64  int cylinderDetails[] = {16, 8, 6, 3};
     65  for (int i=0;i<GLMoleculeObject::DETAILTYPES_MAX;i++){
     66    QGLBuilder emptyBuilder;
     67    meshEmpty[i] = emptyBuilder.finalizedSceneNode();
     68    QGLBuilder sphereBuilder;
     69    sphereBuilder << QGLSphere(2.0, sphereDetails[i]);
     70    meshSphere[i] = sphereBuilder.finalizedSceneNode();
     71    meshSphere[i]->setOption(QGLSceneNode::CullBoundingBox, true);
     72    QGLBuilder cylinderBuilder;
     73    cylinderBuilder << QGLCylinder(.25,.25,1.0,cylinderDetails[i]);
     74    meshCylinder[i] = cylinderBuilder.finalizedSceneNode();
     75    meshCylinder[i]->setOption(QGLSceneNode::CullBoundingBox, true);
     76  }
    8277
    8378  setSelectionMode(SelectAtom);
     
    132127{
    133128  LOG(3, "INFO: GLWorldScene: Received signal atomInserted for atom "+toString(_atom->getId())+".");
    134   GLMoleculeObject_atom *atomObject = new GLMoleculeObject_atom(meshSphereHi, this, _atom);
     129  GLMoleculeObject_atom *atomObject = new GLMoleculeObject_atom(meshSphere, this, _atom);
    135130  AtomNodeMap::iterator iter = AtomsinSceneMap.find(_atom->getId());
    136131  ASSERT(iter == AtomsinSceneMap.end(),
     
    252247#endif
    253248  GLMoleculeObject_bond *bondObject =
    254       new GLMoleculeObject_bond(meshCylinderHi, this, _bond, side);
     249      new GLMoleculeObject_bond(meshCylinder, this, _bond, side);
    255250  connect (
    256251      bondObject, SIGNAL(BondRemoved(const atomId_t, const atomId_t)),
     
    295290}
    296291
    297 void GLWorldScene::draw(QGLPainter *painter) const
     292void GLWorldScene::draw(QGLPainter *painter, const QVector4D &cameraPlane) const
    298293{
    299294   // Draw all of the mesh objects that we have as children.
     
    301296     GLMoleculeObject *meshobj = qobject_cast<GLMoleculeObject *>(obj);
    302297       if (meshobj)
    303          meshobj->draw(painter);
     298         meshobj->draw(painter, cameraPlane);
    304299   }
    305300}
  • src/UIElements/Views/Qt4/Qt3D/GLWorldScene.hpp

    rb7b752 r72a4c1  
    5555
    5656  void initialize(QGLView *view, QGLPainter *painter) const;
    57   void draw(QGLPainter *painter) const;
     57  void draw(QGLPainter *painter, const QVector4D &cameraPlane) const;
    5858
    5959  enum SelectionModeType{
     
    100100  MoleculeNodeMap MoleculesinSceneMap;
    101101
    102   QGLSceneNode *meshEmpty;
    103   QGLSceneNode *meshSphereHi;
    104   QGLSceneNode *meshSphereLo;
    105   QGLSceneNode *meshCylinderHi;
    106   QGLSceneNode *meshCylinderLo;
     102  QGLSceneNode *meshEmpty[GLMoleculeObject::DETAILTYPES_MAX];
     103  QGLSceneNode *meshSphere[GLMoleculeObject::DETAILTYPES_MAX];
     104  QGLSceneNode *meshCylinder[GLMoleculeObject::DETAILTYPES_MAX];
    107105
    108106  SelectionModeType selectionMode;
  • src/UIElements/Views/Qt4/Qt3D/GLWorldView.cpp

    rb7b752 r72a4c1  
    369369    changesPresent = false;
    370370  }
    371   worldscene->draw(painter);
     371
     372  QVector3D cameraDir = camera()->center() - camera()->eye();
     373  cameraDir.normalize();
     374  QVector4D cameraPlane(cameraDir, QVector3D::dotProduct(cameraDir, camera()->eye()));
     375  worldscene->draw(painter, cameraPlane);
    372376
    373377  drawDreiBein(painter);
Note: See TracChangeset for help on using the changeset viewer.