TranslateCommand.cpp dnacalib/commands/TranslateCommand.h dnacalib/CommandImplBase.h dnacalib/dna/DNA.h dnacalib/dna/DNACalibDNAReaderImpl.h dnacalib/types/Aliases.h dnac::TranslateCommand::Impl dnac //CopyrightEpicGames,Inc.AllRightsReserved. #include"dnacalib/commands/TranslateCommand.h" #include"dnacalib/CommandImplBase.h" #include"dnacalib/dna/DNA.h" #include"dnacalib/dna/DNACalibDNAReaderImpl.h" #include"dnacalib/types/Aliases.h" namespacednac{ classTranslateCommand::Impl:publicCommandImplBase<Impl>{ private: usingSuper=CommandImplBase<Impl>; public: explicitImpl(MemoryResource*memRes_): Super{memRes_}, translation{}{ } voidsetTranslation(Vector3translation_){ translation=translation_; } voidrun(DNACalibDNAReaderImpl*output){ if(translation!=Vector3{}){ translateNeutralJoints(output); translateVertexPositions(output); } } private: voidtranslateNeutralJoints(DNACalibDNAReaderImpl*output){ for(std::uint16_tjointIndex=0u;jointIndex<output->getJointCount();++jointIndex){ constautoparentIndex=output->getJointParentIndex(jointIndex); //Onlyrootjointsaretranslated if(jointIndex==parentIndex){ constautojoint=output->getNeutralJointTranslation(jointIndex); output->setNeutralJointTranslation(jointIndex,joint+translation); } } } voidtranslateVertexPositions(DNACalibDNAReaderImpl*output){ for(std::uint16_tmeshIndex=0u;meshIndex<output->getMeshCount();++meshIndex){ constautoxs=output->getVertexPositionXs(meshIndex); constautoys=output->getVertexPositionYs(meshIndex); constautozs=output->getVertexPositionZs(meshIndex); assert((xs.size()==ys.size())&&(ys.size()==zs.size())); RawVector3Vectormesh{xs,ys,zs,output->getMemoryResource()}; for(std::size_ti=0ul;i<mesh.size();++i){ mesh.xs[i]+=translation.x; mesh.ys[i]+=translation.y; mesh.zs[i]+=translation.z; } output->setVertexPositions(meshIndex,std::move(mesh)); } } private: Vector3translation; }; TranslateCommand::TranslateCommand(MemoryResource*memRes):pImpl{makeScoped<Impl>(memRes)}{ } TranslateCommand::TranslateCommand(Vector3translation,MemoryResource*memRes): pImpl{makeScoped<Impl>(memRes)}{ pImpl->setTranslation(translation); } TranslateCommand::~TranslateCommand()=default; TranslateCommand::TranslateCommand(TranslateCommand&&)=default; TranslateCommand&TranslateCommand::operator=(TranslateCommand&&)=default; voidTranslateCommand::setTranslation(Vector3translation){ pImpl->setTranslation(translation); } voidTranslateCommand::run(DNACalibDNAReader*output){ pImpl->run(static_cast<DNACalibDNAReaderImpl*>(output)); } }//namespacednac