21#ifndef GENERATED_AGX_PHYSICS_CONTACTMATERIAL_H_PLUGIN
22#define GENERATED_AGX_PHYSICS_CONTACTMATERIAL_H_PLUGIN
24#define AGX_ENTITY_WRAPPER 1
30# pragma warning( disable : 4505 )
32# pragma warning( disable : 4251 )
34# pragma warning( disable : 4355 )
36# pragma warning( disable: 4714 )
53namespace agx {
class ContactMaterial; }
55namespace agx {
namespace Physics {
class MaterialPtr; }}
56namespace agx {
namespace Physics {
class MaterialPtr; }}
63 class ContactMaterialModel;
64 class ContactMaterialData;
65 class ContactMaterialPtr;
66 class ContactMaterialInstance;
67 class ContactMaterialSemantics;
125 virtual void configure(agx::TiXmlElement* eEntity)
override;
133 #ifndef AGX_PHYSICS_CONTACTMATERIAL_DATA_SET_OVERRIDE
134 #define AGX_PHYSICS_CONTACTMATERIAL_DATA_SET
138 ContactMaterialInstance operator[] (
size_t index);
171 typedef agx::Vec2 tangentialCohesionType;
177 typedef agx::Bool surfaceFrictionEnabledType;
179 typedef agx::UInt8 contactReductionBinResolutionType;
180 typedef agx::Bool useContactAreaApproachType;
184 typedef agx::Real minElasticRestLengthType;
185 typedef agx::Real maxElasticRestLengthType;
187 typedef agx::Real rollingResistanceCoefficientType;
188 typedef agx::Real twistingResistanceCoefficientType;
189 typedef agx::Real rollingResistanceComplianceType;
190 typedef agx::Real twistingResistanceComplianceType;
195 ContactMaterialData();
198 virtual ~ContactMaterialData() {}
199 virtual void setNumElements(
agx::Index numElements)
override;
202 ContactMaterialData& operator= (
const ContactMaterialData&) {
return *
this; }
218 agx::Vec2 const& getTangentialCohesion()
const;
222 agx::Real const& getAdhesiveOverlap()
const;
224 agx::Bool const& getSurfaceFrictionEnabled()
const;
225 agx::UInt8 const& getContactReductionMode()
const;
226 agx::UInt8 const& getContactReductionBinResolution()
const;
227 agx::Bool const& getUseContactAreaApproach()
const;
228 agx::Vec2 const& getWireFriction()
const;
229 agx::Real const& getYoungsModulus()
const;
231 agx::Real const& getMinElasticRestLength()
const;
232 agx::Real const& getMaxElasticRestLength()
const;
233 agx::Real const& getImpactCompliance()
const;
234 agx::Real const& getRollingResistanceCoefficient()
const;
235 agx::Real const& getTwistingResistanceCoefficient()
const;
236 agx::Real const& getRollingResistanceCompliance()
const;
237 agx::Real const& getTwistingResistanceCompliance()
const;
243 void setIsExplicit(
agx::Bool const& value);
246 void setTangentialCohesion(
agx::Vec2 const& value);
247 void setRestitution(
agx::Vec3 const& value);
248 void setFriction(
agx::Vec2 const& value);
249 void setAdhesion(
agx::Real const& value);
250 void setAdhesiveOverlap(
agx::Real const& value);
251 void setViscosity(
agx::Vec3 const& value);
252 void setSurfaceFrictionEnabled(
agx::Bool const& value);
253 void setContactReductionMode(
agx::UInt8 const& value);
254 void setContactReductionBinResolution(
agx::UInt8 const& value);
255 void setUseContactAreaApproach(
agx::Bool const& value);
256 void setWireFriction(
agx::Vec2 const& value);
257 void setYoungsModulus(
agx::Real const& value);
259 void setMinElasticRestLength(
agx::Real const& value);
260 void setMaxElasticRestLength(
agx::Real const& value);
261 void setImpactCompliance(
agx::Real const& value);
262 void setRollingResistanceCoefficient(
agx::Real const& value);
263 void setTwistingResistanceCoefficient(
agx::Real const& value);
264 void setRollingResistanceCompliance(
agx::Real const& value);
265 void setTwistingResistanceCompliance(
agx::Real const& value);
270 friend class ContactMaterialPtr;
271 friend class ContactMaterialInstance;
272 ContactMaterialSemantics();
434 ContactMaterialInstance();
435 ContactMaterialInstance(ContactMaterialData* data,
agx::Index index);
440 ContactMaterialData* getData();
441 const ContactMaterialData* getData()
const;
462 agx::Vec2 const& tangentialCohesion()
const;
482 agx::Real const& adhesiveOverlap()
const;
492 agx::Bool const& surfaceFrictionEnabled()
const;
497 agx::UInt8 const& contactReductionMode()
const;
502 agx::UInt8 const& contactReductionBinResolution()
const;
507 agx::Bool const& useContactAreaApproach()
const;
527 agx::Real const& minElasticRestLength()
const;
532 agx::Real const& maxElasticRestLength()
const;
537 agx::Real const& impactCompliance()
const;
540 agx::Real& rollingResistanceCoefficient();
542 agx::Real const& rollingResistanceCoefficient()
const;
545 agx::Real& twistingResistanceCoefficient();
547 agx::Real const& twistingResistanceCoefficient()
const;
550 agx::Real& rollingResistanceCompliance();
552 agx::Real const& rollingResistanceCompliance()
const;
555 agx::Real& twistingResistanceCompliance();
557 agx::Real const& twistingResistanceCompliance()
const;
578 inline ContactMaterialInstance
agx::Physics::ContactMaterialData::operator[] (
size_t index) {
return ContactMaterialInstance(
this, (
agx::Index)index); }
585 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
592 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
600 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
601 EntityPtr::getModel()->fullPath().c_str(), ContactMaterialModel::instance()->fullPath().c_str());
609 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
610 EntityPtr::getModel()->fullPath().c_str(), ContactMaterialModel::instance()->fullPath().c_str());
616 AGX_FORCE_INLINE ContactMaterialSemantics* ContactMaterialPtr::operator->() {
return (ContactMaterialSemantics* )
this; }
617 AGX_FORCE_INLINE const ContactMaterialSemantics* ContactMaterialPtr::operator->()
const {
return (
const ContactMaterialSemantics* )
this; }
621 AGX_FORCE_INLINE agx::Bool& ContactMaterialPtr::isExplicit() { verifyIndex();
return getData()->isExplicit[calculateIndex()]; }
622 AGX_FORCE_INLINE agx::Bool const& ContactMaterialPtr::isExplicit()
const { verifyIndex();
return getData()->isExplicit[calculateIndex()]; }
630 AGX_FORCE_INLINE agx::Vec2& ContactMaterialPtr::tangentialCohesion() { verifyIndex();
return getData()->tangentialCohesion[calculateIndex()]; }
631 AGX_FORCE_INLINE agx::Vec2 const& ContactMaterialPtr::tangentialCohesion()
const { verifyIndex();
return getData()->tangentialCohesion[calculateIndex()]; }
633 AGX_FORCE_INLINE agx::Vec3& ContactMaterialPtr::restitution() { verifyIndex();
return getData()->restitution[calculateIndex()]; }
634 AGX_FORCE_INLINE agx::Vec3 const& ContactMaterialPtr::restitution()
const { verifyIndex();
return getData()->restitution[calculateIndex()]; }
636 AGX_FORCE_INLINE agx::Vec2& ContactMaterialPtr::friction() { verifyIndex();
return getData()->friction[calculateIndex()]; }
637 AGX_FORCE_INLINE agx::Vec2 const& ContactMaterialPtr::friction()
const { verifyIndex();
return getData()->friction[calculateIndex()]; }
639 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::adhesion() { verifyIndex();
return getData()->adhesion[calculateIndex()]; }
640 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::adhesion()
const { verifyIndex();
return getData()->adhesion[calculateIndex()]; }
642 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::adhesiveOverlap() { verifyIndex();
return getData()->adhesiveOverlap[calculateIndex()]; }
643 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::adhesiveOverlap()
const { verifyIndex();
return getData()->adhesiveOverlap[calculateIndex()]; }
645 AGX_FORCE_INLINE agx::Vec3& ContactMaterialPtr::viscosity() { verifyIndex();
return getData()->viscosity[calculateIndex()]; }
646 AGX_FORCE_INLINE agx::Vec3 const& ContactMaterialPtr::viscosity()
const { verifyIndex();
return getData()->viscosity[calculateIndex()]; }
648 AGX_FORCE_INLINE agx::Bool& ContactMaterialPtr::surfaceFrictionEnabled() { verifyIndex();
return getData()->surfaceFrictionEnabled[calculateIndex()]; }
649 AGX_FORCE_INLINE agx::Bool const& ContactMaterialPtr::surfaceFrictionEnabled()
const { verifyIndex();
return getData()->surfaceFrictionEnabled[calculateIndex()]; }
651 AGX_FORCE_INLINE agx::UInt8& ContactMaterialPtr::contactReductionMode() { verifyIndex();
return getData()->contactReductionMode[calculateIndex()]; }
652 AGX_FORCE_INLINE agx::UInt8 const& ContactMaterialPtr::contactReductionMode()
const { verifyIndex();
return getData()->contactReductionMode[calculateIndex()]; }
654 AGX_FORCE_INLINE agx::UInt8& ContactMaterialPtr::contactReductionBinResolution() { verifyIndex();
return getData()->contactReductionBinResolution[calculateIndex()]; }
655 AGX_FORCE_INLINE agx::UInt8 const& ContactMaterialPtr::contactReductionBinResolution()
const { verifyIndex();
return getData()->contactReductionBinResolution[calculateIndex()]; }
657 AGX_FORCE_INLINE agx::Bool& ContactMaterialPtr::useContactAreaApproach() { verifyIndex();
return getData()->useContactAreaApproach[calculateIndex()]; }
658 AGX_FORCE_INLINE agx::Bool const& ContactMaterialPtr::useContactAreaApproach()
const { verifyIndex();
return getData()->useContactAreaApproach[calculateIndex()]; }
660 AGX_FORCE_INLINE agx::Vec2& ContactMaterialPtr::wireFriction() { verifyIndex();
return getData()->wireFriction[calculateIndex()]; }
661 AGX_FORCE_INLINE agx::Vec2 const& ContactMaterialPtr::wireFriction()
const { verifyIndex();
return getData()->wireFriction[calculateIndex()]; }
663 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::youngsModulus() { verifyIndex();
return getData()->youngsModulus[calculateIndex()]; }
664 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::youngsModulus()
const { verifyIndex();
return getData()->youngsModulus[calculateIndex()]; }
666 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::damping() { verifyIndex();
return getData()->damping[calculateIndex()]; }
667 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::damping()
const { verifyIndex();
return getData()->damping[calculateIndex()]; }
669 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::minElasticRestLength() { verifyIndex();
return getData()->minElasticRestLength[calculateIndex()]; }
670 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::minElasticRestLength()
const { verifyIndex();
return getData()->minElasticRestLength[calculateIndex()]; }
672 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::maxElasticRestLength() { verifyIndex();
return getData()->maxElasticRestLength[calculateIndex()]; }
673 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::maxElasticRestLength()
const { verifyIndex();
return getData()->maxElasticRestLength[calculateIndex()]; }
675 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::impactCompliance() { verifyIndex();
return getData()->impactCompliance[calculateIndex()]; }
676 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::impactCompliance()
const { verifyIndex();
return getData()->impactCompliance[calculateIndex()]; }
678 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::rollingResistanceCoefficient() { verifyIndex();
return getData()->rollingResistanceCoefficient[calculateIndex()]; }
679 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::rollingResistanceCoefficient()
const { verifyIndex();
return getData()->rollingResistanceCoefficient[calculateIndex()]; }
681 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::twistingResistanceCoefficient() { verifyIndex();
return getData()->twistingResistanceCoefficient[calculateIndex()]; }
682 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::twistingResistanceCoefficient()
const { verifyIndex();
return getData()->twistingResistanceCoefficient[calculateIndex()]; }
684 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::rollingResistanceCompliance() { verifyIndex();
return getData()->rollingResistanceCompliance[calculateIndex()]; }
685 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::rollingResistanceCompliance()
const { verifyIndex();
return getData()->rollingResistanceCompliance[calculateIndex()]; }
687 AGX_FORCE_INLINE agx::Real& ContactMaterialPtr::twistingResistanceCompliance() { verifyIndex();
return getData()->twistingResistanceCompliance[calculateIndex()]; }
688 AGX_FORCE_INLINE agx::Real const& ContactMaterialPtr::twistingResistanceCompliance()
const { verifyIndex();
return getData()->twistingResistanceCompliance[calculateIndex()]; }
695 AGX_FORCE_INLINE ContactMaterialInstance::ContactMaterialInstance(ContactMaterialData* data,
agx::Index index) :
agx::ReferencedInstance(data, index) {}
700 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
707 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
715 AGX_FORCE_INLINE agx::Bool& ContactMaterialInstance::isExplicit() { verifyIndex();
return getData()->isExplicit[getIndex()]; }
716 AGX_FORCE_INLINE agx::Bool const& ContactMaterialInstance::isExplicit()
const { verifyIndex();
return getData()->isExplicit[getIndex()]; }
724 AGX_FORCE_INLINE agx::Vec2& ContactMaterialInstance::tangentialCohesion() { verifyIndex();
return getData()->tangentialCohesion[getIndex()]; }
725 AGX_FORCE_INLINE agx::Vec2 const& ContactMaterialInstance::tangentialCohesion()
const { verifyIndex();
return getData()->tangentialCohesion[getIndex()]; }
727 AGX_FORCE_INLINE agx::Vec3& ContactMaterialInstance::restitution() { verifyIndex();
return getData()->restitution[getIndex()]; }
728 AGX_FORCE_INLINE agx::Vec3 const& ContactMaterialInstance::restitution()
const { verifyIndex();
return getData()->restitution[getIndex()]; }
730 AGX_FORCE_INLINE agx::Vec2& ContactMaterialInstance::friction() { verifyIndex();
return getData()->friction[getIndex()]; }
731 AGX_FORCE_INLINE agx::Vec2 const& ContactMaterialInstance::friction()
const { verifyIndex();
return getData()->friction[getIndex()]; }
733 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::adhesion() { verifyIndex();
return getData()->adhesion[getIndex()]; }
734 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::adhesion()
const { verifyIndex();
return getData()->adhesion[getIndex()]; }
736 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::adhesiveOverlap() { verifyIndex();
return getData()->adhesiveOverlap[getIndex()]; }
737 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::adhesiveOverlap()
const { verifyIndex();
return getData()->adhesiveOverlap[getIndex()]; }
739 AGX_FORCE_INLINE agx::Vec3& ContactMaterialInstance::viscosity() { verifyIndex();
return getData()->viscosity[getIndex()]; }
740 AGX_FORCE_INLINE agx::Vec3 const& ContactMaterialInstance::viscosity()
const { verifyIndex();
return getData()->viscosity[getIndex()]; }
742 AGX_FORCE_INLINE agx::Bool& ContactMaterialInstance::surfaceFrictionEnabled() { verifyIndex();
return getData()->surfaceFrictionEnabled[getIndex()]; }
743 AGX_FORCE_INLINE agx::Bool const& ContactMaterialInstance::surfaceFrictionEnabled()
const { verifyIndex();
return getData()->surfaceFrictionEnabled[getIndex()]; }
745 AGX_FORCE_INLINE agx::UInt8& ContactMaterialInstance::contactReductionMode() { verifyIndex();
return getData()->contactReductionMode[getIndex()]; }
746 AGX_FORCE_INLINE agx::UInt8 const& ContactMaterialInstance::contactReductionMode()
const { verifyIndex();
return getData()->contactReductionMode[getIndex()]; }
748 AGX_FORCE_INLINE agx::UInt8& ContactMaterialInstance::contactReductionBinResolution() { verifyIndex();
return getData()->contactReductionBinResolution[getIndex()]; }
749 AGX_FORCE_INLINE agx::UInt8 const& ContactMaterialInstance::contactReductionBinResolution()
const { verifyIndex();
return getData()->contactReductionBinResolution[getIndex()]; }
751 AGX_FORCE_INLINE agx::Bool& ContactMaterialInstance::useContactAreaApproach() { verifyIndex();
return getData()->useContactAreaApproach[getIndex()]; }
752 AGX_FORCE_INLINE agx::Bool const& ContactMaterialInstance::useContactAreaApproach()
const { verifyIndex();
return getData()->useContactAreaApproach[getIndex()]; }
754 AGX_FORCE_INLINE agx::Vec2& ContactMaterialInstance::wireFriction() { verifyIndex();
return getData()->wireFriction[getIndex()]; }
755 AGX_FORCE_INLINE agx::Vec2 const& ContactMaterialInstance::wireFriction()
const { verifyIndex();
return getData()->wireFriction[getIndex()]; }
757 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::youngsModulus() { verifyIndex();
return getData()->youngsModulus[getIndex()]; }
758 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::youngsModulus()
const { verifyIndex();
return getData()->youngsModulus[getIndex()]; }
761 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::damping()
const { verifyIndex();
return getData()->damping[getIndex()]; }
763 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::minElasticRestLength() { verifyIndex();
return getData()->minElasticRestLength[getIndex()]; }
764 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::minElasticRestLength()
const { verifyIndex();
return getData()->minElasticRestLength[getIndex()]; }
766 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::maxElasticRestLength() { verifyIndex();
return getData()->maxElasticRestLength[getIndex()]; }
767 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::maxElasticRestLength()
const { verifyIndex();
return getData()->maxElasticRestLength[getIndex()]; }
769 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::impactCompliance() { verifyIndex();
return getData()->impactCompliance[getIndex()]; }
770 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::impactCompliance()
const { verifyIndex();
return getData()->impactCompliance[getIndex()]; }
772 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::rollingResistanceCoefficient() { verifyIndex();
return getData()->rollingResistanceCoefficient[getIndex()]; }
773 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::rollingResistanceCoefficient()
const { verifyIndex();
return getData()->rollingResistanceCoefficient[getIndex()]; }
775 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::twistingResistanceCoefficient() { verifyIndex();
return getData()->twistingResistanceCoefficient[getIndex()]; }
776 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::twistingResistanceCoefficient()
const { verifyIndex();
return getData()->twistingResistanceCoefficient[getIndex()]; }
778 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::rollingResistanceCompliance() { verifyIndex();
return getData()->rollingResistanceCompliance[getIndex()]; }
779 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::rollingResistanceCompliance()
const { verifyIndex();
return getData()->rollingResistanceCompliance[getIndex()]; }
781 AGX_FORCE_INLINE agx::Real& ContactMaterialInstance::twistingResistanceCompliance() { verifyIndex();
return getData()->twistingResistanceCompliance[getIndex()]; }
782 AGX_FORCE_INLINE agx::Real const& ContactMaterialInstance::twistingResistanceCompliance()
const { verifyIndex();
return getData()->twistingResistanceCompliance[getIndex()]; }
801#undef AGX_ENTITY_WRAPPER
802#undef AGX_ENTITY_NAMESPACE
#define AGX_DECLARE_POINTER_TYPES(type)
#define AGX_TYPE_BINDING(_Type, _Name)
#define AGXPHYSICS_EXPORT
Type-specific Array used for fast access into the data held by a Buffer.
Entity instance provides access to a single instance in an EntityStorage.
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
Accessor to a entity instance stored in a EntityStorage, to allow SOA (structure of arrays) data to b...
EntityPtr & operator=(const EntityPtr &other)=default
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
agxData::EntityInstance instance()
Data storage for a collection of entity instances of a specified EntityModel.
agx::String fullPath() const
Pointer to a entity instance of type Physics.Material.
Abstract description of the data attributes for the Referenced entity.
Pointer to a entity instance of type Referenced.
Vector containing 'raw' data.
#define agxAssertN(expr, format,...)
#define DOXYGEN_END_INTERNAL_BLOCK()
#define DOXYGEN_START_INTERNAL_BLOCK()
Contains classes for low level data storage for AGX.
AGXFMI_EXPORT InputVariable_Real * setDamping(agx::Constraint *constraint)
agxData::EntityRef< ContactMaterialPtr > ContactMaterialRef
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
AGXCORE_EXPORT Model * getModel(const Path &path, const Path &_namespace=Path())