Program Listing for File BodyBase.h#
↰ Return to documentation for file (include/Karana/SOADyn/BodyBase.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/SOADyn/CoordBase.h"
namespaceKarana::Dynamics{
namespacekc=Karana::Core;
namespacekm=Karana::Math;
classSubTree;
classHingeOnode;
classMultibody;
classHingeBase;
classPhysicalBody;
classCompoundBody;
//classBodyBase:publicCoordBase_T<>{
classBodyBase:publicCoordBase{
/*foraccesstodatacachesetupmethods*/
friendclassSubTree;
public:
constkc::ks_ptr<Multibody>&multibody()const;
boolisCompoundBody()const{return_is_compound_body;}
virtual~BodyBase();
virtualconstkc::ks_ptr<PhysicalBody>&physicalParentBody()const=0;
virtualkc::ks_ptr<HingeBase>parentHinge()const=0;
virtualboolisRootBody()const{returnfalse;}
protected:
kc::ks_ptr<SubTree>_parentSubtree()const{return_parent_subtree;}
BodyBase(std::string_viewnm,kc::id_tid,kc::ks_ptr<SubTree>parent_subtree);
protected:
virtualvoid_setupChildBodyCacheDependencies(constBodyBase&child_body)=0;
virtualvoid_setupChildPhysicalBodyCacheDependencies(constPhysicalBody&child_body,
boolskip_scatter)=0;
virtualvoid_setupChildCompoundBodyCacheDependencies(constCompoundBody&child_body)=0;
virtualvoid_setupBaseBodyCacheDependencies()=0;
virtualvoid_teardownChildBodyCacheDependencies(constBodyBase&child_body)=0;
virtualvoid_teardownChildPhysicalBodyCacheDependencies(constPhysicalBody&child_body,
boolskip_scatter)=0;
virtualvoid
_teardownChildCompoundBodyCacheDependencies(constCompoundBody&child_body)=0;
virtualvoid_teardownBaseBodyCacheDependencies()=0;
km::MatgetATBIMatPsi()constoverride{returnkm::Mat();};
km::MatgetATBID()constoverride;
km::MatgetATBIDinv()constoverride;
km::MatgetATBIG()constoverride{returnkm::Mat();};
km::MatgetATBITauper()constoverride{returnkm::Mat();};
km::MatgetUpsilonMatrix()override{returnkm::Mat();};
km::Mat_oframe2pframePsi()constoverride{returnkm::Mat();};
km::Mat_oframe2pframePhi()constoverride{returnkm::Mat();};
km::Mat_pframe2otherPhi(constkf::Frame&/*other*/)constoverride{returnkm::Mat();};
protected:
km::Matjacobian(constkf::Frame&,bool)constoverride{
throwstd::runtime_error(
"jacobianshouldnotbecalledonBodyBase,onlyonderivedclasses.");
}
km::MatjacobianDot(constkf::Frame&,bool)constoverride{
throwstd::runtime_error(
"jacobianDotshouldnotbecalledonBodyBase,onlyonderivedclasses.");
}
virtualvoid_computeCoordMapMatrix(km::Mat){};
protected:
kc::ks_ptr<SubTree>_parent_subtree=nullptr;
bool_is_compound_body=false;
kc::RegistryList<HingeOnode>_algorithmic_gather_child_onodes;
};
}//namespaceKarana::Dynamics