public static void CreateChildNode() { GameObject go = Selection.activeGameObject; float baseRadius = 1.0f; MetaballSeedBase seed = Utils.FindComponentInParents <MetaballSeedBase>(go.transform); if (seed != null) { baseRadius = seed.baseRadius; } GameObject child = new GameObject("MetaballNode"); child.transform.parent = go.transform; child.transform.localPosition = Vector3.zero; child.transform.localScale = Vector3.one; child.transform.localRotation = Quaternion.identity; MetaballNode newNode = child.AddComponent <MetaballNode>(); newNode.baseRadius = baseRadius; Selection.activeGameObject = child; }
void OnDrawGizmosSelected() { if (_seed == null) { _seed = Utils.FindComponentInParents <MetaballSeedBase>(transform); } if (Density == 0.0f) { return; } // static seed root node is not shown nor used for building mesh if (_seed != null /*&& !_seed.IsTreeShape*/ && _seed.sourceRoot != null && _seed.sourceRoot.gameObject == gameObject) { return; } { Gizmos.color = bSubtract ? Color.red : Color.white; float drawRadius = Radius; if (_seed != null) { drawRadius *= (1.0f - Mathf.Sqrt(_seed.powerThreshold)); } Matrix4x4 oldMtx = Gizmos.matrix; Gizmos.matrix = transform.localToWorldMatrix; Gizmos.DrawWireSphere(Vector3.zero, drawRadius); MetaballNode parentNode = transform.parent.GetComponent <MetaballNode>(); if (parentNode != null && parentNode.Density != 0.0f && _seed != null && _seed.IsTreeShape) { if (_boneMesh == null) { _boneMesh = new Mesh(); Vector3[] verts = new Vector3[5]; Vector3[] normals = new Vector3[5]; int[] indxs = new int[6]; verts[0] = new Vector3(0.1f, 0.0f, 0.0f); verts[1] = new Vector3(-0.1f, 0.0f, 0.0f); verts[2] = new Vector3(0.0f, 0.1f, 0.0f); verts[3] = new Vector3(0.0f, -0.1f, 0.0f); verts[4] = new Vector3(0.0f, 0.0f, 1.0f); normals[0] = new Vector3(0, 0, 1.0f); normals[1] = new Vector3(0, 0, 1.0f); normals[2] = new Vector3(0, 0, 1.0f); normals[3] = new Vector3(0, 0, 1.0f); normals[4] = new Vector3(0, 0, 1.0f); indxs[0] = 0; indxs[1] = 1; indxs[2] = 4; indxs[3] = 2; indxs[4] = 3; indxs[5] = 4; _boneMesh.vertices = verts; _boneMesh.normals = normals; _boneMesh.SetIndices(indxs, MeshTopology.Triangles, 0); } Vector3 scale = Vector3.one; Vector3 pos = transform.position; Vector3 parentPos = transform.parent.position; if ((parentPos - pos).sqrMagnitude < float.Epsilon) { } else { scale *= ((parentPos - pos).magnitude); Matrix4x4 mtx = Matrix4x4.TRS(parentPos, Quaternion.LookRotation(pos - parentPos), scale); Gizmos.color = Color.blue; Gizmos.matrix = mtx; Gizmos.DrawWireMesh(_boneMesh); } } Gizmos.color = Color.white; Gizmos.matrix = oldMtx; } }
private void OnDrawGizmosSelected() { if (Object.op_Equality((Object)this._seed, (Object)null)) { this._seed = Utils.FindComponentInParents <MetaballSeedBase>(((Component)this).get_transform()); } if ((double)this.Density == 0.0 || Object.op_Inequality((Object)this._seed, (Object)null) && Object.op_Inequality((Object)this._seed.sourceRoot, (Object)null) && Object.op_Equality((Object)((Component)this._seed.sourceRoot).get_gameObject(), (Object)((Component)this).get_gameObject())) { return; } Gizmos.set_color(!this.bSubtract ? Color.get_white() : Color.get_red()); float radius = this.Radius; if (Object.op_Inequality((Object)this._seed, (Object)null)) { radius *= 1f - Mathf.Sqrt(this._seed.powerThreshold); } Matrix4x4 matrix = Gizmos.get_matrix(); Gizmos.set_matrix(((Component)this).get_transform().get_localToWorldMatrix()); Gizmos.DrawWireSphere(Vector3.get_zero(), radius); MetaballNode component = (MetaballNode)((Component)((Component)this).get_transform().get_parent()).GetComponent <MetaballNode>(); if (Object.op_Inequality((Object)component, (Object)null) && (double)component.Density != 0.0 && (Object.op_Inequality((Object)this._seed, (Object)null) && this._seed.IsTreeShape)) { if (Object.op_Equality((Object)this._boneMesh, (Object)null)) { this._boneMesh = new Mesh(); Vector3[] vector3Array1 = new Vector3[5]; Vector3[] vector3Array2 = new Vector3[5]; int[] numArray = new int[6]; vector3Array1[0] = new Vector3(0.1f, 0.0f, 0.0f); vector3Array1[1] = new Vector3(-0.1f, 0.0f, 0.0f); vector3Array1[2] = new Vector3(0.0f, 0.1f, 0.0f); vector3Array1[3] = new Vector3(0.0f, -0.1f, 0.0f); vector3Array1[4] = new Vector3(0.0f, 0.0f, 1f); vector3Array2[0] = new Vector3(0.0f, 0.0f, 1f); vector3Array2[1] = new Vector3(0.0f, 0.0f, 1f); vector3Array2[2] = new Vector3(0.0f, 0.0f, 1f); vector3Array2[3] = new Vector3(0.0f, 0.0f, 1f); vector3Array2[4] = new Vector3(0.0f, 0.0f, 1f); numArray[0] = 0; numArray[1] = 1; numArray[2] = 4; numArray[3] = 2; numArray[4] = 3; numArray[5] = 4; this._boneMesh.set_vertices(vector3Array1); this._boneMesh.set_normals(vector3Array2); this._boneMesh.SetIndices(numArray, (MeshTopology)0, 0); } Vector3 one = Vector3.get_one(); Vector3 position1 = ((Component)this).get_transform().get_position(); Vector3 position2 = ((Component)this).get_transform().get_parent().get_position(); Vector3 vector3_1 = Vector3.op_Subtraction(position2, position1); if ((double)((Vector3) ref vector3_1).get_sqrMagnitude() >= 1.40129846432482E-45) { Vector3 vector3_2 = one; Vector3 vector3_3 = Vector3.op_Subtraction(position2, position1); double magnitude = (double)((Vector3) ref vector3_3).get_magnitude(); Vector3 vector3_4 = Vector3.op_Multiply(vector3_2, (float)magnitude); Matrix4x4 matrix4x4 = Matrix4x4.TRS(position2, Quaternion.LookRotation(Vector3.op_Subtraction(position1, position2)), vector3_4); Gizmos.set_color(Color.get_blue()); Gizmos.set_matrix(matrix4x4); Gizmos.DrawWireMesh(this._boneMesh); } } Gizmos.set_color(Color.get_white()); Gizmos.set_matrix(matrix); }