VTK  9.3.1
vtkMolecule.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
60 #ifndef vtkMolecule_h
61 #define vtkMolecule_h
62 
63 #include "vtkCommonDataModelModule.h" // For export macro
64 #include "vtkSmartPointer.h" // For vtkSmartPointer
65 #include "vtkUndirectedGraph.h"
66 
67 #include "vtkAtom.h" // Simple proxy class dependent on vtkMolecule
68 #include "vtkBond.h" // Simple proxy class dependent on vtkMolecule
69 
70 #include "vtkVector.h" // Small templated vector convenience class
71 
72 VTK_ABI_NAMESPACE_BEGIN
74 class vtkDataArray;
75 class vtkInformation;
77 class vtkMatrix3x3;
78 class vtkPlane;
79 class vtkPoints;
82 
83 class VTKCOMMONDATAMODEL_EXPORT vtkMolecule : public vtkUndirectedGraph
84 {
85 public:
86  static vtkMolecule* New();
88  void PrintSelf(ostream& os, vtkIndent indent) override;
89  void Initialize() override;
90 
94  int GetDataObjectType() override { return VTK_MOLECULE; }
95 
100  vtkAtom AppendAtom() { return this->AppendAtom(0, 0., 0., 0.); }
101 
103 
107  vtkAtom AppendAtom(unsigned short atomicNumber, double x, double y, double z);
108  vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f& pos)
109  {
110  return this->AppendAtom(atomicNumber, pos[0], pos[1], pos[2]);
111  }
112 
113  vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
114  {
115  return this->AppendAtom(atomicNumber, pos[0], pos[1], pos[2]);
116  }
118 
122  vtkAtom GetAtom(vtkIdType atomId);
123 
127  vtkIdType GetNumberOfAtoms();
128 
130 
135  vtkBond AppendBond(vtkIdType atom1, vtkIdType atom2, unsigned short order = 1);
136  vtkBond AppendBond(const vtkAtom& atom1, const vtkAtom& atom2, unsigned short order = 1)
137  {
138  return this->AppendBond(atom1.Id, atom2.Id, order);
139  }
141 
145  vtkBond GetBond(vtkIdType bondId);
146 
150  vtkIdType GetNumberOfBonds();
151 
155  unsigned short GetAtomAtomicNumber(vtkIdType atomId);
156 
160  void SetAtomAtomicNumber(vtkIdType atomId, unsigned short atomicNum);
161 
163 
166  void SetAtomPosition(vtkIdType atomId, const vtkVector3f& pos);
167  void SetAtomPosition(vtkIdType atomId, double x, double y, double z);
168  void SetAtomPosition(vtkIdType atomId, double pos[3])
169  {
170  this->SetAtomPosition(atomId, pos[0], pos[1], pos[2]);
171  }
173 
175 
178  vtkVector3f GetAtomPosition(vtkIdType atomId);
179  void GetAtomPosition(vtkIdType atomId, float pos[3]);
180  void GetAtomPosition(vtkIdType atomId, double pos[3]);
182 
184 
187  void SetBondOrder(vtkIdType bondId, unsigned short order);
188  unsigned short GetBondOrder(vtkIdType bondId);
190 
200  double GetBondLength(vtkIdType bondId);
201 
203 
206  vtkPoints* GetAtomicPositionArray();
207  vtkUnsignedShortArray* GetAtomicNumberArray();
208  vtkUnsignedShortArray* GetBondOrdersArray();
210 
212 
215  vtkGetObjectMacro(ElectronicData, vtkAbstractElectronicData);
216  virtual void SetElectronicData(vtkAbstractElectronicData*);
218 
224  bool CheckedShallowCopy(vtkGraph* g) override;
225 
231  bool CheckedDeepCopy(vtkGraph* g) override;
232 
236  void ShallowCopy(vtkDataObject* obj) override;
237 
241  void DeepCopy(vtkDataObject* obj) override;
242 
246  virtual void ShallowCopyStructure(vtkMolecule* m);
247 
251  virtual void DeepCopyStructure(vtkMolecule* m);
252 
257  virtual void ShallowCopyAttributes(vtkMolecule* m);
258 
263  virtual void DeepCopyAttributes(vtkMolecule* m);
264 
266 
293  static bool GetPlaneFromBond(const vtkBond& bond, const vtkVector3f& normal, vtkPlane* plane);
294  static bool GetPlaneFromBond(
295  const vtkAtom& atom1, const vtkAtom& atom2, const vtkVector3f& normal, vtkPlane* plane);
297 
301  bool HasLattice();
302 
306  void ClearLattice();
307 
309 
313  void SetLattice(vtkMatrix3x3* matrix);
314  void SetLattice(const vtkVector3d& a, const vtkVector3d& b, const vtkVector3d& c);
316 
323  vtkMatrix3x3* GetLattice();
324 
326 
329  void GetLattice(vtkVector3d& a, vtkVector3d& b, vtkVector3d& c);
330  void GetLattice(vtkVector3d& a, vtkVector3d& b, vtkVector3d& c, vtkVector3d& origin);
332 
334 
337  vtkGetMacro(LatticeOrigin, vtkVector3d);
338  vtkSetMacro(LatticeOrigin, vtkVector3d);
340 
344  vtkUnsignedCharArray* GetAtomGhostArray();
345 
349  void AllocateAtomGhostArray();
350 
354  vtkUnsignedCharArray* GetBondGhostArray();
355 
359  void AllocateBondGhostArray();
360 
365  int Initialize(
366  vtkPoints* atomPositions, vtkDataArray* atomicNumberArray, vtkDataSetAttributes* atomData);
367 
371  int Initialize(vtkPoints* atomPositions, vtkDataSetAttributes* atomData)
372  {
373  return this->Initialize(atomPositions, nullptr, atomData);
374  }
375 
379  int Initialize(vtkMolecule* molecule);
380 
382 
386  static vtkMolecule* GetData(vtkInformationVector* v, int i = 0);
388 
393 
398 
402  vtkIdType GetBondId(vtkIdType a, vtkIdType b) { return this->GetEdgeId(a, b); }
403 
405 
408  vtkSetStringMacro(AtomicNumberArrayName);
409  vtkGetStringMacro(AtomicNumberArrayName);
411 
413 
416  vtkSetStringMacro(BondOrdersArrayName);
417  vtkGetStringMacro(BondOrdersArrayName);
419 
427  unsigned long GetActualMemorySize() override;
428 
429 protected:
430  vtkMolecule();
431  ~vtkMolecule() override;
432 
436  virtual void CopyStructureInternal(vtkMolecule* m, bool deep);
437 
441  virtual void CopyAttributesInternal(vtkMolecule* m, bool deep);
442 
444 
451  void SetBondListDirty() { this->BondListIsDirty = true; }
452  void UpdateBondList();
453  vtkIdTypeArray* GetBondList();
455 
456  friend class vtkAtom;
457  friend class vtkBond;
458 
462 
465 
468 
469 private:
470  vtkMolecule(const vtkMolecule&) = delete;
471  void operator=(const vtkMolecule&) = delete;
472 };
473 
474 VTK_ABI_NAMESPACE_END
475 #endif
static vtkUndirectedGraph * GetData(vtkInformation *info)
Retrieve a graph from an information vector.
vtkAtom AppendAtom(unsigned short atomicNumber, double pos[3])
Add new atom with the specified atomic number and position.
Definition: vtkMolecule.h:113
virtual bool CheckedDeepCopy(vtkGraph *g)
Performs the same operation as DeepCopy(), but instead of reporting an error for an incompatible grap...
vtkIdType Id
Definition: vtkAtom.h:64
Store vtkAlgorithm input/output information.
class describing a molecule
Definition: vtkMolecule.h:83
vtkIdType GetBondId(vtkIdType a, vtkIdType b)
Return the edge id from the underlying graph.
Definition: vtkMolecule.h:402
char * BondOrdersArrayName
Definition: vtkMolecule.h:467
vtkIdType GetEdgeId(vtkIdType a, vtkIdType b)
Returns the Id of the edge between vertex a and vertex b.
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:136
An undirected graph.
dynamic, self-adjusting array of vtkIdType
int vtkIdType
Definition: vtkType.h:315
static vtkUndirectedGraph * New()
Provides access to and storage of chemical electronic data.
Base class for graph data types.
Definition: vtkGraph.h:280
int Initialize(vtkPoints *atomPositions, vtkDataSetAttributes *atomData)
Overloads Initialize method.
Definition: vtkMolecule.h:371
vtkUnsignedCharArray * AtomGhostArray
Definition: vtkMolecule.h:463
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
vtkDataSetAttributes * GetAtomData()
Return the VertexData of the underlying graph.
Definition: vtkMolecule.h:392
a simple class to control print indentation
Definition: vtkIndent.h:28
bool BondListIsDirty
The graph superclass does not provide fast random access to the edge (bond) data. ...
Definition: vtkMolecule.h:450
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
perform various plane computations
Definition: vtkPlane.h:25
vtkDataSetAttributes * GetBondData()
Return the EdgeData of the underlying graph.
Definition: vtkMolecule.h:397
vtkUnsignedCharArray * BondGhostArray
Definition: vtkMolecule.h:464
represent and manipulate attribute data in a dataset
friend class vtkMolecule
Definition: vtkBond.h:70
int GetDataObjectType() override
Return what type of dataset this is.
Definition: vtkMolecule.h:94
void DeepCopy(vtkDataObject *obj) override
Deep copies the data object into this graph.
void ShallowCopy(vtkDataObject *obj) override
Shallow copies the data object into this graph.
vtkVector3d LatticeOrigin
Definition: vtkMolecule.h:461
dynamic, self-adjusting array of unsigned char
void SetBondListDirty()
The graph superclass does not provide fast random access to the edge (bond) data. ...
Definition: vtkMolecule.h:451
convenience proxy for vtkMolecule
Definition: vtkAtom.h:23
void SetAtomPosition(vtkIdType atomId, double pos[3])
Set the position of the atom with the specified id.
Definition: vtkMolecule.h:168
virtual bool CheckedShallowCopy(vtkGraph *g)
Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible g...
char * AtomicNumberArrayName
Definition: vtkMolecule.h:466
virtual vtkDataSetAttributes * GetEdgeData()
Get the vertex or edge data.
void Initialize() override
Initialize to an empty graph.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkAtom AppendAtom()
Add new atom with atomic number 0 (dummy atom) at origin.
Definition: vtkMolecule.h:100
Store zero or more vtkInformation instances.
convenience proxy for vtkMolecule
Definition: vtkBond.h:22
#define VTK_MOLECULE
Definition: vtkType.h:98
virtual vtkDataSetAttributes * GetVertexData()
Get the vertex or edge data.
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:25
vtkSmartPointer< vtkMatrix3x3 > Lattice
Definition: vtkMolecule.h:460
general representation of visualization data
Definition: vtkDataObject.h:54
represent and manipulate 3D points
Definition: vtkPoints.h:28
vtkAbstractElectronicData * ElectronicData
Definition: vtkMolecule.h:459
vtkAtom AppendAtom(unsigned short atomicNumber, const vtkVector3f &pos)
Add new atom with the specified atomic number and position.
Definition: vtkMolecule.h:108
dynamic, self-adjusting array of unsigned short