VTK  9.0.20210518
vtkMolecule.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkMolecule.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
69 #ifndef vtkMolecule_h
70 #define vtkMolecule_h
71 
72 #include "vtkCommonDataModelModule.h" // For export macro
73 #include "vtkSmartPointer.h" // For vtkSmartPointer
74 #include "vtkUndirectedGraph.h"
75 
76 #include "vtkAtom.h" // Simple proxy class dependent on vtkMolecule
77 #include "vtkBond.h" // Simple proxy class dependent on vtkMolecule
78 
79 #include "vtkVector.h" // Small templated vector convenience class
80 
82 class vtkDataArray;
83 class vtkInformation;
85 class vtkMatrix3x3;
86 class vtkPlane;
87 class vtkPoints;
90 
91 class VTKCOMMONDATAMODEL_EXPORT vtkMolecule : public vtkUndirectedGraph
92 {
93 public:
94  static vtkMolecule* New();
96  void PrintSelf(ostream& os, vtkIndent indent) override;
97  void Initialize() override;
98 
102  int GetDataObjectType() override { return VTK_MOLECULE; }
103 
108  vtkAtom AppendAtom() { return this->AppendAtom(0, 0., 0., 0.); }
109 
111 
115  vtkAtom AppendAtom(unsigned short atomicNumber, double x, double y, double z);
116  vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f& pos)
117  {
118  return this->AppendAtom(atomicNumber, pos[0], pos[1], pos[2]);
119  }
120 
121  vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
122  {
123  return this->AppendAtom(atomicNumber, pos[0], pos[1], pos[2]);
124  }
126 
131 
136 
138 
143  vtkBond AppendBond(vtkIdType atom1, vtkIdType atom2, unsigned short order = 1);
144  vtkBond AppendBond(const vtkAtom& atom1, const vtkAtom& atom2, unsigned short order = 1)
145  {
146  return this->AppendBond(atom1.Id, atom2.Id, order);
147  }
149 
154 
159 
163  unsigned short GetAtomAtomicNumber(vtkIdType atomId);
164 
168  void SetAtomAtomicNumber(vtkIdType atomId, unsigned short atomicNum);
169 
171 
174  void SetAtomPosition(vtkIdType atomId, const vtkVector3f& pos);
175  void SetAtomPosition(vtkIdType atomId, double x, double y, double z);
176  void SetAtomPosition(vtkIdType atomId, double pos[3])
177  {
178  this->SetAtomPosition(atomId, pos[0], pos[1], pos[2]);
179  }
181 
183 
187  void GetAtomPosition(vtkIdType atomId, float pos[3]);
188  void GetAtomPosition(vtkIdType atomId, double pos[3]);
190 
192 
195  void SetBondOrder(vtkIdType bondId, unsigned short order);
196  unsigned short GetBondOrder(vtkIdType bondId);
198 
208  double GetBondLength(vtkIdType bondId);
209 
211 
218 
220 
223  vtkGetObjectMacro(ElectronicData, vtkAbstractElectronicData);
226 
232  bool CheckedShallowCopy(vtkGraph* g) override;
233 
239  bool CheckedDeepCopy(vtkGraph* g) override;
240 
244  void ShallowCopy(vtkDataObject* obj) override;
245 
249  void DeepCopy(vtkDataObject* obj) override;
250 
255 
259  virtual void DeepCopyStructure(vtkMolecule* m);
260 
266 
271  virtual void DeepCopyAttributes(vtkMolecule* m);
272 
274 
301  static bool GetPlaneFromBond(const vtkBond& bond, const vtkVector3f& normal, vtkPlane* plane);
302  static bool GetPlaneFromBond(
303  const vtkAtom& atom1, const vtkAtom& atom2, const vtkVector3f& normal, vtkPlane* plane);
305 
309  bool HasLattice();
310 
314  void ClearLattice();
315 
317 
321  void SetLattice(vtkMatrix3x3* matrix);
322  void SetLattice(const vtkVector3d& a, const vtkVector3d& b, const vtkVector3d& c);
324 
332 
334 
340 
342 
345  vtkGetMacro(LatticeOrigin, vtkVector3d);
346  vtkSetMacro(LatticeOrigin, vtkVector3d);
348 
353 
358 
363 
368 
374  vtkPoints* atomPositions, vtkDataArray* atomicNumberArray, vtkDataSetAttributes* atomData);
375 
379  int Initialize(vtkPoints* atomPositions, vtkDataSetAttributes* atomData)
380  {
381  return this->Initialize(atomPositions, nullptr, atomData);
382  }
383 
387  int Initialize(vtkMolecule* molecule);
388 
390 
394  static vtkMolecule* GetData(vtkInformationVector* v, int i = 0);
396 
401 
406 
410  vtkIdType GetBondId(vtkIdType a, vtkIdType b) { return this->GetEdgeId(a, b); }
411 
413 
416  vtkSetStringMacro(AtomicNumberArrayName);
417  vtkGetStringMacro(AtomicNumberArrayName);
419 
421 
424  vtkSetStringMacro(BondOrdersArrayName);
425  vtkGetStringMacro(BondOrdersArrayName);
427 
435  unsigned long GetActualMemorySize() override;
436 
437 protected:
439  ~vtkMolecule() override;
440 
444  virtual void CopyStructureInternal(vtkMolecule* m, bool deep);
445 
449  virtual void CopyAttributesInternal(vtkMolecule* m, bool deep);
450 
452 
459  void SetBondListDirty() { this->BondListIsDirty = true; }
463 
464  friend class vtkAtom;
465  friend class vtkBond;
466 
470 
473 
476 
477 private:
478  vtkMolecule(const vtkMolecule&) = delete;
479  void operator=(const vtkMolecule&) = delete;
480 };
481 
482 #endif
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:34
vtkMolecule::GetActualMemorySize
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
vtkMolecule::GetAtomicPositionArray
vtkPoints * GetAtomicPositionArray()
Access the raw arrays used in this vtkMolecule instance.
VTK_MOLECULE
#define VTK_MOLECULE
Definition: vtkType.h:110
vtkPlane
perform various plane computations
Definition: vtkPlane.h:34
vtkMolecule::AppendAtom
vtkAtom AppendAtom(unsigned short atomicNumber, double x, double y, double z)
Add new atom with the specified atomic number and position.
vtkMolecule::GetBondGhostArray
vtkUnsignedCharArray * GetBondGhostArray()
Get the array that defines the ghost type of each bond.
vtkUndirectedGraph
An undirected graph.
Definition: vtkUndirectedGraph.h:49
vtkMolecule::GetBondList
vtkIdTypeArray * GetBondList()
The graph superclass does not provide fast random access to the edge (bond) data.
vtkMolecule::~vtkMolecule
~vtkMolecule() override
vtkMolecule::AppendAtom
vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f &pos)
Add new atom with the specified atomic number and position.
Definition: vtkMolecule.h:116
vtkGraph::GetEdgeData
virtual vtkDataSetAttributes * GetEdgeData()
Get the vertex or edge data.
vtkIdType
int vtkIdType
Definition: vtkType.h:332
vtkUnsignedShortArray
dynamic, self-adjusting array of unsigned short
Definition: vtkUnsignedShortArray.h:40
vtkGraph::Initialize
void Initialize() override
Initialize to an empty graph.
vtkDataSetAttributes
represent and manipulate attribute data in a dataset
Definition: vtkDataSetAttributes.h:61
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:36
vtkMolecule::AppendAtom
vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
Add new atom with the specified atomic number and position.
Definition: vtkMolecule.h:121
vtkUndirectedGraph.h
vtkUnsignedCharArray
dynamic, self-adjusting array of unsigned char
Definition: vtkUnsignedCharArray.h:36
vtkMolecule::GetAtomAtomicNumber
unsigned short GetAtomAtomicNumber(vtkIdType atomId)
Return the atomic number of the atom with the specified id.
vtkMolecule::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkMolecule::HasLattice
bool HasLattice()
Return true if a unit cell lattice is defined.
vtkMolecule::GetData
static vtkMolecule * GetData(vtkInformationVector *v, int i=0)
Retrieve a molecule from an information vector.
vtkMolecule::GetAtomPosition
void GetAtomPosition(vtkIdType atomId, float pos[3])
Get the position of the atom with the specified id.
vtkSmartPointer< vtkMatrix3x3 >
vtkVector.h
vtkMolecule::BondOrdersArrayName
char * BondOrdersArrayName
Definition: vtkMolecule.h:475
vtkMolecule::GetAtomPosition
void GetAtomPosition(vtkIdType atomId, double pos[3])
Get the position of the atom with the specified id.
vtkMolecule::GetNumberOfBonds
vtkIdType GetNumberOfBonds()
Return the number of bonds in the molecule.
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:50
vtkMolecule::CheckedShallowCopy
bool CheckedShallowCopy(vtkGraph *g) override
Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible g...
vtkBond
convenience proxy for vtkMolecule
Definition: vtkBond.h:31
vtkMatrix3x3
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:34
vtkMolecule::SetLattice
void SetLattice(const vtkVector3d &a, const vtkVector3d &b, const vtkVector3d &c)
The unit cell vectors.
vtkMolecule::GetBondId
vtkIdType GetBondId(vtkIdType a, vtkIdType b)
Return the edge id from the underlying graph.
Definition: vtkMolecule.h:410
vtkGraph::GetVertexData
virtual vtkDataSetAttributes * GetVertexData()
Get the vertex or edge data.
vtkMolecule::BondListIsDirty
bool BondListIsDirty
The graph superclass does not provide fast random access to the edge (bond) data.
Definition: vtkMolecule.h:458
vtkMolecule::Initialize
int Initialize(vtkPoints *atomPositions, vtkDataArray *atomicNumberArray, vtkDataSetAttributes *atomData)
Initialize a molecule with an atom per input point.
vtkMolecule::AtomGhostArray
vtkUnsignedCharArray * AtomGhostArray
Definition: vtkMolecule.h:471
vtkAtom
convenience proxy for vtkMolecule
Definition: vtkAtom.h:32
vtkMolecule::GetBondOrdersArray
vtkUnsignedShortArray * GetBondOrdersArray()
Access the raw arrays used in this vtkMolecule instance.
vtkMolecule::ShallowCopyStructure
virtual void ShallowCopyStructure(vtkMolecule *m)
Shallow copies the atoms and bonds from m into this.
vtkMolecule::AppendBond
vtkBond AppendBond(const vtkAtom &atom1, const vtkAtom &atom2, unsigned short order=1)
Add a bond between the specified atoms, optionally setting the bond order (default: 1).
Definition: vtkMolecule.h:144
vtkMolecule::SetElectronicData
virtual void SetElectronicData(vtkAbstractElectronicData *)
Set/Get the AbstractElectronicData-subclassed object for this molecule.
vtkMolecule::GetBondData
vtkDataSetAttributes * GetBondData()
Return the EdgeData of the underlying graph.
Definition: vtkMolecule.h:405
vtkMolecule::DeepCopyAttributes
virtual void DeepCopyAttributes(vtkMolecule *m)
Deep copies attributes (i.e.
vtkMolecule::GetAtomData
vtkDataSetAttributes * GetAtomData()
Return the VertexData of the underlying graph.
Definition: vtkMolecule.h:400
vtkMolecule::UpdateBondList
void UpdateBondList()
The graph superclass does not provide fast random access to the edge (bond) data.
vtkMolecule::SetLattice
void SetLattice(vtkMatrix3x3 *matrix)
The unit cell vectors.
vtkMolecule::ShallowCopyAttributes
virtual void ShallowCopyAttributes(vtkMolecule *m)
Shallow copies attributes (i.e.
vtkMolecule::Initialize
int Initialize(vtkPoints *atomPositions, vtkDataSetAttributes *atomData)
Overloads Initialize method.
Definition: vtkMolecule.h:379
vtkAbstractElectronicData
Provides access to and storage of chemical electronic data.
Definition: vtkAbstractElectronicData.h:31
vtkVector3f
Definition: vtkVector.h:476
vtkMolecule::DeepCopy
void DeepCopy(vtkDataObject *obj) override
Deep copies the data object into this molecule.
vtkMolecule::ShallowCopy
void ShallowCopy(vtkDataObject *obj) override
Shallow copies the data object into this molecule.
vtkMolecule::GetLattice
vtkMatrix3x3 * GetLattice()
Get the unit cell lattice vectors.
vtkMolecule::CopyStructureInternal
virtual void CopyStructureInternal(vtkMolecule *m, bool deep)
Copy bonds and atoms.
vtkMolecule::CheckedDeepCopy
bool CheckedDeepCopy(vtkGraph *g) override
Performs the same operation as DeepCopy(), but instead of reporting an error for an incompatible grap...
vtkMolecule::GetPlaneFromBond
static bool GetPlaneFromBond(const vtkBond &bond, const vtkVector3f &normal, vtkPlane *plane)
Obtain the plane that passes through the indicated bond with the given normal.
vtkGraph::GetEdgeId
vtkIdType GetEdgeId(vtkIdType a, vtkIdType b)
Returns the Id of the edge between vertex a and vertex b.
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:34
vtkMolecule::CopyAttributesInternal
virtual void CopyAttributesInternal(vtkMolecule *m, bool deep)
Copy everything but bonds and atoms.
vtkMolecule::AllocateAtomGhostArray
void AllocateAtomGhostArray()
Allocate ghost array for atoms.
vtkMolecule::Initialize
int Initialize(vtkMolecule *molecule)
Use input molecule points, atomic number and atomic data to initialize the new molecule.
vtkMolecule::GetLattice
void GetLattice(vtkVector3d &a, vtkVector3d &b, vtkVector3d &c)
Get the unit cell lattice vectors, and optionally, the origin.
vtkSmartPointer.h
vtkMolecule::SetAtomAtomicNumber
void SetAtomAtomicNumber(vtkIdType atomId, unsigned short atomicNum)
Set the atomic number of the atom with the specified id.
vtkMolecule::SetAtomPosition
void SetAtomPosition(vtkIdType atomId, double x, double y, double z)
Set the position of the atom with the specified id.
vtkMolecule::LatticeOrigin
vtkVector3d LatticeOrigin
Definition: vtkMolecule.h:469
vtkMolecule::GetPlaneFromBond
static bool GetPlaneFromBond(const vtkAtom &atom1, const vtkAtom &atom2, const vtkVector3f &normal, vtkPlane *plane)
Obtain the plane that passes through the indicated bond with the given normal.
vtkMolecule::GetAtomGhostArray
vtkUnsignedCharArray * GetAtomGhostArray()
Get the array that defines the ghost type of each atom.
vtkMolecule::SetAtomPosition
void SetAtomPosition(vtkIdType atomId, double pos[3])
Set the position of the atom with the specified id.
Definition: vtkMolecule.h:176
vtkMolecule
class describing a molecule
Definition: vtkMolecule.h:92
vtkMolecule::GetLattice
void GetLattice(vtkVector3d &a, vtkVector3d &b, vtkVector3d &c, vtkVector3d &origin)
Get the unit cell lattice vectors, and optionally, the origin.
vtkMolecule::BondGhostArray
vtkUnsignedCharArray * BondGhostArray
Definition: vtkMolecule.h:472
vtkX3D::order
@ order
Definition: vtkX3D.h:446
vtkBond.h
vtkMolecule::GetDataObjectType
int GetDataObjectType() override
Return what type of dataset this is.
Definition: vtkMolecule.h:102
vtkMolecule::GetBondOrder
unsigned short GetBondOrder(vtkIdType bondId)
Get/Set the bond order of the bond with the specified id.
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:74
vtkMolecule::DeepCopyStructure
virtual void DeepCopyStructure(vtkMolecule *m)
Deep copies the atoms and bonds from m into this.
vtkMolecule::AtomicNumberArrayName
char * AtomicNumberArrayName
Definition: vtkMolecule.h:474
vtkMolecule::GetBond
vtkBond GetBond(vtkIdType bondId)
Return a vtkAtom that refers to the bond with the specified id.
vtkX3D::info
@ info
Definition: vtkX3D.h:382
vtkMolecule::Initialize
void Initialize() override
Initialize to an empty graph.
vtkMolecule::GetAtomicNumberArray
vtkUnsignedShortArray * GetAtomicNumberArray()
Access the raw arrays used in this vtkMolecule instance.
vtkMolecule::Lattice
vtkSmartPointer< vtkMatrix3x3 > Lattice
Definition: vtkMolecule.h:468
vtkIdTypeArray
dynamic, self-adjusting array of vtkIdType
Definition: vtkIdTypeArray.h:36
vtkMolecule::vtkMolecule
vtkMolecule()
vtkMolecule::GetAtomPosition
vtkVector3f GetAtomPosition(vtkIdType atomId)
Get the position of the atom with the specified id.
vtkMolecule::SetBondListDirty
void SetBondListDirty()
The graph superclass does not provide fast random access to the edge (bond) data.
Definition: vtkMolecule.h:459
vtkMolecule::SetBondOrder
void SetBondOrder(vtkIdType bondId, unsigned short order)
Get/Set the bond order of the bond with the specified id.
vtkMolecule::AllocateBondGhostArray
void AllocateBondGhostArray()
Allocate ghost array for bonds.
vtkMolecule::AppendAtom
vtkAtom AppendAtom()
Add new atom with atomic number 0 (dummy atom) at origin.
Definition: vtkMolecule.h:108
vtkMolecule::SetAtomPosition
void SetAtomPosition(vtkIdType atomId, const vtkVector3f &pos)
Set the position of the atom with the specified id.
vtkGraph
Base class for graph data types.
Definition: vtkGraph.h:290
vtkAtom::Id
vtkIdType Id
Definition: vtkAtom.h:72
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:60
vtkMolecule::ElectronicData
vtkAbstractElectronicData * ElectronicData
Definition: vtkMolecule.h:467
vtkBond::vtkMolecule
friend class vtkMolecule
Definition: vtkBond.h:78
vtkMolecule::GetAtom
vtkAtom GetAtom(vtkIdType atomId)
Return a vtkAtom that refers to the atom with the specified id.
vtkVector3d
Definition: vtkVector.h:489
vtkMolecule::GetBondLength
double GetBondLength(vtkIdType bondId)
Get the bond length of the bond with the specified id.
vtkMolecule::New
static vtkMolecule * New()
vtkMolecule::GetNumberOfAtoms
vtkIdType GetNumberOfAtoms()
Return the number of atoms in the molecule.
vtkAtom.h
vtkMolecule::ClearLattice
void ClearLattice()
Remove any unit cell lattice information from the molecule.
vtkMolecule::GetData
static vtkMolecule * GetData(vtkInformation *info)
Retrieve a molecule from an information vector.
vtkMolecule::AppendBond
vtkBond AppendBond(vtkIdType atom1, vtkIdType atom2, unsigned short order=1)
Add a bond between the specified atoms, optionally setting the bond order (default: 1).