text: /*=========================================================================
  
    Program:   Visualization Toolkit
    Module:    vtkProgrammableElectronicData.h
  
    Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
    All rights reserved.
    See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
  
       This software is distributed WITHOUT ANY WARRANTY; without even
       the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
       PURPOSE.  See the above copyright notice for more information.
  
  =========================================================================*/
  // .NAME vtkProgrammableElectronicData - Provides access to and storage of
  // user-generated vtkImageData that describes electrons.
  
  #ifndef vtkProgrammableElectronicData_h
  #define vtkProgrammableElectronicData_h
  
  #include "vtkDomainsChemistryModule.h" // For export macro
  #include "vtkAbstractElectronicData.h"
  
  class vtkImageData;
  
  class StdVectorOfImageDataPointers;
  
  class VTKDOMAINSCHEMISTRY_EXPORT vtkProgrammableElectronicData
      : public vtkAbstractElectronicData
  {
  public:
    static vtkProgrammableElectronicData *New();
    vtkTypeMacro(vtkProgrammableElectronicData,vtkAbstractElectronicData);
    void PrintSelf(ostream& os, vtkIndent indent);
  
    // Description:
    // Get/Set the number of molecular orbitals. Setting this will resize this
    // internal array of MOs.
    virtual vtkIdType GetNumberOfMOs();
    virtual void SetNumberOfMOs(vtkIdType);
  
    // Description:
    // Get/Set the number of electrons in the molecule. Needed for HOMO/LUMO
    // convenience functions
    vtkGetMacro(NumberOfElectrons, vtkIdType);
    vtkSetMacro(NumberOfElectrons, vtkIdType);
  
    // Description:
    // Get/Set the vtkImageData for the requested molecular orbital.
    virtual vtkImageData * GetMO(vtkIdType orbitalNumber);
    void SetMO(vtkIdType orbitalNumber, vtkImageData *data);
  
    // Description:
    // Get/Set the vtkImageData for the molecule's electron density.
    vtkGetObjectMacro(ElectronDensity, vtkImageData);
    virtual void SetElectronDensity(vtkImageData *);
  
    // Description:
    // Set/Get the padding around the molecule to which the cube extends. This
    // is used to determine the dataset bounds.
    vtkSetMacro(Padding, double);
    vtkGetMacro(Padding, double);
  
    // Description:
    // Deep copies the data object into this.
    virtual void DeepCopy(vtkDataObject *obj);
  
  protected:
    vtkProgrammableElectronicData();
    ~vtkProgrammableElectronicData();
  
    // Description:
    // Electronic data set property
    vtkIdType NumberOfElectrons;
  
    // Description:
    // Storage for the vtkImageData objects
    StdVectorOfImageDataPointers *MOs;
    vtkImageData *ElectronDensity;
  
  private:
    vtkProgrammableElectronicData(const vtkProgrammableElectronicData&) VTK_DELETE_FUNCTION;
    void operator=(const vtkProgrammableElectronicData&) VTK_DELETE_FUNCTION;
  };
  
  #endif
  