/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 1.3.36
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */


using System;
using System.Runtime.InteropServices;

public class OBGridData : OBGenericData {
  private HandleRef swigCPtr;

  internal OBGridData(IntPtr cPtr, bool cMemoryOwn) : base(openbabelPINVOKE.OBGridDataUpcast(cPtr), cMemoryOwn) {
    swigCPtr = new HandleRef(this, cPtr);
  }

  internal static HandleRef getCPtr(OBGridData obj) {
    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  }

  ~OBGridData() {
    Dispose();
  }

  public override void Dispose() {
    lock(this) {
      if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
        swigCMemOwn = false;
        openbabelPINVOKE.delete_OBGridData(swigCPtr);
      }
      swigCPtr = new HandleRef(null, IntPtr.Zero);
      GC.SuppressFinalize(this);
      base.Dispose();
    }
  }

  public OBGridData() : this(openbabelPINVOKE.new_OBGridData(), true) {
  }

  public void GetAxes(SWIGTYPE_p_double x, SWIGTYPE_p_double y, SWIGTYPE_p_double z) {
    openbabelPINVOKE.OBGridData_GetAxes__SWIG_0(swigCPtr, SWIGTYPE_p_double.getCPtr(x), SWIGTYPE_p_double.getCPtr(y), SWIGTYPE_p_double.getCPtr(z));
  }

  public vector3 GetXAxis() {
    vector3 ret = new vector3(openbabelPINVOKE.OBGridData_GetXAxis(swigCPtr), true);
    return ret;
  }

  public vector3 GetYAxis() {
    vector3 ret = new vector3(openbabelPINVOKE.OBGridData_GetYAxis(swigCPtr), true);
    return ret;
  }

  public vector3 GetZAxis() {
    vector3 ret = new vector3(openbabelPINVOKE.OBGridData_GetZAxis(swigCPtr), true);
    return ret;
  }

  public void GetAxes(vector3 v1, vector3 v2, vector3 v3) {
    openbabelPINVOKE.OBGridData_GetAxes__SWIG_1(swigCPtr, vector3.getCPtr(v1), vector3.getCPtr(v2), vector3.getCPtr(v3));
    if (openbabelPINVOKE.SWIGPendingException.Pending) throw openbabelPINVOKE.SWIGPendingException.Retrieve();
  }

  public void GetNumberOfPoints(SWIGTYPE_p_int nx, SWIGTYPE_p_int ny, SWIGTYPE_p_int nz) {
    openbabelPINVOKE.OBGridData_GetNumberOfPoints__SWIG_0(swigCPtr, SWIGTYPE_p_int.getCPtr(nx), SWIGTYPE_p_int.getCPtr(ny), SWIGTYPE_p_int.getCPtr(nz));
    if (openbabelPINVOKE.SWIGPendingException.Pending) throw openbabelPINVOKE.SWIGPendingException.Retrieve();
  }

  public int GetNumberOfPoints() {
    int ret = openbabelPINVOKE.OBGridData_GetNumberOfPoints__SWIG_1(swigCPtr);
    return ret;
  }

  public void GetNumberOfSteps(SWIGTYPE_p_int steps) {
    openbabelPINVOKE.OBGridData_GetNumberOfSteps(swigCPtr, SWIGTYPE_p_int.getCPtr(steps));
  }

  public vectorDouble GetValues() {
    vectorDouble ret = new vectorDouble(openbabelPINVOKE.OBGridData_GetValues(swigCPtr), true);
    return ret;
  }

  public double GetValue(int i, int j, int k) {
    double ret = openbabelPINVOKE.OBGridData_GetValue__SWIG_0(swigCPtr, i, j, k);
    return ret;
  }

  public double GetValue(vector3 pos) {
    double ret = openbabelPINVOKE.OBGridData_GetValue__SWIG_1(swigCPtr, vector3.getCPtr(pos));
    if (openbabelPINVOKE.SWIGPendingException.Pending) throw openbabelPINVOKE.SWIGPendingException.Retrieve();
    return ret;
  }

  public OBGridData.Unit GetUnit() {
    OBGridData.Unit ret = (OBGridData.Unit)openbabelPINVOKE.OBGridData_GetUnit(swigCPtr);
    return ret;
  }

  public double GetMinValue() {
    double ret = openbabelPINVOKE.OBGridData_GetMinValue(swigCPtr);
    return ret;
  }

  public double GetMaxValue() {
    double ret = openbabelPINVOKE.OBGridData_GetMaxValue(swigCPtr);
    return ret;
  }

  public vector3 GetOriginVector() {
    vector3 ret = new vector3(openbabelPINVOKE.OBGridData_GetOriginVector__SWIG_0(swigCPtr), true);
    return ret;
  }

  public void GetOriginVector(SWIGTYPE_p_double o) {
    openbabelPINVOKE.OBGridData_GetOriginVector__SWIG_1(swigCPtr, SWIGTYPE_p_double.getCPtr(o));
  }

  public vector3 GetMaxVector() {
    vector3 ret = new vector3(openbabelPINVOKE.OBGridData_GetMaxVector(swigCPtr), true);
    return ret;
  }

  public bool GetUnrestricted() {
    bool ret = openbabelPINVOKE.OBGridData_GetUnrestricted(swigCPtr);
    return ret;
  }

  public int GetNumSymmetries() {
    int ret = openbabelPINVOKE.OBGridData_GetNumSymmetries(swigCPtr);
    return ret;
  }

  public void SetNumberOfPoints(int nx, int ny, int nz) {
    openbabelPINVOKE.OBGridData_SetNumberOfPoints(swigCPtr, nx, ny, nz);
  }

  public void SetLimits(vector3 origin, vector3 x, vector3 y, vector3 z) {
    openbabelPINVOKE.OBGridData_SetLimits__SWIG_0(swigCPtr, vector3.getCPtr(origin), vector3.getCPtr(x), vector3.getCPtr(y), vector3.getCPtr(z));
    if (openbabelPINVOKE.SWIGPendingException.Pending) throw openbabelPINVOKE.SWIGPendingException.Retrieve();
  }

  public void SetLimits(SWIGTYPE_p_double origin, SWIGTYPE_p_double x, SWIGTYPE_p_double y, SWIGTYPE_p_double z) {
    openbabelPINVOKE.OBGridData_SetLimits__SWIG_1(swigCPtr, SWIGTYPE_p_double.getCPtr(origin), SWIGTYPE_p_double.getCPtr(x), SWIGTYPE_p_double.getCPtr(y), SWIGTYPE_p_double.getCPtr(z));
  }

  public bool SetValue(int i, int j, int k, double val) {
    bool ret = openbabelPINVOKE.OBGridData_SetValue(swigCPtr, i, j, k, val);
    return ret;
  }

  public void SetValues(vectorDouble v) {
    openbabelPINVOKE.OBGridData_SetValues(swigCPtr, vectorDouble.getCPtr(v));
    if (openbabelPINVOKE.SWIGPendingException.Pending) throw openbabelPINVOKE.SWIGPendingException.Retrieve();
  }

  public void SetUnit(OBGridData.Unit u) {
    openbabelPINVOKE.OBGridData_SetUnit(swigCPtr, (int)u);
  }

  public void SetUnrestricted(bool u) {
    openbabelPINVOKE.OBGridData_SetUnrestricted(swigCPtr, u);
  }

  public void SetNumSymmetries(int s) {
    openbabelPINVOKE.OBGridData_SetNumSymmetries(swigCPtr, s);
  }

  public enum Unit {
    BOHR,
    ANGSTROM,
    OTHER
  }

}
