Program Listing for File CoordData.h#
↰ Return to documentation for file (include/Karana/SOADyn/CoordData.h)
/*
*Copyright(c)2024-2025KaranaDynamicsPtyLtd.Allrightsreserved.
*
*NOTICETOUSER:
*
*Thissourcecodeand/ordocumentation(the"LicensedMaterials")is
*theconfidentialandproprietaryinformationofKaranaDynamicsInc.
*UseoftheseLicensedMaterialsisgovernedbythetermsandconditions
*ofaseparatesoftwarelicenseagreementbetweenKaranaDynamicsandthe
*Licensee("LicenseAgreement").Unlessexpresslypermittedunderthat
*agreement,anyreproduction,modification,distribution,ordisclosure
*oftheLicensedMaterials,inwholeorinpart,toanythirdparty
*withoutthepriorwrittenconsentofKaranaDynamicsisstrictlyprohibited.
*
*THELICENSEDMATERIALSAREPROVIDED"ASIS"WITHOUTWARRANTYOFANYKIND.
*KARANADYNAMICSDISCLAIMSALLWARRANTIES,EXPRESSORIMPLIED,INCLUDING
*BUTNOTLIMITEDTOWARRANTIESOFMERCHANTABILITY,NON-INFRINGEMENT,AND
*FITNESSFORAPARTICULARPURPOSE.
*
*INNOEVENTSHALLKARANADYNAMICSBELIABLEFORANYDAMAGESWHATSOEVER,
*INCLUDINGBUTNOTLIMITEDTOLOSSOFPROFITS,DATA,ORUSE,EVENIF
*ADVISEDOFTHEPOSSIBILITYOFSUCHDAMAGES,WHETHERINCONTRACT,TORT,
*OROTHERWISEARISINGOUTOFORINCONNECTIONWITHTHELICENSEDMATERIALS.
*
*U.S.GovernmentEndUsers:TheLicensedMaterialsarea"commercialitem"
*asdefinedat48C.F.R.2.101,andareprovidedtotheU.S.Government
*onlyasacommercialenditemunderthetermsofthislicense.
*
*AnyuseoftheLicensedMaterialsinindividualorcommercialsoftwaremust
*include,intheuserdocumentationandinternalsourcecodecomments,
*thisNotice,Disclaimer,andU.S.GovernmentUseProvision.
*/
#pragmaonce
#include"Karana/Frame/Frame.h"
#include"Karana/KCore/BasicTreeImpl.h"
#include"Karana/KCore/LockingBase.h"
#include"Karana/KCore/RegistryList.h"
#include"Karana/Math/Defs.h"
#include"Karana/Math/NonlinearSolver.h"
#include"Karana/SOADyn/CoordBase.h"
#include<map>
#include<vector>
namespaceKarana::Dynamics{
namespacekc=Karana::Core;
namespacekm=Karana::Math;
namespacekf=Karana::Frame;
classBodyBase;
classSubhingeBase;
classHingePnode;
classLoopConstraint;
classCoordData:publickc::LockingBase{
/*foraccessto_setupOrientationMap*/
/*foraccedto_coord_obj_list*/
friendclassF2FJacobianGenerator;
friendclassCompoundSubhinge;
/*foraccessto_coord_objs_list*/
friendclassConstraintKinematicsSolver;
/*foraccessto_coordOffsets()*/
friendclassSubGraph;
friendclassSubTree;
friendclassAlgorithms;
public:
CoordData(conststd::string&name,
conststd::vector<kc::ks_ptr<CoordBase>>&coordobjs_list);
~CoordData();
conststd::string&typeString()constnoexceptoverride{
staticstd::stringtype_string="Karana::Dynamics::CoordData";
returntype_string;
}
structCoordOffset{
size_tQ;
size_tU;
kc::ks_ptr<CoordBase>obj;
};
statickc::ks_ptr<CoordData>mergeCoordData(conststd::vector<kc::ks_ptr<CoordData>>&cds);
km::VecgetQ()const;
km::VecgetU()const;
km::VecgetUdot()const;
km::VecgetT()const;
km::VecgetQdot()const;
voidsetQ(constEigen::Ref<constkm::Vec>&vals);
voidsetQ(doublefill_value);
voidsetU(constEigen::Ref<constkm::Vec>&vals);
voidsetU(doublefill_value);
voidsetT(constEigen::Ref<constkm::Vec>&vals);
voidsetT(doublefill_value);
voidsetUdot(constEigen::Ref<constkm::Vec>&vals);
voidsetUdot(doublefill_value);
size_tnQ()const;
size_tnU()const;
boolisFinalized()constoverride;
voiddumpState(conststd::string&prefix,std::vector<std::string>filter={"ALL"})const;
std::string
dumpString(conststd::string&prefix="",
constKarana::Core::Base::dumpOptions*options=nullptr)constoverride;
std::map<std::string,std::vector<km::Vec>>toMap();
boolcontains(constCoordBase&c)const;
boolcontains(kc::id_tid)const;
constCoordOffset&coordOffsets(constCoordBase&c)const;
conststd::pair<kc::ks_ptr<CoordBase>,size_t>coordAt(size_tU_offset)const;
std::vector<kc::ks_ptr<CoordBase>>coordBases(){return_coord_objs_list.items();};
kc::ks_ptr<CoordBase>parent(constCoordBase&cb)const;
std::vector<kc::ks_ptr<CoordBase>>children(constCoordBase&cb)const;
boolisAncestorOf(constCoordBase&anc,constCoordBase&desc,boolstrict)const;
kc::ks_ptr<CoordBase>getAncestor(constCoordBase&first,constCoordBase&second)const;
protected:
constCoordOffset&_coordOffsets(kc::id_tid)const;
void_makeTree()const;
protected:
size_t_nQ,_nU;
kc::RegistryList<CoordBase>_coord_objs_list;
std::map<kc::id_t,CoordOffset>_coord_offsets;
mutablestd::unique_ptr<constkc::Tree<kc::id_t>>_tree=nullptr;
};
}//namespaceKarana::Dynamics