CFx SDK Documentation 2024 SP0
Loading...
Searching...
No Matches
RxObject.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2022, Open Design Alliance (the "Alliance").
3// All rights reserved.
4//
5// This software and its documentation and related materials are owned by
6// the Alliance. The software may only be incorporated into application
7// programs owned by members of the Alliance, subject to a signed
8// Membership Agreement and Supplemental Software License Agreement with the
9// Alliance. The structure and organization of this software are the valuable
10// trade secrets of the Alliance and its suppliers. The software is also
11// protected by copyright law and international treaty provisions. Application
12// programs incorporating this software must include the following statement
13// with their copyright notices:
14//
15// This application incorporates Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2022 by Open Design Alliance.
18// All rights reserved.
19//
20// By use of this software, its documentation or related materials, you
21// acknowledge and accept the above terms.
23
24#ifndef _ODRXOBJECT_INCLUDED_
25#define _ODRXOBJECT_INCLUDED_ /* { Secret } *//
26
27#include "TD_PackPush.h"
28#include "RootExport.h"
29#include "OdHeap.h"
30#include "OdArrayPreDef.h"
31#include "OdString.h"
32#include "BaseObjectPtr.h"
33
34class OdRxClass;
35class OdRxModule;
36
44typedef void (*AppNameChangeFuncPtr)(const OdRxClass* classObj, OdString& newAppName, int saveVer);
45
57
58#define ODRX_DECLARE_MEMBERS_GENERIC(ClassType, ClassName)\
59public: \
60 \
61 \
62 static OdSmartPtr<ClassName> cast(const OdRxObject* pObj) \
63 { \
64 if (pObj) \
65 return OdSmartPtr<ClassName>(((ClassName*)pObj->queryX(ClassName::desc())), kOdRxObjAttach); \
66 return (ClassName*)0; \
67 } \
68 \
69 static ClassType* g_pDesc; \
70 \
71 \
72 \
73 \
74 static ClassType* desc(); \
75 \
76 \
77 \
78 \
79 virtual ClassType* isA() const; \
80 \
81 \
82 \
83 virtual OdRxObject* queryX(const OdRxClass* protocolClass) const; \
84 \
85 \
86 \
87 static OdRxObjectPtr pseudoConstructor(); \
88 \
89 \
90 \
91 static OdSmartPtr<ClassName> createObject() \
92 { if (!desc()) throw OdError(eNotInitializedYet); return desc()->create(); } \
93 \
94 \
95 static void rxInit(); \
96 static void rxInit(AppNameChangeFuncPtr appNameChangeFunc); \
97 \
98/* Unregisters ClassName with the ODA Platform. **/ \
99 static void rxUninit()
100
101
112#define ODRX_DECLARE_MEMBERS(ClassName)\
113 ODRX_DECLARE_MEMBERS_GENERIC(OdRxClass, ClassName)
114
121#define EMPTY_CONSTR(ClassName)(ClassName*)0
122
133#define NEWOBJ_CONSTR(ClassName) OdSmartPtr<ClassName>(new ClassName, kOdRxObjAttach)
134
135#define ODRX_DEFINE_RTTI_MEMBERS_GENERIC(ClassType, ClassName, ParentClass) \
136 \
137 ClassType* ClassName::g_pDesc = 0; \
138 ClassType* ClassName::desc() { return g_pDesc; } \
139 ClassType* ClassName::isA() const { return g_pDesc; } \
140 \
141 OdRxObject* ClassName::queryX(const OdRxClass* pClass) const { \
142 return ::odQueryXImpl<ClassName, ParentClass>(this, pClass); \
143 }
144
151#define ODRX_DEFINE_RTTI_MEMBERS(ClassName, ParentClass) \
152 ODRX_DEFINE_RTTI_MEMBERS_GENERIC(OdRxClass, ClassName, ParentClass)
153
154#define ODRX_DEFINE_INIT_MEMBERS_GENERIC(ClassName, CREATE_CLASS_INSTANCE, CREATE_CLASS_INSTANCE2) \
155 \
156/* Registers this class with Teigha. */ \
157void ClassName::rxInit() \
158{ \
159 if (!ClassName::g_pDesc) { \
160 ClassName::g_pDesc = CREATE_CLASS_INSTANCE; \
161 } else { \
162 ODA_ASSERT(("Class ["#ClassName"] is already initialized.",0)); \
163 throw OdError(eExtendedError); \
164 } \
165} \
166void ClassName::rxInit(AppNameChangeFuncPtr pAppNameChangeCallback) \
167{ \
168 if (!ClassName::g_pDesc) { \
169 ClassName::g_pDesc = CREATE_CLASS_INSTANCE2; \
170 } else { \
171 ODA_ASSERT(("Class ["#ClassName"] is already initialized.",0)); \
172 throw OdError(eExtendedError); \
173 } \
174} \
175 \
176/* Unregisters this class with Teigha. */ \
177void ClassName::rxUninit() \
178{ \
179 if (ClassName::g_pDesc) { \
180 ::deleteOdRxClass(ClassName::g_pDesc); \
181 ClassName::g_pDesc = 0; \
182 } else { \
183 ODA_ASSERT(("Class ["#ClassName"] is not initialized yet.",0)); \
184 throw OdError(eNotInitializedYet); \
185 } \
186}
187
196#define ODRX_DEFINE_INIT_MEMBERS(ClassName, ParentClass, pseudoConsFn, DwgVer, \
197 MaintVer, nProxyFlags, szDWGClassName, \
198 szDxfName, szAppName, nCustomFlags, pMemberCreate, pUserData)\
199 ODRX_DEFINE_INIT_MEMBERS_GENERIC( \
200 ClassName, \
201 (::newOdRxClass(szDWGClassName, ParentClass::desc(), pseudoConsFn, DwgVer, \
202 MaintVer, nProxyFlags, szDxfName, szAppName, NULL, nCustomFlags, pMemberCreate, pUserData)), \
203 (::newOdRxClass(szDWGClassName, ParentClass::desc(), pseudoConsFn, DwgVer, \
204 MaintVer, nProxyFlags, szDxfName, szAppName, pAppNameChangeCallback, nCustomFlags, pMemberCreate, pUserData)))
205
206
213#define ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE) \
214 \
215OdRxObjectPtr ClassName::pseudoConstructor() { return OdRxObjectPtr(DOCREATE(ClassName)); }
216
223#define ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,pseudoConsFn,DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags) \
224 \
225ODRX_DEFINE_RTTI_MEMBERS(ClassName,ParentClass) \
226 \
227ODRX_DEFINE_INIT_MEMBERS(ClassName,ParentClass,pseudoConsFn, \
228 DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags,0,0)
229
230#define ODRX_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE,DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName)\
231 \
232ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor, \
233 DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,0) \
234 \
235ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)
236
237#define ODRX_DEFINE_MEMBERS_EX(ClassName,ParentClass,DOCREATE,DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags)\
238 \
239ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor, \
240 DwgVer,MaintVer,nProxyFlags,szDWGClassName,szDxfName,szAppName,nCustomFlags) \
241 \
242ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)
243
244
245#define ODRX_NO_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,szClassName) \
246 \
247ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,0,0,0,0,szClassName,OdString::kEmpty,OdString::kEmpty,0) \
248 \
249ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,EMPTY_CONSTR)
250
251
252
253#define ODRX_NO_CONS_DEFINE_MEMBERS(ClassName,ParentClass) \
254 \
255ODRX_NO_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,OD_T(#ClassName))
256
257
258
259#define ODRX_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,szClassName,DOCREATE) \
260 \
261ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor,0,0,0,szClassName,OdString::kEmpty,OdString::kEmpty,0) \
262 \
263ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,DOCREATE)
264
265
266
267#define ODRX_CONS_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE) \
268 \
269ODRX_CONS_DEFINE_MEMBERS_ALTNAME(ClassName,ParentClass,OD_T(#ClassName),DOCREATE)
270
271
272
273#define ODRX_DXF_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE,DwgVer,MaintVer, nProxyFlags,DxfName,AppName) \
274 \
275ODRX_DEFINE_MEMBERS(ClassName,ParentClass,DOCREATE, \
276 DwgVer,MaintVer,nProxyFlags,OD_T(#ClassName),OD_T(#DxfName),OD_T(#AppName))
277
278
279
280#define ODRX_DXF_CONS_DEFINE_MEMBERS(ClassName,ParentClass,DwgVer,MaintVer,nProxyFlags,DxfName,AppName) \
281 \
282ODRX_DEFINE_MEMBERS2(ClassName,ParentClass,ClassName::pseudoConstructor, \
283 DwgVer,MaintVer,nProxyFlags,OD_T(#ClassName),OD_T(#DxfName),OD_T(#AppName),0) \
284 \
285ODRX_DEFINE_PSEUDOCONSTRUCTOR(ClassName,NEWOBJ_CONSTR)
286
287
292namespace OdRx
293{
295 {
296 kLessThan =-1, // This object < Specified Object
297 kEqual = 0, // This object == Specified Object
298 kGreaterThan = 1, // This object > Specified Object
299 kNotOrderable = 2 // These objects cannot be ordered.
300 };
301
303 {
304 kMTRender = 0x01, // worldDraw() or viewportDraw() calls from different threads are allowed
305 // for highest level (MS or PS), elsewhere they should always happen
306 // in one dedicated thread.
307 kMTRenderInBlock = 0x02, // Calls to worldDraw() or viewportDraw() methods from different threads are allowed
308 // if the drawable is located inside a block (compound object).
309 kMTRenderNested = 0x04, // worldDraw() or viewportDraw() from different threads are allowed for
310 // nested drawables of this compound object.
311 kMTRenderReserved = 0x08, // Reserved for future use.
312 kMTRenderMask = 0x0f, // Combination of all MTRender-dependent flags.
313 kMTLoading = 0x80, // Multithread loading is supported for this object.
314 kHistoryAware = 0x100 // The information written by the object to the undo filer can be saved in the history file (is valid between sessions)
315 };
316}
317
345{
349 inline void internalAddRef();
350
362 void assign(
363 const OdRxObject* pObject)
364 {
365 if (m_pObject != pObject) // To prevent reference counter dec/inc which
366 { // may cause object destruction or subClose
367 release();
368 m_pObject = (OdRxObject*)pObject;
369 internalAddRef();
370 }
371 }
372
373public:
374
389 const OdRxObject* pSource,
391 : OdBaseObjectPtr(pSource)
392 {
393 }
394
396 const OdRxObject* pSource)
397 : OdBaseObjectPtr(pSource)
398 {
399 internalAddRef();
400 }
401
403 const OdRxObjectPtr& pSource)
404 : OdBaseObjectPtr(pSource.get())
405 {
406 internalAddRef();
407 }
408
410 const OdBaseObjectPtr& pSource)
411 : OdBaseObjectPtr(pSource.get())
412 {
413 internalAddRef();
414 }
415
430 void attach(
431 const OdRxObject* pObject) { release(); m_pObject = (OdRxObject*)pObject; }
432
440 {
441 release();
442 }
443
454 inline void release();
455
467 {
468 OdRxObject* res = m_pObject;
469 m_pObject = 0;
470 return res;
471 }
472
482 const OdRxObjectPtr& source)
483 { assign(source); return *this; }
484
486 const OdRxObject* source)
487 { assign(source); return *this; }
488
490 const OdBaseObjectPtr& source)
491 { assign(source.get()); return *this; }
492
503 OdRxObject* get() { return m_pObject; }
504 const OdRxObject* get() const { return m_pObject; }
505
516 const OdRxObject* operator ->() const { return m_pObject; }
517
518#ifdef ODA_GCC_2_95
529 operator OdRxObject*() const { return m_pObject; }
530#else
537 operator OdRxObject*() { return m_pObject; }
538
539 operator const OdRxObject*() const { return m_pObject; }
540#endif
541
543 const OdRxObject* pObject) const { return (m_pObject==pObject); }
544
546 const OdRxObject* pObject) const { return (m_pObject!=pObject); }
547};
548
549
564{
565
569 OdRxObject(const OdRxObject&);
570
574 OdRxObject& operator = (const OdRxObject&);
575//FELIX_CHANGE_BEGIN
576/*
577protected:
578*/
579public:
580//FELIX_CHANGE_END
585
586public:
591
595 virtual ~OdRxObject();
596
614 const OdRxClass* pClass) const;
615
632 virtual OdRxObject* x(
633 const OdRxClass* pClass) const;
634
641 const OdRxObject* pointer)
642 {
643 OdRxObjectPtr pRes;
644 if (pointer)
645 pRes.attach(pointer->queryX(desc()));
646 return pRes;
647 }
648
663 static OdRxClass* desc();
664
665
680 virtual OdRxClass* isA() const;
681
691 virtual void addRef() = 0;
692
702 virtual void release() = 0;
703
713 virtual long numRefs() const;
714
728 bool isKindOf(const OdRxClass* pClass) const;
729
733 virtual OdRxObjectPtr clone() const;
734
748 virtual void copyFrom(
749 const OdRxObject* pSource);
750
778 const OdRxObject* pOther) const;
779
791 virtual bool isEqualTo(
792 const OdRxObject* pOther) const;
793};
794
795
796
797void OdRxObjectPtr::internalAddRef()
798{
799 if(m_pObject) { m_pObject->addRef(); }
800}
802{
803 if (m_pObject)
804 {
806 m_pObject = NULL;
807 }
808}
809
810#include "SmartPtr.h"
811
812
814 {
826 };
827
828class OdRxOverruleIterator;
833
844class OdRxClassImpl;
845
860{
861 friend class OdRxClassImpl;
862protected:
865public:
869
885 OdRxClass* pProtocolClass,
886 OdRxObject* pProtocolObject);
887
903 const OdRxClass* pProtocolClass);
904
919 OdRxClass* pProtocolClass);
920
934 virtual OdRxObjectPtr create() const;
935
947 const OdString appName() const;
948
958
968 const OdString dxfName() const;
969
979 const OdString name() const;
980
999 OdDb::MaintReleaseVer* pMaintReleaseVer = 0) const;
1000
1011
1025 virtual bool isDerivedFrom(
1026 const OdRxClass* pClass) const;
1027
1039
1053
1064
1078 OdPseudoConstructorType psuedoConstr);
1079
1090
1094};
1095
1103
1104inline bool OdRxObject::isKindOf(const OdRxClass* pClass) const {
1105 //FELIX_CHANGE_BEGIN isKindOf() not working with reactors wich has multiple inheritance of parent
1106 //return isA()->isDerivedFrom(pClass);
1107 if ( isA() && isA()->isDerivedFrom( pClass ) )
1108 {
1109 return true;
1110 }
1111
1112 OdRxObjectPtr pRes;
1113 pRes.attach( queryX( pClass ) );
1114 return ( !pRes.isNull() );
1115 //FELIX_CHANGE_END
1116}
1117
1118template <class Class, class Parent>
1119OdRxObject* odQueryXImpl(const Class* pThis, const OdRxClass* pClass)
1120{
1121 OdRxObject* pObj = 0;
1122 if (!pClass) // requested class is not registred
1123 return pObj;
1124 if(pClass == Class::desc())
1125 {
1126 pObj = (OdRxObject*)pThis;
1127 pObj->addRef();
1128 }
1129 else
1130 {
1131 pObj = Class::desc()->getX(pClass).detach();
1132 if(!pObj)
1133 pObj = pThis->Parent::queryX(pClass);
1134 }
1135 return pObj;
1136}
1137
1145 const OdString& sClassName);
1146
1166 const OdString& sClassName,
1167 OdRxClass* pBaseClass,
1168 OdPseudoConstructorType pConstr = 0,
1169 int DwgVer = 0,
1170 int MaintVer = 0,
1171 int nProxyFlags = 0,
1172 const OdString& sDxfName = OdString::kEmpty,
1173 const OdString& sAppName = OdString::kEmpty,
1174 AppNameChangeFuncPtr fNameChangeFunc = NULL,
1175 int nCustomFlags = 0,
1176 OdRxMemberCollectionConstructorPtr memberConstruct = 0,
1177 void* userData = 0
1178 );
1179
1186 OdRxClass* pClass);
1187
1192
1199
1200#include "TD_PackPop.h"
1201
1202#endif //_ODRXOBJECT_INCLUDED_
1203
unsigned int OdUInt32
#define ODRX_ABSTRACT
#define FIRSTDLL_EXPORT
Definition: RootExport.h:39
FIRSTDLL_EXPORT OdRxObjectPtr odrxCreateObject(const OdString &sClassName)
OdRxObjectPtr(* OdPseudoConstructorType)()
Definition: RxObject.h:843
FIRSTDLL_EXPORT void deleteOdRxClass(OdRxClass *pClass)
FIRSTDLL_EXPORT OdRxClass * newOdRxClass(const OdString &sClassName, OdRxClass *pBaseClass, OdPseudoConstructorType pConstr=0, int DwgVer=0, int MaintVer=0, int nProxyFlags=0, const OdString &sDxfName=OdString::kEmpty, const OdString &sAppName=OdString::kEmpty, AppNameChangeFuncPtr fNameChangeFunc=NULL, int nCustomFlags=0, OdRxMemberCollectionConstructorPtr memberConstruct=0, void *userData=0)
void(* ODRXOBJECT_CALLBACK)(const OdRxObject *)
Definition: RxObject.h:1196
OdRxObjMod
Definition: RxObject.h:56
@ kOdRxObjAttach
Definition: RxObject.h:56
OdSmartPtr< OdRxClass > OdRxClassPtr
Definition: RxObject.h:1102
OdArray< OdRxObjectPtr > OdRxObjectPtrArray
Definition: RxObject.h:1191
OverrulingType
Definition: RxObject.h:814
@ kGripOverrule
Definition: RxObject.h:821
@ kDrawableOverrule
Definition: RxObject.h:815
@ kHighlightOverrule
Definition: RxObject.h:819
@ kVisibilityOverrule
Definition: RxObject.h:824
@ kOsnapOverrule
Definition: RxObject.h:823
@ kSubentityOverrule
Definition: RxObject.h:820
@ kGeometryOverrule
Definition: RxObject.h:818
@ kPropertiesOverrule
Definition: RxObject.h:817
@ kTotalOverrules
Definition: RxObject.h:825
@ kObjectOverrule
Definition: RxObject.h:816
@ kTransformOverrule
Definition: RxObject.h:822
FIRSTDLL_EXPORT void odrxUnregisterDestructorCallback()
OdRxObject * odQueryXImpl(const Class *pThis, const OdRxClass *pClass)
Definition: RxObject.h:1119
void(* OdRxMemberCollectionConstructorPtr)(OdRxMemberCollectionBuilder &, void *)
Definition: RxObject.h:832
void(* AppNameChangeFuncPtr)(const OdRxClass *classObj, OdString &newAppName, int saveVer)
Definition: RxObject.h:44
FIRSTDLL_EXPORT void odrxRegisterDestructorCallback(const ODRXOBJECT_CALLBACK callbackFunc)
OdRxObject * m_pObject
Definition: BaseObjectPtr.h:54
bool isNull() const
Definition: BaseObjectPtr.h:86
OdRxModule * module() const
OdRxClass(OdRxClassImpl *)
OdRxObjectPtr getX(const OdRxClass *pProtocolClass)
OdRxAttributeCollection & attributes()
void setConstructor(OdPseudoConstructorType psuedoConstr)
virtual bool isDerivedFrom(const OdRxClass *pClass) const
const OdString appName() const
ODRX_DECLARE_MEMBERS(OdRxClass)
OdUInt32 customFlags() const
OdUInt32 proxyFlags() const
OdPseudoConstructorType constructor()
OdRxClassImpl * m_pImpl
Definition: RxObject.h:863
OdDb::DwgVersion getClassVersion(OdDb::MaintReleaseVer *pMaintReleaseVer=0) const
virtual OdRxObjectPtr create() const
AppNameChangeFuncPtr appNameCallbackPtr() const
OdRxObjectPtr delX(OdRxClass *pProtocolClass)
const OdString name() const
OdRxObjectPtr addX(OdRxClass *pProtocolClass, OdRxObject *pProtocolObject)
OdRxMemberCollection * members() const
const OdRxAttributeCollection & attributes() const
OdRxClass * myParent() const
const OdString dxfName() const
virtual OdRxObject * queryX(const OdRxClass *pClass) const
virtual void release()=0
virtual bool isEqualTo(const OdRxObject *pOther) const
virtual ~OdRxObject()
virtual void copyFrom(const OdRxObject *pSource)
virtual OdRxObjectPtr clone() const
virtual OdRxObject * x(const OdRxClass *pClass) const
virtual OdRx::Ordering comparedTo(const OdRxObject *pOther) const
virtual OdRxClass * isA() const
static OdRxClass * desc()
virtual long numRefs() const
static OdRxObjectPtr cast(const OdRxObject *pointer)
Definition: RxObject.h:640
bool isKindOf(const OdRxClass *pClass) const
Definition: RxObject.h:1104
OdRxObject()
Definition: RxObject.h:590
ODRX_HEAP_OPERATORS()
virtual void addRef()=0
OdRxObjectPtr(const OdBaseObjectPtr &pSource)
Definition: RxObject.h:409
OdRxObject * get()
Definition: RxObject.h:503
OdRxObject * operator->()
Definition: RxObject.h:515
OdRxObjectPtr(const OdRxObject *pSource)
Definition: RxObject.h:395
OdRxObject * detach()
Definition: RxObject.h:466
OdRxObjectPtr & operator=(const OdRxObjectPtr &source)
Definition: RxObject.h:481
const OdRxObject * get() const
Definition: RxObject.h:504
bool operator==(const OdRxObject *pObject) const
Definition: RxObject.h:542
void attach(const OdRxObject *pObject)
Definition: RxObject.h:430
void release()
Definition: RxObject.h:801
OdRxObjectPtr(const OdRxObjectPtr &pSource)
Definition: RxObject.h:402
bool operator!=(const OdRxObject *pObject) const
Definition: RxObject.h:545
OdRxObjectPtr(const OdRxObject *pSource, OdRxObjMod)
Definition: RxObject.h:388
FIRSTDLL_EXPORT_STATIC static const OdString kEmpty
Definition: OdString.h:98
GLenum void ** pointer
Definition: gles2_ext.h:288
typedef void(APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture)
GLsizei GLsizei GLchar * source
Definition: gles2_ext.h:282
DwgVersion
Definition: OdaDefs.h:47
MaintReleaseVer
Definition: OdaDefs.h:109
Definition: RxDefs.h:36
Ordering
Definition: RxObject.h:295
@ kLessThan
Definition: RxObject.h:296
@ kNotOrderable
Definition: RxObject.h:299
@ kGreaterThan
Definition: RxObject.h:298
@ kEqual
Definition: RxObject.h:297
MTSupport
Definition: RxObject.h:303
@ kMTRender
Definition: RxObject.h:304
@ kMTLoading
Definition: RxObject.h:313
@ kHistoryAware
Definition: RxObject.h:314
@ kMTRenderReserved
Definition: RxObject.h:311
@ kMTRenderMask
Definition: RxObject.h:312
@ kMTRenderInBlock
Definition: RxObject.h:307
@ kMTRenderNested
Definition: RxObject.h:309