#include <maya/MFnAttribute.h>
#include <maya/MAnimCurveClipboard.h>
#include <maya/MGlobal.h>
#include <string.h>
#include "atomAnimLayers.h"
#include "atomImportExportStrings.h"
const char *kAnimLayers = "animLayers";
bool atomAnimLayers::getOrderedAnimLayers()
{
mOrderedAnimLayerNames.setLength(0);
return (status==
MS::kSuccess && mOrderedAnimLayerNames.length() >0);
}
void atomAnimLayers::createAnimLayer(
const MString &layerName,
const MString &prevLayerName)
{
if(prevLayerName.
length() !=0)
{
}
else
{
if(layerName ==
MString(
"BaseAnimation"))
{
}
else
{
}
}
}
bool atomAnimLayers::isAttrInAnimLayer(
const MString &nodeName,
const MString &attrName,
const MString &layerName)
{
for(
unsigned int k = 0; k < resultArray.
length(); ++k)
{
if(name == resultArray[k])
return true;
}
return false;
}
bool atomAnimLayers::addAttrToAnimLayer(
const MString &nodeName,
const MString &attrName,
const MString &layerName)
{
}
void atomAnimLayers::removeLayersIfNeeded(
bool replaceLayers,
const MString &nodeName,
const MString &attrName)
{
if(replaceLayers == true && mOrderedAnimLayerNames.length() > 0)
{
std::string str(fullName.
asChar());
if(mAttrsRemovedFromAnimLayers.find(std::string(str)) == mAttrsRemovedFromAnimLayers.end())
{
mAttrsRemovedFromAnimLayers.insert(str);
for(unsigned int z = 0; z < mOrderedAnimLayerNames.length(); ++z)
{
MString layerName = mOrderedAnimLayerNames[z];
if(isAttrInAnimLayer(nodeName, attrName, layerName))
{
{
std::string layerStr(layerName.
asChar());
if(mLayersWithRemovedAttrs.find(std::string(layerStr)) == mLayersWithRemovedAttrs.end())
mLayersWithRemovedAttrs.insert(layerStr);
}
}
}
}
}
}
void atomAnimLayers::deleteEmptyLayers(bool replaceLayers)
{
if(replaceLayers == true && mLayersWithRemovedAttrs.size() > 0)
{
for(std::set<std::string>::iterator iter = mLayersWithRemovedAttrs.begin(); iter !=
mLayersWithRemovedAttrs.end(); ++iter)
{
std::string str = *iter;
if(resultArray.length() ==0)
{
}
}
}
}
void atomAnimLayers::createMissingAnimLayers(
const MStringArray &animLayers)
{
for(
unsigned int k=0; k < animLayers.
length(); ++k)
{
{
if(k>0)
prevLayerName = animLayers[k-1];
if(k > 0 || animLayers[k] !=
MString(
"BaseAnimation") || animLayers.
length()==0)
{
createAnimLayer(animLayers[k],prevLayerName);
}
}
}
}
void atomAnimLayers::addAnimLayersToSelection()
{
getOrderedAnimLayers();
for(unsigned int z = 0; z < mOrderedAnimLayerNames.length();++z)
{
}
}
{
if(mOrderedAnimLayerNames.length() > 0)
{
if(mAnimLayers.length() != mOrderedAnimLayerNames.length())
{
mAnimLayers.setLength(mOrderedAnimLayerNames.length());
for(unsigned int k = 0; k < mAnimLayers.length(); ++k)
{
mAnimLayers[k] = nullObject;
}
}
}
for(
unsigned int k = 0; k < layers.
length(); ++k)
{
{
for(unsigned int z = 0; z < mOrderedAnimLayerNames.length();++z)
{
if(layerName == mOrderedAnimLayerNames[z])
{
mAnimLayers[z] = layers[k];
break;
}
}
}
}
return true;
}
void atomAnimLayers::addLayersToStartOfSelectionList(
MSelectionList &list)
{
if(mAnimLayers.length() > 0 )
{
for(unsigned int i =0; i<mAnimLayers.length();++i)
{
layers.
add(mAnimLayers[i],
true);
}
list = layers;
}
}
void atomAnimLayers::getPlugs(
unsigned int nth,
MPlugArray &plugs)
{
{
getRelevantAttributes(attributes);
collectAnimLayerPlugs(fnNode,attributes,plugs);
}
}
void atomAnimLayers::getRelevantAttributes(
MStringArray &attributes)
{
attr =
MString(
"rotationAccumulationMode");
attr =
MString(
"scaleAccumulationMode");
}
{
for(
unsigned int i = 0; i < attributes.
length(); ++i)
{
{
}
}
}
void atomAnimLayers::writeAnimLayers(ofstream &animFile, atomWriter &writer)
{
if(mAnimLayers.length() > 0)
{
animFile <<kAnimLayers << " { ";
for(unsigned int k = 0; k < mAnimLayers.length(); ++k)
{
{
animFile <<" " << layerName;
}
}
animFile << " }\n";
}
}
bool atomAnimLayers::readAnimLayers(ifstream &readAnim, char *dataType,atomReader &reader)
{
if (strcmp(dataType, kAnimLayers) == 0)
{
dataType = reader.asWord(readAnim);
if (strcmp(dataType, "{") == 0)
{
while((dataType = reader.asWord(readAnim)))
{
if(readAnim && ! readAnim.eof() && dataType && strcmp(dataType, "}") !=0)
{
}
else
break;
}
{
createMissingAnimLayers(layerNames);
addAnimLayersToSelection();
}
}
return true;
}
return false;
}
{
{
std::string attrStd(std::string(fnLeafAttr.name().asChar()));
PlugsAndLayers plugsAndLayers;
for(
unsigned int i =0; i < layers.
length(); ++i)
{
if(plugs[i].isNull()==false)
{
{
plugsAndLayers.mLayerNames.append(layerName);
plugsAndLayers.mPlugs.append(plugs[i]);
fAttrLayers[attrStd] = plugsAndLayers;
}
}
}
}
}
{
AttrLayersMap::iterator p;
std::string stdAttrName(plugName.
asChar());
p = fAttrLayers.find(stdAttrName);
if(p != fAttrLayers.end())
{
PlugsAndLayers val = p->second;
layerNames = val.mLayerNames;
return true;
}
return false;
}
{
return fEmptyLayerArray;
std::string name(layerName.
asChar());
ArrayMap::iterator p;
p = fArray.find(name);
if(p != fArray.end())
{
return *(p->second);
}
fArray[name] = item;
return *item;
}
atomLayerClipboard::~atomLayerClipboard()
{
for(ArrayMap::iterator p = fArray.begin(); p!= fArray.end(); ++p)
{
if(p->second)
delete p->second;
}
}
float startUnitless,
float endUnitless,
const MString &pasteFlags,
{
bool good = false;
startTime,endTime,startUnitless, endUnitless,false))
{
good = true;
}
{
MString command(
"pasteKey -cb api ");
command += " -mn true ";
{
command += onThisLayer;
}
command += pasteFlags;
int result;
{
return false;
}
}
return good;
}
float startUnitless,
float endUnitless,
const MString &pasteFlags)
{
bool oneWasGood = pasteClipboard(fEmptyLayerArray, startTime,endTime,
startUnitless, endUnitless,pasteFlags,animLayerName);
for(ArrayMap::iterator p = fArray.begin(); p!= fArray.end(); ++p)
{
if(p->second)
{
animLayerName=
MString(p->first.c_str());
bool good = pasteClipboard(*(p->second), startTime,endTime,
startUnitless, endUnitless,pasteFlags,animLayerName);
if(good == true)
oneWasGood = true;
}
}
if(oneWasGood==false)
{
stringStat);
}
}
bool atomNodeWithAnimLayers::isNodeLayered(std::set<std::string> &layerNames)
{
AttrLayersMap::iterator p;
bool isLayered = false;
for(p = fAttrLayers.begin();p!= fAttrLayers.end(); ++p)
{
PlugsAndLayers val = p->second;
for(unsigned int i =0 ;i< val.mLayerNames.length(); ++i)
{
if(val.mLayerNames[i].length() > 0)
{
std::string str(val.mLayerNames[i].asChar());
layerNames.insert(str);
isLayered = true;
}
}
}
return isLayered;
}