Program Listing for File CoordData.h#
↰ Return to documentation for file (include/Karana/SOADyn/CoordData.h)
/*
*Copyright(c)2024-2026KaranaDynamicsPtyLtd.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/KCore/LockingBase.h"
#include"Karana/KCore/RegistryList.h"
#include"Karana/KCore/Tree.h"
#include"Karana/Math/Defs.h"
#include"Karana/SOADyn/CoordBase.h"
#include<map>
#include<vector>
namespaceKarana::Dynamics{
namespacekc=Karana::Core;
namespacekm=Karana::Math;
classBodyBase;
classSubhingeBase;
classHingePnode;
classLoopConstraint;
classCoordData:publickc::LockingBase{
/*foraccessto_setupOrientationMap*/
/*foraccedto_coord_obj_list*/
friendclassFrameToFrameJacobianGenerator;
friendclassCompoundSubhinge;
/*foraccessto_coord_objs_list*/
friendclassConstraintKinematicsSolver;
/*foraccessto_coordOffsets()*/
friendclassSubGraph;
friendclassSubTree;
friendclassAlgorithms;
public:
CoordData(std::string_viewname,conststd::vector<kc::ks_ptr<CoordBase>>&coordobjs_list);
~CoordData();
structCoordOffset{
size_tQ;
size_tU;
kc::ks_ptr<CoordBase>obj;
};
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;
boolisReady()constoverride;
voiddumpState(std::string_viewprefix,std::vector<std::string>filter={"ALL"})const;
std::string
dumpString(std::string_viewprefix="",
constKarana::Core::Base::DumpOptions*options=nullptr)constoverride;
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::map<std::string,std::vector<km::Vec>>toMap();
protected:
std::vector<kc::ks_ptr<CoordBase>>_children(constCoordBase&cb)const;
bool_isAncestorOf(constCoordBase&anc,constCoordBase&desc,boolstrict)const;
kc::ks_ptr<CoordBase>_getAncestor(constCoordBase&first,constCoordBase&second)const;
statickc::ks_ptr<CoordData>_mergeCoordData(conststd::vector<kc::ks_ptr<CoordData>>&cds,
std::string_viewname="");
constCoordOffset&_coordOffsets(kc::id_tid)const;
void_makeTree()const;
void_localChartSetQ(constEigen::Ref<constkm::Vec>&val);
km::Vec_localChartGetQ()const;
protected:
size_t_nQ=0;
size_t_nU=0;
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