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

namespace Autodesk.Fbx {

public class FbxBlendShapeChannel : FbxSubDeformer {
  internal FbxBlendShapeChannel(global::System.IntPtr cPtr, bool ignored) : base(cPtr, ignored) { }

  // override void Dispose() {base.Dispose();}

  public new static FbxBlendShapeChannel Create(FbxManager pManager, string pName) {
    global::System.IntPtr cPtr = NativeMethods.FbxBlendShapeChannel_Create__SWIG_0(FbxManager.getCPtr(pManager), pName);
    FbxBlendShapeChannel ret = (cPtr == global::System.IntPtr.Zero) ? null : new FbxBlendShapeChannel(cPtr, false);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public new static FbxBlendShapeChannel Create(FbxObject pContainer, string pName) {
    global::System.IntPtr cPtr = NativeMethods.FbxBlendShapeChannel_Create__SWIG_1(FbxObject.getCPtr(pContainer), pName);
    FbxBlendShapeChannel ret = (cPtr == global::System.IntPtr.Zero) ? null : new FbxBlendShapeChannel(cPtr, false);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public FbxPropertyDouble DeformPercent {
    get {
      FbxPropertyDouble ret = new FbxPropertyDouble(NativeMethods.FbxBlendShapeChannel_DeformPercent_get(swigCPtr), false);
      if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
      return ret;
    } 
  }

  public bool SetBlendShapeDeformer(FbxBlendShape pBlendShape) {
    bool ret = NativeMethods.FbxBlendShapeChannel_SetBlendShapeDeformer(swigCPtr, FbxBlendShape.getCPtr(pBlendShape));
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public FbxBlendShape GetBlendShapeDeformer() {
    global::System.IntPtr cPtr = NativeMethods.FbxBlendShapeChannel_GetBlendShapeDeformer(swigCPtr);
    FbxBlendShape ret = (cPtr == global::System.IntPtr.Zero) ? null : new FbxBlendShape(cPtr, false);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public bool AddTargetShape(FbxShape pShape, double pFullDeformPercent) {
    bool ret = NativeMethods.FbxBlendShapeChannel_AddTargetShape__SWIG_0(swigCPtr, FbxShape.getCPtr(pShape), pFullDeformPercent);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public bool AddTargetShape(FbxShape pShape) {
    bool ret = NativeMethods.FbxBlendShapeChannel_AddTargetShape__SWIG_1(swigCPtr, FbxShape.getCPtr(pShape));
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public FbxShape RemoveTargetShape(FbxShape pShape) {
    global::System.IntPtr cPtr = NativeMethods.FbxBlendShapeChannel_RemoveTargetShape(swigCPtr, FbxShape.getCPtr(pShape));
    FbxShape ret = (cPtr == global::System.IntPtr.Zero) ? null : new FbxShape(cPtr, false);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public int GetTargetShapeCount() {
    int ret = NativeMethods.FbxBlendShapeChannel_GetTargetShapeCount(swigCPtr);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public FbxShape GetTargetShape(int pIndex) {
    global::System.IntPtr cPtr = NativeMethods.FbxBlendShapeChannel_GetTargetShape(swigCPtr, pIndex);
    FbxShape ret = (cPtr == global::System.IntPtr.Zero) ? null : new FbxShape(cPtr, false);
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public int GetTargetShapeIndex(FbxShape pShape) {
    int ret = NativeMethods.FbxBlendShapeChannel_GetTargetShapeIndex(swigCPtr, FbxShape.getCPtr(pShape));
    if (NativeMethods.SWIGPendingException.Pending) throw NativeMethods.SWIGPendingException.Retrieve();
    return ret;
  }

  public override int GetHashCode(){
      return swigCPtr.Handle.GetHashCode();
  }

  public bool Equals(FbxBlendShapeChannel other) {
    if (object.ReferenceEquals(other, null)) { return false; }
    return this.swigCPtr.Handle.Equals (other.swigCPtr.Handle);
  }

  public override bool Equals(object obj){
    if (object.ReferenceEquals(obj, null)) { return false; }
    /* is obj a subclass of this type; if so use our Equals */
    var typed = obj as FbxBlendShapeChannel;
    if (!object.ReferenceEquals(typed, null)) {
      return this.Equals(typed);
    }
    /* are we a subclass of the other type; if so use their Equals */
    if (typeof(FbxBlendShapeChannel).IsSubclassOf(obj.GetType())) {
      return obj.Equals(this);
    }
    /* types are unrelated; can't be a match */
    return false;
  }

  public static bool operator == (FbxBlendShapeChannel a, FbxBlendShapeChannel b) {
    if (object.ReferenceEquals(a, b)) { return true; }
    if (object.ReferenceEquals(a, null) || object.ReferenceEquals(b, null)) { return false; }
    return a.Equals(b);
  }

  public static bool operator != (FbxBlendShapeChannel a, FbxBlendShapeChannel b) {
    return !(a == b);
  }

}

}