Esempio n. 1
0
	public static void getAssetTransform(
		HAPI_AssetId asset_id, HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order,
		out HAPI_TransformEuler transform )
	{
#if ( UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || ( UNITY_METRO && UNITY_EDITOR ) )
		HAPI_Result status_code = HAPI_GetAssetTransform( ref mySession, asset_id, rst_order, rot_order, out transform );
		processStatusCode( status_code );
#else
		throw new HoudiniErrorUnsupportedPlatform();
#endif
	}
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Public
    public void handlesOnSceneGUI()
    {
        if (myAssetOTL.prShowPinnedInstances)
        {
            drawPinnedInstances();
        }

        // On mouse up the drag operation is completed.
        if (Event.current.type == EventType.MouseUp)
        {
            myOpInProgress = false;
        }

        string currentGlobalManipTool = Tools.current.ToString();

        if (currentGlobalManipTool == "Rotate")
        {
            myManipMode = XformManipMode.Rotate;
        }

        else if (currentGlobalManipTool == "Move")
        {
            myManipMode = XformManipMode.Translate;
        }

        else if (currentGlobalManipTool == "Scale")
        {
            myManipMode = XformManipMode.Scale;
        }

        if (myAssetOTL == null)
        {
            return;
        }

        int node_id = myAssetOTL.prNodeId;

        HAPI_HandleInfo[] handleInfos = myAssetOTL.prHandleInfos;

        if (handleInfos == null)
        {
            return;
        }

        // Detect changes and build asset only when changed.
        bool changed = false;

        for (int ii = 0; ii < handleInfos.Length; ++ii)
        {
            HAPI_HandleInfo handleInfo = handleInfos[ii];
            if (handleInfo.typeName == "xform")
            {
                float         tx = 0, ty = 0, tz = 0;
                float         rx = 0, ry = 0, rz = 0;
                float         sx = 1, sy = 1, sz = 1;
                HAPI_RSTOrder rstOrder = HAPI_RSTOrder.HAPI_SRT;
                HAPI_XYZOrder xyzOrder = HAPI_XYZOrder.HAPI_XYZ;

                HAPI_HandleBindingInfo[] bindingInfos = myAssetOTL.prHandleBindingInfos[ii];

                int[]   parm_int_values   = myAssetOTL.prParms.prParmIntValues;
                float[] parm_float_values = myAssetOTL.prParms.prParmFloatValues;

                if (parm_int_values == null || parm_float_values == null)
                {
                    Debug.LogError("No parm int/float values yet handles exist?");
                    continue;
                }

                int translate_parm_id = -1;
                int rotate_parm_id    = -1;
                int scale_parm_id     = -1;
                int rst_order_parm_id = -1;
                int xyz_order_parm_id = -1;

                foreach (HAPI_HandleBindingInfo bindingInfo in bindingInfos)
                {
                    string parm_name = bindingInfo.handleParmName;
                    if (parm_name == "tx")
                    {
                        translate_parm_id = bindingInfo.assetParmId;
                    }

                    else if (parm_name == "rx")
                    {
                        rotate_parm_id = bindingInfo.assetParmId;
                    }

                    else if (parm_name == "sx")
                    {
                        scale_parm_id = bindingInfo.assetParmId;
                    }

                    else if (parm_name == "trs_order")
                    {
                        rst_order_parm_id = bindingInfo.assetParmId;
                    }

                    else if (parm_name == "xyz_order")
                    {
                        xyz_order_parm_id = bindingInfo.assetParmId;
                    }
                }

                if (translate_parm_id >= 0)
                {
                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(translate_parm_id);

                    tx = parm_float_values[parm_info.floatValuesIndex + 0];
                    ty = parm_float_values[parm_info.floatValuesIndex + 1];
                    tz = parm_float_values[parm_info.floatValuesIndex + 2];
                }

                if (rotate_parm_id >= 0)
                {
                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(rotate_parm_id);

                    rx = parm_float_values[parm_info.floatValuesIndex + 0];
                    ry = parm_float_values[parm_info.floatValuesIndex + 1];
                    rz = parm_float_values[parm_info.floatValuesIndex + 2];
                }

                if (scale_parm_id >= 0)
                {
                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(scale_parm_id);

                    sx = parm_float_values[parm_info.floatValuesIndex + 0];
                    sy = parm_float_values[parm_info.floatValuesIndex + 1];
                    sz = parm_float_values[parm_info.floatValuesIndex + 2];
                }

                if (rst_order_parm_id >= 0)
                {
                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(rst_order_parm_id);
                    rstOrder = (HAPI_RSTOrder)parm_int_values[parm_info.intValuesIndex];
                }

                if (xyz_order_parm_id >= 0)
                {
                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(xyz_order_parm_id);
                    xyzOrder = (HAPI_XYZOrder)parm_int_values[parm_info.intValuesIndex];
                }

                HAPI_TransformEuler xform = new HAPI_TransformEuler(true);

                // This bit is a little tricky.  We will eventually call Handle.PositionHandle
                // or Handle.RotationHandle to display the translation and rotation handles.
                // These function take a translation parameter and a rotation parameter in
                // order to display the handle in its proper location and orientation.
                // These functions have an assumed order that it will put the rotation
                // and translation back together.  Depending whether the order of translation
                // and roation matches that of the rstOrder setting, we may, or may not
                // need to convert the translation parameter for use with the handle.
                if (rstOrder == HAPI_RSTOrder.HAPI_TSR || rstOrder == HAPI_RSTOrder.HAPI_STR || rstOrder == HAPI_RSTOrder.HAPI_SRT)
                {
                    xform.position[0]      = tx;
                    xform.position[1]      = ty;
                    xform.position[2]      = tz;
                    xform.rotationEuler[0] = rx;
                    xform.rotationEuler[1] = ry;
                    xform.rotationEuler[2] = rz;
                    xform.scale[0]         = 1;
                    xform.scale[1]         = 1;
                    xform.scale[2]         = 1;
                    xform.rotationOrder    = xyzOrder;
                    xform.rstOrder         = rstOrder;
                }
                else
                {
                    xform.position[0]      = 0;
                    xform.position[1]      = 0;
                    xform.position[2]      = 0;
                    xform.rotationEuler[0] = rx;
                    xform.rotationEuler[1] = ry;
                    xform.rotationEuler[2] = rz;
                    xform.scale[0]         = 1;
                    xform.scale[1]         = 1;
                    xform.scale[2]         = 1;
                    xform.rotationOrder    = xyzOrder;
                    xform.rstOrder         = rstOrder;
                }

                xform = HoudiniHost.convertTransform(xform, HAPI_RSTOrder.HAPI_SRT, HAPI_XYZOrder.HAPI_ZXY);

                // Axis and Rotation conversions:
                // Note that Houdini's X axis points in the opposite direction that Unity's does.  Also, Houdini's
                // rotation is right handed, whereas Unity is left handed.  To account for this, we need to invert
                // the x coordinate of the translation, and do the same for the rotations (except for the x rotation,
                // which doesn't need to be flipped because the change in handedness AND direction of the left x axis
                // causes a double negative - yeah, I know).

                xform.position[0]      = -xform.position[0];
                xform.rotationEuler[1] = -xform.rotationEuler[1];
                xform.rotationEuler[2] = -xform.rotationEuler[2];
                tx = -tx;

                Handles.matrix = myAssetOTL.transform.localToWorldMatrix;

                Vector3 position;

                if (rstOrder == HAPI_RSTOrder.HAPI_TSR || rstOrder == HAPI_RSTOrder.HAPI_STR || rstOrder == HAPI_RSTOrder.HAPI_SRT)
                {
                    position = new Vector3(xform.position[0], xform.position[1], xform.position[2]);
                }
                else
                {
                    position = new Vector3(tx, ty, tz);
                }

                Quaternion rotation = Quaternion.Euler(
                    xform.rotationEuler[0], xform.rotationEuler[1], xform.rotationEuler[2]);
                Vector3 scale = new Vector3(sx, sy, sz);

                if (myManipMode == XformManipMode.Translate)
                {
                    if (translate_parm_id < 0)
                    {
                        continue;
                    }

                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(translate_parm_id);

                    if (parm_info.invisible)
                    {
                        continue;
                    }

                    GUIStyle style = new GUIStyle(EditorStyles.textField);
                    style.contentOffset = new Vector2(1.4f, 1.4f);
                    string handle_name = handleInfo.name;
                    if (parm_info.disabled)
                    {
                        handle_name = handle_name + " (disabled)";
                    }
                    GUIContent content = new GUIContent(handle_name);
                    content.tooltip = handle_name;
                    Handles.Label(position, content, style);

                    if (parm_info.disabled)
                    {
                        Handles.lighting = false;
                        Handles.PositionHandle(position, rotation);
                        Handles.lighting = true;
                        continue;
                    }

                    Vector3 new_position = Handles.PositionHandle(position, rotation);

                    if (new_position != position)
                    {
                        changed = true;

                        if (!myOpInProgress)
                        {
                            Undo.RecordObject(myAssetOTL.prParms.prParmsUndoInfo, handleInfo.name);
                            myOpInProgress = true;
                        }

                        if (rstOrder == HAPI_RSTOrder.HAPI_TSR ||
                            rstOrder == HAPI_RSTOrder.HAPI_STR ||
                            rstOrder == HAPI_RSTOrder.HAPI_SRT)
                        {
                            xform.position[0] = new_position[0];
                            xform.position[1] = new_position[1];
                            xform.position[2] = new_position[2];

                            xform          = HoudiniHost.convertTransform(xform, rstOrder, xyzOrder);
                            new_position.x = xform.position[0];
                            new_position.y = xform.position[1];
                            new_position.z = xform.position[2];
                        }

                        // the - in the x coordinate is to convert back to "Houdini" coordinates
                        parm_float_values[parm_info.floatValuesIndex + 0] = -new_position.x;
                        parm_float_values[parm_info.floatValuesIndex + 1] = new_position.y;
                        parm_float_values[parm_info.floatValuesIndex + 2] = new_position.z;

                        float[] temp_float_values = new float[HoudiniConstants.HAPI_POSITION_VECTOR_SIZE];
                        for (int pp = 0; pp < HoudiniConstants.HAPI_POSITION_VECTOR_SIZE; ++pp)
                        {
                            temp_float_values[pp] = parm_float_values[parm_info.floatValuesIndex + pp];
                        }
                        HoudiniHost.setParmFloatValues(node_id, temp_float_values, parm_info.floatValuesIndex,
                                                       parm_info.size);

                        myAsset.savePreset();
                    }                     // if changed
                }
                else if (myManipMode == XformManipMode.Rotate)
                {
                    if (rotate_parm_id < 0)
                    {
                        continue;
                    }

                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(rotate_parm_id);

                    if (parm_info.invisible)
                    {
                        continue;
                    }

                    GUIStyle style = new GUIStyle(EditorStyles.textField);
                    style.contentOffset = new Vector2(1.4f, 1.4f);
                    string handle_name = handleInfo.name;
                    if (parm_info.disabled)
                    {
                        handle_name = handle_name + " (disabled)";
                    }
                    GUIContent content = new GUIContent(handle_name);
                    content.tooltip = handle_name;
                    Handles.Label(position, content, style);

                    if (parm_info.disabled)
                    {
                        Handles.lighting = false;
                        Handles.RotationHandle(rotation, position);
                        Handles.lighting = true;
                        continue;
                    }

                    Quaternion new_rotation = Handles.RotationHandle(rotation, position);

                    if (new_rotation != rotation)
                    {
                        changed = true;

                        if (!myOpInProgress)
                        {
                            Undo.RecordObject(myAssetOTL.prParms.prParmsUndoInfo, handleInfo.name);
                            myOpInProgress = true;
                        }

                        Vector3 newRot = new_rotation.eulerAngles;

                        xform.position[0]      = 0;
                        xform.position[1]      = 0;
                        xform.position[2]      = 0;
                        xform.rotationEuler[0] = newRot.x;
                        xform.rotationEuler[1] = newRot.y;
                        xform.rotationEuler[2] = newRot.z;
                        xform.scale[0]         = 1;
                        xform.scale[1]         = 1;
                        xform.scale[2]         = 1;
                        xform.rotationOrder    = HAPI_XYZOrder.HAPI_ZXY;
                        xform.rstOrder         = HAPI_RSTOrder.HAPI_SRT;

                        xform = HoudiniHost.convertTransform(xform, rstOrder, xyzOrder);

                        parm_float_values[parm_info.floatValuesIndex + 0] = xform.rotationEuler[0];
                        // the - in the y & z coordinate is to convert back to "Houdini" coordinates
                        parm_float_values[parm_info.floatValuesIndex + 1] = -xform.rotationEuler[1];
                        parm_float_values[parm_info.floatValuesIndex + 2] = -xform.rotationEuler[2];

                        float[] temp_float_values = new float[HoudiniConstants.HAPI_POSITION_VECTOR_SIZE];
                        for (int pp = 0; pp < HoudiniConstants.HAPI_POSITION_VECTOR_SIZE; ++pp)
                        {
                            temp_float_values[pp] = parm_float_values[parm_info.floatValuesIndex + pp];
                        }
                        HoudiniHost.setParmFloatValues(
                            node_id, temp_float_values, parm_info.floatValuesIndex, parm_info.size);

                        myAsset.savePreset();
                    }                     // if changed
                }
                else if (myManipMode == XformManipMode.Scale)
                {
                    if (scale_parm_id < 0)
                    {
                        continue;
                    }

                    HAPI_ParmInfo parm_info = myAssetOTL.prParms.findParm(scale_parm_id);

                    if (parm_info.invisible)
                    {
                        continue;
                    }

                    GUIStyle style = new GUIStyle(EditorStyles.textField);
                    style.contentOffset = new Vector2(1.4f, 1.4f);
                    string handle_name = handleInfo.name;
                    if (parm_info.disabled)
                    {
                        handle_name = handle_name + " (disabled)";
                    }
                    GUIContent content = new GUIContent(handle_name);
                    content.tooltip = handle_name;
                    Handles.Label(position, content, style);

                    if (parm_info.disabled)
                    {
                        Handles.lighting = false;
                        Handles.ScaleHandle(scale, position, rotation, 1.0f);
                        Handles.lighting = true;
                        continue;
                    }

                    Vector3 new_scale = Handles.ScaleHandle(scale, position, rotation, 1.0f);

                    if (new_scale != scale)
                    {
                        changed = true;

                        if (!myOpInProgress)
                        {
                            Undo.RecordObject(myAssetOTL.prParms.prParmsUndoInfo, handleInfo.name);
                            myOpInProgress = true;
                        }

                        parm_float_values[parm_info.floatValuesIndex + 0] = new_scale.x;
                        parm_float_values[parm_info.floatValuesIndex + 1] = new_scale.y;
                        parm_float_values[parm_info.floatValuesIndex + 2] = new_scale.z;

                        float[] temp_float_values = new float[HoudiniConstants.HAPI_POSITION_VECTOR_SIZE];
                        for (int pp = 0; pp < HoudiniConstants.HAPI_POSITION_VECTOR_SIZE; ++pp)
                        {
                            temp_float_values[pp] = parm_float_values[parm_info.floatValuesIndex + pp];
                        }
                        HoudiniHost.setParmFloatValues(
                            node_id, temp_float_values, parm_info.floatValuesIndex,
                            parm_info.size);

                        myAsset.savePreset();
                    } // if changed
                }     // if myManipMode
            }         // if typeName
        }             // for each handle

        if (changed)
        {
            myAssetOTL.buildClientSide();
        }
    }
Esempio n. 3
0
	// UTILITY --------------------------------------------------------------------------------------------------

	public static HAPI_TransformEuler convertTransform(
		HAPI_TransformEuler transform,
		HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order )
	{
#if ( UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || ( UNITY_METRO && UNITY_EDITOR ) )
		HAPI_TransformEuler transform_out = new HAPI_TransformEuler();
		HAPI_Result status_code = HAPI_ConvertTransform(
			ref mySession, ref transform, rst_order, rot_order, out transform_out );
		processStatusCode( status_code );
		return transform_out;
#else
		throw new HoudiniErrorUnsupportedPlatform();
#endif
	}
Esempio n. 4
0
	public static HAPI_TransformEuler convertMatrixToEuler(
		Matrix4x4 matrix, HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order )
	{
#if ( UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX || ( UNITY_METRO && UNITY_EDITOR ) )
		HAPI_TransformEuler transform = new HAPI_TransformEuler();
		float[] raw_matrix = new float[ 16 ];

		for ( int i = 0; i < 16; ++i )
			raw_matrix[ i ] = matrix[ i ];

		HAPI_Result status_code = HAPI_ConvertMatrixToEuler(
			ref mySession, raw_matrix, rst_order, rot_order, ref transform );
		processStatusCode( status_code );

		return transform;
#else
		throw new HoudiniErrorUnsupportedPlatform();
#endif
	}
Esempio n. 5
0
	HAPI_ConvertMatrixToEuler(
		ref HAPI_Session session,
		float[] matrix,
		HAPI_RSTOrder rst_order,
		HAPI_XYZOrder rot_order,
		ref HAPI_TransformEuler transform_out );
Esempio n. 6
0
	HAPI_GetAssetTransform(
		ref HAPI_Session session,
		HAPI_AssetId asset_id,
		HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order,
		out HAPI_TransformEuler transform );
Esempio n. 7
0
 HAPI_ConvertTransform(
     ref HAPI_TransformEuler transform_in_out,
     HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order);
Esempio n. 8
0
    private static extern HAPI_Result HAPI_ConvertTransform(
		ref HAPI_Session session,
		ref HAPI_TransformEuler transform_in,
		HAPI_RSTOrder rst_order,
		HAPI_XYZOrder rot_order,
		out HAPI_TransformEuler transform_out );
Esempio n. 9
0
 HAPI_ConvertMatrixToEuler(
     float[] mat,
     HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order,
     ref HAPI_TransformEuler transform_out);
Esempio n. 10
0
 HAPI_GetAssetTransform(
     HAPI_AssetId asset_id,
     HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order,
     out HAPI_TransformEuler transform);
 HAPI_ConvertMatrixToEuler(
     ref HAPI_Session session,
     float[] matrix,
     HAPI_RSTOrder rst_order,
     HAPI_XYZOrder rot_order,
     ref HAPI_TransformEuler transform_out);
 HAPI_ConvertTransform(
     ref HAPI_Session session,
     ref HAPI_TransformEuler transform_in,
     HAPI_RSTOrder rst_order,
     HAPI_XYZOrder rot_order,
     out HAPI_TransformEuler transform_out);
Esempio n. 13
0
    private static extern HAPI_Result HAPI_GetAssetTransform(
		ref HAPI_Session session,
		HAPI_AssetId asset_id,
		HAPI_RSTOrder rst_order, HAPI_XYZOrder rot_order,
		out HAPI_TransformEuler transform );
		public virtual bool ConvertTransform(ref HAPI_TransformEuler inTransform, HAPI_RSTOrder RSTOrder, HAPI_XYZOrder ROTOrder, out HAPI_TransformEuler outTransform)
		{
			outTransform = new HAPI_TransformEuler();
			return false;
		}
Esempio n. 15
0
	HAPI_ConvertTransform(
		ref HAPI_Session session,
		ref HAPI_TransformEuler transform_in,
		HAPI_RSTOrder rst_order,
		HAPI_XYZOrder rot_order,
		out HAPI_TransformEuler transform_out );
Esempio n. 16
0
		//  LOGIC -----------------------------------------------------------------------------------------------------

		public bool SetupHandle(HEU_SessionBase session, HAPI_NodeId assetID, int handleIndex, string handleName, 
			HEU_HandleType handleType, ref HAPI_HandleInfo handleInfo, HEU_Parameters parameters)
		{
			_handleIndex = handleIndex;
			_handleName = handleName;
			_handleType = handleType;

			HAPI_HandleBindingInfo[] handleBindingInfos = new HAPI_HandleBindingInfo[handleInfo.bindingsCount];
			if (!session.GetHandleBindingInfo(assetID, _handleIndex, handleBindingInfos, 0, handleInfo.bindingsCount))
			{
				return false;
			}

			HAPI_ParmId translateParmID = -1;
			HAPI_ParmId rotateParmID = -1;
			HAPI_ParmId scaleParmID = -1;
			HAPI_ParmId rstOrderParmID = -1;
			HAPI_ParmId xyzOrderParmID = -1;

			_rstOrder = HAPI_RSTOrder.HAPI_SRT;
			_xyzOrder = HAPI_XYZOrder.HAPI_XYZ;

			_handleParamTranslateBinding = null;
			_handleParamRotateBinding = null;
			_handleParamScaleBinding = null;

			for (int i = 0; i < handleBindingInfos.Length; ++i)
			{
				string parmName = HEU_SessionManager.GetString(handleBindingInfos[i].handleParmNameSH, session);

				//string assetParmName = HEU_SessionManager.GetString(handleBindingInfos[i].assetParmNameSH, session);
				//Debug.LogFormat("Handle {0} has parm {1} with asset parm {2} with asset parm id {3}", handleName, parmName, assetParmName, handleBindingInfos[i].assetParmId);

				if (parmName.Equals("tx") || parmName.Equals("ty") || parmName.Equals("tz"))
				{
					translateParmID = handleBindingInfos[i].assetParmId;

					if(_handleParamTranslateBinding == null)
					{
						HEU_ParameterData parmData = parameters.GetParameterWithParmID(translateParmID);
						if (parmData != null && !parmData._parmInfo.invisible)
						{
							_handleParamTranslateBinding = new HEU_HandleParamBinding();
							_handleParamTranslateBinding._paramType = HEU_HandleParamBinding.HEU_HandleParamType.TRANSLATE;
							_handleParamTranslateBinding._parmID = parmData.ParmID;
							_handleParamTranslateBinding._paramName = parmData._name;
							_handleParamTranslateBinding._bDisabled = parmData._parmInfo.disabled;
						}
					}

					if(_handleParamTranslateBinding != null)
					{
						if(parmName.Equals("tx"))
						{
							_handleParamTranslateBinding._boundChannels[0] = true;
						}
						else if (parmName.Equals("ty"))
						{
							_handleParamTranslateBinding._boundChannels[1] = true;
						}
						else if (parmName.Equals("tz"))
						{
							_handleParamTranslateBinding._boundChannels[2] = true;
						}
					}
				}

				if (parmName.Equals("rx") || parmName.Equals("ry") || parmName.Equals("rz"))
				{
					rotateParmID = handleBindingInfos[i].assetParmId;

					if(_handleParamRotateBinding == null)
					{
						HEU_ParameterData parmData = parameters.GetParameterWithParmID(rotateParmID);
						if (parmData != null && !parmData._parmInfo.invisible)
						{
							_handleParamRotateBinding = new HEU_HandleParamBinding();
							_handleParamRotateBinding._paramType = HEU_HandleParamBinding.HEU_HandleParamType.ROTATE;
							_handleParamRotateBinding._parmID = parmData.ParmID;
							_handleParamRotateBinding._paramName = parmData._name;
							_handleParamRotateBinding._bDisabled = parmData._parmInfo.disabled;
						}
					}

					if (_handleParamRotateBinding != null)
					{
						if (parmName.Equals("rx"))
						{
							_handleParamRotateBinding._boundChannels[0] = true;
						}
						else if (parmName.Equals("ry"))
						{
							_handleParamRotateBinding._boundChannels[1] = true;
						}
						else if (parmName.Equals("rz"))
						{
							_handleParamRotateBinding._boundChannels[2] = true;
						}
					}
				}

				if (parmName.Equals("sx") || parmName.Equals("sy") || parmName.Equals("sz"))
				{
					scaleParmID = handleBindingInfos[i].assetParmId;

					if (_handleParamScaleBinding == null)
					{
						HEU_ParameterData parmData = parameters.GetParameterWithParmID(scaleParmID);
						if (parmData != null && !parmData._parmInfo.invisible)
						{
							_handleParamScaleBinding = new HEU_HandleParamBinding();
							_handleParamScaleBinding._paramType = HEU_HandleParamBinding.HEU_HandleParamType.SCALE;
							_handleParamScaleBinding._parmID = parmData.ParmID;
							_handleParamScaleBinding._paramName = parmData._name;
							_handleParamScaleBinding._bDisabled = parmData._parmInfo.disabled;
						}
					}

					if (_handleParamScaleBinding != null)
					{
						if (parmName.Equals("sx"))
						{
							_handleParamScaleBinding._boundChannels[0] = true;
						}
						else if (parmName.Equals("sy"))
						{
							_handleParamScaleBinding._boundChannels[1] = true;
						}
						else if (parmName.Equals("sz"))
						{
							_handleParamScaleBinding._boundChannels[2] = true;
						}
					}
				}

				if(parmName.Equals("trs_order"))
				{
					rstOrderParmID = handleBindingInfos[i].assetParmId;
				}

				if (parmName.Equals("xyz_order"))
				{
					xyzOrderParmID = handleBindingInfos[i].assetParmId;
				}
			}

			if (rstOrderParmID >= 0)
			{
				HEU_ParameterData parmData = parameters.GetParameter(rstOrderParmID);
				if (parmData != null)
				{
					_rstOrder = (HAPI_RSTOrder)parmData._intValues[0];
				}
			}

			if (xyzOrderParmID >= 0)
			{
				HEU_ParameterData parmData = parameters.GetParameter(xyzOrderParmID);
				if (parmData != null)
				{
					_xyzOrder = (HAPI_XYZOrder)parmData._intValues[0];
				}
			}

			GenerateTransform(session, parameters);

			return true;
		}
Esempio n. 17
0
    private static extern HAPI_Result HAPI_ConvertMatrixToEuler(
		ref HAPI_Session session,
		float[] matrix,
		HAPI_RSTOrder rst_order,
		HAPI_XYZOrder rot_order,
		ref HAPI_TransformEuler transform_out );