AGX Dynamics 2.41.3.0
Loading...
Searching...
No Matches
MaterialEntity.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or
9having been advised so by Algoryx Simulation AB for a time limited evaluation,
10or having purchased a valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
18// AUTOMATICALLY GENERATED ENTITY, DO NOT EDIT! //
20
21#ifndef GENERATED_AGX_PHYSICS_MATERIAL_H_PLUGIN
22#define GENERATED_AGX_PHYSICS_MATERIAL_H_PLUGIN
23
24#define AGX_ENTITY_WRAPPER 1
25
26
27#ifdef _MSC_VER
28# pragma warning(push)
29// warning C4505: 'agxData::VectorAttributeT<T>::print' : unreferenced local function has been removed
30# pragma warning( disable : 4505 )
31// warning C4251: 'X' : class 'Y' needs to have dll-interface to be used by clients of class 'Z'
32# pragma warning( disable : 4251 )
33// warning C4355: 'this' : used in base member initializer list
34# pragma warning( disable : 4355 )
35// marked as __forceinline not inlined
36# pragma warning( disable: 4714 )
37#endif
38
39#include <agxData/EntityModel.h>
41#include <agxData/EntityRef.h>
42#include <agxData/EntityPtr.h>
44#include <agx/Integer.h>
45#include <agx/Real.h>
46#include <agx/macros.h>
48#include <agx/Name.h>
52namespace agx { class Material; }
53
54namespace agx { namespace Physics { class BulkMaterialPtr; }}
55namespace agx { namespace Physics { class SurfaceMaterialPtr; }}
56namespace agx { namespace Physics { class WireMaterialPtr; }}
57
58namespace agx
59{
60 namespace Physics
61 {
62
63 class MaterialModel;
64 class MaterialData;
65 class MaterialPtr;
66 class MaterialInstance;
67 class MaterialSemantics;
68
69
71
76 {
77 public:
79
80 MaterialModel(const agx::String& name = "Material");
81
84
87
90
92 virtual void shutdownCleanup() override;
93
94
95
96 /* Attributes */
103
104 protected:
105 virtual ~MaterialModel();
106 virtual agxData::EntityData* createData(agxData::EntityStorage* storage) override;
107 virtual void configure(agx::TiXmlElement* eEntity) override;
108 virtual void initAttributeAccessors() override;
109 virtual void construct(agxData::EntityPtr instance) override;
111 };
112
113
115 #ifndef AGX_PHYSICS_MATERIAL_DATA_SET_OVERRIDE
116 #define AGX_PHYSICS_MATERIAL_DATA_SET
117 class AGXPHYSICS_EXPORT MaterialData : public agx::ReferencedData
118 {
119 public:
120 MaterialInstance operator[] (size_t index);
121
122 public:
126 agxData::Array< agx::Name > materialLibraryName;
130
131 public:
132 typedef agx::Material* modelType;
133 typedef agx::Name nameType;
134 typedef agx::Name materialLibraryNameType;
135 typedef agx::Physics::BulkMaterialPtr bulkMaterialType;
136 typedef agx::Physics::SurfaceMaterialPtr surfaceMaterialType;
137 typedef agx::Physics::WireMaterialPtr wireMaterialType;
138
139 public:
140 MaterialData(agxData::EntityStorage* storage);
141 MaterialData();
142
143 protected:
144 virtual ~MaterialData() {}
145 virtual void setNumElements(agx::Index numElements) override;
146
147 private:
148 MaterialData& operator= (const MaterialData&) { return *this; }
149
150 };
151 #endif
153
154
156 class AGXPHYSICS_EXPORT MaterialSemantics : public agx::ReferencedSemantics
157 {
158 public:
159
160 // Automatic getters
161 agx::Material* const& getModel() const;
162 agx::Name const& getName() const;
163 agx::Name const& getMaterialLibraryName() const;
164 agx::Physics::BulkMaterialPtr const& getBulkMaterial() const;
165 agx::Physics::SurfaceMaterialPtr const& getSurfaceMaterial() const;
166 agx::Physics::WireMaterialPtr const& getWireMaterial() const;
167
168 // Semantics defined by explicit kernels
169
170 // Automatic setters
171 void setModel(agx::Material* const& value);
172 void setName(agx::Name const& value);
173 void setMaterialLibraryName(agx::Name const& value);
174 void setBulkMaterial(agx::Physics::BulkMaterialPtr const& value);
175 void setSurfaceMaterial(agx::Physics::SurfaceMaterialPtr const& value);
176 void setWireMaterial(agx::Physics::WireMaterialPtr const& value);
177
178
179 protected:
180 friend class MaterialPtr;
181 friend class MaterialInstance;
182 MaterialSemantics();
183 };
185
186
187
191 {
192 public:
194 typedef MaterialData DataType;
195 typedef MaterialInstance InstanceType;
196
197 public:
204 AGXPHYSICS_EXPORT MaterialInstance instance();
205 AGXPHYSICS_EXPORT const MaterialInstance instance() const;
206
207 AGXPHYSICS_EXPORT MaterialSemantics* operator->();
208 AGXPHYSICS_EXPORT const MaterialSemantics* operator->() const;
209
210 MaterialData* getData();
211 const MaterialData* getData() const;
212
213
218
223
228
233
238
243
244 };
245
246 // Entity is Referenced
248
249
251 class AGXPHYSICS_EXPORT MaterialInstance : public agx::ReferencedInstance
252 {
253 public:
254 MaterialInstance();
255 MaterialInstance(MaterialData* data, agx::Index index);
256 MaterialInstance(agxData::EntityStorage *storage, agx::Index index);
257 MaterialInstance(const agxData::EntityInstance& other);
258 MaterialInstance(const agxData::EntityPtr& ptr);
259
260 MaterialData* getData();
261 const MaterialData* getData() const;
262
263 public:
265 agx::Material*& model();
267 agx::Material* const& model() const;
268
270 agx::Name& name();
272 agx::Name const& name() const;
273
275 agx::Name& materialLibraryName();
277 agx::Name const& materialLibraryName() const;
278
280 agx::Physics::BulkMaterialPtr& bulkMaterial();
282 agx::Physics::BulkMaterialPtr const& bulkMaterial() const;
283
285 agx::Physics::SurfaceMaterialPtr& surfaceMaterial();
287 agx::Physics::SurfaceMaterialPtr const& surfaceMaterial() const;
288
290 agx::Physics::WireMaterialPtr& wireMaterial();
292 agx::Physics::WireMaterialPtr const& wireMaterial() const;
293
294 };
296
297
298
301
302
303
305 /* Implementation */
306 //-----------------------------------------------------------------------------------------------------
307 //-----------------------------------------------------------------------------------------------------
308 inline MaterialInstance agx::Physics::MaterialData::operator[] (size_t index) { return MaterialInstance(this, (agx::Index)index); }
309 //-----------------------------------------------------------------------------------------------------
311 AGX_FORCE_INLINE MaterialPtr::MaterialPtr(agxData::EntityStorage* storage, agx::Index id) : agx::ReferencedPtr(storage, id) {}
312 AGX_FORCE_INLINE MaterialPtr::MaterialPtr(const agxData::EntityPtr& ptr) : agx::ReferencedPtr(ptr)
313 {
315 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
316 EntityPtr::getModel()->fullPath().c_str(), MaterialModel::instance()->fullPath().c_str());
317 }
318
319 AGX_FORCE_INLINE MaterialPtr::MaterialPtr(const agxData::EntityInstance& instance) : agx::ReferencedPtr(instance)
320 {
321 agxAssertN(!instance || instance.isInstanceOf(MaterialModel::instance()),
322 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
323 EntityPtr::getModel()->fullPath().c_str(), MaterialModel::instance()->fullPath().c_str());
324 }
325
326 AGX_FORCE_INLINE MaterialPtr& MaterialPtr::operator= (const agxData::EntityPtr& ptr)
327 {
329 agxAssertN(!ptr || ptr.isInstanceOf(MaterialModel::instance()),
330 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
331 EntityPtr::getModel()->fullPath().c_str(), MaterialModel::instance()->fullPath().c_str());
332 return *this;
333 }
334
335 AGX_FORCE_INLINE MaterialPtr& MaterialPtr::operator= (const agxData::EntityInstance& instance)
336 {
338 agxAssertN(!instance || instance.isInstanceOf(MaterialModel::instance()),
339 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
340 EntityPtr::getModel()->fullPath().c_str(), MaterialModel::instance()->fullPath().c_str());
341 return *this;
342 }
343
344 inline MaterialInstance MaterialPtr::instance() { return agxData::EntityPtr::instance(); }
345 inline const MaterialInstance MaterialPtr::instance() const { return agxData::EntityPtr::instance(); }
346 AGX_FORCE_INLINE MaterialSemantics* MaterialPtr::operator->() { return (MaterialSemantics* )this; }
347 AGX_FORCE_INLINE const MaterialSemantics* MaterialPtr::operator->() const { return (const MaterialSemantics* )this; }
348 AGX_FORCE_INLINE MaterialData* MaterialPtr::getData() { return static_cast<MaterialData* >(agxData::EntityPtr::getData()); }
349 AGX_FORCE_INLINE const MaterialData* MaterialPtr::getData() const { return static_cast<const MaterialData* >(agxData::EntityPtr::getData()); }
350
351 AGX_FORCE_INLINE agx::Material*& MaterialPtr::model() { verifyIndex(); return getData()->model[calculateIndex()]; }
352 AGX_FORCE_INLINE agx::Material* const& MaterialPtr::model() const { verifyIndex(); return getData()->model[calculateIndex()]; }
353
354 AGX_FORCE_INLINE agx::Name& MaterialPtr::name() { verifyIndex(); return getData()->name[calculateIndex()]; }
355 AGX_FORCE_INLINE agx::Name const& MaterialPtr::name() const { verifyIndex(); return getData()->name[calculateIndex()]; }
356
357 AGX_FORCE_INLINE agx::Name& MaterialPtr::materialLibraryName() { verifyIndex(); return getData()->materialLibraryName[calculateIndex()]; }
358 AGX_FORCE_INLINE agx::Name const& MaterialPtr::materialLibraryName() const { verifyIndex(); return getData()->materialLibraryName[calculateIndex()]; }
359
360 AGX_FORCE_INLINE agx::Physics::BulkMaterialPtr& MaterialPtr::bulkMaterial() { verifyIndex(); return getData()->bulkMaterial[calculateIndex()]; }
361 AGX_FORCE_INLINE agx::Physics::BulkMaterialPtr const& MaterialPtr::bulkMaterial() const { verifyIndex(); return getData()->bulkMaterial[calculateIndex()]; }
362
363 AGX_FORCE_INLINE agx::Physics::SurfaceMaterialPtr& MaterialPtr::surfaceMaterial() { verifyIndex(); return getData()->surfaceMaterial[calculateIndex()]; }
364 AGX_FORCE_INLINE agx::Physics::SurfaceMaterialPtr const& MaterialPtr::surfaceMaterial() const { verifyIndex(); return getData()->surfaceMaterial[calculateIndex()]; }
365
366 AGX_FORCE_INLINE agx::Physics::WireMaterialPtr& MaterialPtr::wireMaterial() { verifyIndex(); return getData()->wireMaterial[calculateIndex()]; }
367 AGX_FORCE_INLINE agx::Physics::WireMaterialPtr const& MaterialPtr::wireMaterial() const { verifyIndex(); return getData()->wireMaterial[calculateIndex()]; }
368
369 //-----------------------------------------------------------------------------------------------------
370 AGX_FORCE_INLINE MaterialInstance::MaterialInstance() {}
371 AGX_FORCE_INLINE MaterialInstance::MaterialInstance(MaterialData* data, agx::Index index) : agx::ReferencedInstance(data, index) {}
372 AGX_FORCE_INLINE MaterialInstance::MaterialInstance(agxData::EntityStorage* storage, agx::Index index) : agx::ReferencedInstance(storage, index) {}
373 AGX_FORCE_INLINE MaterialInstance::MaterialInstance(const agxData::EntityInstance& other) : agx::ReferencedInstance(other)
374 {
376 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
377 EntityInstance::getModel()->fullPath().c_str(), MaterialModel::instance()->fullPath().c_str());
378 }
379
380 AGX_FORCE_INLINE MaterialInstance::MaterialInstance(const agxData::EntityPtr& ptr) : agx::ReferencedInstance(ptr)
381 {
383 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
384 EntityInstance::getModel()->fullPath().c_str(), MaterialModel::instance()->fullPath().c_str());
385 }
386
387
388 AGX_FORCE_INLINE MaterialData* MaterialInstance::getData() { return static_cast<MaterialData* >(agxData::EntityInstance::getData()); }
389 AGX_FORCE_INLINE const MaterialData* MaterialInstance::getData() const { return static_cast<const MaterialData* >(agxData::EntityInstance::getData()); }
390
391 AGX_FORCE_INLINE agx::Material*& MaterialInstance::model() { verifyIndex(); return getData()->model[getIndex()]; }
392 AGX_FORCE_INLINE agx::Material* const& MaterialInstance::model() const { verifyIndex(); return getData()->model[getIndex()]; }
393
394 AGX_FORCE_INLINE agx::Name& MaterialInstance::name() { verifyIndex(); return getData()->name[getIndex()]; }
395 AGX_FORCE_INLINE agx::Name const& MaterialInstance::name() const { verifyIndex(); return getData()->name[getIndex()]; }
396
397 AGX_FORCE_INLINE agx::Name& MaterialInstance::materialLibraryName() { verifyIndex(); return getData()->materialLibraryName[getIndex()]; }
398 AGX_FORCE_INLINE agx::Name const& MaterialInstance::materialLibraryName() const { verifyIndex(); return getData()->materialLibraryName[getIndex()]; }
399
400 AGX_FORCE_INLINE agx::Physics::BulkMaterialPtr& MaterialInstance::bulkMaterial() { verifyIndex(); return getData()->bulkMaterial[getIndex()]; }
401 AGX_FORCE_INLINE agx::Physics::BulkMaterialPtr const& MaterialInstance::bulkMaterial() const { verifyIndex(); return getData()->bulkMaterial[getIndex()]; }
402
403 AGX_FORCE_INLINE agx::Physics::SurfaceMaterialPtr& MaterialInstance::surfaceMaterial() { verifyIndex(); return getData()->surfaceMaterial[getIndex()]; }
404 AGX_FORCE_INLINE agx::Physics::SurfaceMaterialPtr const& MaterialInstance::surfaceMaterial() const { verifyIndex(); return getData()->surfaceMaterial[getIndex()]; }
405
406 AGX_FORCE_INLINE agx::Physics::WireMaterialPtr& MaterialInstance::wireMaterial() { verifyIndex(); return getData()->wireMaterial[getIndex()]; }
407 AGX_FORCE_INLINE agx::Physics::WireMaterialPtr const& MaterialInstance::wireMaterial() const { verifyIndex(); return getData()->wireMaterial[getIndex()]; }
408
409 //-----------------------------------------------------------------------------------------------------
410 AGX_FORCE_INLINE MaterialSemantics::MaterialSemantics() {}
411 //-----------------------------------------------------------------------------------------------------
413 }
414}
415
416AGX_TYPE_BINDING(agx::Physics::MaterialPtr, "Physics.MaterialPtr")
417AGX_TYPE_BINDING(agx::Physics::MaterialInstance, "Physics.MaterialInstance")
418
419#ifdef _MSC_VER
420# pragma warning(pop)
421#endif
422
423#undef AGX_ENTITY_WRAPPER
424#undef AGX_ENTITY_NAMESPACE
425#endif
426
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGX_TYPE_BINDING(_Type, _Name)
Definition: Type.h:179
#define AGXPHYSICS_EXPORT
Type-specific Array used for fast access into the data held by a Buffer.
Definition: Array.h:107
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...
Definition: EntityPtr.h:52
EntityPtr & operator=(const EntityPtr &other)=default
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
agxData::EntityInstance instance()
Definition: EntityPtr.h:269
Data storage for a collection of entity instances of a specified EntityModel.
Definition: EntityStorage.h:73
Main material class which acts as a holder of a Surface Material and a Bulk material.
Definition: Material.h:376
agx::String fullPath() const
Representation of a name string.
Definition: Name.h:33
Pointer to a entity instance of type Physics.BulkMaterial.
Abstract description of the data attributes for the Physics.Material entity.
static agxData::ScalarAttributeT< agx::Physics::WireMaterialPtr > * wireMaterialAttribute
static MaterialModel * instance()
MaterialModel(const agx::String &name="Material")
static MaterialPtr createInstance()
Create and return a pointer to a new instance in the default storage for this entity model.
virtual void construct(agxData::EntityPtr instance) override
virtual void configure(agx::TiXmlElement *eEntity) override
static agxData::PointerAttributeT< agx::Material * > * modelAttribute
void construct(agx::Physics::MaterialPtr material)
virtual agxData::EntityData * createData(agxData::EntityStorage *storage) override
static agxData::ScalarAttributeT< agx::Name > * nameAttribute
virtual void shutdownCleanup() override
This is part of internal cleanup and should not be called by users.
static agxData::EntityStorage * defaultStorage()
static agxData::ScalarAttributeT< agx::Physics::SurfaceMaterialPtr > * surfaceMaterialAttribute
static agxData::ScalarAttributeT< agx::Name > * materialLibraryNameAttribute
static agxData::ScalarAttributeT< agx::Physics::BulkMaterialPtr > * bulkMaterialAttribute
virtual void initAttributeAccessors() override
Pointer to a entity instance of type Physics.Material.
AGXPHYSICS_EXPORT MaterialPtr()
AGXPHYSICS_EXPORT const MaterialInstance instance() const
AGXPHYSICS_EXPORT agx::Name & name()
AGXPHYSICS_EXPORT agx::Name & materialLibraryName()
AGXPHYSICS_EXPORT agx::Physics::BulkMaterialPtr & bulkMaterial()
AGXPHYSICS_EXPORT agx::Physics::WireMaterialPtr & wireMaterial()
AGXPHYSICS_EXPORT MaterialPtr(agxData::EntityStorage *storage, agx::Index id)
AGXPHYSICS_EXPORT agx::Name const & name() const
AGXPHYSICS_EXPORT MaterialPtr(const agxData::EntityPtr &ptr)
AGXPHYSICS_EXPORT agx::Physics::SurfaceMaterialPtr const & surfaceMaterial() const
MaterialData * getData()
AGXPHYSICS_EXPORT MaterialSemantics * operator->()
AGXPHYSICS_EXPORT MaterialInstance instance()
AGXPHYSICS_EXPORT const MaterialSemantics * operator->() const
AGXPHYSICS_EXPORT agx::Physics::SurfaceMaterialPtr & surfaceMaterial()
AGXPHYSICS_EXPORT agx::Physics::BulkMaterialPtr const & bulkMaterial() const
AGXPHYSICS_EXPORT agx::Material *const & model() const
MaterialInstance InstanceType
const MaterialData * getData() const
AGXPHYSICS_EXPORT agx::Material *& model()
AGXPHYSICS_EXPORT MaterialPtr(const agxData::EntityInstance &instance)
AGXPHYSICS_EXPORT agx::Name const & materialLibraryName() const
AGXPHYSICS_EXPORT agx::Physics::WireMaterialPtr const & wireMaterial() const
Pointer to a entity instance of type Physics.SurfaceMaterial.
Pointer to a entity instance of type Physics.WireMaterial.
Abstract description of the data attributes for the Referenced entity.
Pointer to a entity instance of type Referenced.
Vector containing 'raw' data.
Definition: agx/Vector.h:246
#define agxAssertN(expr, format,...)
Definition: debug.h:145
#define DOXYGEN_END_INTERNAL_BLOCK()
Definition: macros.h:89
#define CALLABLE
Definition: macros.h:72
#define DOXYGEN_START_INTERNAL_BLOCK()
Definition: macros.h:88
#define AGX_FORCE_INLINE
Definition: macros.h:58
Contains classes for low level data storage for AGX.
Definition: Container.h:23
agxData::EntityRef< MaterialPtr > MaterialRef
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
AGXCORE_EXPORT Model * getModel(const Path &path, const Path &_namespace=Path())
UInt32 Index
Definition: Integer.h:44