Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        m_MidPoint = (m_V1.position + m_V2.position + m_V3.position) / 3f;

        Vector3 side1 = m_V2.position - m_V1.position;
        Vector3 side2 = m_V3.position - m_V1.position;

        m_Normal = Vector3.Cross(side1, side2).normalized;

        //m_CrossV1Left = Vector3.Cross(    m_Normal,   m_V2.position - m_V1.position ).normalized;
        //m_CrossV1Right = Vector3.Cross( m_V3.position - m_V1.position, m_Normal).normalized;


        for (int i = 0; i < 6; i++)
        {
            m_Cylinders[i].transform.localScale = new Vector3(m_Radius * 2, m_Radius * 2, m_Length);
        }

        m_Cylinders [0].transform.position = m_V1.position;
        m_Cylinders [0].transform.LookAt(m_V2.position);
        m_Cylinders [1].transform.position = m_V1.position;
        m_Cylinders [1].transform.LookAt(m_V3.position);

        m_Cylinders [2].transform.position = m_V2.position;
        m_Cylinders [2].transform.LookAt(m_V1.position);
        m_Cylinders [3].transform.position = m_V2.position;
        m_Cylinders [3].transform.LookAt(m_V3.position);

        m_Cylinders [4].transform.position = m_V3.position;
        m_Cylinders [4].transform.LookAt(m_V1.position);
        m_Cylinders [5].transform.position = m_V3.position;
        m_Cylinders [5].transform.LookAt(m_V2.position);


        m_InnerTri1 = FindInnerVerts(m_V1.position, m_V2.position, m_V3.position, m_Radius, m_Length);
        m_InnerTri2 = FindInnerVerts(m_V2.position, m_V3.position, m_V1.position, m_Radius, m_Length);
        m_InnerTri3 = FindInnerVerts(m_V3.position, m_V1.position, m_V2.position, m_Radius, m_Length);

        //offset01 = Vector3.Distance (m_V1.position, m_InnerTri1 [3]);
        offset01 = (90 / m_Angle1) * (m_Radius * 1.2f);


        float length = (m_InnerTri1 [3] - m_InnerTri2 [4]).magnitude;

        m_Edges [0].transform.position   = m_V1.position + ((m_V2.position - m_V1.position).normalized * offset01);
        m_Edges [0].transform.localScale = new Vector3(m_Radius / 2f, m_Radius / 2f, 1);
        m_Edges [0].transform.LookAt(m_InnerTri2[4]);

        m_Angle1 = Vector3.Angle(m_V1.position - m_V2.position, m_V1.position - m_V3.position);
        m_Angle2 = Vector3.Angle(m_V2.position - m_V1.position, m_V2.position - m_V3.position);
        m_Angle3 = Vector3.Angle(m_V3.position - m_V1.position, m_V3.position - m_V2.position);


        m_Text.text = MathExtensions.AreaOfTriangle(m_V1.position, m_V2.position, m_V3.position).ToString();
    }
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            m_TextMeshes.Clear();
        }

        if (m_Line == null)
        {
            m_Line = gameObject.GetComponent <LineRenderer> ();
        }



        //hax
        if (m_TextMeshes.Count < (m_SelectedObjects.Count * 3))
        {
            while (m_TextMeshes.Count < (m_SelectedObjects.Count * 3))
            {
                TextMesh newtext = new GameObject("text mesh " + m_TextMeshes.Count).AddComponent <TextMesh> ();
                m_TextMeshes.Add(newtext);
            }
        }

        textCount = 0;

        foreach (TextMesh t in m_TextMeshes)
        {
            t.transform.rotation   = Camera.main.transform.rotation;
            t.transform.localScale = Vector3.one * m_Scale;
            t.fontSize             = m_FontSize;
        }

        // If more than one vert selected
        if (m_SelectedObjects.Count > 1)
        {
            m_Line.enabled = true;
            m_Line.SetVertexCount(m_SelectedObjects.Count);

            for (int i = 0; i < m_SelectedObjects.Count; i++)
            {
                m_Line.SetPosition(i, m_SelectedObjects [i].transform.position);

                int prevIndex = (i - 1);
                if (prevIndex < 0)
                {
                    prevIndex = m_SelectedObjects.Count - 1;
                }

                int nextIndex = (i + 1);
                if (nextIndex > m_SelectedObjects.Count - 1)
                {
                    nextIndex = 0;
                }

                // Edge length
                TextMesh edgeText = GetTextMesh();
                EdgeLength(edgeText, m_SelectedObjects[i].transform.position, m_SelectedObjects[nextIndex].transform.position);

                // Line
                m_Line.SetVertexCount(m_SelectedObjects.Count + 1);
                m_Line.SetPosition(m_SelectedObjects.Count, m_SelectedObjects [0].transform.position);

                // Angle
                Vector3  edge1   = m_SelectedObjects[i].transform.position - m_SelectedObjects[prevIndex].transform.position;
                Vector3  edge2   = m_SelectedObjects[i].transform.position - m_SelectedObjects[nextIndex].transform.position;
                float    angle   = Vector3.Angle(edge1, edge2);
                TextMesh vertext = GetTextMesh();
                vertext.text = "v" + i + ": " + angle.ToString("##");
                vertext.transform.position = m_SelectedObjects[i].transform.position;
            }

            // hax trianlge area
            float    area     = MathExtensions.AreaOfTriangle(m_SelectedObjects [0].transform.position, m_SelectedObjects [1].transform.position, m_SelectedObjects [2].transform.position);
            TextMesh areaText = GetTextMesh();
            areaText.text = area.ToString("##.##");
            areaText.transform.position = (m_SelectedObjects [0].transform.position + m_SelectedObjects [1].transform.position + m_SelectedObjects [2].transform.position) / 3f;


            for (int i = textCount + 1; i < m_TextMeshes.Count; i++)
            {
                m_TextMeshes[i].gameObject.SetActive(false);
            }
        }
        else
        {
            m_Line.enabled = false;
            m_Line.SetVertexCount(0);
        }
    }