Changeset df9f20 for src/Actions/FillAction
- Timestamp:
- Sep 10, 2014, 7:00:56 PM (10 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:
- 16c7dd
- Parents:
- 6801f4
- git-author:
- Frederik Heber <heber@…> (09/03/14 19:11:14)
- git-committer:
- Frederik Heber <heber@…> (09/10/14 19:00:56)
- Location:
- src/Actions/FillAction
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/FillAction/FillSurfaceAction.cpp
r6801f4 rdf9f20 46 46 #include "Filling/Mesh/MeshAdaptor.hpp" 47 47 #include "Filling/Predicates/IsVoidNode_FillPredicate.hpp" 48 #include "Filling/Preparators/ShapeSurfaceFillerPreparator.hpp" 48 49 #include "molecule.hpp" 49 50 #include "Shapes/BaseShapes.hpp" 50 51 #include "Shapes/ShapeRegistry.hpp" 52 #include "Shapes/ShapeType.hpp" 51 53 #include "World.hpp" 52 54 … … 98 100 } 99 101 100 // create predicate, mesh, and filler 101 FillSurfaceState *UndoState = NULL; 102 bool successflag = false; 103 { 104 FillPredicate *voidnode_predicate = new FillPredicate( 105 IsVoidNode_FillPredicate( 106 Sphere(zeroVec, params.mindistance.get()) 107 ) 108 ); 109 110 111 std::vector<Shape*> selectedShapes = ShapeRegistry::getInstance().getSelectedShapes(); 112 if (selectedShapes.size() != 1){ 113 STATUS("There has to be exactly 1 selected shape."); 102 // prepare the filler preparator 103 if (ShapeRegistry::getInstance().countSelectedShapes() != (size_t)1) { 104 STATUS("Not exactly one shape selected."); 105 return Action::failure; 106 } 107 const std::vector<Shape*> shapes = ShapeRegistry::getInstance().getSelectedShapes(); 108 const Shape &shape = **shapes.begin(); 109 110 // hard check whether shape is of allowed type, not all are implemented 111 // but these only fail with an assertion, hence not with disable-debug 112 switch (shape.getType()) { 113 case NowhereType: 114 case EverywhereType: 115 STATUS("The shape type "+toString(shape.getType())+" is currently not supported."); 116 return Action::failure; 117 break; 118 default: 119 break; 120 } 121 122 ShapeSurfaceFillerPreparator filler_preparator(filler); 123 if (params.SphereRadius.get() != 0.) { 124 if (World::getInstance().beginAtomSelection() == World::getInstance().endAtomSelection()) { 125 STATUS("You have given a sphere radius "+toString(params.SphereRadius.get()) 126 +" != 0, but have not select any atoms."); 114 127 return Action::failure; 115 128 } 116 117 boost::function<const NodeSet ()> func = 118 boost::bind(&Shape::getHomogeneousPointsOnSurface, boost::ref(*selectedShapes[0]), params.N.get()); 119 Mesh *mesh = new MeshAdaptor(func); 120 Inserter *inserter = new Inserter( 121 Inserter::impl_ptr(new SurfaceInserter(*selectedShapes[0], params.AlignedAxis.get()))); 122 129 std::vector<atom*> atoms(World::getInstance().getSelectedAtoms()); 130 filler_preparator.addSurfacePredicate( 131 params.SphereRadius.get(), 132 atoms); 133 } 134 filler_preparator.addVoidPredicate(params.mindistance.get()); 135 filler_preparator.addSurfaceRandomInserter( 136 shape, 137 params.AlignedAxis.get(), 138 params.RandAtomDisplacement.get(), 139 params.RandMoleculeDisplacement.get()); 140 filler_preparator.addShapeMesh( 141 shape, 142 params.N.get()); 143 if (!filler_preparator()) { 144 STATUS("Filler was not fully constructed."); 145 return Action::failure; 146 } 147 148 // use filler 149 bool successflag = false; 150 FillSurfaceState *UndoState = NULL; 151 { 123 152 // fill 124 153 { 125 Filler *fillerFunction = new Filler(*mesh, *voidnode_predicate, *inserter);154 Filler *fillerFunction = filler_preparator.obtainFiller(); 126 155 ClusterInterface::Cluster_impl cluster( new Cluster( filler->getAtomIds(), filler->getBoundingSphere() ) ); 127 156 CopyAtoms_withBonds copyMethod; … … 160 189 } 161 190 } 162 163 // remove164 delete mesh;165 delete inserter;166 delete voidnode_predicate;167 191 } 168 192 -
src/Actions/FillAction/FillSurfaceAction.def
r6801f4 rdf9f20 20 20 // ValueStorage by the token "Z" -> first column: int, Z, "Z" 21 21 // "undefine" if no parameters are required, use (NOPARAM_DEFAULT) for each (undefined) default value 22 #define paramtypes (unsigned int)(double)( Vector)23 #define paramtokens ("count")("min-distance")(" Alignment-Axis")24 #define paramdescriptions ("number of instances to be added, changed according to geometric needs")("minimum distance between added instances")(" The filler molecule is rotated relative to this alignment axis")25 #define paramdefaults (PARAM_DEFAULT(12))(PARAM_DEFAULT(1.))( NOPARAM_DEFAULT)26 #define paramreferences (N)(mindistance)( AlignedAxis)22 #define paramtypes (unsigned int)(double)(double)(double)(double)(Vector) 23 #define paramtokens ("count")("min-distance")("tesselation-radius")("random-atom-displacement")("random-molecule-displacement")("Alignment-Axis") 24 #define paramdescriptions ("number of instances to be added, changed according to geometric needs")("minimum distance between added instances")("radius of rolling sphere in tesselating selected molecule's surfaces")("magnitude of random atom displacement")("magnitude of random molecule displacement")("The filler molecule is rotated relative to this alignment axis") 25 #define paramdefaults (PARAM_DEFAULT(12))(PARAM_DEFAULT(1.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(PARAM_DEFAULT(0.))(NOPARAM_DEFAULT) 26 #define paramreferences (N)(mindistance)(SphereRadius)(RandAtomDisplacement)(RandMoleculeDisplacement)(AlignedAxis) 27 27 #define paramvalids \ 28 28 (DummyValidator< unsigned int >()) \ 29 (BoxLengthValidator()) \ 30 (BoxLengthValidator()) \ 31 (BoxLengthValidator()) \ 29 32 (BoxLengthValidator()) \ 30 33 (VectorNotZeroValidator()) … … 36 39 #define CATEGORY Fill 37 40 #define MENUNAME "fill" 38 #define MENUPOSITION 141 #define MENUPOSITION 2 39 42 #define ACTIONNAME Surface 40 43 #define TOKEN "fill-surface"
Note:
See TracChangeset
for help on using the changeset viewer.