コード例 #1
0
    public void drawPin(HoudiniInstancerOverrideInfo override_info)
    {
        // TODO: This code should be on the companion Editor class, not here!

        float handle_size = HandleUtility.GetHandleSize(override_info.translate);

        Matrix4x4 old_handles_mat = Handles.matrix;
        Matrix4x4 mat             = new Matrix4x4();

        mat.m00 = 1; mat.m11 = 1; mat.m22 = 1; mat.m33 = 1;

        mat.SetColumn(3, new Vector4(override_info.translate.x,
                                     override_info.translate.y,
                                     override_info.translate.z, 1));
        Handles.matrix = mat;

        const float scale_factor_tweak1 = 0.17f;
        const float scale_factor_tweak2 = 0.2f;

        float scale_factor = scale_factor_tweak1 * handle_size;

        if (scale_factor < scale_factor_tweak1)
        {
            scale_factor = scale_factor_tweak1;
        }

        scale_factor *= HoudiniHost.prPinSize;

        Handles.color = new Color(1.0f, 1.0f, 1.0f, 1.0f);


        const float vertical_scale          = 14.0f;
        float       pin_sphere_displacement = 14.0f * scale_factor * scale_factor_tweak2;

        mat            = Handles.matrix;
        mat.m11        = vertical_scale;
        Handles.matrix = mat;

        Vector3 position = new Vector3(0, 0, 0);

        position.y = 0.5f * pin_sphere_displacement / vertical_scale;

        Handles.CylinderCap(override_info.instancePointNumber,
                            position,
                            Quaternion.Euler(new Vector3(90, 0, 0)),
                            scale_factor * scale_factor_tweak2);


        mat.m11        = 1.0f;
        Handles.matrix = mat;

        Handles.color = HoudiniHost.prPinColour;
        position.y    = pin_sphere_displacement;
        Handles.SphereCap(override_info.instancePointNumber,
                          position,
                          Quaternion.Euler(new Vector3(90, 0, 0)),
                          scale_factor * 1.3f);

        Handles.matrix = old_handles_mat;
    }
コード例 #2
0
    public void pinObject(GameObject pin_object, bool pin)
    {
        HoudiniInstance instance = pin_object.GetComponent <HoudiniInstance>();

        if (instance == null)
        {
            //The user might be moving the part instead of the object, so we should
            //try to pin that in this case.
            Transform parent = pin_object.transform.parent;
            while (parent != null)
            {
                instance = parent.gameObject.GetComponent <HoudiniInstance>();
                if (instance != null)
                {
                    break;
                }
                parent = parent.parent;
            }

            if (instance == null)
            {
                return;
            }
        }

        if (!pin)
        {
            unPinInstance(instance.prInstancePointNumber);
        }
        else
        {
            Transform game_object_xform = pin_object.transform;

            HoudiniInstancerOverrideInfo override_info =
                ScriptableObject.CreateInstance <HoudiniInstancerOverrideInfo>();

            override_info.translate = game_object_xform.position;
            override_info.rotate    = game_object_xform.rotation.eulerAngles;

            Vector3 scale = game_object_xform.localScale;

            Transform parent = game_object_xform.parent;
            while (parent != null)
            {
                scale.x *= parent.localScale.x;
                scale.y *= parent.localScale.y;
                scale.z *= parent.localScale.z;
                parent   = parent.parent;
            }

            override_info.scale = scale;
            override_info.objectToInstantiate     = instance.prObjectToInstantiate;
            override_info.objectToInstantiatePath = getGameObjectPath(instance.prObjectToInstantiate);
            override_info.instancePointNumber     = instance.prInstancePointNumber;

            pinInstance(override_info);
        }
    }
コード例 #3
0
    private void instanceOverriddenObjects(int total_points, List <int> exclusion_list)
    {
        int current_max_point_index = total_points - 1;

        HoudiniInstancerPersistentData data = prPersistentData;

        for (int ii = 0; ii < data.overriddenInstances.Count; ii++)
        {
            HoudiniInstancerOverrideInfo override_info = data.overriddenInstances[ii];

            Vector3 pos = override_info.translate;

            Vector3 euler = override_info.rotate;

            Vector3 scale = override_info.scale;

            GameObject object_to_instantiate = override_info.objectToInstantiate;
            if (object_to_instantiate == null)
            {
                object_to_instantiate = GameObject.Find(override_info.objectToInstantiatePath);
                if (object_to_instantiate == null)
                {
                    data.overriddenInstances.RemoveAt(ii);
                    continue;
                }
            }

            instanceObject(object_to_instantiate,
                           pos, euler, override_info.instancePointNumber, true, scale, false, "");

            if (override_info.instancePointNumber < total_points)
            {
                exclusion_list.Add(override_info.instancePointNumber);
            }
            else
            {
                if (current_max_point_index >= 0)
                {
                    exclusion_list.Add(current_max_point_index);
                    current_max_point_index--;
                }
            }
        }
    }
コード例 #4
0
    public bool pinInstance(HoudiniInstancerOverrideInfo info)
    {
        HoudiniInstancerPersistentData persistent_data = prPersistentData;

        Undo.RecordObject(persistent_data, "Houdini Pin Instance");
        int ii = 0;

        for (ii = 0; ii < persistent_data.overriddenInstances.Count; ii++)
        {
            HoudiniInstancerOverrideInfo override_info = persistent_data.overriddenInstances[ii];
            if (override_info.instancePointNumber == info.instancePointNumber)
            {
                persistent_data.overriddenInstances.RemoveAt(ii);
                break;
            }
        }

        persistent_data.overriddenInstances.Add(info);
        return(true);
    }
コード例 #5
0
    public void unPinInstance(int point_index)
    {
        HoudiniInstancerPersistentData persistent_data = prPersistentData;

        Undo.RecordObject(persistent_data, "Houdini Unpin Instance");
        int index_to_remove = -1;

        for (int ii = 0; ii < persistent_data.overriddenInstances.Count; ii++)
        {
            HoudiniInstancerOverrideInfo override_info = persistent_data.overriddenInstances[ii];
            if (override_info.instancePointNumber == point_index)
            {
                index_to_remove = ii;
                break;
            }
        }

        if (index_to_remove >= 0)
        {
            persistent_data.overriddenInstances.RemoveAt(index_to_remove);
        }
    }
コード例 #6
0
ファイル: HoudiniInstancer.cs プロジェクト: marvalgames/evol
	public void drawPin( HoudiniInstancerOverrideInfo override_info )
	{
		// TODO: This code should be on the companion Editor class, not here!

		float handle_size 	= HandleUtility.GetHandleSize( override_info.translate );		
		
		Matrix4x4 old_handles_mat = Handles.matrix;
		Matrix4x4 mat = new Matrix4x4();	
		mat.m00 = 1; mat.m11 = 1; mat.m22 = 1; mat.m33 = 1;
		
		mat.SetColumn( 3, new Vector4( 	override_info.translate.x, 
										override_info.translate.y, 
										override_info.translate.z, 1) );
		Handles.matrix = mat;
		
		const float scale_factor_tweak1 = 0.17f;
		const float scale_factor_tweak2 = 0.2f;
		
		float scale_factor = scale_factor_tweak1*handle_size;
		if(scale_factor < scale_factor_tweak1 )
			scale_factor = scale_factor_tweak1;
		
		scale_factor *= HoudiniHost.prPinSize;
			
		Handles.color = new Color( 1.0f, 1.0f, 1.0f, 1.0f );		
		
		
		const float vertical_scale = 14.0f;
		float pin_sphere_displacement = 14.0f*scale_factor*scale_factor_tweak2;
		
		mat = Handles.matrix;
		mat.m11 = vertical_scale;
		Handles.matrix = mat;
		
		Vector3 position = new Vector3( 0, 0, 0 );
		position.y = 0.5f*pin_sphere_displacement/vertical_scale;
		
		Handles.CylinderCap( override_info.instancePointNumber,
							 position,
							 Quaternion.Euler( new Vector3( 90, 0, 0)),
							 scale_factor*scale_factor_tweak2 );
		
		
		mat.m11 = 1.0f;
		Handles.matrix = mat;
		
		Handles.color = HoudiniHost.prPinColour;	
		position.y = pin_sphere_displacement;
		Handles.SphereCap  ( override_info.instancePointNumber,
							 position,
							 Quaternion.Euler( new Vector3( 90, 0, 0)),
							 scale_factor*1.3f );
		
		Handles.matrix = old_handles_mat;
	}
コード例 #7
0
ファイル: HoudiniInstancer.cs プロジェクト: marvalgames/evol
	public bool pinInstance( HoudiniInstancerOverrideInfo info )
	{
		HoudiniInstancerPersistentData persistent_data = prPersistentData;
		Undo.RecordObject( persistent_data, "Houdini Pin Instance" );
		int ii = 0;
		for( ii = 0; ii < persistent_data.overriddenInstances.Count; ii++ )
		{
			HoudiniInstancerOverrideInfo override_info = persistent_data.overriddenInstances[ ii ];
			if( override_info.instancePointNumber == info.instancePointNumber )
			{
				persistent_data.overriddenInstances.RemoveAt( ii );
				break;
			}
		}
		
		persistent_data.overriddenInstances.Add( info );
		return true;
	}