Coin3D is Free Software,
published under the
BSD 3-clause license
.
https://coin3d.github.io
https://www.kongsberg.com/en/kogt/
SoSubKit.h
1
#ifndef COIN_SOSUBKIT_H
2
#define COIN_SOSUBKIT_H
3
4
/**************************************************************************\
5
* Copyright (c) Kongsberg Oil & Gas Technologies AS
6
* All rights reserved.
7
*
8
* Redistribution and use in source and binary forms, with or without
9
* modification, are permitted provided that the following conditions are
10
* met:
11
*
12
* Redistributions of source code must retain the above copyright notice,
13
* this list of conditions and the following disclaimer.
14
*
15
* Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
*
19
* Neither the name of the copyright holder nor the names of its
20
* contributors may be used to endorse or promote products derived from
21
* this software without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
27
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
\**************************************************************************/
35
36
#include <Inventor/nodes/SoSubNode.h>
37
#include <Inventor/fields/SoSFNode.h>
38
#include <Inventor/nodekits/SoNodekitCatalog.h>
39
#include <Inventor/C/tidbits.h>
40
41
#ifndef COIN_INTERNAL
42
// Include this header file for better Open Inventor compatibility.
43
#include <Inventor/nodekits/SoNodeKitListPart.h>
44
#endif
// !COIN_INTERNAL
45
46
47
// FIXME: document all the macros, as they are part of the public
48
// API. 20011024 mortene.
49
50
#define PRIVATE_KIT_HEADER(_kitclass_) \
51
public: \
52
static const SoNodekitCatalog * getClassNodekitCatalog(void); \
53
virtual const SoNodekitCatalog * getNodekitCatalog(void) const; \
54
\
55
protected: \
56
static const SoNodekitCatalog ** getClassNodekitCatalogPtr(void); \
57
\
58
private: \
59
static SoNodekitCatalog * classcatalog; \
60
static const SoNodekitCatalog ** parentcatalogptr; \
61
static void atexit_cleanupkit(void)
62
63
#define SO_KIT_HEADER(_kitclass_) \
64
SO_NODE_HEADER(_kitclass_); \
65
PRIVATE_KIT_HEADER(_kitclass_)
66
67
#define SO_KIT_ABSTRACT_HEADER(_kitclass_) \
68
SO_NODE_ABSTRACT_HEADER(_kitclass_); \
69
PRIVATE_KIT_HEADER(_kitclass_)
70
71
#define SO_KIT_CATALOG_ENTRY_HEADER(_entry_) \
72
protected: SoSFNode _entry_
73
74
75
#define PRIVATE_KIT_SOURCE(_class_) \
76
SoNodekitCatalog * _class_::classcatalog = NULL; \
77
const SoNodekitCatalog ** _class_::parentcatalogptr = NULL; \
78
\
79
\
83
const SoNodekitCatalog * \
84
_class_::getClassNodekitCatalog(void) \
85
{ \
86
return _class_::classcatalog; \
87
} \
88
\
89
\
93
const SoNodekitCatalog * \
94
_class_::getNodekitCatalog(void) const \
95
{ \
96
return _class_::classcatalog; \
97
} \
98
\
99
\
103
const SoNodekitCatalog ** \
104
_class_::getClassNodekitCatalogPtr(void) \
105
{ \
106
return const_cast<const class SoNodekitCatalog **>(&_class_::classcatalog); \
107
} \
108
\
109
void \
110
_class_::atexit_cleanupkit(void) \
111
{ \
112
delete _class_::classcatalog; \
113
_class_::classcatalog = NULL; \
114
_class_::parentcatalogptr = NULL; \
115
}
116
117
#define SO_KIT_SOURCE(_class_) \
118
SO_NODE_SOURCE(_class_) \
119
PRIVATE_KIT_SOURCE(_class_)
120
121
#define SO_KIT_ABSTRACT_SOURCE(_class_) \
122
SO_NODE_ABSTRACT_SOURCE(_class_); \
123
PRIVATE_KIT_SOURCE(_class_)
124
125
#define SO_KIT_IS_FIRST_INSTANCE() \
126
SO_NODE_IS_FIRST_INSTANCE()
127
128
#define SO_KIT_INIT_CLASS(_class_, _parentclass_, _parentname_) \
129
do { \
130
SO_NODE_INIT_CLASS(_class_, _parentclass_, _parentname_); \
131
_class_::parentcatalogptr = _parentclass_::getClassNodekitCatalogPtr(); \
132
} WHILE_0
133
134
#define SO_KIT_INIT_ABSTRACT_CLASS(_class_, _parentclass_, _parentname_) \
135
do { \
136
SO_NODE_INIT_ABSTRACT_CLASS(_class_, _parentclass_, _parentname_); \
137
_class_::parentcatalogptr = _parentclass_::getClassNodekitCatalogPtr(); \
138
} WHILE_0
139
140
141
#define SO_KIT_CONSTRUCTOR(_class_) \
142
do { \
143
SO_NODE_CONSTRUCTOR(_class_); \
144
SoBase::staticDataLock(); \
145
if (_class_::classcatalog == NULL) { \
146
SoType mytype = SoType::fromName(SO__QUOTE(_class_)); \
147
_class_::classcatalog = (*_class_::parentcatalogptr)->clone(mytype); \
148
cc_coin_atexit_static_internal(_class_::atexit_cleanupkit); \
149
} \
150
SoBase::staticDataUnlock(); \
151
} WHILE_0
152
153
154
155
#define SO_KIT_ADD_CATALOG_ENTRY(_part_, _partclass_, _isdefnull_ , _parent_, _sibling_, _ispublic_) \
156
do { \
157
classcatalog->addEntry(SO__QUOTE(_part_), \
158
SoType::fromName(SO__QUOTE(_partclass_)), \
159
SoType::fromName(SO__QUOTE(_partclass_)), \
160
_isdefnull_, \
161
SO__QUOTE(_parent_), \
162
SO__QUOTE(_sibling_), \
163
FALSE, \
164
SoType::badType(), \
165
SoType::badType(), \
166
_ispublic_); \
167
SO_NODE_ADD_FIELD(_part_,(NULL)); \
168
} WHILE_0
169
170
171
172
#define SO_KIT_ADD_CATALOG_LIST_ENTRY(_part_, _containertype_, _isdefnull_, _parent_, _sibling_, _itemtype_, _ispublic_) \
173
do { \
174
classcatalog->addEntry(SO__QUOTE(_part_), \
175
SoNodeKitListPart::getClassTypeId(), \
176
SoNodeKitListPart::getClassTypeId(), \
177
_isdefnull_, \
178
SO__QUOTE(_parent_), \
179
SO__QUOTE(_sibling_), \
180
TRUE, \
181
_containertype_::getClassTypeId(), \
182
_itemtype_::getClassTypeId(), \
183
_ispublic_); \
184
SO_NODE_ADD_FIELD(_part_,(NULL)); \
185
} WHILE_0
186
187
188
189
#define SO_KIT_ADD_CATALOG_ABSTRACT_ENTRY(_part_, _class_, _defaultclass_, _isdefnull_, _parent_, _sibling_, _ispublic_) \
190
do { \
191
classcatalog->addEntry(SO__QUOTE(_part_), \
192
_class_::getClassTypeId(), \
193
_defaultclass_::getClassTypeId(), \
194
_isdefnull_, \
195
SO__QUOTE(_parent_), \
196
SO__QUOTE(_sibling_), \
197
FALSE, \
198
SoType::badType(), \
199
SoType::badType(), \
200
_ispublic_); \
201
SO_NODE_ADD_FIELD(_part_,(NULL)); \
202
} WHILE_0
203
204
205
206
#define SO_KIT_ADD_LIST_ITEM_TYPE(_part_, _listitemtype_) \
207
do { \
208
classcatalog->addListItemType(SO__QUOTE(_part_), \
209
_listitemtype_::getClassTypeId()); \
210
} WHILE_0
211
212
213
#define SO_KIT_INIT_INSTANCE() \
214
this->createFieldList(); \
215
this->createDefaultParts()
216
217
#define SO_KIT_ADD_FIELD(_fieldname_, _defvalue_) \
218
SO_NODE_ADD_FIELD(_fieldname_, _defvalue_)
219
220
// New for Coin-3
221
#define SO_KIT_ADD_EMPTY_MFIELD(_fieldname_) \
222
SO_NODE_ADD_EMPTY_MFIELD(_fieldname_)
223
224
#define SO_KIT_DEFINE_ENUM_VALUE(_enumtype_, _enumvalue_) \
225
SO_NODE_DEFINE_ENUM_VALUE(_enumtype_, _enumvalue_)
226
227
#define SO_KIT_SET_MF_ENUM_TYPE(_fieldname_, _enumtype_) \
228
SO_NODE_SET_MF_ENUM_TYPE(_fieldname_, _enumtype_)
229
230
#define SO_KIT_SET_SF_ENUM_TYPE(_fieldname_, _enumtype_) \
231
SO_NODE_SET_SF_ENUM_TYPE(_fieldname_, _enumtype_)
232
233
#define SO_KIT_CHANGE_ENTRY_TYPE(_part_, _newpartclassname_, _newdefaultpartclassname_) \
234
do { \
235
classcatalog->narrowTypes(SO__QUOTE(_part_), \
236
SoType::fromName(SO__QUOTE(_newpartclassname_)), \
237
SoType::fromName(SO__QUOTE(_newdefaultpartclassname_))); \
238
} WHILE_0
239
240
241
#define SO_KIT_CHANGE_NULL_BY_DEFAULT(_part_, _newnullbydefault_) \
242
do { \
243
classcatalog->setNullByDefault(SO__QUOTE(_part_), _newnullbydefault_); \
244
} WHILE_0
245
246
#endif
// !COIN_SOSUBKIT_H
tmp
coin3d-20231204-7424-yacms8
coin-oldercompilers
include
Inventor
nodekits
SoSubKit.h
Generated on Sun Dec 3 2023 22:40:28 for Coin by
doxygen
1.9.8