import MFnAnimCurve  # type: ignore
from _typeshed import Incomplete
from typing import Any, ClassVar, overload

class MAnimControl:
    kPlaybackLoop: ClassVar[int] = ...
    kPlaybackOnce: ClassVar[int] = ...
    kPlaybackOscillate: ClassVar[int] = ...
    kPlaybackViewActive: ClassVar[int] = ...
    kPlaybackViewAll: ClassVar[int] = ...
    @staticmethod
    def animationEndTime() -> MTime: ...  # type: ignore
    @staticmethod
    def animationStartTime() -> MTime: ...  # type: ignore
    @staticmethod
    def autoKeyMode() -> bool: ...
    @staticmethod
    def currentTime() -> MTime: ...  # type: ignore
    @staticmethod
    def globalInTangentType() -> int: ...
    @staticmethod
    def globalOutTangentType() -> int: ...
    @staticmethod
    def isPlaying() -> bool: ...
    @staticmethod
    def isScrubbing() -> bool: ...
    @staticmethod
    def maxTime() -> MTime: ...  # type: ignore
    @staticmethod
    def minTime() -> MTime: ...  # type: ignore
    @staticmethod
    def playBackward() -> None: ...
    @staticmethod
    def playForward() -> None: ...
    @staticmethod
    def playbackBy() -> float: ...
    @staticmethod
    def playbackMode() -> int: ...
    @staticmethod
    def playbackSpeed() -> float: ...
    @staticmethod
    def setAnimationEndTime(MTime) -> None: ...
    @staticmethod
    def setAnimationStartEndTime(*args, **kwargs): ...
    @staticmethod
    def setAnimationStartTime(MTime) -> None: ...
    @staticmethod
    def setAutoKeyMode(bool) -> None: ...
    @staticmethod
    def setCurrentTime(*args, **kwargs): ...
    @staticmethod
    def setGlobalInTangentType(int) -> None: ...
    @staticmethod
    def setGlobalOutTangentType(int) -> None: ...
    @staticmethod
    def setMaxTime(MTime) -> None: ...
    @staticmethod
    def setMinMaxTime(*args, **kwargs): ...
    @staticmethod
    def setMinTime(MTime) -> None: ...
    @staticmethod
    def setPlaybackBy(float) -> None: ...
    @staticmethod
    def setPlaybackMode(int) -> None: ...
    @staticmethod
    def setPlaybackSpeed(float) -> None: ...
    @staticmethod
    def setViewMode(int) -> None: ...
    @staticmethod
    def setWeightedTangents(bool) -> None: ...
    @staticmethod
    def stop() -> None: ...
    @staticmethod
    def viewMode() -> int: ...
    @staticmethod
    def weightedTangents() -> bool: ...

class MAnimCurveChange:
    def __init__(self, *args, **kwargs) -> None: ...
    def redoIt(self, *args, **kwargs): ...
    def undoIt(self, *args, **kwargs): ...

class MAnimCurveClipboard:
    theAPIClipboard: ClassVar[MAnimCurveClipboard] = ...
    endTime: Incomplete
    endUnitlessInput: Incomplete
    isEmpty: Incomplete
    startTime: Incomplete
    startUnitlessInput: Incomplete
    def __init__(self, *args, **kwargs) -> None: ...
    def clear(self) -> self: ...  # type: ignore
    def clipboardItems(self) -> MAnimCurveClipboardItemArray: ...
    @overload
    def set(self, clipboard) -> self: ...  # type: ignore
    @overload
    def set(self, items) -> self: ...  # type: ignore
    @overload
    def set(self, items, startTime, endTime, startUnitlessInput, endUnitlessInput, strictValidation=...) -> self: ...  # type: ignore

class MAnimCurveClipboardItem:
    animCurve: Incomplete
    fullAttributeName: Incomplete
    leafAttributeName: Incomplete
    nodeName: Incomplete
    def __init__(self, *args, **kwargs) -> None: ...
    def animCurveType(self) -> MFnAnimCurve.AnimCurveType: ...
    def getAddressingInfo(self, *args, **kwargs): ...
    def setAddressingInfo(self, rowCount, childCount, attributeCount) -> self: ...  # type: ignore
    def setAnimCurve(self, object) -> self: ...  # type: ignore
    def setNameInfo(self, nodeName, fullName, leafName) -> self: ...  # type: ignore

class MAnimCurveClipboardItemArray:
    sizeIncrement: Incomplete
    def __init__(self, *args, **kwargs) -> None: ...
    def append(self, *args, **kwargs): ...
    def clear(self, *args, **kwargs): ...
    def copy(self, *args, **kwargs): ...
    def insert(self, *args, **kwargs): ...
    def remove(self, *args, **kwargs): ...
    def setLength(self, *args, **kwargs): ...
    def __add__(self, other): ...
    def __contains__(self, other) -> bool: ...
    def __delitem__(self, other) -> None: ...
    def __getitem__(self, index): ...
    def __iadd__(self, other): ...
    def __imul__(self, other): ...
    def __len__(self) -> int: ...
    def __mul__(self, other): ...
    def __rmul__(self, other): ...
    def __setitem__(self, index, object) -> None: ...

class MAnimMessage(MMessage):  # type: ignore
    @staticmethod
    def addAnimCurveEditedCallback(function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def addAnimKeyframeEditCheckCallback(function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def addAnimKeyframeEditedCallback(function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def addDisableImplicitControlCallback(function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def addNodeAnimKeyframeEditedCallback(animNode, function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def addPostBakeResultsCallback(function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def addPreBakeResultsCallback(function, clientData=...) -> id: ...  # type: ignore
    @staticmethod
    def flushAnimKeyframeEditedCallbacks() -> None: ...

class MAnimUtil:
    @staticmethod
    def findAnimatablePlugs(MSelectionList) -> MPlugArray: ...  # type: ignore
    @overload
    @staticmethod
    def findAnimatedPlugs(MObject, bool) -> MPlugArray: ...  # type: ignore
    @overload
    @staticmethod
    def findAnimatedPlugs(MDagPath, bool) -> MPlugArray: ...  # type: ignore
    @overload
    @staticmethod
    def findAnimatedPlugs(MSelectionListselectionList, boolcheckParent) -> MPlugArray: ...  # type: ignore
    @staticmethod
    def findAnimation(MPlug) -> MObjectArray: ...  # type: ignore
    @staticmethod
    def findConstraint(*args, **kwargs): ...
    @staticmethod
    def findSetDrivenKeyAnimation(*args, **kwargs): ...
    @overload
    @staticmethod
    def isAnimated(MObject, bool) -> bool: ...
    @overload
    @staticmethod
    def isAnimated(MDagPath, bool) -> bool: ...
    @overload
    @staticmethod
    def isAnimated(MPlug, bool) -> bool: ...
    @overload
    @staticmethod
    def isAnimated(MSelectionListselectionList, boolcheckParent) -> bool: ...

class MFnAnimCurve(MFnDependencyNode):  # type: ignore
    kAnimCurveTA: ClassVar[int] = ...
    kAnimCurveTL: ClassVar[int] = ...
    kAnimCurveTT: ClassVar[int] = ...
    kAnimCurveTU: ClassVar[int] = ...
    kAnimCurveUA: ClassVar[int] = ...
    kAnimCurveUL: ClassVar[int] = ...
    kAnimCurveUT: ClassVar[int] = ...
    kAnimCurveUU: ClassVar[int] = ...
    kAnimCurveUnknown: ClassVar[int] = ...
    kConstant: ClassVar[int] = ...
    kCycle: ClassVar[int] = ...
    kCycleRelative: ClassVar[int] = ...
    kLinear: ClassVar[int] = ...
    kOscillate: ClassVar[int] = ...
    kTangentAuto: ClassVar[int] = ...
    kTangentAutoCustom: ClassVar[int] = ...
    kTangentAutoEase: ClassVar[int] = ...
    kTangentAutoMix: ClassVar[int] = ...
    kTangentClamped: ClassVar[int] = ...
    kTangentCustomEnd: ClassVar[int] = ...
    kTangentCustomStart: ClassVar[int] = ...
    kTangentFast: ClassVar[int] = ...
    kTangentFixed: ClassVar[int] = ...
    kTangentFlat: ClassVar[int] = ...
    kTangentGlobal: ClassVar[int] = ...
    kTangentLinear: ClassVar[int] = ...
    kTangentPlateau: ClassVar[int] = ...
    kTangentShared1: ClassVar[int] = ...
    kTangentShared2: ClassVar[int] = ...
    kTangentShared3: ClassVar[int] = ...
    kTangentShared4: ClassVar[int] = ...
    kTangentShared5: ClassVar[int] = ...
    kTangentShared6: ClassVar[int] = ...
    kTangentShared7: ClassVar[int] = ...
    kTangentShared8: ClassVar[int] = ...
    kTangentSlow: ClassVar[int] = ...
    kTangentSmooth: ClassVar[int] = ...
    kTangentStep: ClassVar[int] = ...
    kTangentStepNext: ClassVar[int] = ...
    kTangentTypeCount: ClassVar[int] = ...
    animCurveType: Incomplete
    isStatic: Incomplete
    isTimeInput: Incomplete
    isUnitlessInput: Incomplete
    isWeighted: Incomplete
    numKeys: Incomplete
    postInfinityType: Incomplete
    preInfinityType: Incomplete
    def __init__(self, *args, **kwargs) -> None: ...
    def addKey(self, at, value, tangentInType=..., tangentOutType=..., change=...) -> unsignedint: ...  # type: ignore
    def addKeys(self, times, values, tangentInType=..., tangentOutType=..., keepExistingKeys=..., change=...) -> self: ...  # type: ignore
    def addKeysWithTangents(self, times, values, tangentInType=..., tangentOutType=..., tangentInTypeArray=..., tangentOutTypeArray=..., tangentInXArray=..., tangentInYArray=..., tangentOutXArray=..., tangentOutYArray=..., tangentsLockedArray=..., weightsLockedArray=..., convertUnits=..., keepExistingKeys=..., change=...) -> self: ...  # type: ignore
    @overload
    def create(self, node, attribute, animCurveType=...) -> MObject: ...  # type: ignore
    @overload
    def create(self, plug, animCurveType=...) -> MObject: ...  # type: ignore
    def evaluate(self, at) -> value: ...  # type: ignore
    def find(self, at) -> unsignedint: ...  # type: ignore
    def findClosest(self, at) -> unsignedint: ...  # type: ignore
    def getTangentAngleWeight(self, *args, **kwargs): ...
    def getTangentXY(self, *args, **kwargs): ...
    def inTangentType(self, index) -> TangentType: ...  # type: ignore
    def input(self, index) -> MTimeordouble: ...  # type: ignore
    def insertKey(self, *args, **kwargs): ...
    def isBreakdown(self, index) -> bool: ...
    def outTangentType(self, index) -> TangentType: ...  # type: ignore
    def quaternionW(self, index) -> double: ...  # type: ignore
    def remove(self, index, change=...) -> self: ...  # type: ignore
    def setAngle(self, index, setAngle, isInTangent, change=...) -> self: ...  # type: ignore
    def setInTangentType(self, index, tangentType, change=...) -> self: ...  # type: ignore
    def setInput(self, index, at, change=...) -> self: ...  # type: ignore
    def setIsBreakdown(self, index, isBreakdown, change=...) -> self: ...  # type: ignore
    def setIsWeighted(self, isWeighted, change=...) -> self: ...  # type: ignore
    def setOutTangentType(self, index, tangentType, change=...) -> self: ...  # type: ignore
    def setPostInfinityType(self, infinityType, change=...) -> self: ...  # type: ignore
    def setPreInfinityType(self, infinityType, change=...) -> self: ...  # type: ignore
    def setQuaternionW(self, index, quaternionW, change=...) -> self: ...  # type: ignore
    def setTangent(self, index, xOrAngle, yOrWeight, isInTangent, change=..., convertUnits=...) -> self: ...  # type: ignore
    def setTangentTypes(self, indexArray, tangentInType=..., tangentOutType=..., change=...) -> self: ...  # type: ignore
    def setTangentsLocked(self, index, locked, change=...) -> self: ...  # type: ignore
    def setValue(self, index, value, change=...) -> self: ...  # type: ignore
    def setWeight(self, index, weight, isInTangent, change=...) -> self: ...  # type: ignore
    def setWeightsLocked(self, index, locked, change=...) -> self: ...  # type: ignore
    def tangentsLocked(self, index) -> bool: ...
    def timedAnimCurveTypeForPlug(self, plug) -> AnimCurveType: ...  # type: ignore
    def unitlessAnimCurveTypeForPlug(self, plug) -> AnimCurveType: ...  # type: ignore
    def value(self, index) -> double: ...  # type: ignore
    def weightsLocked(self, index) -> bool: ...

class MFnGeometryFilter(MFnDependencyNode):  # type: ignore
    deformerSet: Incomplete
    envelope: Incomplete
    def __init__(self, *args, **kwargs) -> None: ...
    def getComponentAtIndex(self, index) -> MObject: ...  # type: ignore
    def getInputGeometry(self) -> MObjectArray: ...  # type: ignore
    def getOutputGeometry(self) -> MObjectArray: ...  # type: ignore
    def getPathAtIndex(self, plugIndex) -> MDagPath: ...  # type: ignore
    def groupIdAtIndex(self, plugIndex) -> long: ...  # type: ignore
    def indexForGroupId(self, groupId) -> plugIndex: ...  # type: ignore
    def indexForOutputConnection(self, connIndex) -> plugIndex: ...  # type: ignore
    def indexForOutputShape(self, shape) -> plugIndex: ...  # type: ignore
    def inputShapeAtIndex(self, plugIndex) -> MObject: ...  # type: ignore
    def numOutputConnections(self) -> long: ...  # type: ignore
    def outputShapeAtIndex(self, index) -> MObject: ...  # type: ignore

class MFnIkJoint(MFnTransform):  # type: ignore
    def __init__(self, *args, **kwargs) -> None: ...
    def create(self, parent=...) -> newjointnodeMObject: ...  # type: ignore
    def degreesOfFreedom(self, *args, **kwargs): ...
    def hikJointName(self, *args, **kwargs): ...
    def maxRotateDampXRange(self, *args, **kwargs): ...
    def maxRotateDampXStrength(self, *args, **kwargs): ...
    def maxRotateDampYRange(self, *args, **kwargs): ...
    def maxRotateDampYStrength(self, *args, **kwargs): ...
    def maxRotateDampZRange(self, *args, **kwargs): ...
    def maxRotateDampZStrength(self, *args, **kwargs): ...
    def minRotateDampXRange(self, *args, **kwargs): ...
    def minRotateDampXStrength(self, *args, **kwargs): ...
    def minRotateDampYRange(self, *args, **kwargs): ...
    def minRotateDampYStrength(self, *args, **kwargs): ...
    def minRotateDampZRange(self, *args, **kwargs): ...
    def minRotateDampZStrength(self, *args, **kwargs): ...
    def orientation(self, *args, **kwargs): ...
    def orientationComponents(self, *args, **kwargs): ...
    def preferredAngle(self, *args, **kwargs): ...
    def scaleOrientation(self, *args, **kwargs): ...
    def segmentScale(self, *args, **kwargs): ...
    def setDegreesOfFreedom(self, *args, **kwargs): ...
    def setMaxRotateDampXRange(self, *args, **kwargs): ...
    def setMaxRotateDampXStrength(self, *args, **kwargs): ...
    def setMaxRotateDampYRange(self, *args, **kwargs): ...
    def setMaxRotateDampYStrength(self, *args, **kwargs): ...
    def setMaxRotateDampZRange(self, *args, **kwargs): ...
    def setMaxRotateDampZStrength(self, *args, **kwargs): ...
    def setMinRotateDampXRange(self, *args, **kwargs): ...
    def setMinRotateDampXStrength(self, *args, **kwargs): ...
    def setMinRotateDampYRange(self, *args, **kwargs): ...
    def setMinRotateDampYStrength(self, *args, **kwargs): ...
    def setMinRotateDampZRange(self, *args, **kwargs): ...
    def setMinRotateDampZStrength(self, *args, **kwargs): ...
    def setOrientation(self, *args, **kwargs): ...
    def setPreferredAngle(self, *args, **kwargs): ...
    def setScaleOrientation(self, *args, **kwargs): ...
    def setSegmentScale(self, *args, **kwargs): ...
    def setStiffness(self, *args, **kwargs): ...
    def stiffness(self, *args, **kwargs): ...

class MFnSkinCluster(MFnGeometryFilter):
    def __init__(self, *args, **kwargs) -> None: ...
    def getBlendWeights(self, shape, components) -> MDoubleArray: ...  # type: ignore
    def getPointsAffectedByInfluence(self, *args, **kwargs): ...
    @overload
    def getWeights(self, shape, components, influence) -> MDoubleArray: ...  # type: ignore
    @overload
    def getWeights(self, shape, components, influences) -> MDoubleArray: ...  # type: ignore
    def indexForInfluenceObject(self, influenceObj) -> long: ...  # type: ignore
    def influenceObjects(self) -> MDagPathArray: ...  # type: ignore
    def setBlendWeights(self, shape, components, weights) -> self: ...  # type: ignore
    @overload
    def setWeights(self, shape, components, influence, weight, normalize=..., returnOldWeights=...) -> NoneorMDoubleArray: ...  # type: ignore
    @overload
    def setWeights(self, shape, components, influences, weights, normalize=..., returnOldWeights=...) -> NoneorMDoubleArray: ...  # type: ignore

class MFnWeightGeometryFilter(MFnGeometryFilter):
    def __init__(self, *args, **kwargs) -> None: ...
    def getEnvelopeWeights(self, index) -> MFloatArray: ...  # type: ignore
    def getWeightPlugStrings(self, *args, **kwargs): ...
    @overload
    def getWeights(self, index, components) -> MFloatArray: ...  # type: ignore
    @overload
    def getWeights(self, path, components) -> MFloatArray: ...  # type: ignore
    @overload
    def setWeight(self, path, index, components, weight, oldValues=...) -> Any: ...
    @overload
    def setWeight(self, path, index, components, values) -> Any: ...
    @overload
    def setWeight(self, path, components, weight, oldValues=...) -> Any: ...
    @overload
    def setWeight(self, path, components, values) -> Any: ...
    def weightPlugStrings(self, list) -> MString: ...  # type: ignore
