Changeset ab1932 for src/boundary.hpp


Ignore:
Timestamp:
Aug 3, 2009, 8:21:05 PM (16 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, Candidate_v1.7.0, 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:
03e57a
Parents:
0dbddc (diff), edb93c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'TesselationRefactoring' into ConcaveHull

Conflicts:

molecuilder/src/boundary.cpp
molecuilder/src/boundary.hpp
molecuilder/src/linkedcell.cpp
molecuilder/src/linkedcell.hpp
molecuilder/src/molecules.hpp

All of Saskia Metzler's new function were transfered from boundary.cpp to tesselation.cpp and the changes due to TesselPoint, LinkedCell and so on incorporated.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/boundary.hpp

    r0dbddc rab1932  
    11#ifndef BOUNDARY_HPP_
    22#define BOUNDARY_HPP_
    3 
    4 class BoundaryPointSet;
    5 class BoundaryLineSet;
    6 class BoundaryTriangleSet;
    7 class CandidateForTesselation;
    83
    94// include config.h
     
    149// STL headers
    1510#include <map>
    16 #include <set>
    17 #include <deque>
    1811
    19 #include <gsl/gsl_poly.h>
    20 
     12#include "config.hpp"
    2113#include "linkedcell.hpp"
    2214#include "molecules.hpp"
     15#include "tesselation.hpp"
    2316
    24 template <typename T> void SetEndpointsOrdered(T endpoints[2], T endpoint1, T endpoint2)
    25 {
    26   if (endpoint1->Nr < endpoint2->Nr) {
    27     endpoints[0] = endpoint1;
    28     endpoints[1] = endpoint2;
    29   } else {
    30     endpoints[0] = endpoint2;
    31     endpoints[1] = endpoint1;
    32   }
    33 };
     17#define DEBUG 1
     18#define DoSingleStepOutput 0
     19#define DoTecplotOutput 1
     20#define DoRaster3DOutput 1
     21#define DoVRMLOutput 1
     22#define TecplotSuffix ".dat"
     23#define Raster3DSuffix ".r3d"
     24#define VRMLSUffix ".wrl"
    3425
    35 class BoundaryPointSet {
    36   public:
    37     BoundaryPointSet();
    38     BoundaryPointSet(atom *Walker);
    39     ~BoundaryPointSet();
     26#define DistancePair pair < double, atom* >
     27#define DistanceMap multimap < double, atom* >
     28#define DistanceTestPair pair < DistanceMap::iterator, bool>
    4029
    41     void AddLine(class BoundaryLineSet *line);
    42 
    43     LineMap lines;
    44     int LinesCount;
    45     atom *node;
    46     int Nr;
    47 };
    48 
    49 class BoundaryLineSet {
    50   public:
    51     BoundaryLineSet();
    52     BoundaryLineSet(class BoundaryPointSet *Point[2], int number);
    53     ~BoundaryLineSet();
    54 
    55     void AddTriangle(class BoundaryTriangleSet *triangle);
    56     bool IsConnectedTo(class BoundaryLineSet *line);
    57     bool ContainsBoundaryPoint(class BoundaryPointSet *point);
    58     bool CheckConvexityCriterion(ofstream *out);
    59 
    60     class BoundaryPointSet *endpoints[2];
    61     TriangleMap triangles;
    62     int TrianglesCount;
    63     int Nr;
    64 };
    65 
    66 class BoundaryTriangleSet {
    67   public:
    68     BoundaryTriangleSet();
    69     BoundaryTriangleSet(class BoundaryLineSet *line[3], int number);
    70     ~BoundaryTriangleSet();
    71 
    72     void GetNormalVector(Vector &NormalVector);
    73     bool GetIntersectionInsideTriangle(ofstream *out, Vector *MolCenter, Vector *x, Vector *Intersection);
    74     bool ContainsBoundaryLine(class BoundaryLineSet *line);
    75     bool ContainsBoundaryPoint(class BoundaryPointSet *point);
    76 
    77     class BoundaryPointSet *endpoints[3];
    78     class BoundaryLineSet *lines[3];
    79     Vector NormalVector;
    80     int Nr;
    81 };
    82 
    83 
    84 class CandidateForTesselation {
    85   public :
    86   CandidateForTesselation(atom* candidate, BoundaryLineSet* currentBaseLine, Vector OptCandidateCenter, Vector OtherOptCandidateCenter);
    87   ~CandidateForTesselation();
    88   atom *point;
    89   BoundaryLineSet *BaseLine;
    90   Vector OptCenter;
    91   Vector OtherOptCenter;
    92 };
    93 
    94 
    95 class Tesselation {
    96   public:
    97 
    98     Tesselation();
    99     ~Tesselation();
    100 
    101     void TesselateOnBoundary(ofstream *out, molecule *mol);
    102     void GuessStartingTriangle(ofstream *out);
    103     void AddPoint(atom * Walker);
    104     void AddTrianglePoint(atom* Candidate, int n);
    105     void AddTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, int n);
    106     void AlwaysAddTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, int n);
    107     void AddTriangle();
    108     void Find_starting_triangle(ofstream *out, molecule* mol, const double RADIUS, LinkedCell *LC);
    109     bool Find_next_suitable_triangle(ofstream *out, molecule* mol, BoundaryLineSet &Line, BoundaryTriangleSet &T, const double& RADIUS, int N, const char *filename, LinkedCell *LC);
    110     int CheckPresenceOfTriangle(ofstream *out, atom *Candidates[3]);
    111     void Find_next_suitable_point_via_Angle_of_Sphere(atom* a, atom* b, atom* c, atom* Candidate, atom* Parent, int RecursionLevel, Vector *Chord, Vector *direction1, Vector *OldNormal, Vector ReferencePoint, atom*& Opt_Candidate, double *Storage, const double RADIUS, molecule* mol);
    112     class BoundaryTriangleSet * FindClosestTriangleToPoint(ofstream *out, Vector *x);
    113     bool IsInside(Vector *pointer);
    114     bool InsertStraddlingPoints(ofstream *out, molecule *mol);
    115     bool CorrectConcaveBaselines(ofstream *out);
    116     list<atom*> *getClosestConnectedAtoms(atom* Atom, atom* AtomToCheck);
    117     list<BoundaryTriangleSet*> *FindTriangles(atom* TrianglePoints[3]);
    118 
    119     PointMap PointsOnBoundary;
    120     LineMap LinesOnBoundary;
    121     TriangleMap TrianglesOnBoundary;
    122     class BoundaryPointSet *TPS[3]; //this is a Storage for pointers to triangle points, this and BPS[2] needed due to AddLine restrictions
    123     class BoundaryPointSet *BPS[2];
    124     class BoundaryLineSet *BLS[3];
    125     class BoundaryTriangleSet *BTS;
    126     int PointsOnBoundaryCount;
    127     int LinesOnBoundaryCount;
    128     int TrianglesOnBoundaryCount;
    129     int TriangleFilesWritten;
    130 };
    131 
    132 
    133 ostream & operator << (ostream &ost, BoundaryPointSet &a);
    134 ostream & operator << (ostream &ost, BoundaryLineSet &a);
    135 ostream & operator << (ostream &ost, BoundaryTriangleSet &a);
    136 
     30#define Boundaries map <double, DistancePair >
     31#define BoundariesPair pair<double, DistancePair >
     32#define BoundariesTestPair pair< Boundaries::iterator, bool>
    13733
    13834double VolumeOfConvexEnvelope(ofstream *out, class Tesselation *TesselStruct, class config *configuration);
     
    14339void Find_non_convex_border(ofstream *out, molecule* mol, class Tesselation *T, class LinkedCell *LC, const char *tempbasename, const double RADIUS);
    14440void Find_next_suitable_point(class BoundaryTriangleSet *BaseTriangle, class BoundaryLineSet *BaseLine, atom*& OptCandidate, Vector *OptCandidateCenter, double *ShortestAngle, const double RADIUS, LinkedCell *LC);
    145 bool Choose_preferable_third_point(atom *Candidate, atom *OptCandidate, class BoundaryLineSet *BaseLine, atom *ThirdNode, Tesselation *Tess);
    146 bool existsIntersection(Vector point1, Vector point2, Vector point3, Vector point4);
    147 bool sortCandidates(CandidateForTesselation* candidate1, CandidateForTesselation* candidate2);
    148 bool IsInnerPoint(Vector Point, class Tesselation *Tess, LinkedCell* LC);
    149 bool IsInnerAtom(atom *Atom, class Tesselation *Tess, LinkedCell* LC);
    150 atom* findClosestAtom(const atom* Atom, LinkedCell* LC);
    151 double getAngle(Vector point, Vector reference, Vector center, Vector OrthogonalVector);
     41Boundaries *GetBoundaryPoints(ofstream *out, molecule *mol);
    15242
    15343#endif /*BOUNDARY_HPP_*/
Note: See TracChangeset for help on using the changeset viewer.