AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
ParticlePairContactEntity.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_PARTICLEPAIRCONTACT_H_PLUGIN
22#define GENERATED_AGX_PHYSICS_PARTICLEPAIRCONTACT_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/Integer.h>
49#include <agx/Vec3.h>
50#include <agx/Real.h>
51
52
53namespace agx
54{
55 namespace Physics
56 {
57
58 class ParticlePairContactModel;
59 class ParticlePairContactData;
60 class ParticlePairContactPtr;
61 class ParticlePairContactInstance;
62 class ParticlePairContactSemantics;
63
64
66
71 {
72 public:
74
75 ParticlePairContactModel(const agx::String& name = "ParticlePairContact");
76
79
82
85
87 virtual void shutdownCleanup() override;
88
89
90
91 /* Attributes */
109
110 protected:
112 virtual agxData::EntityData* createData(agxData::EntityStorage* storage) override;
113 virtual void configure(agx::TiXmlElement* eEntity) override;
114 virtual void initAttributeAccessors() override;
115 virtual void construct(agxData::EntityPtr instance) override;
117 };
118
119
121 #ifndef AGX_PHYSICS_PARTICLEPAIRCONTACT_DATA_SET_OVERRIDE
122 #define AGX_PHYSICS_PARTICLEPAIRCONTACT_DATA_SET
123 class AGXPHYSICS_EXPORT ParticlePairContactData : public agx::Physics::ContactData
124 {
125 public:
126 ParticlePairContactInstance operator[] (size_t index);
127
128 public:
142 agxData::Array< agx::Real > impactNormalForce;
143 agxData::Array< agx::Real > contactEnergy;
144 agxData::Array< agx::Bool > isImpacting;
146 agxData::Array< agx::Real32 > charContactTime;
147
148 public:
149 typedef agx::UInt32 particle1Type;
150 typedef agx::UInt32 particle2Type;
151 typedef agx::UInt32 particleId1Type;
152 typedef agx::UInt32 particleId2Type;
153 typedef agx::Bool enabledType;
154 typedef agx::Vec3 pointType;
155 typedef agx::Vec3f normalType;
156 typedef agx::Vec3f tangentUType;
157 typedef agx::Vec3f tangentVType;
158 typedef agx::Real depthType;
159 typedef agx::Vec3f velocityType;
160 typedef agx::Vec3 localForceType;
161 typedef agx::Real impactNormalForceType;
162 typedef agx::Real contactEnergyType;
163 typedef agx::Bool isImpactingType;
164 typedef agx::Real32 timeStampType;
165 typedef agx::Real32 charContactTimeType;
166
167 public:
168 ParticlePairContactData(agxData::EntityStorage* storage);
169 ParticlePairContactData();
170
171 protected:
172 virtual ~ParticlePairContactData() {}
173 virtual void setNumElements(agx::Index numElements) override;
174
175 private:
176 ParticlePairContactData& operator= (const ParticlePairContactData&) { return *this; }
177
178 };
179 #endif
181
182
184 class AGXPHYSICS_EXPORT ParticlePairContactSemantics : public agx::Physics::ContactSemantics
185 {
186 public:
187
188 // Automatic getters
189 agx::UInt32 const& getParticle1() const;
190 agx::UInt32 const& getParticle2() const;
191 agx::UInt32 const& getParticleId1() const;
192 agx::UInt32 const& getParticleId2() const;
193 agx::Bool const& getEnabled() const;
194 agx::Vec3 const& getPoint() const;
195 agx::Vec3f const& getNormal() const;
196 agx::Vec3f const& getTangentU() const;
197 agx::Vec3f const& getTangentV() const;
198 agx::Real const& getDepth() const;
199 agx::Vec3f const& getVelocity() const;
200 agx::Vec3 const& getLocalForce() const;
201 agx::Real const& getImpactNormalForce() const;
202 agx::Real const& getContactEnergy() const;
203 agx::Bool const& getIsImpacting() const;
204 agx::Real32 const& getTimeStamp() const;
205 agx::Real32 const& getCharContactTime() const;
206
207 // Semantics defined by explicit kernels
208
209 // Automatic setters
210 void setParticle1(agx::UInt32 const& value);
211 void setParticle2(agx::UInt32 const& value);
212 void setParticleId1(agx::UInt32 const& value);
213 void setParticleId2(agx::UInt32 const& value);
214 void setEnabled(agx::Bool const& value);
215 void setPoint(agx::Vec3 const& value);
216 void setNormal(agx::Vec3f const& value);
217 void setTangentU(agx::Vec3f const& value);
218 void setTangentV(agx::Vec3f const& value);
219 void setDepth(agx::Real const& value);
220 void setVelocity(agx::Vec3f const& value);
221 void setLocalForce(agx::Vec3 const& value);
222 void setImpactNormalForce(agx::Real const& value);
223 void setContactEnergy(agx::Real const& value);
224 void setIsImpacting(agx::Bool const& value);
225 void setTimeStamp(agx::Real32 const& value);
226 void setCharContactTime(agx::Real32 const& value);
227
228
229 protected:
230 friend class ParticlePairContactPtr;
231 friend class ParticlePairContactInstance;
232 ParticlePairContactSemantics();
233 };
235
236
237
241 {
242 public:
244 typedef ParticlePairContactData DataType;
245 typedef ParticlePairContactInstance InstanceType;
246
247 public:
254 AGXPHYSICS_EXPORT ParticlePairContactInstance instance();
255 AGXPHYSICS_EXPORT const ParticlePairContactInstance instance() const;
256
257 AGXPHYSICS_EXPORT ParticlePairContactSemantics* operator->();
258 AGXPHYSICS_EXPORT const ParticlePairContactSemantics* operator->() const;
259
260 ParticlePairContactData* getData();
261 const ParticlePairContactData* getData() const;
262
263
268
273
278
283
288
293
298
303
308
313
318
323
328
333
338
343
348
349 };
350
351
353 class AGXPHYSICS_EXPORT ParticlePairContactInstance : public agx::Physics::ContactInstance
354 {
355 public:
356 ParticlePairContactInstance();
357 ParticlePairContactInstance(ParticlePairContactData* data, agx::Index index);
358 ParticlePairContactInstance(agxData::EntityStorage *storage, agx::Index index);
359 ParticlePairContactInstance(const agxData::EntityInstance& other);
360 ParticlePairContactInstance(const agxData::EntityPtr& ptr);
361
362 ParticlePairContactData* getData();
363 const ParticlePairContactData* getData() const;
364
365 public:
367 agx::UInt32& particle1();
369 agx::UInt32 const& particle1() const;
370
372 agx::UInt32& particle2();
374 agx::UInt32 const& particle2() const;
375
377 agx::UInt32& particleId1();
379 agx::UInt32 const& particleId1() const;
380
382 agx::UInt32& particleId2();
384 agx::UInt32 const& particleId2() const;
385
387 agx::Bool& enabled();
389 agx::Bool const& enabled() const;
390
392 agx::Vec3& point();
394 agx::Vec3 const& point() const;
395
397 agx::Vec3f& normal();
399 agx::Vec3f const& normal() const;
400
402 agx::Vec3f& tangentU();
404 agx::Vec3f const& tangentU() const;
405
407 agx::Vec3f& tangentV();
409 agx::Vec3f const& tangentV() const;
410
412 agx::Real& depth();
414 agx::Real const& depth() const;
415
417 agx::Vec3f& velocity();
419 agx::Vec3f const& velocity() const;
420
422 agx::Vec3& localForce();
424 agx::Vec3 const& localForce() const;
425
427 agx::Real& impactNormalForce();
429 agx::Real const& impactNormalForce() const;
430
432 agx::Real& contactEnergy();
434 agx::Real const& contactEnergy() const;
435
437 agx::Bool& isImpacting();
439 agx::Bool const& isImpacting() const;
440
442 agx::Real32& timeStamp();
444 agx::Real32 const& timeStamp() const;
445
447 agx::Real32& charContactTime();
449 agx::Real32 const& charContactTime() const;
450
451 };
453
454
455
458
459
460
462 /* Implementation */
463 //-----------------------------------------------------------------------------------------------------
464 //-----------------------------------------------------------------------------------------------------
465 inline ParticlePairContactInstance agx::Physics::ParticlePairContactData::operator[] (size_t index) { return ParticlePairContactInstance(this, (agx::Index)index); }
466 //-----------------------------------------------------------------------------------------------------
469 AGX_FORCE_INLINE ParticlePairContactPtr::ParticlePairContactPtr(const agxData::EntityPtr& ptr) : agx::Physics::ContactPtr(ptr)
470 {
472 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
473 EntityPtr::getModel()->fullPath().c_str(), ParticlePairContactModel::instance()->fullPath().c_str());
474 }
475
476 AGX_FORCE_INLINE ParticlePairContactPtr::ParticlePairContactPtr(const agxData::EntityInstance& instance) : agx::Physics::ContactPtr(instance)
477 {
479 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
480 EntityPtr::getModel()->fullPath().c_str(), ParticlePairContactModel::instance()->fullPath().c_str());
481 }
482
483 AGX_FORCE_INLINE ParticlePairContactPtr& ParticlePairContactPtr::operator= (const agxData::EntityPtr& ptr)
484 {
486 agxAssertN(!ptr || ptr.isInstanceOf(ParticlePairContactModel::instance()),
487 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
488 EntityPtr::getModel()->fullPath().c_str(), ParticlePairContactModel::instance()->fullPath().c_str());
489 return *this;
490 }
491
492 AGX_FORCE_INLINE ParticlePairContactPtr& ParticlePairContactPtr::operator= (const agxData::EntityInstance& instance)
493 {
495 agxAssertN(!instance || instance.isInstanceOf(ParticlePairContactModel::instance()),
496 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
497 EntityPtr::getModel()->fullPath().c_str(), ParticlePairContactModel::instance()->fullPath().c_str());
498 return *this;
499 }
500
501 inline ParticlePairContactInstance ParticlePairContactPtr::instance() { return agxData::EntityPtr::instance(); }
502 inline const ParticlePairContactInstance ParticlePairContactPtr::instance() const { return agxData::EntityPtr::instance(); }
503 AGX_FORCE_INLINE ParticlePairContactSemantics* ParticlePairContactPtr::operator->() { return (ParticlePairContactSemantics* )this; }
504 AGX_FORCE_INLINE const ParticlePairContactSemantics* ParticlePairContactPtr::operator->() const { return (const ParticlePairContactSemantics* )this; }
505 AGX_FORCE_INLINE ParticlePairContactData* ParticlePairContactPtr::getData() { return static_cast<ParticlePairContactData* >(agxData::EntityPtr::getData()); }
506 AGX_FORCE_INLINE const ParticlePairContactData* ParticlePairContactPtr::getData() const { return static_cast<const ParticlePairContactData* >(agxData::EntityPtr::getData()); }
507
508 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactPtr::particle1() { verifyIndex(); return getData()->particle1[calculateIndex()]; }
509 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactPtr::particle1() const { verifyIndex(); return getData()->particle1[calculateIndex()]; }
510
511 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactPtr::particle2() { verifyIndex(); return getData()->particle2[calculateIndex()]; }
512 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactPtr::particle2() const { verifyIndex(); return getData()->particle2[calculateIndex()]; }
513
514 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactPtr::particleId1() { verifyIndex(); return getData()->particleId1[calculateIndex()]; }
515 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactPtr::particleId1() const { verifyIndex(); return getData()->particleId1[calculateIndex()]; }
516
517 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactPtr::particleId2() { verifyIndex(); return getData()->particleId2[calculateIndex()]; }
518 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactPtr::particleId2() const { verifyIndex(); return getData()->particleId2[calculateIndex()]; }
519
520 AGX_FORCE_INLINE agx::Bool& ParticlePairContactPtr::enabled() { verifyIndex(); return getData()->enabled[calculateIndex()]; }
521 AGX_FORCE_INLINE agx::Bool const& ParticlePairContactPtr::enabled() const { verifyIndex(); return getData()->enabled[calculateIndex()]; }
522
523 AGX_FORCE_INLINE agx::Vec3& ParticlePairContactPtr::point() { verifyIndex(); return getData()->point[calculateIndex()]; }
524 AGX_FORCE_INLINE agx::Vec3 const& ParticlePairContactPtr::point() const { verifyIndex(); return getData()->point[calculateIndex()]; }
525
526 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactPtr::normal() { verifyIndex(); return getData()->normal[calculateIndex()]; }
527 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactPtr::normal() const { verifyIndex(); return getData()->normal[calculateIndex()]; }
528
529 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactPtr::tangentU() { verifyIndex(); return getData()->tangentU[calculateIndex()]; }
530 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactPtr::tangentU() const { verifyIndex(); return getData()->tangentU[calculateIndex()]; }
531
532 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactPtr::tangentV() { verifyIndex(); return getData()->tangentV[calculateIndex()]; }
533 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactPtr::tangentV() const { verifyIndex(); return getData()->tangentV[calculateIndex()]; }
534
535 AGX_FORCE_INLINE agx::Real& ParticlePairContactPtr::depth() { verifyIndex(); return getData()->depth[calculateIndex()]; }
536 AGX_FORCE_INLINE agx::Real const& ParticlePairContactPtr::depth() const { verifyIndex(); return getData()->depth[calculateIndex()]; }
537
538 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactPtr::velocity() { verifyIndex(); return getData()->velocity[calculateIndex()]; }
539 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactPtr::velocity() const { verifyIndex(); return getData()->velocity[calculateIndex()]; }
540
541 AGX_FORCE_INLINE agx::Vec3& ParticlePairContactPtr::localForce() { verifyIndex(); return getData()->localForce[calculateIndex()]; }
542 AGX_FORCE_INLINE agx::Vec3 const& ParticlePairContactPtr::localForce() const { verifyIndex(); return getData()->localForce[calculateIndex()]; }
543
544 AGX_FORCE_INLINE agx::Real& ParticlePairContactPtr::impactNormalForce() { verifyIndex(); return getData()->impactNormalForce[calculateIndex()]; }
545 AGX_FORCE_INLINE agx::Real const& ParticlePairContactPtr::impactNormalForce() const { verifyIndex(); return getData()->impactNormalForce[calculateIndex()]; }
546
547 AGX_FORCE_INLINE agx::Real& ParticlePairContactPtr::contactEnergy() { verifyIndex(); return getData()->contactEnergy[calculateIndex()]; }
548 AGX_FORCE_INLINE agx::Real const& ParticlePairContactPtr::contactEnergy() const { verifyIndex(); return getData()->contactEnergy[calculateIndex()]; }
549
550 AGX_FORCE_INLINE agx::Bool& ParticlePairContactPtr::isImpacting() { verifyIndex(); return getData()->isImpacting[calculateIndex()]; }
551 AGX_FORCE_INLINE agx::Bool const& ParticlePairContactPtr::isImpacting() const { verifyIndex(); return getData()->isImpacting[calculateIndex()]; }
552
553 AGX_FORCE_INLINE agx::Real32& ParticlePairContactPtr::timeStamp() { verifyIndex(); return getData()->timeStamp[calculateIndex()]; }
554 AGX_FORCE_INLINE agx::Real32 const& ParticlePairContactPtr::timeStamp() const { verifyIndex(); return getData()->timeStamp[calculateIndex()]; }
555
556 AGX_FORCE_INLINE agx::Real32& ParticlePairContactPtr::charContactTime() { verifyIndex(); return getData()->charContactTime[calculateIndex()]; }
557 AGX_FORCE_INLINE agx::Real32 const& ParticlePairContactPtr::charContactTime() const { verifyIndex(); return getData()->charContactTime[calculateIndex()]; }
558
559 //-----------------------------------------------------------------------------------------------------
560 AGX_FORCE_INLINE ParticlePairContactInstance::ParticlePairContactInstance() {}
561 AGX_FORCE_INLINE ParticlePairContactInstance::ParticlePairContactInstance(ParticlePairContactData* data, agx::Index index) : agx::Physics::ContactInstance(data, index) {}
562 AGX_FORCE_INLINE ParticlePairContactInstance::ParticlePairContactInstance(agxData::EntityStorage* storage, agx::Index index) : agx::Physics::ContactInstance(storage, index) {}
563 AGX_FORCE_INLINE ParticlePairContactInstance::ParticlePairContactInstance(const agxData::EntityInstance& other) : agx::Physics::ContactInstance(other)
564 {
566 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
567 EntityInstance::getModel()->fullPath().c_str(), ParticlePairContactModel::instance()->fullPath().c_str());
568 }
569
570 AGX_FORCE_INLINE ParticlePairContactInstance::ParticlePairContactInstance(const agxData::EntityPtr& ptr) : agx::Physics::ContactInstance(ptr)
571 {
573 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
574 EntityInstance::getModel()->fullPath().c_str(), ParticlePairContactModel::instance()->fullPath().c_str());
575 }
576
577
578 AGX_FORCE_INLINE ParticlePairContactData* ParticlePairContactInstance::getData() { return static_cast<ParticlePairContactData* >(agxData::EntityInstance::getData()); }
579 AGX_FORCE_INLINE const ParticlePairContactData* ParticlePairContactInstance::getData() const { return static_cast<const ParticlePairContactData* >(agxData::EntityInstance::getData()); }
580
581 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactInstance::particle1() { verifyIndex(); return getData()->particle1[getIndex()]; }
582 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactInstance::particle1() const { verifyIndex(); return getData()->particle1[getIndex()]; }
583
584 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactInstance::particle2() { verifyIndex(); return getData()->particle2[getIndex()]; }
585 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactInstance::particle2() const { verifyIndex(); return getData()->particle2[getIndex()]; }
586
587 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactInstance::particleId1() { verifyIndex(); return getData()->particleId1[getIndex()]; }
588 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactInstance::particleId1() const { verifyIndex(); return getData()->particleId1[getIndex()]; }
589
590 AGX_FORCE_INLINE agx::UInt32& ParticlePairContactInstance::particleId2() { verifyIndex(); return getData()->particleId2[getIndex()]; }
591 AGX_FORCE_INLINE agx::UInt32 const& ParticlePairContactInstance::particleId2() const { verifyIndex(); return getData()->particleId2[getIndex()]; }
592
593 AGX_FORCE_INLINE agx::Bool& ParticlePairContactInstance::enabled() { verifyIndex(); return getData()->enabled[getIndex()]; }
594 AGX_FORCE_INLINE agx::Bool const& ParticlePairContactInstance::enabled() const { verifyIndex(); return getData()->enabled[getIndex()]; }
595
596 AGX_FORCE_INLINE agx::Vec3& ParticlePairContactInstance::point() { verifyIndex(); return getData()->point[getIndex()]; }
597 AGX_FORCE_INLINE agx::Vec3 const& ParticlePairContactInstance::point() const { verifyIndex(); return getData()->point[getIndex()]; }
598
599 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactInstance::normal() { verifyIndex(); return getData()->normal[getIndex()]; }
600 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactInstance::normal() const { verifyIndex(); return getData()->normal[getIndex()]; }
601
602 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactInstance::tangentU() { verifyIndex(); return getData()->tangentU[getIndex()]; }
603 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactInstance::tangentU() const { verifyIndex(); return getData()->tangentU[getIndex()]; }
604
605 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactInstance::tangentV() { verifyIndex(); return getData()->tangentV[getIndex()]; }
606 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactInstance::tangentV() const { verifyIndex(); return getData()->tangentV[getIndex()]; }
607
608 AGX_FORCE_INLINE agx::Real& ParticlePairContactInstance::depth() { verifyIndex(); return getData()->depth[getIndex()]; }
609 AGX_FORCE_INLINE agx::Real const& ParticlePairContactInstance::depth() const { verifyIndex(); return getData()->depth[getIndex()]; }
610
611 AGX_FORCE_INLINE agx::Vec3f& ParticlePairContactInstance::velocity() { verifyIndex(); return getData()->velocity[getIndex()]; }
612 AGX_FORCE_INLINE agx::Vec3f const& ParticlePairContactInstance::velocity() const { verifyIndex(); return getData()->velocity[getIndex()]; }
613
614 AGX_FORCE_INLINE agx::Vec3& ParticlePairContactInstance::localForce() { verifyIndex(); return getData()->localForce[getIndex()]; }
615 AGX_FORCE_INLINE agx::Vec3 const& ParticlePairContactInstance::localForce() const { verifyIndex(); return getData()->localForce[getIndex()]; }
616
617 AGX_FORCE_INLINE agx::Real& ParticlePairContactInstance::impactNormalForce() { verifyIndex(); return getData()->impactNormalForce[getIndex()]; }
618 AGX_FORCE_INLINE agx::Real const& ParticlePairContactInstance::impactNormalForce() const { verifyIndex(); return getData()->impactNormalForce[getIndex()]; }
619
620 AGX_FORCE_INLINE agx::Real& ParticlePairContactInstance::contactEnergy() { verifyIndex(); return getData()->contactEnergy[getIndex()]; }
621 AGX_FORCE_INLINE agx::Real const& ParticlePairContactInstance::contactEnergy() const { verifyIndex(); return getData()->contactEnergy[getIndex()]; }
622
623 AGX_FORCE_INLINE agx::Bool& ParticlePairContactInstance::isImpacting() { verifyIndex(); return getData()->isImpacting[getIndex()]; }
624 AGX_FORCE_INLINE agx::Bool const& ParticlePairContactInstance::isImpacting() const { verifyIndex(); return getData()->isImpacting[getIndex()]; }
625
626 AGX_FORCE_INLINE agx::Real32& ParticlePairContactInstance::timeStamp() { verifyIndex(); return getData()->timeStamp[getIndex()]; }
627 AGX_FORCE_INLINE agx::Real32 const& ParticlePairContactInstance::timeStamp() const { verifyIndex(); return getData()->timeStamp[getIndex()]; }
628
629 AGX_FORCE_INLINE agx::Real32& ParticlePairContactInstance::charContactTime() { verifyIndex(); return getData()->charContactTime[getIndex()]; }
630 AGX_FORCE_INLINE agx::Real32 const& ParticlePairContactInstance::charContactTime() const { verifyIndex(); return getData()->charContactTime[getIndex()]; }
631
632 //-----------------------------------------------------------------------------------------------------
633 AGX_FORCE_INLINE ParticlePairContactSemantics::ParticlePairContactSemantics() {}
634 //-----------------------------------------------------------------------------------------------------
636 }
637}
638
639AGX_TYPE_BINDING(agx::Physics::ParticlePairContactPtr, "Physics.ParticlePairContactPtr")
640AGX_TYPE_BINDING(agx::Physics::ParticlePairContactInstance, "Physics.ParticlePairContactInstance")
641
642#ifdef _MSC_VER
643# pragma warning(pop)
644#endif
645
646#undef AGX_ENTITY_WRAPPER
647#undef AGX_ENTITY_NAMESPACE
648#endif
649
#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
agx::String fullPath() const
Abstract description of the data attributes for the Physics.Contact entity.
Definition: ContactEntity.h:71
Pointer to a entity instance of type Physics.Contact.
Abstract description of the data attributes for the Physics.ParticlePairContact entity.
ParticlePairContactModel(const agx::String &name="ParticlePairContact")
static agxData::ScalarAttributeT< agx::Vec3f > * tangentVAttribute
virtual void shutdownCleanup() override
This is part of internal cleanup and should not be called by users.
static ParticlePairContactPtr createInstance()
Create and return a pointer to a new instance in the default storage for this entity model.
virtual void initAttributeAccessors() override
static agxData::ScalarAttributeT< agx::Bool > * isImpactingAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * velocityAttribute
void construct(agx::Physics::ParticlePairContactPtr particlePairContact)
virtual void configure(agx::TiXmlElement *eEntity) override
static agxData::ScalarAttributeT< agx::Bool > * enabledAttribute
static agxData::ScalarAttributeT< agx::Real32 > * timeStampAttribute
static ParticlePairContactModel * instance()
static agxData::ScalarAttributeT< agx::Real > * impactNormalForceAttribute
virtual void construct(agxData::EntityPtr instance) override
static agxData::ScalarAttributeT< agx::Vec3f > * normalAttribute
static agxData::ScalarAttributeT< agx::Real > * depthAttribute
static agxData::ScalarAttributeT< agx::Real > * contactEnergyAttribute
static agxData::EntityStorage * defaultStorage()
static agxData::ScalarAttributeT< agx::UInt32 > * particle2Attribute
static agxData::ScalarAttributeT< agx::UInt32 > * particleId2Attribute
static agxData::ScalarAttributeT< agx::Vec3 > * pointAttribute
virtual agxData::EntityData * createData(agxData::EntityStorage *storage) override
static agxData::ScalarAttributeT< agx::UInt32 > * particle1Attribute
static agxData::ScalarAttributeT< agx::Vec3f > * tangentUAttribute
static agxData::ScalarAttributeT< agx::UInt32 > * particleId1Attribute
static agxData::ScalarAttributeT< agx::Real32 > * charContactTimeAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * localForceAttribute
Pointer to a entity instance of type Physics.ParticlePairContact.
AGXPHYSICS_EXPORT agx::Real const & contactEnergy() const
AGXPHYSICS_EXPORT agx::Vec3 const & point() const
AGXPHYSICS_EXPORT agx::Vec3f & tangentV()
AGXPHYSICS_EXPORT agx::Vec3 & point()
AGXPHYSICS_EXPORT agx::Bool & enabled()
AGXPHYSICS_EXPORT agx::Vec3 & localForce()
AGXPHYSICS_EXPORT agx::Vec3f & normal()
ParticlePairContactData * getData()
AGXPHYSICS_EXPORT agx::Real32 const & timeStamp() const
AGXPHYSICS_EXPORT ParticlePairContactSemantics * operator->()
const ParticlePairContactData * getData() const
AGXPHYSICS_EXPORT agx::Vec3f const & tangentU() const
AGXPHYSICS_EXPORT ParticlePairContactPtr()
AGXPHYSICS_EXPORT ParticlePairContactPtr(const agxData::EntityPtr &ptr)
AGXPHYSICS_EXPORT agx::Vec3f const & tangentV() const
AGXPHYSICS_EXPORT agx::Real & depth()
AGXPHYSICS_EXPORT agx::UInt32 & particle2()
AGXPHYSICS_EXPORT agx::Vec3f const & velocity() const
AGXPHYSICS_EXPORT agx::UInt32 & particleId2()
AGXPHYSICS_EXPORT agx::UInt32 const & particleId2() const
AGXPHYSICS_EXPORT agx::Real const & depth() const
AGXPHYSICS_EXPORT ParticlePairContactInstance instance()
AGXPHYSICS_EXPORT agx::Vec3f & velocity()
AGXPHYSICS_EXPORT agx::UInt32 const & particleId1() const
AGXPHYSICS_EXPORT const ParticlePairContactInstance instance() const
AGXPHYSICS_EXPORT agx::Vec3f & tangentU()
AGXPHYSICS_EXPORT ParticlePairContactPtr(agxData::EntityStorage *storage, agx::Index id)
AGXPHYSICS_EXPORT agx::Real & impactNormalForce()
AGXPHYSICS_EXPORT agx::Real32 const & charContactTime() const
AGXPHYSICS_EXPORT agx::UInt32 const & particle2() const
AGXPHYSICS_EXPORT ParticlePairContactPtr(const agxData::EntityInstance &instance)
AGXPHYSICS_EXPORT agx::UInt32 const & particle1() const
AGXPHYSICS_EXPORT agx::Real const & impactNormalForce() const
AGXPHYSICS_EXPORT agx::Bool const & isImpacting() const
AGXPHYSICS_EXPORT agx::Bool & isImpacting()
AGXPHYSICS_EXPORT agx::Real32 & timeStamp()
AGXPHYSICS_EXPORT agx::Real & contactEnergy()
AGXPHYSICS_EXPORT const ParticlePairContactSemantics * operator->() const
AGXPHYSICS_EXPORT agx::UInt32 & particle1()
AGXPHYSICS_EXPORT agx::Bool const & enabled() const
AGXPHYSICS_EXPORT agx::UInt32 & particleId1()
AGXPHYSICS_EXPORT agx::Vec3f const & normal() const
AGXPHYSICS_EXPORT agx::Real32 & charContactTime()
AGXPHYSICS_EXPORT agx::Vec3 const & localForce() const
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
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
uint32_t UInt32
Definition: Integer.h:32
bool Bool
Definition: Integer.h:40
double Real
Definition: Real.h:41
float Real32
Definition: Real.h:43
UInt32 Index
Definition: Integer.h:44