Program Listing for File BodyBase.h

Program Listing for File BodyBase.h#

Return to documentation for file (include/Karana/SOADyn/BodyBase.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/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(kc::ks_ptr<BodyBase>child_body)=0;

virtualvoid_setupChildPhysicalBodyCacheDependencies(constPhysicalBody&child_body,
boolskip_scatter)=0;

virtualvoid
_setupChildCompoundBodyCacheDependencies(kc::ks_ptr<CompoundBody>child_body)=0;

virtualvoid_setupBaseBodyCacheDependencies()=0;

virtualvoid_teardownChildBodyCacheDependencies(kc::ks_ptr<BodyBase>child_body)=0;

virtualvoid_teardownChildPhysicalBodyCacheDependencies(constPhysicalBody&child_body,
boolskip_scatter)=0;

virtualvoid
_teardownChildCompoundBodyCacheDependencies(kc::ks_ptr<CompoundBody>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&target,booloriented)constoverride;

km::MatjacobianDot(constkf::Frame&target,booloriented)constoverride;

protected:
kc::ks_ptr<SubTree>_parent_subtree=nullptr;

bool_is_compound_body=false;

kc::RegistryList<HingeOnode>_algorithmic_gather_child_onodes;

kc::RegistryList<CompoundBody>_algorithmic_gather_child_cbs;
};

}//namespaceKarana::Dynamics