Program Listing for File CoordData.h

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/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*/
friendclassF2FJacobianGenerator;
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();

std::string_viewtypeString()constnoexceptoverride{
staticstd::stringtype_string="Karana::Dynamics::CoordData";
returntype_string;
}

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;

boolisFinalized()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,_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