本文整理汇总了C++中SoType::canCreateInstance方法的典型用法代码示例。如果您正苦于以下问题:C++ SoType::canCreateInstance方法的具体用法?C++ SoType::canCreateInstance怎么用?C++ SoType::canCreateInstance使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SoType
的用法示例。
在下文中一共展示了SoType::canCreateInstance方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void
SoUnknownNode::createFromIsA(SoMFString *isA)
//
////////////////////////////////////////////////////////////////////////
{
for (int i = 0; i < isA->getNum(); i++) {
SoType t = SoType::fromName((*isA)[i]);
if (t.canCreateInstance() &&
t.isDerivedFrom(SoNode::getClassTypeId())) {
SoNode *alternateRep = (SoNode *)t.createInstance();
alternateRep->ref();
#ifdef DEBUG
if (alternateRep == NULL) {
SoDebugError::post("SoUnknownNode::createFromIsA",
"SoType.createInstance returned "
"NULL (type %s)",
t.getName().getString());
return;
}
#endif
// Copy over all fields that are shared:
int num = instanceFieldData->getNumFields();
for (int j=0; j<num; j++) {
const SbName &fieldName = instanceFieldData->getFieldName(j);
SoField *f = instanceFieldData->getField(this, j);
// Don't copy over fields with default values:
if (f->isDefault()) continue;
SoField *nf = alternateRep->getField(fieldName);
if (nf != NULL && nf->getTypeId() == f->getTypeId()) {
nf->copyFrom(*f);
if (f->isConnectedFromField()) {
SoField *cf;
f->getConnectedField(cf);
nf->connectFrom(cf);
} else if (f->isConnectedFromEngine()) {
SoEngineOutput *eo;
f->getConnectedEngine(eo);
nf->connectFrom(eo);
}
}
}
// And if alternateRep is a group, copy over hidden
// children:
if (alternateRep->isOfType(SoGroup::getClassTypeId())) {
SoGroup *g = (SoGroup *)alternateRep;
for (int kid = 0; kid < hiddenChildren.getLength();
kid++) {
g->addChild(hiddenChildren[kid]);
}
}
addChild(alternateRep);
return;
}
}
}
示例2: getSoRenderManager
void SIM::Coin3D::Quarter::SoQTQuarterAdaptor::saveHomePosition(void)
{
SoType t = getSoRenderManager()->getCamera()->getTypeId();
assert(t.isDerivedFrom(SoNode::getClassTypeId()));
assert(t.canCreateInstance());
if(m_storedcamera) {
m_storedcamera->unref();
}
m_storedcamera = (SoNode*)t.createInstance();
m_storedcamera->ref();
m_storedcamera->copyFieldValues(getSoRenderManager()->getCamera());
}
示例3: assert
/*!
Registers a concrete SoForeignFileKit subtype to be a handler for files with the given extension.
One class can be a handler for multiple filename extensions.
FIXME: \e identify is not implemented
*/
SbBool
SoForeignFileKit::registerFileExtension(SoType handler, SbName extension, SoForeignFileIdentifyFunc * COIN_UNUSED_ARG(identify))
{
assert(SoForeignFileKitP::fileexts != NULL);
assert(handler.canCreateInstance());
if (extension.getString()[0] == '.') {
#if COIN_DEBUG
SoDebugError::post("SoForeignFileKit::registerFileExtension",
"Do not include the extension separator '.' "
"when registering file extension.");
#endif // COIN_DEBUG
}
if (SoForeignFileKitP::fileexts->put(extension.getString(), handler)) {
return TRUE;
}
return FALSE;
}
示例4: s
/*!
Try creating a node of name \a name with Inventor version \a ivversion.
Returns NULL if no such node exists.
*/
SoBase *
SoUpgrader::tryCreateNode(const SbName & name, const float ivversion)
{
if ((ivversion == 1.0f) || (ivversion == 2.0f)) {
soupgrader_init_classes();
SbString s(name.getString());
s += (ivversion == 1.0f) ? "V10" : "V20";
if (soupgrader_exists(s.getString())) {
SoType type = SoType::fromName(SbName(s.getString()));
if (type.canCreateInstance()) {
SoBase * b = (SoBase*) type.createInstance();
if (SoInputP::debug()) {
SoDebugError::postInfo("SoUpgrader::tryCreateNode",
"name=='%s', ivversion==%f => SoBase==%p",
name.getString(), ivversion, b);
}
return b;
}
}
}
return NULL;
}