1 #ifndef COIN_SOSUBNODE_H 2 #define COIN_SOSUBNODE_H 58 #include <Inventor/SbName.h> 60 #include <Inventor/fields/SoFieldData.h> 61 #include <Inventor/nodes/SoNode.h> 66 #define PRIVATE_NODE_TYPESYSTEM_HEADER( ) \ 68 static SoType getClassTypeId(void); \ 69 virtual SoType getTypeId(void) const; \ 71 static SoType classTypeId 74 #define SO_NODE_ABSTRACT_HEADER(_class_) \ 75 PRIVATE_NODE_TYPESYSTEM_HEADER(); \ 77 static const SoFieldData ** getFieldDataPtr(void); \ 78 virtual const SoFieldData * getFieldData(void) const; \ 80 static void atexit_cleanup(void); \ 81 static const SoFieldData ** parentFieldData; \ 82 static SoFieldData * fieldData; \ 85 static unsigned int classinstances 89 #define SO_NODE_HEADER(_class_) \ 90 SO_NODE_ABSTRACT_HEADER(_class_); \ 92 static void * createInstance(void) 96 #define PRIVATE_NODE_TYPESYSTEM_SOURCE(_class_) \ 97 SoType _class_::getClassTypeId(void) { return _class_::classTypeId; } \ 98 SoType _class_::getTypeId(void) const { return _class_::classTypeId; } \ 99 SoType _class_::classTypeId STATIC_SOTYPE_INIT 103 #define SO_NODE_ABSTRACT_SOURCE(_class_) \ 104 PRIVATE_NODE_TYPESYSTEM_SOURCE(_class_); \ 106 unsigned int _class_::classinstances = 0; \ 107 const SoFieldData ** _class_::parentFieldData = NULL; \ 108 SoFieldData * _class_::fieldData = NULL; \ 110 const SoFieldData ** \ 111 _class_::getFieldDataPtr(void) \ 113 return const_cast<const SoFieldData **>(&_class_::fieldData); \ 116 const SoFieldData * \ 117 _class_::getFieldData(void) const \ 119 return _class_::fieldData; \ 123 _class_::atexit_cleanup(void) \ 125 delete _class_::fieldData; \ 126 _class_::fieldData = NULL; \ 127 _class_::parentFieldData = NULL; \ 128 SoType::removeType(_class_::classTypeId.getName()); \ 129 _class_::classTypeId STATIC_SOTYPE_INIT; \ 130 _class_::classinstances = 0; \ 134 #define SO_NODE_SOURCE(_class_) \ 135 SO_NODE_ABSTRACT_SOURCE(_class_) \ 141 _class_::createInstance(void) \ 143 return new _class_; \ 149 #define SO_NODE_IS_FIRST_INSTANCE() \ 150 (classinstances == 1) 153 #define SO_NODE_CONSTRUCTOR_NOLOCK(_class_) \ 155 _class_::classinstances++; \ 157 assert(_class_::classTypeId != SoType::badType() && "you forgot init()!"); \ 159 if (!_class_::fieldData) { \ 162 _class_::fieldData = \ 163 new SoFieldData(_class_::parentFieldData ? \ 164 *_class_::parentFieldData : NULL); \ 169 this->isBuiltIn = FALSE; \ 173 #define SO_NODE_CONSTRUCTOR(_class_) \ 175 SoBase::staticDataLock(); \ 176 SO_NODE_CONSTRUCTOR_NOLOCK(_class_); \ 177 SoBase::staticDataUnlock(); \ 190 #define PRIVATE_COMMON_INIT_CODE(_class_, _classname_, _createfunc_, _parentclass_) \ 193 assert(_class_::classTypeId == SoType::badType() && "don't init() twice!"); \ 195 assert(strcmp(SO__QUOTE(_parentclass_), "inherited")); \ 196 SoType parentType(SoType::fromName(SO__QUOTE(_parentclass_))); \ 197 assert(parentType != SoType::badType() && "you forgot init() on parentclass!"); \ 200 _class_::classTypeId = \ 201 SoType::createType(parentType, \ 204 SoNode::getNextActionMethodIndex()); \ 205 SoNode::incNextActionMethodIndex(); \ 208 _class_::parentFieldData = _parentclass_::getFieldDataPtr(); \ 211 cc_coin_atexit_static_internal(_class_::atexit_cleanup); \ 216 #define SO_NODE_INIT_CLASS(_class_, _parentclass_, _parentname_) \ 218 const char * classname = SO__QUOTE(_class_); \ 219 PRIVATE_COMMON_INIT_CODE(_class_, classname, &_class_::createInstance, _parentclass_); \ 223 #define SO_NODE_INIT_ABSTRACT_CLASS(_class_, _parentclass_, _parentname_) \ 225 const char * classname = SO__QUOTE(_class_); \ 226 PRIVATE_COMMON_INIT_CODE(_class_, classname, NULL, _parentclass_); \ 233 #define SO_NODE_ADD_FIELD(_field_, _defaultval_) \ 235 this->_field_.setValue _defaultval_;\ 236 this->_field_.setContainer(this); \ 237 fieldData->addField(this, SO__QUOTE(_field_), &this->_field_); \ 241 #define SO_NODE_ADD_EMPTY_MFIELD(_field_) \ 243 this->_field_.setContainer(this); \ 244 fieldData->addField(this, SO__QUOTE(_field_), &this->_field_);\ 249 #define SO_NODE_DEFINE_ENUM_VALUE(_enumname_, _enumval_) \ 251 fieldData->addEnumValue(SO__QUOTE(_enumname_), \ 252 SO__QUOTE(_enumval_), _enumval_); \ 257 #endif // !COIN_SOSUBNODE_H
Copyright © by Kongsberg Oil & Gas Technologies. All rights reserved.
Generated for Coin by Doxygen