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; }
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); } }
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--; } } } }
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); }
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); } }
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; }
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; }