Example #1
0
        /// <summary>
        /// Create the temporary component
        /// </summary>
        /// <param name="target">The object to attach the temporary component on</param>
        protected virtual void CreateTempComponent(EditableObject target)
        {
            if (!Util.IsValid(target))
            {
                return;
            }

            tempComponent           = target.gameObjectAttached.AddComponent <ZoomOverride>();
            tempComponent.hideFlags = HideFlags.HideAndDontSave;
            tempComponent.SetWeights(null, 0f);
        }
        Bounds OnGetFrameBounds()
        {
            ZoomOverride ren = (ZoomOverride)target;

            Mesh m = ren.Mesh;

            Vector3[] vertices = m.vertices;
            float[]   weights  = ren.GetWeights();

            Bounds bounds         = new Bounds(Vector3.zero, Vector3.zero);
            int    appliedWeights = 0;

            Transform transform = ((ZoomOverride)target).transform;

            for (int i = 0; i < m.vertexCount; i++)
            {
                if (weights[i] > 0.0001f)
                {
                    if (appliedWeights > 0)
                    {
                        bounds.Encapsulate(transform.TransformPoint(vertices[i]));
                    }
                    else
                    {
                        bounds.center = transform.TransformPoint(vertices[i]);
                    }

                    appliedWeights++;
                }
            }

            if (appliedWeights < 1)
            {
                bounds = ren.transform.GetComponent <MeshRenderer>().bounds;
            }
            else if (appliedWeights == 1 || bounds.size.magnitude < .1f)
            {
                bounds.size = Vector3.one * .5f;
            }

            return(bounds);
        }
        bool HasFrameBounds()
        {
            ZoomOverride ren = (ZoomOverride)target;

            return(ren.Mesh != null && ren.GetWeights().Length == ren.Mesh.vertexCount);
        }