コード例 #1
0
ファイル: LiveScene.cpp プロジェクト: cnpinto/cortex
ConstObjectPtr LiveScene::readAttribute( const Name &name, double time ) const
{
	if ( !m_isRoot && m_dagPath.length() == 0 )
	{
		throw Exception( "IECoreMaya::LiveScene::readAttribute: Dag path no longer exists!" );
	}
	
	tbb::mutex::scoped_lock l( s_mutex );
	if ( !m_isRoot )
	{

		if( name == SceneInterface::visibilityName )
		{
			bool visible = true;

			MStatus st;
			MFnDagNode dagFn( m_dagPath );
			MPlug visibilityPlug = dagFn.findPlug( MPxTransform::visibility, &st );
			if( st )
			{
				visible = visibilityPlug.asBool();
			}

			if( visible )
			{
				MDagPath childDag;

				// find an object that's either a SceneShape, or has a cortex converter and check its visibility:
				unsigned int childCount = 0;
				m_dagPath.numberOfShapesDirectlyBelow(childCount);

				for ( unsigned int c = 0; c < childCount; c++ )
				{
					MDagPath d = m_dagPath;
					if( d.extendToShapeDirectlyBelow( c ) )
					{
						MFnDagNode fnChildDag(d);
						if( fnChildDag.typeId() == SceneShape::id )
						{
							childDag = d;
							break;
						}

						if ( fnChildDag.isIntermediateObject() )
						{
							continue;
						}

						FromMayaShapeConverterPtr shapeConverter = FromMayaShapeConverter::create( d );
						if( shapeConverter )
						{
							childDag = d;
							break;
						}

						FromMayaDagNodeConverterPtr dagConverter = FromMayaDagNodeConverter::create( d );
						if( dagConverter )
						{
							childDag = d;
							break;
						}
					}
				}

				if( childDag.isValid() )
				{
					MFnDagNode dagFn( childDag );
					MPlug visibilityPlug = dagFn.findPlug( MPxSurfaceShape::visibility, &st );
					if( st )
					{
						visible = visibilityPlug.asBool();
					}
				}

			}

			return new BoolData( visible );
		}

	}
	else if( name == SceneInterface::visibilityName )
	{
		return new BoolData( true );
	}

	std::vector< CustomAttributeReader > &attributeReaders = customAttributeReaders();
	for ( std::vector< CustomAttributeReader >::const_reverse_iterator it = attributeReaders.rbegin(); it != attributeReaders.rend(); ++it )
	{
		ConstObjectPtr attr = it->m_read( m_dagPath, name );
		if( !attr )
		{
			continue;
		}
		return attr;
	}

	if( strstr( name.c_str(), "user:"******"ieAttr_" + name.string().substr(5) ).c_str(), false, &st );
		if( st )
		{
			FromMayaConverterPtr plugConverter = FromMayaPlugConverter::create( attrPlug );
			if( !plugConverter )
			{
				return IECore::NullObject::defaultNullObject();
			}
			return plugConverter->convert();
		}
	}

	return IECore::NullObject::defaultNullObject();
}
コード例 #2
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	bool ElementPtr::getElementAsBool(const Name& name) const
	{
		return this->getElementAsBool(name.string());
	}
コード例 #3
0
ファイル: main.cpp プロジェクト: alex-ab/genode
	QString name_from_config()
	{
		Name name = config.xml().attribute_value("name", Name("no name"));

		return QString(name.string());
	}
コード例 #4
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	boost::shared_ptr<ElementPtr> ElementPtr::getElement(const Name& name) const
	{
		return this->getElement(name.string());
	}
コード例 #5
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	bool ElementPtr::hasElement(const Name& name, bool excludeNullElements) const
	{
		return this->hasElement(name.string(), excludeNullElements);
	}
コード例 #6
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	void ElementPtr::setElement(const char* name, const Name& value)
	{
		this->setElement(name, value.string());
	}
コード例 #7
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	void ElementPtr::setElement(const Name& name, int value)
	{
		this->setElement(name.string(), value);
	}
コード例 #8
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	char ElementPtr::getElementAsChar(const Name& name) const
	{
		return this->getElementAsChar(name.string());
	}
コード例 #9
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	Datetime ElementPtr::getElementAsDatetime(const Name& name) const
	{
		return this->getElementAsDatetime(name.string());
	}
コード例 #10
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	double ElementPtr::getElementAsFloat64(const Name& name) const
	{
		return this->getElementAsFloat64(name.string());
	}
コード例 #11
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	float ElementPtr::getElementAsFloat32(const Name& name) const
	{
		return this->getElementAsFloat32(name.string());
	}
コード例 #12
0
ファイル: ElementPtr.cpp プロジェクト: red2901/sandbox
	long ElementPtr::getElementAsInt64(const Name& name) const
	{
		return this->getElementAsInt64(name.string());
	}