AGX Dynamics 2.42.2.1
Loading...
Searching...
No Matches
ContactPointEntity.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_CONTACTPOINT_H_PLUGIN
22#define GENERATED_AGX_PHYSICS_CONTACTPOINT_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>
47#include <agx/Vec3.h>
48#include <agx/Real.h>
49#include <agx/Integer.h>
50#include <agx/Vec2.h>
51#include <agx/Vec4.h>
53
54namespace agx { namespace Physics { namespace Geometry { class ShapePtr; }}}
55namespace agx { namespace Physics { namespace Geometry { class ShapePtr; }}}
56
57namespace agx
58{
59 namespace Physics
60 {
61
62 class ContactPointModel;
63 class ContactPointData;
64 class ContactPointPtr;
65 class ContactPointInstance;
66 class ContactPointSemantics;
67
68
70
75 {
76 public:
78
79 ContactPointModel(const agx::String& name = "ContactPoint");
80
83
86
89
91 virtual void shutdownCleanup() override;
92
93
94
95 /* Attributes */
121
122 protected:
124 virtual agxData::EntityData* createData(agxData::EntityStorage* storage) override;
125 virtual void configure(agx::TiXmlElement* eEntity) override;
126 virtual void initAttributeAccessors() override;
127 virtual void construct(agxData::EntityPtr instance) override;
129 };
130
131
133 #ifndef AGX_PHYSICS_CONTACTPOINT_DATA_SET_OVERRIDE
134 #define AGX_PHYSICS_CONTACTPOINT_DATA_SET
135 class AGXPHYSICS_EXPORT ContactPointData : public agxData::EntityData
136 {
137 public:
138 ContactPointInstance operator[] (size_t index);
139
140 public:
149 agxData::Array< agx::Vec3 > restitution;
151 agxData::Array< agx::Vec2 > tangentialCohesion;
152 agxData::Array< agx::Real > youngsModulus;
155 agxData::Array< agx::Real > maxNormalForce;
159 agxData::Array< agx::UInt8 > faceFeature1;
160 agxData::Array< agx::UInt8 > faceFeature2;
165 agxData::Array< agx::Real > elasticRestLengthShape1;
166 agxData::Array< agx::Real > elasticRestLengthShape2;
167
168 public:
169 typedef agx::Vec3 pointType;
170 typedef agx::Vec3f normalType;
171 typedef agx::Vec3f tangentUType;
172 typedef agx::Vec3f tangentVType;
173 typedef agx::Real depthType;
174 typedef agx::UInt8 stateType;
175 typedef agx::Vec3f velocityType;
176 typedef agx::Vec3 restitutionType;
177 typedef agx::Vec2 frictionType;
178 typedef agx::Vec2 tangentialCohesionType;
179 typedef agx::Real youngsModulusType;
180 typedef agx::Vec3 localForceType;
181 typedef agx::Vec4i8 indexSetType;
182 typedef agx::Real maxNormalForceType;
183 typedef agx::Bool enabledType;
184 typedef agx::UInt32 faceIndex1Type;
185 typedef agx::UInt32 faceIndex2Type;
186 typedef agx::UInt8 faceFeature1Type;
187 typedef agx::UInt8 faceFeature2Type;
188 typedef agx::Physics::Geometry::ShapePtr shape1Type;
189 typedef agx::Physics::Geometry::ShapePtr shape2Type;
190 typedef agx::Real areaType;
191 typedef agx::Real volumeType;
192 typedef agx::Real elasticRestLengthShape1Type;
193 typedef agx::Real elasticRestLengthShape2Type;
194
195 public:
196 ContactPointData(agxData::EntityStorage* storage);
197 ContactPointData();
198
199 protected:
200 virtual ~ContactPointData() {}
201 virtual void setNumElements(agx::Index numElements) override;
202
203 private:
204 ContactPointData& operator= (const ContactPointData&) { return *this; }
205
206 };
207 #endif
209
210
212 class AGXPHYSICS_EXPORT ContactPointSemantics : protected agxData::EntityPtr
213 {
214 public:
215
216 // Automatic getters
217 agx::Vec3 const& getPoint() const;
218 agx::Vec3f const& getNormal() const;
219 agx::Vec3f const& getTangentU() const;
220 agx::Vec3f const& getTangentV() const;
221 agx::Real const& getDepth() const;
222 agx::UInt8 const& getState() const;
223 agx::Vec3f const& getVelocity() const;
224 agx::Vec3 const& getRestitution() const;
225 agx::Vec2 const& getFriction() const;
226 agx::Vec2 const& getTangentialCohesion() const;
227 agx::Real const& getYoungsModulus() const;
228 agx::Vec3 const& getLocalForce() const;
229 agx::Vec4i8 const& getIndexSet() const;
230 agx::Real const& getMaxNormalForce() const;
231 agx::Bool const& getEnabled() const;
232 agx::UInt32 const& getFaceIndex1() const;
233 agx::UInt32 const& getFaceIndex2() const;
234 agx::UInt8 const& getFaceFeature1() const;
235 agx::UInt8 const& getFaceFeature2() const;
236 agx::Physics::Geometry::ShapePtr const& getShape1() const;
237 agx::Physics::Geometry::ShapePtr const& getShape2() const;
238 agx::Real const& getArea() const;
239 agx::Real const& getVolume() const;
240 agx::Real const& getElasticRestLengthShape1() const;
241 agx::Real const& getElasticRestLengthShape2() const;
242
243 // Semantics defined by explicit kernels
244
245 // Automatic setters
246 void setPoint(agx::Vec3 const& value);
247 void setNormal(agx::Vec3f const& value);
248 void setTangentU(agx::Vec3f const& value);
249 void setTangentV(agx::Vec3f const& value);
250 void setDepth(agx::Real const& value);
251 void setState(agx::UInt8 const& value);
252 void setVelocity(agx::Vec3f const& value);
253 void setRestitution(agx::Vec3 const& value);
254 void setFriction(agx::Vec2 const& value);
255 void setTangentialCohesion(agx::Vec2 const& value);
256 void setYoungsModulus(agx::Real const& value);
257 void setLocalForce(agx::Vec3 const& value);
258 void setIndexSet(agx::Vec4i8 const& value);
259 void setMaxNormalForce(agx::Real const& value);
260 void setEnabled(agx::Bool const& value);
261 void setFaceIndex1(agx::UInt32 const& value);
262 void setFaceIndex2(agx::UInt32 const& value);
263 void setFaceFeature1(agx::UInt8 const& value);
264 void setFaceFeature2(agx::UInt8 const& value);
265 void setShape1(agx::Physics::Geometry::ShapePtr const& value);
266 void setShape2(agx::Physics::Geometry::ShapePtr const& value);
267 void setArea(agx::Real const& value);
268 void setVolume(agx::Real const& value);
269 void setElasticRestLengthShape1(agx::Real const& value);
270 void setElasticRestLengthShape2(agx::Real const& value);
271
272
273 protected:
274 friend class ContactPointPtr;
275 friend class ContactPointInstance;
276 ContactPointSemantics();
277 };
279
280
281
284 class CALLABLE ContactPointPtr : public agxData::EntityPtr
285 {
286 public:
288 typedef ContactPointData DataType;
289 typedef ContactPointInstance InstanceType;
290
291 public:
298 AGXPHYSICS_EXPORT ContactPointInstance instance();
299 AGXPHYSICS_EXPORT const ContactPointInstance instance() const;
300
301 AGXPHYSICS_EXPORT ContactPointSemantics* operator->();
302 AGXPHYSICS_EXPORT const ContactPointSemantics* operator->() const;
303
304 ContactPointData* getData();
305 const ContactPointData* getData() const;
306
307
312
317
322
327
332
337
342
347
352
357
362
367
372
377
382
387
392
397
402
407
412
417
422
427
432
433 };
434
435
437 class AGXPHYSICS_EXPORT ContactPointInstance : public agxData::EntityInstance
438 {
439 public:
440 ContactPointInstance();
441 ContactPointInstance(ContactPointData* data, agx::Index index);
442 ContactPointInstance(agxData::EntityStorage *storage, agx::Index index);
443 ContactPointInstance(const agxData::EntityInstance& other);
444 ContactPointInstance(const agxData::EntityPtr& ptr);
445
446 ContactPointData* getData();
447 const ContactPointData* getData() const;
448
449 public:
451 agx::Vec3& point();
453 agx::Vec3 const& point() const;
454
456 agx::Vec3f& normal();
458 agx::Vec3f const& normal() const;
459
461 agx::Vec3f& tangentU();
463 agx::Vec3f const& tangentU() const;
464
466 agx::Vec3f& tangentV();
468 agx::Vec3f const& tangentV() const;
469
471 agx::Real& depth();
473 agx::Real const& depth() const;
474
476 agx::UInt8& state();
478 agx::UInt8 const& state() const;
479
481 agx::Vec3f& velocity();
483 agx::Vec3f const& velocity() const;
484
486 agx::Vec3& restitution();
488 agx::Vec3 const& restitution() const;
489
491 agx::Vec2& friction();
493 agx::Vec2 const& friction() const;
494
496 agx::Vec2& tangentialCohesion();
498 agx::Vec2 const& tangentialCohesion() const;
499
501 agx::Real& youngsModulus();
503 agx::Real const& youngsModulus() const;
504
506 agx::Vec3& localForce();
508 agx::Vec3 const& localForce() const;
509
511 agx::Vec4i8& indexSet();
513 agx::Vec4i8 const& indexSet() const;
514
516 agx::Real& maxNormalForce();
518 agx::Real const& maxNormalForce() const;
519
521 agx::Bool& enabled();
523 agx::Bool const& enabled() const;
524
526 agx::UInt32& faceIndex1();
528 agx::UInt32 const& faceIndex1() const;
529
531 agx::UInt32& faceIndex2();
533 agx::UInt32 const& faceIndex2() const;
534
536 agx::UInt8& faceFeature1();
538 agx::UInt8 const& faceFeature1() const;
539
541 agx::UInt8& faceFeature2();
543 agx::UInt8 const& faceFeature2() const;
544
548 agx::Physics::Geometry::ShapePtr const& shape1() const;
549
553 agx::Physics::Geometry::ShapePtr const& shape2() const;
554
556 agx::Real& area();
558 agx::Real const& area() const;
559
561 agx::Real& volume();
563 agx::Real const& volume() const;
564
566 agx::Real& elasticRestLengthShape1();
568 agx::Real const& elasticRestLengthShape1() const;
569
571 agx::Real& elasticRestLengthShape2();
573 agx::Real const& elasticRestLengthShape2() const;
574
575 };
577
578
579
582
583
584
586 /* Implementation */
587 //-----------------------------------------------------------------------------------------------------
588 //-----------------------------------------------------------------------------------------------------
589 inline ContactPointInstance agx::Physics::ContactPointData::operator[] (size_t index) { return ContactPointInstance(this, (agx::Index)index); }
590 //-----------------------------------------------------------------------------------------------------
593 AGX_FORCE_INLINE ContactPointPtr::ContactPointPtr(const agxData::EntityPtr& ptr) : agxData::EntityPtr(ptr)
594 {
596 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
597 EntityPtr::getModel()->fullPath().c_str(), ContactPointModel::instance()->fullPath().c_str());
598 }
599
600 AGX_FORCE_INLINE ContactPointPtr::ContactPointPtr(const agxData::EntityInstance& instance) : agxData::EntityPtr(instance)
601 {
602 agxAssertN(!instance || instance.isInstanceOf(ContactPointModel::instance()),
603 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
604 EntityPtr::getModel()->fullPath().c_str(), ContactPointModel::instance()->fullPath().c_str());
605 }
606
607 AGX_FORCE_INLINE ContactPointPtr& ContactPointPtr::operator= (const agxData::EntityPtr& ptr)
608 {
610 agxAssertN(!ptr || ptr.isInstanceOf(ContactPointModel::instance()),
611 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
612 EntityPtr::getModel()->fullPath().c_str(), ContactPointModel::instance()->fullPath().c_str());
613 return *this;
614 }
615
616 AGX_FORCE_INLINE ContactPointPtr& ContactPointPtr::operator= (const agxData::EntityInstance& instance)
617 {
619 agxAssertN(!instance || instance.isInstanceOf(ContactPointModel::instance()),
620 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
621 EntityPtr::getModel()->fullPath().c_str(), ContactPointModel::instance()->fullPath().c_str());
622 return *this;
623 }
624
625 inline ContactPointInstance ContactPointPtr::instance() { return agxData::EntityPtr::instance(); }
626 inline const ContactPointInstance ContactPointPtr::instance() const { return agxData::EntityPtr::instance(); }
627 AGX_FORCE_INLINE ContactPointSemantics* ContactPointPtr::operator->() { return (ContactPointSemantics* )this; }
628 AGX_FORCE_INLINE const ContactPointSemantics* ContactPointPtr::operator->() const { return (const ContactPointSemantics* )this; }
629 AGX_FORCE_INLINE ContactPointData* ContactPointPtr::getData() { return static_cast<ContactPointData* >(agxData::EntityPtr::getData()); }
630 AGX_FORCE_INLINE const ContactPointData* ContactPointPtr::getData() const { return static_cast<const ContactPointData* >(agxData::EntityPtr::getData()); }
631
632 AGX_FORCE_INLINE agx::Vec3& ContactPointPtr::point() { verifyIndex(); return getData()->point[calculateIndex()]; }
633 AGX_FORCE_INLINE agx::Vec3 const& ContactPointPtr::point() const { verifyIndex(); return getData()->point[calculateIndex()]; }
634
635 AGX_FORCE_INLINE agx::Vec3f& ContactPointPtr::normal() { verifyIndex(); return getData()->normal[calculateIndex()]; }
636 AGX_FORCE_INLINE agx::Vec3f const& ContactPointPtr::normal() const { verifyIndex(); return getData()->normal[calculateIndex()]; }
637
638 AGX_FORCE_INLINE agx::Vec3f& ContactPointPtr::tangentU() { verifyIndex(); return getData()->tangentU[calculateIndex()]; }
639 AGX_FORCE_INLINE agx::Vec3f const& ContactPointPtr::tangentU() const { verifyIndex(); return getData()->tangentU[calculateIndex()]; }
640
641 AGX_FORCE_INLINE agx::Vec3f& ContactPointPtr::tangentV() { verifyIndex(); return getData()->tangentV[calculateIndex()]; }
642 AGX_FORCE_INLINE agx::Vec3f const& ContactPointPtr::tangentV() const { verifyIndex(); return getData()->tangentV[calculateIndex()]; }
643
644 AGX_FORCE_INLINE agx::Real& ContactPointPtr::depth() { verifyIndex(); return getData()->depth[calculateIndex()]; }
645 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::depth() const { verifyIndex(); return getData()->depth[calculateIndex()]; }
646
647 AGX_FORCE_INLINE agx::UInt8& ContactPointPtr::state() { verifyIndex(); return getData()->state[calculateIndex()]; }
648 AGX_FORCE_INLINE agx::UInt8 const& ContactPointPtr::state() const { verifyIndex(); return getData()->state[calculateIndex()]; }
649
650 AGX_FORCE_INLINE agx::Vec3f& ContactPointPtr::velocity() { verifyIndex(); return getData()->velocity[calculateIndex()]; }
651 AGX_FORCE_INLINE agx::Vec3f const& ContactPointPtr::velocity() const { verifyIndex(); return getData()->velocity[calculateIndex()]; }
652
653 AGX_FORCE_INLINE agx::Vec3& ContactPointPtr::restitution() { verifyIndex(); return getData()->restitution[calculateIndex()]; }
654 AGX_FORCE_INLINE agx::Vec3 const& ContactPointPtr::restitution() const { verifyIndex(); return getData()->restitution[calculateIndex()]; }
655
656 AGX_FORCE_INLINE agx::Vec2& ContactPointPtr::friction() { verifyIndex(); return getData()->friction[calculateIndex()]; }
657 AGX_FORCE_INLINE agx::Vec2 const& ContactPointPtr::friction() const { verifyIndex(); return getData()->friction[calculateIndex()]; }
658
659 AGX_FORCE_INLINE agx::Vec2& ContactPointPtr::tangentialCohesion() { verifyIndex(); return getData()->tangentialCohesion[calculateIndex()]; }
660 AGX_FORCE_INLINE agx::Vec2 const& ContactPointPtr::tangentialCohesion() const { verifyIndex(); return getData()->tangentialCohesion[calculateIndex()]; }
661
662 AGX_FORCE_INLINE agx::Real& ContactPointPtr::youngsModulus() { verifyIndex(); return getData()->youngsModulus[calculateIndex()]; }
663 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::youngsModulus() const { verifyIndex(); return getData()->youngsModulus[calculateIndex()]; }
664
665 AGX_FORCE_INLINE agx::Vec3& ContactPointPtr::localForce() { verifyIndex(); return getData()->localForce[calculateIndex()]; }
666 AGX_FORCE_INLINE agx::Vec3 const& ContactPointPtr::localForce() const { verifyIndex(); return getData()->localForce[calculateIndex()]; }
667
668 AGX_FORCE_INLINE agx::Vec4i8& ContactPointPtr::indexSet() { verifyIndex(); return getData()->indexSet[calculateIndex()]; }
669 AGX_FORCE_INLINE agx::Vec4i8 const& ContactPointPtr::indexSet() const { verifyIndex(); return getData()->indexSet[calculateIndex()]; }
670
671 AGX_FORCE_INLINE agx::Real& ContactPointPtr::maxNormalForce() { verifyIndex(); return getData()->maxNormalForce[calculateIndex()]; }
672 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::maxNormalForce() const { verifyIndex(); return getData()->maxNormalForce[calculateIndex()]; }
673
674 AGX_FORCE_INLINE agx::Bool& ContactPointPtr::enabled() { verifyIndex(); return getData()->enabled[calculateIndex()]; }
675 AGX_FORCE_INLINE agx::Bool const& ContactPointPtr::enabled() const { verifyIndex(); return getData()->enabled[calculateIndex()]; }
676
677 AGX_FORCE_INLINE agx::UInt32& ContactPointPtr::faceIndex1() { verifyIndex(); return getData()->faceIndex1[calculateIndex()]; }
678 AGX_FORCE_INLINE agx::UInt32 const& ContactPointPtr::faceIndex1() const { verifyIndex(); return getData()->faceIndex1[calculateIndex()]; }
679
680 AGX_FORCE_INLINE agx::UInt32& ContactPointPtr::faceIndex2() { verifyIndex(); return getData()->faceIndex2[calculateIndex()]; }
681 AGX_FORCE_INLINE agx::UInt32 const& ContactPointPtr::faceIndex2() const { verifyIndex(); return getData()->faceIndex2[calculateIndex()]; }
682
683 AGX_FORCE_INLINE agx::UInt8& ContactPointPtr::faceFeature1() { verifyIndex(); return getData()->faceFeature1[calculateIndex()]; }
684 AGX_FORCE_INLINE agx::UInt8 const& ContactPointPtr::faceFeature1() const { verifyIndex(); return getData()->faceFeature1[calculateIndex()]; }
685
686 AGX_FORCE_INLINE agx::UInt8& ContactPointPtr::faceFeature2() { verifyIndex(); return getData()->faceFeature2[calculateIndex()]; }
687 AGX_FORCE_INLINE agx::UInt8 const& ContactPointPtr::faceFeature2() const { verifyIndex(); return getData()->faceFeature2[calculateIndex()]; }
688
689 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr& ContactPointPtr::shape1() { verifyIndex(); return getData()->shape1[calculateIndex()]; }
690 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr const& ContactPointPtr::shape1() const { verifyIndex(); return getData()->shape1[calculateIndex()]; }
691
692 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr& ContactPointPtr::shape2() { verifyIndex(); return getData()->shape2[calculateIndex()]; }
693 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr const& ContactPointPtr::shape2() const { verifyIndex(); return getData()->shape2[calculateIndex()]; }
694
695 AGX_FORCE_INLINE agx::Real& ContactPointPtr::area() { verifyIndex(); return getData()->area[calculateIndex()]; }
696 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::area() const { verifyIndex(); return getData()->area[calculateIndex()]; }
697
698 AGX_FORCE_INLINE agx::Real& ContactPointPtr::volume() { verifyIndex(); return getData()->volume[calculateIndex()]; }
699 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::volume() const { verifyIndex(); return getData()->volume[calculateIndex()]; }
700
701 AGX_FORCE_INLINE agx::Real& ContactPointPtr::elasticRestLengthShape1() { verifyIndex(); return getData()->elasticRestLengthShape1[calculateIndex()]; }
702 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::elasticRestLengthShape1() const { verifyIndex(); return getData()->elasticRestLengthShape1[calculateIndex()]; }
703
704 AGX_FORCE_INLINE agx::Real& ContactPointPtr::elasticRestLengthShape2() { verifyIndex(); return getData()->elasticRestLengthShape2[calculateIndex()]; }
705 AGX_FORCE_INLINE agx::Real const& ContactPointPtr::elasticRestLengthShape2() const { verifyIndex(); return getData()->elasticRestLengthShape2[calculateIndex()]; }
706
707 //-----------------------------------------------------------------------------------------------------
708 AGX_FORCE_INLINE ContactPointInstance::ContactPointInstance() {}
709 AGX_FORCE_INLINE ContactPointInstance::ContactPointInstance(ContactPointData* data, agx::Index index) : agxData::EntityInstance(data, index) {}
710 AGX_FORCE_INLINE ContactPointInstance::ContactPointInstance(agxData::EntityStorage* storage, agx::Index index) : agxData::EntityInstance(storage, index) {}
711 AGX_FORCE_INLINE ContactPointInstance::ContactPointInstance(const agxData::EntityInstance& other) : agxData::EntityInstance(other)
712 {
714 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
715 EntityInstance::getModel()->fullPath().c_str(), ContactPointModel::instance()->fullPath().c_str());
716 }
717
718 AGX_FORCE_INLINE ContactPointInstance::ContactPointInstance(const agxData::EntityPtr& ptr) : agxData::EntityInstance(ptr)
719 {
721 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
722 EntityInstance::getModel()->fullPath().c_str(), ContactPointModel::instance()->fullPath().c_str());
723 }
724
725
726 AGX_FORCE_INLINE ContactPointData* ContactPointInstance::getData() { return static_cast<ContactPointData* >(agxData::EntityInstance::getData()); }
727 AGX_FORCE_INLINE const ContactPointData* ContactPointInstance::getData() const { return static_cast<const ContactPointData* >(agxData::EntityInstance::getData()); }
728
729 AGX_FORCE_INLINE agx::Vec3& ContactPointInstance::point() { verifyIndex(); return getData()->point[getIndex()]; }
730 AGX_FORCE_INLINE agx::Vec3 const& ContactPointInstance::point() const { verifyIndex(); return getData()->point[getIndex()]; }
731
732 AGX_FORCE_INLINE agx::Vec3f& ContactPointInstance::normal() { verifyIndex(); return getData()->normal[getIndex()]; }
733 AGX_FORCE_INLINE agx::Vec3f const& ContactPointInstance::normal() const { verifyIndex(); return getData()->normal[getIndex()]; }
734
735 AGX_FORCE_INLINE agx::Vec3f& ContactPointInstance::tangentU() { verifyIndex(); return getData()->tangentU[getIndex()]; }
736 AGX_FORCE_INLINE agx::Vec3f const& ContactPointInstance::tangentU() const { verifyIndex(); return getData()->tangentU[getIndex()]; }
737
738 AGX_FORCE_INLINE agx::Vec3f& ContactPointInstance::tangentV() { verifyIndex(); return getData()->tangentV[getIndex()]; }
739 AGX_FORCE_INLINE agx::Vec3f const& ContactPointInstance::tangentV() const { verifyIndex(); return getData()->tangentV[getIndex()]; }
740
741 AGX_FORCE_INLINE agx::Real& ContactPointInstance::depth() { verifyIndex(); return getData()->depth[getIndex()]; }
742 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::depth() const { verifyIndex(); return getData()->depth[getIndex()]; }
743
744 AGX_FORCE_INLINE agx::UInt8& ContactPointInstance::state() { verifyIndex(); return getData()->state[getIndex()]; }
745 AGX_FORCE_INLINE agx::UInt8 const& ContactPointInstance::state() const { verifyIndex(); return getData()->state[getIndex()]; }
746
747 AGX_FORCE_INLINE agx::Vec3f& ContactPointInstance::velocity() { verifyIndex(); return getData()->velocity[getIndex()]; }
748 AGX_FORCE_INLINE agx::Vec3f const& ContactPointInstance::velocity() const { verifyIndex(); return getData()->velocity[getIndex()]; }
749
750 AGX_FORCE_INLINE agx::Vec3& ContactPointInstance::restitution() { verifyIndex(); return getData()->restitution[getIndex()]; }
751 AGX_FORCE_INLINE agx::Vec3 const& ContactPointInstance::restitution() const { verifyIndex(); return getData()->restitution[getIndex()]; }
752
753 AGX_FORCE_INLINE agx::Vec2& ContactPointInstance::friction() { verifyIndex(); return getData()->friction[getIndex()]; }
754 AGX_FORCE_INLINE agx::Vec2 const& ContactPointInstance::friction() const { verifyIndex(); return getData()->friction[getIndex()]; }
755
756 AGX_FORCE_INLINE agx::Vec2& ContactPointInstance::tangentialCohesion() { verifyIndex(); return getData()->tangentialCohesion[getIndex()]; }
757 AGX_FORCE_INLINE agx::Vec2 const& ContactPointInstance::tangentialCohesion() const { verifyIndex(); return getData()->tangentialCohesion[getIndex()]; }
758
759 AGX_FORCE_INLINE agx::Real& ContactPointInstance::youngsModulus() { verifyIndex(); return getData()->youngsModulus[getIndex()]; }
760 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::youngsModulus() const { verifyIndex(); return getData()->youngsModulus[getIndex()]; }
761
762 AGX_FORCE_INLINE agx::Vec3& ContactPointInstance::localForce() { verifyIndex(); return getData()->localForce[getIndex()]; }
763 AGX_FORCE_INLINE agx::Vec3 const& ContactPointInstance::localForce() const { verifyIndex(); return getData()->localForce[getIndex()]; }
764
765 AGX_FORCE_INLINE agx::Vec4i8& ContactPointInstance::indexSet() { verifyIndex(); return getData()->indexSet[getIndex()]; }
766 AGX_FORCE_INLINE agx::Vec4i8 const& ContactPointInstance::indexSet() const { verifyIndex(); return getData()->indexSet[getIndex()]; }
767
768 AGX_FORCE_INLINE agx::Real& ContactPointInstance::maxNormalForce() { verifyIndex(); return getData()->maxNormalForce[getIndex()]; }
769 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::maxNormalForce() const { verifyIndex(); return getData()->maxNormalForce[getIndex()]; }
770
771 AGX_FORCE_INLINE agx::Bool& ContactPointInstance::enabled() { verifyIndex(); return getData()->enabled[getIndex()]; }
772 AGX_FORCE_INLINE agx::Bool const& ContactPointInstance::enabled() const { verifyIndex(); return getData()->enabled[getIndex()]; }
773
774 AGX_FORCE_INLINE agx::UInt32& ContactPointInstance::faceIndex1() { verifyIndex(); return getData()->faceIndex1[getIndex()]; }
775 AGX_FORCE_INLINE agx::UInt32 const& ContactPointInstance::faceIndex1() const { verifyIndex(); return getData()->faceIndex1[getIndex()]; }
776
777 AGX_FORCE_INLINE agx::UInt32& ContactPointInstance::faceIndex2() { verifyIndex(); return getData()->faceIndex2[getIndex()]; }
778 AGX_FORCE_INLINE agx::UInt32 const& ContactPointInstance::faceIndex2() const { verifyIndex(); return getData()->faceIndex2[getIndex()]; }
779
780 AGX_FORCE_INLINE agx::UInt8& ContactPointInstance::faceFeature1() { verifyIndex(); return getData()->faceFeature1[getIndex()]; }
781 AGX_FORCE_INLINE agx::UInt8 const& ContactPointInstance::faceFeature1() const { verifyIndex(); return getData()->faceFeature1[getIndex()]; }
782
783 AGX_FORCE_INLINE agx::UInt8& ContactPointInstance::faceFeature2() { verifyIndex(); return getData()->faceFeature2[getIndex()]; }
784 AGX_FORCE_INLINE agx::UInt8 const& ContactPointInstance::faceFeature2() const { verifyIndex(); return getData()->faceFeature2[getIndex()]; }
785
786 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr& ContactPointInstance::shape1() { verifyIndex(); return getData()->shape1[getIndex()]; }
787 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr const& ContactPointInstance::shape1() const { verifyIndex(); return getData()->shape1[getIndex()]; }
788
789 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr& ContactPointInstance::shape2() { verifyIndex(); return getData()->shape2[getIndex()]; }
790 AGX_FORCE_INLINE agx::Physics::Geometry::ShapePtr const& ContactPointInstance::shape2() const { verifyIndex(); return getData()->shape2[getIndex()]; }
791
792 AGX_FORCE_INLINE agx::Real& ContactPointInstance::area() { verifyIndex(); return getData()->area[getIndex()]; }
793 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::area() const { verifyIndex(); return getData()->area[getIndex()]; }
794
795 AGX_FORCE_INLINE agx::Real& ContactPointInstance::volume() { verifyIndex(); return getData()->volume[getIndex()]; }
796 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::volume() const { verifyIndex(); return getData()->volume[getIndex()]; }
797
798 AGX_FORCE_INLINE agx::Real& ContactPointInstance::elasticRestLengthShape1() { verifyIndex(); return getData()->elasticRestLengthShape1[getIndex()]; }
799 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::elasticRestLengthShape1() const { verifyIndex(); return getData()->elasticRestLengthShape1[getIndex()]; }
800
801 AGX_FORCE_INLINE agx::Real& ContactPointInstance::elasticRestLengthShape2() { verifyIndex(); return getData()->elasticRestLengthShape2[getIndex()]; }
802 AGX_FORCE_INLINE agx::Real const& ContactPointInstance::elasticRestLengthShape2() const { verifyIndex(); return getData()->elasticRestLengthShape2[getIndex()]; }
803
804 //-----------------------------------------------------------------------------------------------------
805 AGX_FORCE_INLINE ContactPointSemantics::ContactPointSemantics() {}
806 //-----------------------------------------------------------------------------------------------------
808 }
809}
810
811AGX_TYPE_BINDING(agx::Physics::ContactPointPtr, "Physics.ContactPointPtr")
812AGX_TYPE_BINDING(agx::Physics::ContactPointInstance, "Physics.ContactPointInstance")
813
814#ifdef _MSC_VER
815# pragma warning(pop)
816#endif
817
818#undef AGX_ENTITY_WRAPPER
819#undef AGX_ENTITY_NAMESPACE
820#endif
821
#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()
An abstract description of a data entity stored using SOA (structure of arrays) pattern in a EntitySt...
Definition: EntityModel.h:64
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.ContactPoint entity.
static agxData::EntityStorage * defaultStorage()
static agxData::ScalarAttributeT< agx::Real > * youngsModulusAttribute
static agxData::ScalarAttributeT< agx::Physics::Geometry::ShapePtr > * shape2Attribute
static agxData::ScalarAttributeT< agx::Vec3 > * restitutionAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * tangentUAttribute
ContactPointModel(const agx::String &name="ContactPoint")
virtual void shutdownCleanup() override
This is part of internal cleanup and should not be called by users.
static agxData::ScalarAttributeT< agx::UInt8 > * stateAttribute
static ContactPointModel * instance()
virtual agxData::EntityData * createData(agxData::EntityStorage *storage) override
static agxData::ScalarAttributeT< agx::Vec3f > * normalAttribute
static agxData::ScalarAttributeT< agx::UInt32 > * faceIndex1Attribute
virtual void initAttributeAccessors() override
static agxData::ScalarAttributeT< agx::Real > * depthAttribute
static agxData::ScalarAttributeT< agx::Vec2 > * frictionAttribute
static agxData::ScalarAttributeT< agx::Vec3f > * tangentVAttribute
static agxData::ScalarAttributeT< agx::UInt32 > * faceIndex2Attribute
static agxData::ScalarAttributeT< agx::Physics::Geometry::ShapePtr > * shape1Attribute
virtual void configure(agx::TiXmlElement *eEntity) override
static agxData::ScalarAttributeT< agx::Vec3 > * pointAttribute
static agxData::ScalarAttributeT< agx::UInt8 > * faceFeature2Attribute
static agxData::ScalarAttributeT< agx::Real > * elasticRestLengthShape1Attribute
static agxData::ScalarAttributeT< agx::Vec3f > * velocityAttribute
static ContactPointPtr createInstance()
Create and return a pointer to a new instance in the default storage for this entity model.
static agxData::ScalarAttributeT< agx::Real > * volumeAttribute
virtual void construct(agxData::EntityPtr instance) override
static agxData::ScalarAttributeT< agx::Real > * maxNormalForceAttribute
static agxData::ScalarAttributeT< agx::Vec3 > * localForceAttribute
static agxData::ScalarAttributeT< agx::Vec4i8 > * indexSetAttribute
static agxData::ScalarAttributeT< agx::UInt8 > * faceFeature1Attribute
static agxData::ScalarAttributeT< agx::Real > * elasticRestLengthShape2Attribute
static agxData::ScalarAttributeT< agx::Bool > * enabledAttribute
void construct(agx::Physics::ContactPointPtr contactPoint)
static agxData::ScalarAttributeT< agx::Vec2 > * tangentialCohesionAttribute
static agxData::ScalarAttributeT< agx::Real > * areaAttribute
Pointer to a entity instance of type Physics.ContactPoint.
AGXPHYSICS_EXPORT agx::Real const & volume() const
AGXPHYSICS_EXPORT agx::Real const & youngsModulus() const
AGXPHYSICS_EXPORT agx::Vec3 & localForce()
AGXPHYSICS_EXPORT agx::Vec3f const & tangentU() const
AGXPHYSICS_EXPORT agx::Vec3 & point()
AGXPHYSICS_EXPORT agx::Vec3 const & restitution() const
AGXPHYSICS_EXPORT agx::Vec3 const & localForce() const
AGXPHYSICS_EXPORT agx::Physics::Geometry::ShapePtr const & shape2() const
Shape number 2 in contact.
AGXPHYSICS_EXPORT agx::Vec3f & normal()
AGXPHYSICS_EXPORT agx::Vec2 & friction()
AGXPHYSICS_EXPORT ContactPointPtr(agxData::EntityStorage *storage, agx::Index id)
AGXPHYSICS_EXPORT agx::Vec3 const & point() const
AGXPHYSICS_EXPORT agx::Real const & depth() const
AGXPHYSICS_EXPORT agx::Real & elasticRestLengthShape1()
AGXPHYSICS_EXPORT agx::Real & youngsModulus()
AGXPHYSICS_EXPORT agx::UInt8 & faceFeature1()
The face feature of shape 1 in contact (e.g. voronoi region on triangle for trimesh).
AGXPHYSICS_EXPORT agx::Physics::Geometry::ShapePtr & shape1()
Shape number 1 in contact.
AGXPHYSICS_EXPORT agx::UInt8 & state()
Contact point state, such as impacting, resting etc.
AGXPHYSICS_EXPORT agx::UInt32 & faceIndex2()
The face index of shape 2 in contact (e.g. index of triangle for trimesh).
AGXPHYSICS_EXPORT agx::Physics::Geometry::ShapePtr & shape2()
Shape number 2 in contact.
AGXPHYSICS_EXPORT const ContactPointSemantics * operator->() const
AGXPHYSICS_EXPORT agx::Vec4i8 const & indexSet() const
AGXPHYSICS_EXPORT agx::Real & area()
AGXPHYSICS_EXPORT ContactPointPtr()
AGXPHYSICS_EXPORT agx::Vec3 & restitution()
AGXPHYSICS_EXPORT agx::Bool const & enabled() const
AGXPHYSICS_EXPORT agx::UInt32 & faceIndex1()
The face index of shape 1 in contact (e.g. index of triangle for trimesh).
AGXPHYSICS_EXPORT ContactPointPtr(const agxData::EntityPtr &ptr)
AGXPHYSICS_EXPORT ContactPointInstance instance()
AGXPHYSICS_EXPORT agx::UInt32 const & faceIndex2() const
The face index of shape 2 in contact (e.g. index of triangle for trimesh).
AGXPHYSICS_EXPORT agx::Vec3f & velocity()
AGXPHYSICS_EXPORT agx::Vec3f const & tangentV() const
AGXPHYSICS_EXPORT agx::Vec3f const & normal() const
ContactPointData * getData()
AGXPHYSICS_EXPORT agx::Bool & enabled()
AGXPHYSICS_EXPORT agx::Vec3f const & velocity() const
AGXPHYSICS_EXPORT agx::Vec2 & tangentialCohesion()
AGXPHYSICS_EXPORT const ContactPointInstance instance() const
const ContactPointData * getData() const
AGXPHYSICS_EXPORT agx::Real const & elasticRestLengthShape1() const
AGXPHYSICS_EXPORT agx::Vec4i8 & indexSet()
AGXPHYSICS_EXPORT agx::Real & elasticRestLengthShape2()
AGXPHYSICS_EXPORT ContactPointPtr(const agxData::EntityInstance &instance)
AGXPHYSICS_EXPORT agx::Real const & elasticRestLengthShape2() const
AGXPHYSICS_EXPORT agx::UInt8 const & state() const
Contact point state, such as impacting, resting etc.
AGXPHYSICS_EXPORT ContactPointSemantics * operator->()
AGXPHYSICS_EXPORT agx::Vec2 const & friction() const
AGXPHYSICS_EXPORT agx::UInt32 const & faceIndex1() const
The face index of shape 1 in contact (e.g. index of triangle for trimesh).
AGXPHYSICS_EXPORT agx::Vec3f & tangentU()
AGXPHYSICS_EXPORT agx::UInt8 const & faceFeature1() const
The face feature of shape 1 in contact (e.g. voronoi region on triangle for trimesh).
AGXPHYSICS_EXPORT agx::Real & volume()
AGXPHYSICS_EXPORT agx::Physics::Geometry::ShapePtr const & shape1() const
Shape number 1 in contact.
AGXPHYSICS_EXPORT agx::Real const & maxNormalForce() const
AGXPHYSICS_EXPORT agx::Vec2 const & tangentialCohesion() const
ContactPointInstance InstanceType
AGXPHYSICS_EXPORT agx::Real & maxNormalForce()
AGXPHYSICS_EXPORT agx::Real const & area() const
AGXPHYSICS_EXPORT agx::Vec3f & tangentV()
AGXPHYSICS_EXPORT agx::UInt8 const & faceFeature2() const
The face feature of shape 2 in contact (e.g. voronoi region on triangle for trimesh).
AGXPHYSICS_EXPORT agx::Real & depth()
AGXPHYSICS_EXPORT agx::UInt8 & faceFeature2()
The face feature of shape 2 in contact (e.g. voronoi region on triangle for trimesh).
Pointer to a entity instance of type Physics.Geometry.Shape.
Definition: ShapeEntity.h:196
A class holding 4 dimensional vectors and providing basic arithmetic.
Definition: Vec4Template.h:35
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
uint8_t UInt8
Definition: Integer.h:30
UInt32 Index
Definition: Integer.h:44