VTK  9.0.1
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 
130  vtkAtom GetAtom(vtkIdType atomId);
131 
135  vtkIdType GetNumberOfAtoms();
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 
153  vtkBond GetBond(vtkIdType bondId);
154 
158  vtkIdType GetNumberOfBonds();
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 
186  vtkVector3f GetAtomPosition(vtkIdType atomId);
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 
214  vtkPoints* GetAtomicPositionArray();
215  vtkUnsignedShortArray* GetAtomicNumberArray();
216  vtkUnsignedShortArray* GetBondOrdersArray();
218 
220 
223  vtkGetObjectMacro(ElectronicData, vtkAbstractElectronicData);
224  virtual void SetElectronicData(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 
254  virtual void ShallowCopyStructure(vtkMolecule* m);
255 
259  virtual void DeepCopyStructure(vtkMolecule* m);
260 
265  virtual void ShallowCopyAttributes(vtkMolecule* m);
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 
331  vtkMatrix3x3* GetLattice();
332 
334 
337  void GetLattice(vtkVector3d& a, vtkVector3d& b, vtkVector3d& c);
338  void GetLattice(vtkVector3d& a, vtkVector3d& b, vtkVector3d& c, vtkVector3d& origin);
340 
342 
345  vtkGetMacro(LatticeOrigin, vtkVector3d);
346  vtkSetMacro(LatticeOrigin, vtkVector3d);
348 
352  vtkUnsignedCharArray* GetAtomGhostArray();
353 
357  void AllocateAtomGhostArray();
358 
362  vtkUnsignedCharArray* GetBondGhostArray();
363 
367  void AllocateBondGhostArray();
368 
373  int Initialize(
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:
438  vtkMolecule();
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; }
460  void UpdateBondList();
461  vtkIdTypeArray* GetBondList();
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:33
VTK_MOLECULE
#define VTK_MOLECULE
Definition: vtkType.h:118
vtkPlane
perform various plane computations
Definition: vtkPlane.h:31
vtkUndirectedGraph
An undirected graph.
Definition: vtkUndirectedGraph.h:48
vtkMolecule::AppendAtom
vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f &pos)
Definition: vtkMolecule.h:116
vtkGraph::GetEdgeData
virtual vtkDataSetAttributes * GetEdgeData()
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkUnsignedShortArray
dynamic, self-adjusting array of unsigned short
Definition: vtkUnsignedShortArray.h:39
vtkGraph::Initialize
void Initialize() override
Initialize to an empty graph.
vtkDataSetAttributes
represent and manipulate attribute data in a dataset
Definition: vtkDataSetAttributes.h:53
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:35
vtkMolecule::AppendAtom
vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
Definition: vtkMolecule.h:121
vtkUndirectedGraph.h
vtkUnsignedCharArray
dynamic, self-adjusting array of unsigned char
Definition: vtkUnsignedCharArray.h:35
vtkGraph::DeepCopy
void DeepCopy(vtkDataObject *obj) override
Deep copies the data object into this graph.
vtkSmartPointer< vtkMatrix3x3 >
vtkVector.h
vtkMolecule::BondOrdersArrayName
char * BondOrdersArrayName
Definition: vtkMolecule.h:475
vtkUndirectedGraph::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:49
vtkBond
convenience proxy for vtkMolecule
Definition: vtkBond.h:30
vtkMatrix3x3
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:33
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::AtomGhostArray
vtkUnsignedCharArray * AtomGhostArray
Definition: vtkMolecule.h:471
vtkAtom
convenience proxy for vtkMolecule
Definition: vtkAtom.h:31
vtkMolecule::AppendBond
vtkBond AppendBond(const vtkAtom &atom1, const vtkAtom &atom2, unsigned short order=1)
Definition: vtkMolecule.h:144
vtkMolecule::GetBondData
vtkDataSetAttributes * GetBondData()
Return the EdgeData of the underlying graph.
Definition: vtkMolecule.h:405
vtkMolecule::GetAtomData
vtkDataSetAttributes * GetAtomData()
Return the VertexData of the underlying graph.
Definition: vtkMolecule.h:400
vtkGraph::CheckedDeepCopy
virtual bool CheckedDeepCopy(vtkGraph *g)
Performs the same operation as DeepCopy(), but instead of reporting an error for an incompatible grap...
vtkMolecule::Initialize
int Initialize(vtkPoints *atomPositions, vtkDataSetAttributes *atomData)
Overloads Initialize method.
Definition: vtkMolecule.h:379
vtkGraph::CheckedShallowCopy
virtual bool CheckedShallowCopy(vtkGraph *g)
Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible g...
vtkAbstractElectronicData
Provides access to and storage of chemical electronic data.
Definition: vtkAbstractElectronicData.h:30
vtkVector3f
Definition: vtkVector.h:475
vtkUndirectedGraph::GetData
static vtkUndirectedGraph * GetData(vtkInformation *info)
Retrieve a graph from an information vector.
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:33
vtkSmartPointer.h
vtkMolecule::LatticeOrigin
vtkVector3d LatticeOrigin
Definition: vtkMolecule.h:469
vtkMolecule::SetAtomPosition
void SetAtomPosition(vtkIdType atomId, double pos[3])
Definition: vtkMolecule.h:176
vtkMolecule
class describing a molecule
Definition: vtkMolecule.h:91
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
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:73
vtkMolecule::AtomicNumberArrayName
char * AtomicNumberArrayName
Definition: vtkMolecule.h:474
vtkX3D::info
@ info
Definition: vtkX3D.h:382
vtkGraph::ShallowCopy
void ShallowCopy(vtkDataObject *obj) override
Shallow copies the data object into this graph.
vtkMolecule::Lattice
vtkSmartPointer< vtkMatrix3x3 > Lattice
Definition: vtkMolecule.h:468
vtkIdTypeArray
dynamic, self-adjusting array of vtkIdType
Definition: vtkIdTypeArray.h:35
vtkMolecule::SetBondListDirty
void SetBondListDirty()
Definition: vtkMolecule.h:459
vtkMolecule::AppendAtom
vtkAtom AppendAtom()
Add new atom with atomic number 0 (dummy atom) at origin.
Definition: vtkMolecule.h:108
vtkGraph
Base class for graph data types.
Definition: vtkGraph.h:289
vtkAtom::Id
vtkIdType Id
Definition: vtkAtom.h:72
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:59
vtkMolecule::ElectronicData
vtkAbstractElectronicData * ElectronicData
Definition: vtkMolecule.h:467
vtkBond::vtkMolecule
friend class vtkMolecule
Definition: vtkBond.h:78
vtkUndirectedGraph::New
static vtkUndirectedGraph * New()
vtkVector3d
Definition: vtkVector.h:488
vtkAtom.h
vtkGraph::GetActualMemorySize
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).