Ignore:
Timestamp:
Sep 10, 2014, 7:00:56 PM (10 years ago)
Author:
Frederik Heber <heber@…>
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)
Message:

Refactored FillSurfaceAction to also use FillerPreparators.

Location:
src/Actions/FillAction
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/FillAction/FillSurfaceAction.cpp

    r6801f4 rdf9f20  
    4646#include "Filling/Mesh/MeshAdaptor.hpp"
    4747#include "Filling/Predicates/IsVoidNode_FillPredicate.hpp"
     48#include "Filling/Preparators/ShapeSurfaceFillerPreparator.hpp"
    4849#include "molecule.hpp"
    4950#include "Shapes/BaseShapes.hpp"
    5051#include "Shapes/ShapeRegistry.hpp"
     52#include "Shapes/ShapeType.hpp"
    5153#include "World.hpp"
    5254
     
    98100  }
    99101
    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.");
    114127      return Action::failure;
    115128    }
    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  {
    123152    // fill
    124153    {
    125       Filler *fillerFunction = new Filler(*mesh, *voidnode_predicate, *inserter);
     154      Filler *fillerFunction = filler_preparator.obtainFiller();
    126155      ClusterInterface::Cluster_impl cluster( new Cluster( filler->getAtomIds(), filler->getBoundingSphere() ) );
    127156      CopyAtoms_withBonds copyMethod;
     
    160189      }
    161190    }
    162 
    163     // remove
    164     delete mesh;
    165     delete inserter;
    166     delete voidnode_predicate;
    167191  }
    168192
  • src/Actions/FillAction/FillSurfaceAction.def

    r6801f4 rdf9f20  
    2020// ValueStorage by the token "Z" -> first column: int, Z, "Z"
    2121// "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)
    2727#define paramvalids \
    2828(DummyValidator< unsigned int >()) \
     29(BoxLengthValidator()) \
     30(BoxLengthValidator()) \
     31(BoxLengthValidator()) \
    2932(BoxLengthValidator()) \
    3033(VectorNotZeroValidator())
     
    3639#define CATEGORY Fill
    3740#define MENUNAME "fill"
    38 #define MENUPOSITION 1
     41#define MENUPOSITION 2
    3942#define ACTIONNAME Surface
    4043#define TOKEN "fill-surface"
Note: See TracChangeset for help on using the changeset viewer.