VTK  9.2.6
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=========================================================================*/
72#ifndef vtkMolecule_h
73#define vtkMolecule_h
74
75#include "vtkCommonDataModelModule.h" // For export macro
76#include "vtkSmartPointer.h" // For vtkSmartPointer
77#include "vtkUndirectedGraph.h"
78
79#include "vtkAtom.h" // Simple proxy class dependent on vtkMolecule
80#include "vtkBond.h" // Simple proxy class dependent on vtkMolecule
81
82#include "vtkVector.h" // Small templated vector convenience class
83
85class vtkDataArray;
86class vtkInformation;
88class vtkMatrix3x3;
89class vtkPlane;
90class vtkPoints;
93
94class VTKCOMMONDATAMODEL_EXPORT vtkMolecule : public vtkUndirectedGraph
95{
96public:
97 static vtkMolecule* New();
99 void PrintSelf(ostream& os, vtkIndent indent) override;
100 void Initialize() override;
101
105 int GetDataObjectType() override { return VTK_MOLECULE; }
106
111 vtkAtom AppendAtom() { return this->AppendAtom(0, 0., 0., 0.); }
112
114
118 vtkAtom AppendAtom(unsigned short atomicNumber, double x, double y, double z);
119 vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f& pos)
120 {
121 return this->AppendAtom(atomicNumber, pos[0], pos[1], pos[2]);
122 }
123
124 vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
125 {
126 return this->AppendAtom(atomicNumber, pos[0], pos[1], pos[2]);
127 }
129
134
139
141
146 vtkBond AppendBond(vtkIdType atom1, vtkIdType atom2, unsigned short order = 1);
147 vtkBond AppendBond(const vtkAtom& atom1, const vtkAtom& atom2, unsigned short order = 1)
148 {
149 return this->AppendBond(atom1.Id, atom2.Id, order);
150 }
152
157
162
166 unsigned short GetAtomAtomicNumber(vtkIdType atomId);
167
171 void SetAtomAtomicNumber(vtkIdType atomId, unsigned short atomicNum);
172
174
177 void SetAtomPosition(vtkIdType atomId, const vtkVector3f& pos);
178 void SetAtomPosition(vtkIdType atomId, double x, double y, double z);
179 void SetAtomPosition(vtkIdType atomId, double pos[3])
180 {
181 this->SetAtomPosition(atomId, pos[0], pos[1], pos[2]);
182 }
184
186
190 void GetAtomPosition(vtkIdType atomId, float pos[3]);
191 void GetAtomPosition(vtkIdType atomId, double pos[3]);
193
195
198 void SetBondOrder(vtkIdType bondId, unsigned short order);
199 unsigned short GetBondOrder(vtkIdType bondId);
201
211 double GetBondLength(vtkIdType bondId);
212
214
221
223
226 vtkGetObjectMacro(ElectronicData, vtkAbstractElectronicData);
229
235 bool CheckedShallowCopy(vtkGraph* g) override;
236
242 bool CheckedDeepCopy(vtkGraph* g) override;
243
247 void ShallowCopy(vtkDataObject* obj) override;
248
252 void DeepCopy(vtkDataObject* obj) override;
253
258
263
269
275
277
304 static bool GetPlaneFromBond(const vtkBond& bond, const vtkVector3f& normal, vtkPlane* plane);
305 static bool GetPlaneFromBond(
306 const vtkAtom& atom1, const vtkAtom& atom2, const vtkVector3f& normal, vtkPlane* plane);
308
313
318
320
325 void SetLattice(const vtkVector3d& a, const vtkVector3d& b, const vtkVector3d& c);
327
335
337
343
345
348 vtkGetMacro(LatticeOrigin, vtkVector3d);
349 vtkSetMacro(LatticeOrigin, vtkVector3d);
351
356
361
366
371
377 vtkPoints* atomPositions, vtkDataArray* atomicNumberArray, vtkDataSetAttributes* atomData);
378
382 int Initialize(vtkPoints* atomPositions, vtkDataSetAttributes* atomData)
383 {
384 return this->Initialize(atomPositions, nullptr, atomData);
385 }
386
390 int Initialize(vtkMolecule* molecule);
391
393
399
404
409
413 vtkIdType GetBondId(vtkIdType a, vtkIdType b) { return this->GetEdgeId(a, b); }
414
416
419 vtkSetStringMacro(AtomicNumberArrayName);
420 vtkGetStringMacro(AtomicNumberArrayName);
422
424
427 vtkSetStringMacro(BondOrdersArrayName);
428 vtkGetStringMacro(BondOrdersArrayName);
430
438 unsigned long GetActualMemorySize() override;
439
440protected:
442 ~vtkMolecule() override;
443
447 virtual void CopyStructureInternal(vtkMolecule* m, bool deep);
448
452 virtual void CopyAttributesInternal(vtkMolecule* m, bool deep);
453
455
462 void SetBondListDirty() { this->BondListIsDirty = true; }
466
467 friend class vtkAtom;
468 friend class vtkBond;
469
473
476
479
480private:
481 vtkMolecule(const vtkMolecule&) = delete;
482 void operator=(const vtkMolecule&) = delete;
483};
484
485#endif
Provides access to and storage of chemical electronic data.
convenience proxy for vtkMolecule
Definition: vtkAtom.h:35
vtkIdType Id
Definition: vtkAtom.h:75
convenience proxy for vtkMolecule
Definition: vtkBond.h:34
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:56
general representation of visualization data
Definition: vtkDataObject.h:66
represent and manipulate attribute data in a dataset
Base class for graph data types.
Definition: vtkGraph.h:296
void Initialize() override
Initialize to an empty graph.
virtual vtkDataSetAttributes * GetVertexData()
Get the vertex or edge data.
vtkIdType GetEdgeId(vtkIdType a, vtkIdType b)
Returns the Id of the edge between vertex a and vertex b.
virtual vtkDataSetAttributes * GetEdgeData()
Get the vertex or edge data.
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:40
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:37
class describing a molecule
Definition: vtkMolecule.h:95
vtkAbstractElectronicData * ElectronicData
Definition: vtkMolecule.h:470
void GetAtomPosition(vtkIdType atomId, float pos[3])
Get the position of the atom with the specified id.
vtkAtom AppendAtom()
Add new atom with atomic number 0 (dummy atom) at origin.
Definition: vtkMolecule.h:111
vtkVector3f GetAtomPosition(vtkIdType atomId)
Get the position of the atom with the specified id.
void SetLattice(vtkMatrix3x3 *matrix)
The unit cell vectors.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkMolecule * New()
int Initialize(vtkPoints *atomPositions, vtkDataArray *atomicNumberArray, vtkDataSetAttributes *atomData)
Initialize a molecule with an atom per input point.
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:147
vtkUnsignedShortArray * GetAtomicNumberArray()
Access the raw arrays used in this vtkMolecule instance.
void SetBondOrder(vtkIdType bondId, unsigned short order)
Get/Set the bond order of the bond with the specified id.
vtkAtom AppendAtom(unsigned short atomicNumber, double x, double y, double z)
Add new atom with the specified atomic number and position.
static vtkMolecule * GetData(vtkInformationVector *v, int i=0)
Retrieve a molecule from an information vector.
vtkAtom GetAtom(vtkIdType atomId)
Return a vtkAtom that refers to the atom with the specified id.
virtual void DeepCopyStructure(vtkMolecule *m)
Deep copies the atoms and bonds from m into this.
void GetLattice(vtkVector3d &a, vtkVector3d &b, vtkVector3d &c, vtkVector3d &origin)
Get the unit cell lattice vectors, and optionally, the origin.
void Initialize() override
Initialize to an empty graph.
void ClearLattice()
Remove any unit cell lattice information from the molecule.
virtual void ShallowCopyAttributes(vtkMolecule *m)
Shallow copies attributes (i.e.
void SetAtomAtomicNumber(vtkIdType atomId, unsigned short atomicNum)
Set the atomic number of the atom with the specified id.
virtual void ShallowCopyStructure(vtkMolecule *m)
Shallow copies the atoms and bonds from m into this.
void GetAtomPosition(vtkIdType atomId, double pos[3])
Get the position of the atom with the specified id.
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
double GetBondLength(vtkIdType bondId)
Get the bond length of the bond with the specified id.
vtkSmartPointer< vtkMatrix3x3 > Lattice
Definition: vtkMolecule.h:471
virtual void DeepCopyAttributes(vtkMolecule *m)
Deep copies attributes (i.e.
static bool GetPlaneFromBond(const vtkBond &bond, const vtkVector3f &normal, vtkPlane *plane)
Obtain the plane that passes through the indicated bond with the given normal.
int Initialize(vtkPoints *atomPositions, vtkDataSetAttributes *atomData)
Overloads Initialize method.
Definition: vtkMolecule.h:382
void ShallowCopy(vtkDataObject *obj) override
Shallow copies the data object into this molecule.
void SetBondListDirty()
The graph superclass does not provide fast random access to the edge (bond) data.
Definition: vtkMolecule.h:462
vtkIdType GetBondId(vtkIdType a, vtkIdType b)
Return the edge id from the underlying graph.
Definition: vtkMolecule.h:413
vtkUnsignedCharArray * AtomGhostArray
Definition: vtkMolecule.h:474
void GetLattice(vtkVector3d &a, vtkVector3d &b, vtkVector3d &c)
Get the unit cell lattice vectors, and optionally, the origin.
vtkUnsignedCharArray * BondGhostArray
Definition: vtkMolecule.h:475
void SetAtomPosition(vtkIdType atomId, double x, double y, double z)
Set the position of the atom with the specified id.
void UpdateBondList()
The graph superclass does not provide fast random access to the edge (bond) data.
vtkPoints * GetAtomicPositionArray()
Access the raw arrays used in this vtkMolecule instance.
virtual void CopyAttributesInternal(vtkMolecule *m, bool deep)
Copy everything but bonds and atoms.
vtkUnsignedShortArray * GetBondOrdersArray()
Access the raw arrays used in this vtkMolecule instance.
void DeepCopy(vtkDataObject *obj) override
Deep copies the data object into this molecule.
int GetDataObjectType() override
Return what type of dataset this is.
Definition: vtkMolecule.h:105
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.
void AllocateAtomGhostArray()
Allocate ghost array for atoms.
void SetAtomPosition(vtkIdType atomId, const vtkVector3f &pos)
Set the position of the atom with the specified id.
vtkUnsignedCharArray * GetBondGhostArray()
Get the array that defines the ghost type of each bond.
virtual void SetElectronicData(vtkAbstractElectronicData *)
Set/Get the AbstractElectronicData-subclassed object for this molecule.
unsigned short GetAtomAtomicNumber(vtkIdType atomId)
Return the atomic number of the atom with the specified id.
vtkIdType GetNumberOfBonds()
Return the number of bonds in the molecule.
char * BondOrdersArrayName
Definition: vtkMolecule.h:478
bool HasLattice()
Return true if a unit cell lattice is defined.
~vtkMolecule() override
vtkDataSetAttributes * GetAtomData()
Return the VertexData of the underlying graph.
Definition: vtkMolecule.h:403
vtkBond AppendBond(vtkIdType atom1, vtkIdType atom2, unsigned short order=1)
Add a bond between the specified atoms, optionally setting the bond order (default: 1).
void SetLattice(const vtkVector3d &a, const vtkVector3d &b, const vtkVector3d &c)
The unit cell vectors.
vtkMatrix3x3 * GetLattice()
Get the unit cell lattice vectors.
unsigned short GetBondOrder(vtkIdType bondId)
Get/Set the bond order of the bond with the specified id.
vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f &pos)
Add new atom with the specified atomic number and position.
Definition: vtkMolecule.h:119
bool BondListIsDirty
The graph superclass does not provide fast random access to the edge (bond) data.
Definition: vtkMolecule.h:461
static vtkMolecule * GetData(vtkInformation *info)
Retrieve a molecule from an information vector.
vtkUnsignedCharArray * GetAtomGhostArray()
Get the array that defines the ghost type of each atom.
vtkBond GetBond(vtkIdType bondId)
Return a vtkAtom that refers to the bond with the specified id.
int Initialize(vtkMolecule *molecule)
Use input molecule points, atomic number and atomic data to initialize the new molecule.
char * AtomicNumberArrayName
Definition: vtkMolecule.h:477
void AllocateBondGhostArray()
Allocate ghost array for bonds.
virtual void CopyStructureInternal(vtkMolecule *m, bool deep)
Copy bonds and atoms.
void SetAtomPosition(vtkIdType atomId, double pos[3])
Set the position of the atom with the specified id.
Definition: vtkMolecule.h:179
vtkDataSetAttributes * GetBondData()
Return the EdgeData of the underlying graph.
Definition: vtkMolecule.h:408
vtkIdType GetNumberOfAtoms()
Return the number of atoms in the molecule.
vtkVector3d LatticeOrigin
Definition: vtkMolecule.h:472
bool CheckedShallowCopy(vtkGraph *g) override
Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible g...
bool CheckedDeepCopy(vtkGraph *g) override
Performs the same operation as DeepCopy(), but instead of reporting an error for an incompatible grap...
vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
Add new atom with the specified atomic number and position.
Definition: vtkMolecule.h:124
vtkIdTypeArray * GetBondList()
The graph superclass does not provide fast random access to the edge (bond) data.
perform various plane computations
Definition: vtkPlane.h:37
represent and manipulate 3D points
Definition: vtkPoints.h:40
Hold a reference to a vtkObjectBase instance.
An undirected graph.
dynamic, self-adjusting array of unsigned char
dynamic, self-adjusting array of unsigned short
int vtkIdType
Definition: vtkType.h:332
#define VTK_MOLECULE
Definition: vtkType.h:110