bool hkbGetWorldFromModelModifier::write(HkxXMLWriter *writer){ std::lock_guard <std::mutex> guard(mutex); auto writedatafield = [&](const QString & name, const QString & value){ writer->writeLine(writer->parameter, QStringList(writer->name), QStringList(name), value); }; if (writer && !getIsWritten()){ QString refString = "null"; QStringList list1 = {writer->name, writer->clas, writer->signature}; QStringList list2 = {getReferenceString(), getClassname(), "0x"+QString::number(getSignature(), 16)}; writer->writeLine(writer->object, list1, list2, ""); if (getVariableBindingSetData()){ refString = getVariableBindingSet()->getReferenceString(); } writedatafield("variableBindingSet", refString); writedatafield("userData", QString::number(userData)); writedatafield("name", name); writedatafield("enable", getBoolAsString(enable)); writedatafield("translationOut", translationOut.getValueAsString()); writedatafield("rotationOut", rotationOut.getValueAsString()); writer->writeLine(writer->object, false); setIsWritten(); writer->writeLine("\n"); if (getVariableBindingSetData() && !getVariableBindingSet()->write(writer)){ LogFile::writeToLog(getParentFilename()+": "+getClassname()+": write()!\nUnable to write 'variableBindingSet'!!!"); } } return true; }
// DataIO_Std::WriteByGroup() int DataIO_Std::WriteByGroup(CpptrajFile& file, DataSetList const& SetList, GroupType gtype) { int err = 0; bool firstWrite = true; DataSetList tmpdsl; std::vector<bool> setIsWritten(SetList.size(), false); unsigned int startIdx = 0; unsigned int nWritten = 0; while (nWritten < SetList.size()) { std::string currentName; Dimension currentDim; int currentNum = -1; switch (gtype) { case BY_NAME : currentName = SetList[startIdx]->Meta().Name(); break; case BY_ASPECT : currentName = SetList[startIdx]->Meta().Aspect(); break; case BY_IDX : currentNum = SetList[startIdx]->Meta().Idx(); break; case BY_ENS : currentNum = SetList[startIdx]->Meta().EnsembleNum(); break; case BY_DIM : currentDim = SetList[startIdx]->Dim(0); break; case NO_TYPE : return 1; } int firstNonMatch = -1; for (unsigned int idx = startIdx; idx != SetList.size(); idx++) { if (!setIsWritten[idx]) { bool match = false; switch (gtype) { case BY_NAME : match = (currentName == SetList[idx]->Meta().Name()); break; case BY_ASPECT : match = (currentName == SetList[idx]->Meta().Aspect()); break; case BY_IDX : match = (currentNum == SetList[idx]->Meta().Idx()); break; case BY_ENS : match = (currentNum == SetList[idx]->Meta().EnsembleNum()); break; case BY_DIM : match = (currentDim == SetList[idx]->Dim(0)); break; case NO_TYPE : return 1; } if (match) { tmpdsl.AddCopyOfSet( SetList[idx] ); setIsWritten[idx] = true; nWritten++; } else if (firstNonMatch == -1) firstNonMatch = (int)idx; } } if (firstNonMatch > -1) startIdx = (unsigned int)firstNonMatch; if (!firstWrite) file.Printf("\n"); else firstWrite = false; if (isInverted_) err += WriteDataInverted(file, tmpdsl); else err += WriteDataNormal(file, tmpdsl); tmpdsl.ClearAll(); } return err; }
bool hkbBehaviorGraphStringData::write(HkxXMLWriter *writer){ std::lock_guard <std::mutex> guard(mutex); if (writer && !getIsWritten()){ QStringList list1 = {writer->name, writer->clas, writer->signature}; QStringList list2 = {getReferenceString(), getClassname(), "0x"+QString::number(getSignature(), 16)}; writer->writeLine(writer->object, list1, list2, ""); QStringList list3 = {writer->name, writer->numelements}; QStringList list4 = {"eventNames", QString::number(eventNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < eventNames.size(); i++){ writer->writeLine(writer->string, QStringList(), QStringList(), eventNames.at(i)); } if (eventNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"attributeNames", QString::number(attributeNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < attributeNames.size(); i++){ writer->writeLine(writer->string, QStringList(), QStringList(), attributeNames.at(i)); } if (attributeNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"variableNames", QString::number(variableNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < variableNames.size(); i++){ writer->writeLine(writer->string, QStringList(), QStringList(), variableNames.at(i)); } if (variableNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"characterPropertyNames", QString::number(characterPropertyNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < characterPropertyNames.size(); i++){ writer->writeLine(writer->string, QStringList(), QStringList(), characterPropertyNames.at(i)); } if (characterPropertyNames.size() > 0){ writer->writeLine(writer->parameter, false); } writer->writeLine(writer->object, false); setIsWritten(); writer->writeLine("\n"); } return true; }
bool hkbHandIkDriverInfo::write(HkxXMLWriter *writer){ std::lock_guard <std::mutex> guard(mutex); auto writedatafield = [&](const QString & name, const QString & value){ writer->writeLine(writer->parameter, QStringList(writer->name), QStringList(name), value); }; if (writer && !getIsWritten()){ QStringList list1 = {writer->name, writer->clas, writer->signature}; QStringList list2 = {getReferenceString(), getClassname(), "0x"+QString::number(getSignature(), 16)}; writer->writeLine(writer->object, list1, list2, ""); list1 = {writer->name, writer->numelements}; list2 = {"hands", QString::number(hands.size())}; writer->writeLine(writer->parameter, list1, list2, ""); for (auto i = 0; i < hands.size(); i++){ writer->writeLine(writer->object, true); writedatafield("elbowAxisLS", hands[i].elbowAxisLS.getValueAsString()); writedatafield("backHandNormalLS", hands[i].backHandNormalLS.getValueAsString()); writedatafield("handOffsetLS", hands[i].handOffsetLS.getValueAsString()); writedatafield("handOrienationOffsetLS", hands[i].handOrienationOffsetLS.getValueAsString()); writedatafield("maxElbowAngleDegrees", QString::number(hands.at(i).maxElbowAngleDegrees, char('f'), 6)); writedatafield("minElbowAngleDegrees", QString::number(hands.at(i).minElbowAngleDegrees, char('f'), 6)); writedatafield("shoulderIndex", QString::number(hands.at(i).shoulderIndex)); writedatafield("shoulderSiblingIndex", QString::number(hands.at(i).shoulderSiblingIndex)); writedatafield("elbowIndex", QString::number(hands.at(i).elbowIndex)); writedatafield("elbowSiblingIndex", QString::number(hands.at(i).elbowSiblingIndex)); writedatafield("wristIndex", QString::number(hands.at(i).wristIndex)); writedatafield("enforceEndPosition", getBoolAsString(hands.at(i).enforceEndPosition)); writedatafield("enforceEndRotation", getBoolAsString(hands.at(i).enforceEndRotation)); writer->writeLine(writer->parameter, QStringList(writer->name), QStringList("localFrameName"), hands.at(i).localFrameName, true); writer->writeLine(writer->object, false); } if (hands.size() > 0){ writer->writeLine(writer->parameter, false); } writedatafield("fadeInOutCurve", fadeInOutCurve); writer->writeLine(writer->object, false); setIsWritten(); writer->writeLine("\n"); } return true; }
bool hkbProxyModifier::write(HkxXMLWriter *writer){ std::lock_guard <std::mutex> guard(mutex); auto writedatafield = [&](const QString & name, const QString & value){ writer->writeLine(writer->parameter, QStringList(writer->name), QStringList(name), value); }; if (writer && !getIsWritten()){ QString refString = "null"; QStringList list1 = {writer->name, writer->clas, writer->signature}; QStringList list2 = {getReferenceString(), getClassname(), "0x"+QString::number(getSignature(), 16)}; writer->writeLine(writer->object, list1, list2, ""); if (getVariableBindingSetData()){ refString = getVariableBindingSet()->getReferenceString(); } writedatafield("variableBindingSet", refString); writedatafield("userData", QString::number(userData)); writedatafield("name", name); writedatafield("enable", getBoolAsString(enable)); writedatafield("proxyInfo", ""); writer->writeLine(writer->object, true); writedatafield("dynamicFriction", QString::number(proxyInfo.dynamicFriction, char('f'), 6)); writedatafield("staticFriction", QString::number(proxyInfo.staticFriction, char('f'), 6)); writedatafield("keepContactTolerance", QString::number(proxyInfo.keepContactTolerance)); writedatafield("up", proxyInfo.up.getValueAsString()); writedatafield("keepDistance", QString::number(proxyInfo.keepDistance, char('f'), 6)); writedatafield("contactAngleSensitivity", QString::number(proxyInfo.contactAngleSensitivity, char('f'), 6)); writedatafield("userPlanes", QString::number(proxyInfo.userPlanes)); writedatafield("maxCharacterSpeedForSolver", QString::number(proxyInfo.maxCharacterSpeedForSolver, char('f'), 6)); writedatafield("characterStrength", QString::number(proxyInfo.characterStrength, char('f'), 6)); writedatafield("characterMass", QString::number(proxyInfo.characterMass, char('f'), 6)); writedatafield("maxSlope", QString::number(proxyInfo.maxSlope, char('f'), 6)); writedatafield("penetrationRecoverySpeed", QString::number(proxyInfo.penetrationRecoverySpeed, char('f'), 6)); writedatafield("maxCastIterations", QString::number(proxyInfo.maxCastIterations)); writedatafield("id", getBoolAsString(proxyInfo.refreshManifoldInCheckSupport)); writer->writeLine(writer->object, false); writer->writeLine(writer->parameter, false); writedatafield("linearVelocity", linearVelocity.getValueAsString()); writedatafield("horizontalGain", QString::number(horizontalGain, char('f'), 6)); writedatafield("verticalGain", QString::number(verticalGain, char('f'), 6)); writedatafield("maxHorizontalSeparation", QString::number(maxHorizontalSeparation, char('f'), 6)); writedatafield("limitHeadingDegrees", QString::number(limitHeadingDegrees, char('f'), 6)); writedatafield("maxVerticalSeparation", QString::number(maxVerticalSeparation, char('f'), 6)); writedatafield("verticalDisplacementError", QString::number(verticalDisplacementError, char('f'), 6)); writedatafield("verticalDisplacementErrorGain", QString::number(verticalDisplacementErrorGain, char('f'), 6)); writedatafield("maxVerticalDisplacement", QString::number(maxVerticalDisplacement, char('f'), 6)); writedatafield("minVerticalDisplacement", QString::number(minVerticalDisplacement, char('f'), 6)); writedatafield("capsuleHeight", QString::number(capsuleHeight, char('f'), 6)); writedatafield("capsuleRadius", QString::number(capsuleRadius, char('f'), 6)); writedatafield("maxSlopeForRotation", QString::number(maxSlopeForRotation, char('f'), 6)); writedatafield("collisionFilterInfo", QString::number(collisionFilterInfo)); writedatafield("phantomType", phantomType); writedatafield("linearVelocityMode", linearVelocityMode); writedatafield("ignoreIncomingRotation", getBoolAsString(ignoreIncomingRotation)); writedatafield("ignoreCollisionDuringRotation", getBoolAsString(ignoreCollisionDuringRotation)); writedatafield("ignoreIncomingTranslation", getBoolAsString(ignoreIncomingTranslation)); writedatafield("includeDownwardMomentum", getBoolAsString(includeDownwardMomentum)); writedatafield("followWorldFromModel", getBoolAsString(followWorldFromModel)); writedatafield("isTouchingGround", getBoolAsString(isTouchingGround)); writer->writeLine(writer->object, false); setIsWritten(); writer->writeLine("\n"); if (getVariableBindingSetData() && !getVariableBindingSet()->write(writer)){ LogFile::writeToLog(getParentFilename()+": "+getClassname()+": write()!\nUnable to write 'variableBindingSet'!!!"); } } return true; }
bool hkbCharacterStringData::write(HkxXMLWriter *writer){ std::lock_guard <std::mutex> guard(mutex); auto writedatafield = [&](const QString & name, const QString & value){ writer->writeLine(writer->parameter, QStringList(writer->name), QStringList(name), value); }; if (writer && !getIsWritten()){ QStringList list1 = {writer->name, writer->clas, writer->signature}; QStringList list2 = {getReferenceString(), getClassname(), "0x"+QString::number(getSignature(), 16)}; writer->writeLine(writer->object, list1, list2, ""); QStringList list3 = {writer->name, writer->numelements}; QStringList list4 = {"deformableSkinNames", QString::number(deformableSkinNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < deformableSkinNames.size(); i++){ writedatafield("", deformableSkinNames.at(i)); } if (deformableSkinNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"rigidSkinNames", QString::number(rigidSkinNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < rigidSkinNames.size(); i++){ writedatafield("", rigidSkinNames.at(i)); } if (rigidSkinNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"animationNames", QString::number(animationNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < animationNames.size(); i++){ writedatafield("", QString(animationNames.at(i)).replace("/", "\\")); } if (animationNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"animationFilenames", QString::number(animationFilenames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < animationFilenames.size(); i++){ writedatafield("", animationFilenames.at(i)); } if (animationFilenames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"characterPropertyNames", QString::number(characterPropertyNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < characterPropertyNames.size(); i++){ writedatafield("", characterPropertyNames.at(i)); } if (characterPropertyNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"retargetingSkeletonMapperFilenames", QString::number(retargetingSkeletonMapperFilenames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < retargetingSkeletonMapperFilenames.size(); i++){ writedatafield("", retargetingSkeletonMapperFilenames.at(i)); } if (retargetingSkeletonMapperFilenames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"lodNames", QString::number(lodNames.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < lodNames.size(); i++){ writedatafield("", lodNames.at(i)); } if (lodNames.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"mirroredSyncPointSubstringsA", QString::number(mirroredSyncPointSubstringsA.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < mirroredSyncPointSubstringsA.size(); i++){ writedatafield("", mirroredSyncPointSubstringsA.at(i)); } if (mirroredSyncPointSubstringsA.size() > 0){ writer->writeLine(writer->parameter, false); } list3 = {writer->name, writer->numelements}; list4 = {"mirroredSyncPointSubstringsB", QString::number(mirroredSyncPointSubstringsB.size())}; writer->writeLine(writer->parameter, list3, list4, ""); for (auto i = 0; i < mirroredSyncPointSubstringsB.size(); i++){ writedatafield("", mirroredSyncPointSubstringsB.at(i)); } if (mirroredSyncPointSubstringsB.size() > 0){ writer->writeLine(writer->parameter, false); } writedatafield("name", name); writedatafield("rigName", QString(rigName).replace("/", "\\")); writedatafield("ragdollName", QString(ragdollName).replace("/", "\\")); writedatafield("behaviorFilename", QString(behaviorFilename).replace("/", "\\")); writer->writeLine(writer->object, false); setIsWritten(); writer->writeLine("\n"); } return true; }
bool hkbStateMachineTransitionInfoArray::write(HkxXMLWriter *writer){ std::lock_guard <std::mutex> guard(mutex); auto writedatafield = [&](const QString & name, const QString & value){ writer->writeLine(writer->parameter, QStringList(writer->name), QStringList(name), value); }; auto writeref = [&](const HkxSharedPtr & shdptr, const QString & name){ QString refString = "null"; (shdptr.data()) ? refString = shdptr->getReferenceString() : NULL; writer->writeLine(writer->parameter, QStringList(writer->name), QStringList(name), refString); }; auto writechild = [&](const HkxSharedPtr & shdptr, const QString & datafield){ if (shdptr.data() && !shdptr->write(writer)) LogFile::writeToLog(getParentFilename()+": "+getClassname()+": write()!\nUnable to write '"+datafield+"'!!!"); }; if (writer && !getIsWritten()){ QStringList list1 = {writer->name, writer->clas, writer->signature}; QStringList list2 = {getReferenceString(), getClassname(), "0x"+QString::number(getSignature(), 16)}; writer->writeLine(writer->object, list1, list2, ""); list1 = {writer->name, writer->numelements}; list2 = {"transitions", QString::number(transitions.size())}; writer->writeLine(writer->parameter, list1, list2, ""); for (auto i = 0; i < transitions.size(); i++){ writer->writeLine(writer->object, true); writedatafield("triggerInterval", ""); writer->writeLine(writer->object, true); writedatafield("enterEventId", QString::number(transitions.at(i).triggerInterval.enterEventId)); writedatafield("exitEventId", QString::number(transitions.at(i).triggerInterval.exitEventId)); writedatafield("enterTime", QString::number(transitions.at(i).triggerInterval.enterTime, char('f'), 6)); writedatafield("exitTime", QString::number(transitions.at(i).triggerInterval.exitTime, char('f'), 6)); writer->writeLine(writer->object, false); writer->writeLine(writer->parameter, false); writedatafield("initiateInterval", ""); writer->writeLine(writer->object, true); writedatafield("enterEventId", QString::number(transitions.at(i).initiateInterval.enterEventId)); writedatafield("exitEventId", QString::number(transitions.at(i).initiateInterval.exitEventId)); writedatafield("enterTime", QString::number(transitions.at(i).initiateInterval.enterTime, char('f'), 6)); writedatafield("exitTime", QString::number(transitions.at(i).initiateInterval.exitTime, char('f'), 6)); writer->writeLine(writer->object, false); writer->writeLine(writer->parameter, false); writeref(transitions.at(i).transition, "transition"); writeref(transitions.at(i).condition, "condition"); writedatafield("eventId", QString::number(transitions.at(i).eventId)); writedatafield("toStateId", QString::number(transitions.at(i).toStateId)); writedatafield("fromNestedStateId", QString::number(transitions.at(i).fromNestedStateId)); writedatafield("toNestedStateId", QString::number(transitions.at(i).toNestedStateId)); writedatafield("priority", QString::number(transitions.at(i).priority)); writedatafield("flags", transitions.at(i).flags); writer->writeLine(writer->object, false); } if (transitions.size() > 0){ writer->writeLine(writer->parameter, false); } writer->writeLine(writer->object, false); setIsWritten(); writer->writeLine("\n"); for (auto i = 0; i < transitions.size(); i++){ writechild(transitions.at(i).transition, "transitions.at("+QString::number(i)+").transition"); writechild(transitions.at(i).condition, "transitions.at("+QString::number(i)+").condition"); } } return true; }