예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="rect"></param>
        /// <param name="normalizedSize"></param>
        public override void Generate(float normalizedSize, float scale)
        {
            if (EnsureMeshFilter() == false)    // No mesh filter attached
            {
                return;
            }

            if (mFilter.sharedMesh != null)
            {
                if (MaterialFit == BarMaterialFit.Trim && mCurrentMaterialFit == BarMaterialFit.Trim)
                {
                    if (MeshDimention == mCurrentDimention)
                    {
                        if (MeshDimention == ChartAndGraph.MeshDimention._2D)
                        {
                            BarMesh.Update2DMeshUv(mFilter.sharedMesh, normalizedSize);
                        }
                        else
                        {
                            BarMesh.Update3DMeshUv(mFilter.sharedMesh, normalizedSize);
                        }
                        return;
                    }
                }
            }
            mCurrentDimention   = MeshDimention;
            mCurrentMaterialFit = MaterialFit;
            if (MaterialFit == BarMaterialFit.Stretch)
            {
                if (MeshDimention == ChartAndGraph.MeshDimention._2D)
                {
                    mFilter.sharedMesh = BarMesh.StrechMesh2D;
                }
                else
                {
                    mFilter.sharedMesh = BarMesh.StrechMesh3D;
                }
                ChartCommon.CleanMesh(null, ref mCleanMesh);
                return;
            }

            if (MaterialFit == BarMaterialFit.Trim)
            {
                Mesh newMesh = null;
                if (MeshDimention == ChartAndGraph.MeshDimention._2D)
                {
                    newMesh = BarMesh.Generate2DMesh(normalizedSize);
                }
                else
                {
                    newMesh = BarMesh.Generate3DMesh(normalizedSize);
                }
                mFilter.sharedMesh = newMesh;
                ChartCommon.CleanMesh(newMesh, ref mCleanMesh);
            }
            else
            {
                return; // should not happen ever
            }
        }
        public void Generate(Vector3[] path, float radius, float curve)
        {
            if (EnsureMeshFilter() == false)    // No mesh filter attached
            {
                return;
            }

            mPath     = path;
            mPathRect = new Rect(-radius, -radius, radius * 2f, radius * 2f);
            mCurve    = curve;
            WorldSpaceChartMesh mesh = new WorldSpaceChartMesh(1);
            int origin = 0;

            foreach (UIVertex v in getVerices())
            {
                origin = mesh.AddVertex(v);
            }

            for (int i = 0; i < mPath.Length; i++)
            {
                int prev = i - 1;
                if (prev < 0)
                {
                    prev = mPath.Length - 1;
                }
                mesh.AddTringle(origin, i * Smoothing, prev * Smoothing);
            }

            for (int j = 1; j < Smoothing; j++)
            {
                int current = j;
                int prev    = j - 1;
                for (int i = 0; i < mPath.Length; i++)
                {
                    int prevI = i - 1;
                    if (prevI < 0)
                    {
                        prevI = mPath.Length - 1;
                    }
                    int a = (i * Smoothing) + current;
                    int b = (i * Smoothing) + prev;
                    int c = (prevI * Smoothing) + current;
                    int d = (prevI * Smoothing) + prev;
                    mesh.AddTringle(c, b, a);
                    mesh.AddTringle(b, c, d);
                }
            }

            Mesh newMesh = mesh.Generate();

            newMesh.hideFlags = HideFlags.DontSave;
            newMesh.RecalculateNormals();

            mFilter.sharedMesh = newMesh;
            ChartCommon.CleanMesh(newMesh, ref mCleanMesh);
        }
예제 #3
0
        public void SetMesh(Mesh mesh)
        {
            mesh.hideFlags     = HideFlags.DontSave;
            mFilter.sharedMesh = mesh;
            ChartCommon.CleanMesh(mesh, ref mCleanMesh);
            MeshCollider collider = GetComponent <MeshCollider>();

            if (collider != null)
            {
                collider.sharedMesh = mesh;
            }
        }
        public void Generate(float startAngle, float angleSpan, float radius, float innerRadius, int segments, float outerDepth, float innerDepth)
        {
            WorldSpaceChartMesh mesh = new WorldSpaceChartMesh(1);
            float maxDepth           = Mathf.Max(outerDepth, innerDepth);

            if (maxDepth <= 0f)
            {
                PieMesh.Generate2dMesh(mesh, startAngle, angleSpan, radius, innerRadius, segments);
            }
            else
            {
                PieMesh.Generate3dMesh(mesh, startAngle, angleSpan, radius, innerRadius, segments, outerDepth, innerDepth);
            }

            if (mCleanMesh != null)
            {
                mCleanMesh.Clear();
                mesh.ApplyToMesh(mCleanMesh);
                MeshCollider collider = ChartCommon.EnsureComponent <MeshCollider>(gameObject);
                if (collider != null)
                {
                    collider.sharedMesh = null;
                    collider.sharedMesh = mCleanMesh;
                }
            }
            else
            {
                Mesh newMesh = mesh.Generate();
                newMesh.hideFlags = HideFlags.DontSave;
                if (mFilter == null)
                {
                    mFilter = GetComponent <MeshFilter>();
                }
                mFilter.sharedMesh = newMesh;
                MeshCollider collider = ChartCommon.EnsureComponent <MeshCollider>(gameObject);
                if (collider != null)
                {
                    collider.sharedMesh = newMesh;
                }
                ChartCommon.CleanMesh(newMesh, ref mCleanMesh);
            }
        }
 public void Clear()
 {
     ChartCommon.CleanMesh(null, ref mCleanMesh);
 }
 void OnDestroy()
 {
     ChartCommon.CleanMesh(null, ref mCleanMesh);
 }