コード例 #1
0
ファイル: tools.cpp プロジェクト: dictoon/appleseed-maya
int physicalIndex(const MPlug& p)
{
    MPlug parent = p;
    while (parent.isChild())
        parent = parent.parent();

    if (!parent.isElement())
        return -1;

    if (!parent.array())
        return - 1;

    MPlug arrayPlug = parent.array();

    for (uint i = 0; i < arrayPlug.numElements(); i++)
    {
        if (arrayPlug[i].logicalIndex() == parent.logicalIndex())
            return i;
    }

    return -1;
}
コード例 #2
0
ファイル: shadingNode.cpp プロジェクト: haggi/OpenMaya
bool ShadingNode::isOutPlugValid(MPlug plug)
{
	MPlug tmpPlug = plug;
	
	if (!tmpPlug.isSource())
		return false;

	while (tmpPlug.isChild())
		tmpPlug = tmpPlug.parent();

	// if we have an array, check the main plug
	if (tmpPlug.isElement())
		tmpPlug = tmpPlug.array();

	MString plugName = getAttributeNameFromPlug(tmpPlug);

	for (size_t attrId = 0; attrId < this->outputAttributes.size(); attrId++)
	{
		if (plugName == outputAttributes[attrId].name.c_str())
			return true;
	}
	return false;
}
コード例 #3
0
bool ShadingNode::isInPlugValid(const MPlug& plug) const
{
    MPlug tmpPlug = plug;

    if (!tmpPlug.isDestination())
        return false;

    while (tmpPlug.isChild())
        tmpPlug = tmpPlug.parent();

    // if we have an array, check the main plug
    if (tmpPlug.isElement())
        tmpPlug = tmpPlug.array();

    const MString& plugName = getAttributeNameFromPlug(tmpPlug);

    for (size_t inattrId = 0; inattrId < inputAttributes.size(); inattrId++)
    {
        if (plugName == inputAttributes[inattrId].name.c_str())
            return true;
    }
    return false;
}
コード例 #4
0
ファイル: attrTools.cpp プロジェクト: Zaken7/OpenMaya
ATTR_TYPE getPlugAttrType(MPlug plug)
{
	MStatus stat = MS::kSuccess;

	MPlug p = plug;
	while (p.isChild())
		p = p.parent();
	plug = p;
	MObject attObj = plug.attribute(&stat);
	MFnAttribute att(attObj);

	if (!stat)
		return ATTR_TYPE::ATTR_TYPE_NONE;
	MString attName = att.name();

	// all 3 child attributes are vectors for osl
	if (p.numChildren() == 3)
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "input1")
	{
		if (plug.node().hasFn(MFn::kMultiplyDivide))
			return ATTR_TYPE::ATTR_TYPE_VECTOR;
	}
	if (attName == "input2")
	{
		if (plug.node().hasFn(MFn::kMultiplyDivide))
			return ATTR_TYPE::ATTR_TYPE_VECTOR;
	}

	if (attName == "output")
	{
		if (plug.node().hasFn(MFn::kMultiplyDivide))
			return ATTR_TYPE::ATTR_TYPE_VECTOR;
	}

	if (attName == "outValue")
	{
		if (plug.node().hasFn(MFn::kGammaCorrect))
			return ATTR_TYPE::ATTR_TYPE_COLOR;
	}
	if (attName == "outDPdu")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "outDPdv")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "outColor")
		return ATTR_TYPE::ATTR_TYPE_COLOR;

	if (attName == "uvCoord")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "outUV")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "color")
		return ATTR_TYPE::ATTR_TYPE_COLOR;

	if (attName == "normalCamera")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "pointWorld")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (attName == "rayDirection")
		return ATTR_TYPE::ATTR_TYPE_VECTOR;

	if (att.isUsedAsColor())
		return ATTR_TYPE::ATTR_TYPE_COLOR;
	if (attObj.apiType() == MFn::kNumericAttribute)
	{
		MFnNumericAttribute na(attObj, &stat);
		if (!stat)
			return ATTR_TYPE::ATTR_TYPE_NONE;
		if (na.unitType() == MFnNumericData::Type::kFloat)
			return ATTR_TYPE::ATTR_TYPE_FLOAT;
	}
	if (attObj.apiType() == MFn::kAttribute3Float)
	{
		return ATTR_TYPE::ATTR_TYPE_VECTOR;
	}
	return ATTR_TYPE::ATTR_TYPE_NONE;
}