Changeset 8923ad8 for src/UIElements
- Timestamp:
- Jul 24, 2015, 4:44:35 PM (9 years ago)
- 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:
- 9c259e
- Parents:
- 28864c
- git-author:
- Frederik Heber <heber@…> (06/08/15 17:05:01)
- git-committer:
- Frederik Heber <heber@…> (07/24/15 16:44:35)
- Location:
- src/UIElements/Views/Qt4/Qt3D
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.cpp
r28864c r8923ad8 178 178 m_visible = false; 179 179 180 init();181 182 180 connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *))); 183 181 connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed())); … … 217 215 m_visible = false; 218 216 219 init();220 221 217 connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *))); 222 218 connect (this, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed())); … … 244 240 _atom->signOff(this, AtomObservable::BondsAdded);*/ 245 241 World::getInstance().signOff(this, World::SelectionChanged); 246 }247 248 /** Initialise the WorldScene with molecules and atoms from World.249 *250 */251 void GLMoleculeObject_molecule::init()252 {253 const molecule * const _molecule = const_cast<const World &>(World::getInstance()).254 getMolecule(MoleculeById(moleculeid));255 if (_molecule == NULL) {256 ELOG(1, "GLMoleculeObject_molecule cannot init, molecule with "257 << moleculeid << " has disappeared.");258 return;259 }260 if (_molecule->begin() != _molecule->end()) {261 int atomicid = -1;262 for (molecule::const_iterator atomiter = _molecule->begin();263 atomiter != _molecule->end();264 atomiter++) {265 // create atom objects in scene266 atomicid = (*atomiter)->getId();267 atomInserted(atomicid);268 InitAtomNodesSet.insert(atomicid);269 270 // create bond objects in scene271 const BondList &bondlist = (*atomiter)->getListOfBonds();272 for (BondList::const_iterator bonditer = bondlist.begin();273 bonditer != bondlist.end();274 ++bonditer) {275 const bond::ptr _bond = *bonditer;276 const GLMoleculeObject_bond::SideOfBond side = (_bond->leftatom == *atomiter) ?277 GLMoleculeObject_bond::left : GLMoleculeObject_bond::right;278 bondInserted(_bond, side);279 }280 }281 // set id to one of the atom's as either mol or atoms is present at the same time282 setObjectId(atomicid);283 }284 242 } 285 243 … … 320 278 addAtomBonds(_bond, side); 321 279 addAtomBonds(_bond, otherside); 322 }323 }324 }325 326 void GLMoleculeObject_molecule::reinit()327 {328 const molecule * const _molecule = const_cast<const World &>(World::getInstance()).329 getMolecule(MoleculeById(moleculeid));330 if (_molecule == NULL) {331 ELOG(1, "GLMoleculeObject_molecule cannot reinit, molecule with "332 << moleculeid << " has disappeared.");333 return;334 }335 if (_molecule->getAtomCount() > 0) {336 for (molecule::const_iterator atomiter = _molecule->begin();337 atomiter != _molecule->end();338 atomiter++) {339 // check whether atom already exists340 const atomId_t atomid = (*atomiter)->getId();341 const bool atom_present = AtomsinSceneMap.count(atomid);342 if (!atom_present)343 atomInserted((*atomiter)->getId());344 else345 AtomsinSceneMap[atomid]->resetPosition();346 347 348 // create bond objects in scene349 addAtomBonds(*atomiter);350 280 } 351 281 } … … 543 473 { 544 474 LOG(3, "INFO: GLWorldScene: Received signal atomInserted for atom "+toString(_id)+"."); 545 // remove ids if second insertion via update comes in 546 if ((!InitAtomNodesSet.empty()) && (InitAtomNodesSet.find(_id) != InitAtomNodesSet.end())) { 547 // the problem is as follows: 548 // In order to get really all atoms, we first signOn to molecule and then call init() 549 // however, in init() further atoms may have been loaded which are then also 550 // instantiated by init(). Note only that but we also obtain an update() from 551 // molecule itself (because we signOn'd before) that a new atom is to be inserted 552 // hence, this would cause double insertion of the same atom and this has to be 553 // caught 554 InitAtomNodesSet.erase(_id); 555 LOG(4, "Atom with " << _id << " has already been added."); 556 } else { 557 GLMoleculeObject_atom *atomObject = new GLMoleculeObject_atom(GLMoleculeObject::meshSphere, this, _id); 558 ASSERT( atomObject != NULL, 559 "GLMoleculeObject_molecule::atomInserted - could not create atom object for "+toString(_id)); 560 AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id); 561 ASSERT(iter == AtomsinSceneMap.end(), 562 "GLMoleculeObject_molecule::atomInserted - same atom with id "+toString(_id)+" added again."); 563 AtomsinSceneMap.insert( make_pair(_id, atomObject) ); 564 565 qRegisterMetaType<atomId_t>("atomId_t"); 566 qRegisterMetaType<bond::ptr>("bond::ptr"); 567 qRegisterMetaType<GLMoleculeObject_bond::SideOfBond>("GLMoleculeObject_bond::SideOfBond"); 568 connect (atomObject, SIGNAL(clicked(atomId_t)), this, SIGNAL(atomClicked(atomId_t))); 569 connect (atomObject, SIGNAL(changed()), this, SIGNAL(changed())); 570 connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed())); 571 connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *))); 572 connect (atomObject, SIGNAL(selectionChanged()), this, SIGNAL(changed())); 573 connect (atomObject, SIGNAL(BondsInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond)), this, SLOT(bondInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond))); 574 connect (atomObject, SIGNAL(indexChanged(GLMoleculeObject_atom*, int, int)), this, SLOT(changeAtomId(GLMoleculeObject_atom*, int, int))); 575 576 isBoundingBoxUptodate = false; 577 578 if (m_objectId == -1) 579 setObjectId(_id); 580 } 475 GLMoleculeObject_atom *atomObject = new GLMoleculeObject_atom(GLMoleculeObject::meshSphere, this, _id); 476 ASSERT( atomObject != NULL, 477 "GLMoleculeObject_molecule::atomInserted - could not create atom object for "+toString(_id)); 478 AtomNodeMap::iterator iter = AtomsinSceneMap.find(_id); 479 ASSERT(iter == AtomsinSceneMap.end(), 480 "GLMoleculeObject_molecule::atomInserted - same atom with id "+toString(_id)+" added again."); 481 AtomsinSceneMap.insert( make_pair(_id, atomObject) ); 482 483 qRegisterMetaType<atomId_t>("atomId_t"); 484 qRegisterMetaType<bond::ptr>("bond::ptr"); 485 qRegisterMetaType<GLMoleculeObject_bond::SideOfBond>("GLMoleculeObject_bond::SideOfBond"); 486 connect (atomObject, SIGNAL(clicked(atomId_t)), this, SIGNAL(atomClicked(atomId_t))); 487 connect (atomObject, SIGNAL(changed()), this, SIGNAL(changed())); 488 connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SIGNAL(changed())); 489 connect (atomObject, SIGNAL(hoverChanged(GLMoleculeObject *)), this, SLOT(hoverChangedSignalled(GLMoleculeObject *))); 490 connect (atomObject, SIGNAL(selectionChanged()), this, SIGNAL(changed())); 491 connect (atomObject, SIGNAL(BondsInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond)), this, SLOT(bondInserted(const bond::ptr , const GLMoleculeObject_bond::SideOfBond))); 492 connect (atomObject, SIGNAL(indexChanged(GLMoleculeObject_atom*, int, int)), this, SLOT(changeAtomId(GLMoleculeObject_atom*, int, int))); 493 494 isBoundingBoxUptodate = false; 495 496 if (m_objectId == -1) 497 setObjectId(_id); 581 498 582 499 // add all bonds -
src/UIElements/Views/Qt4/Qt3D/GLMoleculeObject_molecule.hpp
r28864c r8923ad8 77 77 78 78 private: 79 void init();80 void reinit();81 82 79 void addAtomBonds( 83 80 const bond::ptr &_bond, … … 101 98 typedef std::map< atomId_t, GLMoleculeObject_atom* > AtomNodeMap; 102 99 typedef std::map< BondIds , GLMoleculeObject_bond* > BondNodeMap; 103 typedef std::set< atomId_t > InitAtomNodesSet_t;104 //!> atoms added by init() may also be added by atomsInserted, don't alarm then105 InitAtomNodesSet_t InitAtomNodesSet;106 100 AtomNodeMap AtomsinSceneMap; 107 101 BondNodeMap BondsinSceneMap; -
src/UIElements/Views/Qt4/Qt3D/GLWorldScene.cpp
r28864c r8923ad8 107 107 void GLWorldScene::init() 108 108 { 109 const std::vector<const molecule *> &molecules =110 const_cast<const World &>(World::getInstance()).getAllMolecules();111 112 for (std::vector<const molecule*>::const_iterator moliter = molecules.begin();113 moliter != molecules.end();114 moliter++) {115 // create molecule objects in scene116 moleculeInserted((*moliter)->getId());117 }109 // const std::vector<const molecule *> &molecules = 110 // const_cast<const World &>(World::getInstance()).getAllMolecules(); 111 // 112 // for (std::vector<const molecule*>::const_iterator moliter = molecules.begin(); 113 // moliter != molecules.end(); 114 // moliter++) { 115 // // create molecule objects in scene 116 // moleculeInserted((*moliter)->getId()); 117 // } 118 118 } 119 119 … … 138 138 moleculeInserted((*moliter)->getId()); 139 139 } 140 141 MoleculeNodeMap::iterator iter = MoleculesinSceneMap.begin(); 142 for (;iter != MoleculesinSceneMap.end();) { 143 const moleculeId_t molid = iter->first; 144 const molecule * const mol = const_cast<const World &>(World::getInstance()). 145 getMolecule(MoleculeById(molid)); 146 const bool mol_absent = (mol == NULL); 147 // step on to next molecule before possibly removing entry and invalidating iter 148 ++iter; 149 if (mol_absent) 150 moleculeRemoved(molid); 151 } 152 140 153 } 141 154 … … 226 239 connect (molObject, SIGNAL(atomClicked(atomId_t)), this, SLOT(atomClicked(atomId_t))); 227 240 connect (molObject, SIGNAL(moleculeClicked(moleculeId_t)), this, SLOT(moleculeClicked(moleculeId_t))); 228 connect (molObject, SIGNAL(changeAtomId(GLMoleculeObject_atom *, int, int)), this, SLOT(changeAtomId(GLMoleculeObject_atom *, int, int)));229 241 connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed())); 230 242 connect (molObject, SIGNAL(selectionChanged()), this, SIGNAL(changed()));
Note:
See TracChangeset
for help on using the changeset viewer.