Mantid
Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
Mantid::Geometry::Union Class Reference

Combines two Rule objects in an union. More...

#include <Rules.h>

Inheritance diagram for Mantid::Geometry::Union:
Mantid::Geometry::Rule

Public Member Functions

std::string className () const override
 Returns class name as string. More...
 
std::unique_ptr< Unionclone () const
 Clone allows deep virtual coping. More...
 
std::string display () const override
 Display the union in the form (N:M) where N,M are the downward rules. More...
 
std::string displayAddress () const override
 Returns the memory address as a string. More...
 
RulefindKey (const int KeyN) override
 Finds the leaf with the surface number KeyN. More...
 
int findLeaf (const Rule *) const override
 Finds out if the Rule is the same as the leaves. More...
 
void getBoundingBox (double &xmax, double &ymax, double &zmax, double &xmin, double &ymin, double &zmin) override
 gets the bounding box for the Union Rule More...
 
int isComplementary () const override
 Determine is the rule has complementary sub components. More...
 
bool isValid (const Kernel::V3D &) const override
 Calculates if Vec is within the object. More...
 
bool isValid (const std::map< int, int > &) const override
 Use MX to determine if the surface truth etc is valie. More...
 
Ruleleaf (const int ipt=0) const override
 Select a leaf component. More...
 
void setLeaf (std::unique_ptr< Rule >, const int side=0) override
 Replaces a leaf with a rule. More...
 
void setLeaves (std::unique_ptr< Rule >, std::unique_ptr< Rule >) override
 set leaves More...
 
int simplify () override
 apply general intersection simplification More...
 
int type () const override
 effective name More...
 
 Union ()=default
 
 Union (Rule *, std::unique_ptr< Rule >, std::unique_ptr< Rule >)
 Union constructor from two Rule ptrs. More...
 
 Union (std::unique_ptr< Rule >, std::unique_ptr< Rule >)
 Union constructor from two Rule ptrs. More...
 
- Public Member Functions inherited from Mantid::Geometry::Rule
int checkParents () const
 Debug test for parents. More...
 
virtual std::string className () const
 Returns class name as string. More...
 
std::unique_ptr< Ruleclone () const
 
int commonType () const
 Gets a common type. More...
 
virtual std::string display () const =0
 Abstract Display. More...
 
virtual std::string displayAddress () const =0
 Abstract Display Address. More...
 
int Eliminate ()
 elimination not written More...
 
virtual RulefindKey (const int)=0
 Abstract key find. More...
 
virtual int findLeaf (const Rule *) const =0
 Abstract find. More...
 
virtual void getBoundingBox (double &xmax, double &ymax, double &zmax, double &xmin, double &ymin, double &zmin)=0
 Abstract getBoundingBox. More...
 
int getKeyList (std::vector< int > &) const
 Generate the key list given an insertion type object. More...
 
RulegetParent () const
 Returns the parent object. More...
 
virtual int isComplementary () const
 Always returns false (0) More...
 
virtual bool isValid (const Kernel::V3D &) const =0
 Abstract: The point is within the object. More...
 
virtual bool isValid (const std::map< int, int > &) const =0
 Abstract Validity based on surface true/false map. More...
 
virtual Ruleleaf (const int=0) const
 No leaf for a base rule. More...
 
void makeParents ()
 This is initialisation code that populates all the parents in the rule tree. More...
 
 Rule ()
 Standard Constructor. More...
 
 Rule (Rule *)
 Constructor copies. More...
 
virtual void setLeaf (std::unique_ptr< Rule >, const int=0)=0
 Abstract set. More...
 
virtual void setLeaves (std::unique_ptr< Rule >, std::unique_ptr< Rule >)=0
 abstract set leaves More...
 
void setParent (Rule *)
 Sets the parent object (not check for A==this) More...
 
virtual int simplify ()=0
 Abstract: Can the rule be simplified. More...
 
int substituteSurf (const int SurfN, const int newSurfN, const std::shared_ptr< Surface > &SPtr)
 Substitues a surface item if within a rule. More...
 
virtual int type () const
 Null rule. More...
 
virtual ~Rule ()=default
 

Protected Member Functions

Unionoperator= (const Union &)
 Assignment operator :: Does a deep copy of the leaves of Iother. More...
 
 Union (const Union &)
 Copy constructor: Does a clone on the sub-tree below. More...
 
- Protected Member Functions inherited from Mantid::Geometry::Rule
Ruleoperator= (const Rule &)
 Assignment operator= does not set parent as Rules are cloned. More...
 
 Rule (const Rule &)
 Constructor copies. More...
 

Private Member Functions

UniondoClone () const override
 Clone allows deep virtual coping. More...
 

Private Attributes

std::unique_ptr< RuleA
 Leaf rule A. More...
 
std::unique_ptr< RuleB
 Leaf rule B. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from Mantid::Geometry::Rule
static int makeCNF (std::unique_ptr< Rule > &)
 Make Rule into a CNF format. More...
 
static int makeCNFcopy (std::unique_ptr< Rule > &)
 Make Rule into a CNF format (slow) More...
 
static int makeFullDNF (std::unique_ptr< Rule > &)
 Make Rule into a full DNF format. More...
 
static int removeComplementary (std::unique_ptr< Rule > &)
 NOT WORKING. More...
 
static int removeItem (std::unique_ptr< Rule > &TRule, const int SurfN)
 Given an item as a surface name, remove the surface from the Rule tree. More...
 

Detailed Description

Combines two Rule objects in an union.

Author
S. Ansell
Version
1.0
Date
August 2005

Union is defined as a valid Rule A or valid rule B

Definition at line 160 of file Rules.h.

Constructor & Destructor Documentation

◆ Union() [1/4]

Mantid::Geometry::Union::Union ( const Union Iother)
protected

Copy constructor: Does a clone on the sub-tree below.

Parameters
Iother:: Union to copy

Definition at line 396 of file RuleItems.cpp.

References A, and B.

◆ Union() [2/4]

Mantid::Geometry::Union::Union ( )
default

Referenced by doClone().

◆ Union() [3/4]

Mantid::Geometry::Union::Union ( std::unique_ptr< Rule Ix,
std::unique_ptr< Rule Iy 
)
explicit

Union constructor from two Rule ptrs.

  • Sets A,B's parents to *this.
  • Allowed to control Ix and Iy
    Parameters
    Ix:: Rule A
    Iy:: Rule B

Definition at line 380 of file RuleItems.cpp.

References A, and B.

◆ Union() [4/4]

Mantid::Geometry::Union::Union ( Rule Parent,
std::unique_ptr< Rule Ix,
std::unique_ptr< Rule Iy 
)
explicit

Union constructor from two Rule ptrs.

  • Sets A,B's parents to *this
  • Allowed to control Ix and Iy
    Parameters
    Parent:: Rule that is the parent to this
    Ix:: Rule A
    Iy:: Rule B

Definition at line 363 of file RuleItems.cpp.

References A, and B.

Member Function Documentation

◆ className()

std::string Mantid::Geometry::Union::className ( ) const
inlineoverridevirtual

Returns class name as string.

Reimplemented from Mantid::Geometry::Rule.

Definition at line 177 of file Rules.h.

◆ clone()

std::unique_ptr< Union > Mantid::Geometry::Union::clone ( ) const

Clone allows deep virtual coping.

Returns
new Union copy.

Definition at line 446 of file RuleItems.cpp.

References doClone().

◆ display()

std::string Mantid::Geometry::Union::display ( ) const
overridevirtual

Display the union in the form (N:M) where N,M are the downward rules.

Returns
bracket string

Implements Mantid::Geometry::Rule.

Definition at line 579 of file RuleItems.cpp.

References A, and B.

◆ displayAddress()

std::string Mantid::Geometry::Union::displayAddress ( ) const
overridevirtual

Returns the memory address as a string.

Displays addresses of leaves

Returns
String of address

Implements Mantid::Geometry::Rule.

Definition at line 605 of file RuleItems.cpp.

References A, and B.

◆ doClone()

Union * Mantid::Geometry::Union::doClone ( ) const
overrideprivatevirtual

Clone allows deep virtual coping.

Returns
new Union copy.

Implements Mantid::Geometry::Rule.

Definition at line 437 of file RuleItems.cpp.

References Union().

Referenced by clone().

◆ findKey()

Rule * Mantid::Geometry::Union::findKey ( const int  KeyN)
overridevirtual

Finds the leaf with the surface number KeyN.

Parameters
KeyN:: Number to search for
Return values
0:: no leaf with that key number availiable
Rule*if an appropiate leaf is found

Implements Mantid::Geometry::Rule.

Definition at line 509 of file RuleItems.cpp.

References A, and B.

◆ findLeaf()

int Mantid::Geometry::Union::findLeaf ( const Rule R) const
overridevirtual

Finds out if the Rule is the same as the leaves.

Parameters
R:: Rule pointer to compare
Return values
0/ 1 for LHS / RHS leaf
-1:: neither leaf

Implements Mantid::Geometry::Rule.

Definition at line 493 of file RuleItems.cpp.

◆ getBoundingBox()

void Mantid::Geometry::Union::getBoundingBox ( double &  xmax,
double &  ymax,
double &  zmax,
double &  xmin,
double &  ymin,
double &  zmin 
)
overridevirtual

gets the bounding box for the Union Rule

Parameters
xmax:: Maximum value for the bounding box in x direction
ymax:: Maximum value for the bounding box in y direction
zmax:: Maximum value for the bounding box in z direction
xmin:: Minimum value for the bounding box in x direction
ymin:: Minimum value for the bounding box in y direction
zmin:: Minimum value for the bounding box in z direction

Implements Mantid::Geometry::Rule.

Definition at line 635 of file RuleItems.cpp.

References A, and B.

◆ isComplementary()

int Mantid::Geometry::Union::isComplementary ( ) const
overridevirtual

Determine is the rule has complementary sub components.

Return values
1:: A side
-1:: B side
0:: no complement

Reimplemented from Mantid::Geometry::Rule.

Definition at line 524 of file RuleItems.cpp.

References A, and B.

◆ isValid() [1/2]

bool Mantid::Geometry::Union::isValid ( const Kernel::V3D Vec) const
overridevirtual

Calculates if Vec is within the object.

Parameters
Vec:: Point to test
Return values
1:: Vec is within object
0:: Vec is outside object.

Implements Mantid::Geometry::Rule.

Definition at line 556 of file RuleItems.cpp.

◆ isValid() [2/2]

bool Mantid::Geometry::Union::isValid ( const std::map< int, int > &  MX) const
overridevirtual

Use MX to determine if the surface truth etc is valie.

Parameters
MX:: map of key + logical value XOR sign
Return values
1:: if either side is valid
0:: Neither side is valid

Implements Mantid::Geometry::Rule.

Definition at line 567 of file RuleItems.cpp.

◆ leaf()

Rule * Mantid::Geometry::Union::leaf ( const int  ipt = 0) const
inlineoverridevirtual

Select a leaf component.

Reimplemented from Mantid::Geometry::Rule.

Definition at line 179 of file Rules.h.

◆ operator=()

Union & Mantid::Geometry::Union::operator= ( const Union Iother)
protected

Assignment operator :: Does a deep copy of the leaves of Iother.

Parameters
Iother:: Union to assign to it.
Returns
this union (copy).

Definition at line 414 of file RuleItems.cpp.

References A, B, and Mantid::Geometry::Rule::operator=().

◆ setLeaf()

void Mantid::Geometry::Union::setLeaf ( std::unique_ptr< Rule nR,
const int  side = 0 
)
overridevirtual

Replaces a leaf with a rule.

Calls delete on previous leaf.

Parameters
nR:: new rule
side:: side to use
  • 0 == LHS
  • 1 == RHS

Implements Mantid::Geometry::Rule.

Definition at line 455 of file RuleItems.cpp.

References A, and B.

◆ setLeaves()

void Mantid::Geometry::Union::setLeaves ( std::unique_ptr< Rule aR,
std::unique_ptr< Rule bR 
)
overridevirtual

set leaves

Replaces a both with a rule.

No deletion is carried out but sets the parents.

Parameters
aR:: Rule on the left
bR:: Rule on the right

Implements Mantid::Geometry::Rule.

Definition at line 477 of file RuleItems.cpp.

References A, and B.

◆ simplify()

int Mantid::Geometry::Union::simplify ( )
overridevirtual

apply general intersection simplification

Union simplification::

  • -S S simplify to True.
  • S S simplify to S
  • -S -S simplifies to -S
    Return values
    1if clauses removed (not top)
    -1replacement of this intersection is required by leaf 0
    0if no work to do.

Implements Mantid::Geometry::Rule.

Definition at line 541 of file RuleItems.cpp.

◆ type()

int Mantid::Geometry::Union::type ( ) const
inlineoverridevirtual

effective name

Reimplemented from Mantid::Geometry::Rule.

Definition at line 187 of file Rules.h.

Member Data Documentation

◆ A

std::unique_ptr<Rule> Mantid::Geometry::Union::A
private

Leaf rule A.

Definition at line 163 of file Rules.h.

Referenced by display(), displayAddress(), findKey(), getBoundingBox(), isComplementary(), operator=(), setLeaf(), setLeaves(), and Union().

◆ B

std::unique_ptr<Rule> Mantid::Geometry::Union::B
private

Leaf rule B.

Definition at line 164 of file Rules.h.

Referenced by display(), displayAddress(), findKey(), getBoundingBox(), isComplementary(), operator=(), setLeaf(), setLeaves(), and Union().


The documentation for this class was generated from the following files: