Esempio n. 1
0
        //Refresh the mesh when its inspector has changed
        private void OnValidate()
        {
            LFShape parentShape = null; if (transform.parent != null && (parentShape = transform.parent.GetComponent <LFShape>()) != null)

            {
                parentShape.localTransformHash = 0f;
            }

            if (transform.parent == null)
            {
                localTransformHash = 0f;
            }
        }
Esempio n. 2
0
        private void OnDisable()
        {
            Camera.onPreCull -= Draw;
            LFShape parentShape = null; if (transform.parent != null && (parentShape = transform.parent.GetComponent <LFShape>()) != null)

            {
                parentShape.localTransformHash = 0f;
            }

            if (transform.parent == null)
            {
                localTransformHash = 0f;
            }
        }
Esempio n. 3
0
 static void DrawGizmoForMyScript(LFShape src, GizmoType gizmoType)
 {
     UnityEngine.Profiling.Profiler.BeginSample("Draw Pickable LibFive Gizmos", src);
     if (src.cachedMesh != null && src.cachedMesh.vertexCount > 0)
     {
         Gizmos.color = new Color(0f, 0f, 0f, 0f);
         if (src.transform.parent != null && src.transform.parent.GetComponent <LFShape>())
         {
             Gizmos.matrix = src.transform.parent.localToWorldMatrix;
         }
         Gizmos.DrawMesh(src.cachedMesh);
     }
     UnityEngine.Profiling.Profiler.EndSample();
 }
Esempio n. 4
0
        public LFTree Evaluate()
        {
            UnityEngine.Profiling.Profiler.BeginSample("Evaluate LibFive Tree", this);
            using (LFContext.Active = new Context()) {
                if (op > 0 && (int)op < 100)
                {
                    tree = evaluateNonary(op);
                }
                else if ((int)op < 200 && transform.childCount > 0)
                {
                    LFShape childShape = transform.GetChild(0).GetComponent <LFShape>();
                    if (childShape != null && childShape.isActiveAndEnabled)
                    {
                        tree = evaluateUnary(op, childShape.Evaluate());
                    }
                }
                else
                {
                    List <LFTree> trees = new List <LFTree>(transform.childCount);
                    for (int i = 0; i < transform.childCount; i++)
                    {
                        LFShape childShape = transform.GetChild(i).GetComponent <LFShape>();
                        if (childShape != null && childShape.isActiveAndEnabled)
                        {
                            trees.Add(childShape.Evaluate());
                        }
                    }
                    tree = evaluateNnary(op, trees.ToArray());
                }

                localTransformHash = computeLocalTransformHash();
                if (isRootNode && tree != null)
                {
                    tree = LFMath.Transform(tree, transform.localToWorldMatrix);
                }
                else
                {
                    tree = LFMath.Transform(tree, transform.parent.worldToLocalMatrix * transform.localToWorldMatrix);
                }

                //This prevents this node's tree from being disposed of
                LFContext.Active.RemoveTreeFromContext(tree);
            }
            UnityEngine.Profiling.Profiler.EndSample();
            return(tree);
        }
Esempio n. 5
0
        private void Update()
        {
            LFShape parentShape = null; if (transform.parent != null)

            {
                parentShape = transform.parent.GetComponent <LFShape>();
            }

            if (transformHasChanged() && parentShape != null)
            {
                parentShape.localTransformHash = 0f;
            }
            if (material == null)
            {
                material = new Material(Shader.Find("Diffuse"));
            }
            if (cachedMesh == null)
            {
                cachedMesh = new Mesh(); cachedMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
            }
            isRootNode = parentShape == null;

            if (payload != null && !payload.handle.Equals(default(Unity.Jobs.JobHandle)) && (!AsyncRender || payload.handle.IsCompleted))
            {
                payload.handle.Complete();
                LFMeshRendering.CompleteRenderLibFiveMesh(ref payload, cachedMesh, vertexSplittingAngle);
                payload.handle = default(Unity.Jobs.JobHandle);
            }
            else if ((tree == null || transformHasChanged() || cachedMesh.vertexCount == 0) && (payload == null || payload.handle.IsCompleted))
            {
                Evaluate();
                //tree.RenderMesh(cachedMesh, new Bounds(transform.position, Vector3.one * boundsSize), resolution + 0.001f, vertexSplittingAngle);
                if (payload == null)
                {
                    payload = new LFMeshRendering.RenderJobPayload(ref tree);
                }
                UnityEngine.Profiling.Profiler.BeginSample("Update LibFive Mesh", this);
                LFMeshRendering.ScheduleRenderLibFiveMesh(tree, new Bounds(transform.position, Vector3.one * boundsSize), resolution + 0.001f, ref payload);
                if (!AsyncRender)
                {
                    Update();
                }
                UnityEngine.Profiling.Profiler.EndSample();
            }
        }
Esempio n. 6
0
        public override void OnInspectorGUI()
        {
            DrawDefaultInspector();

            if (GUILayout.Button("Save STL"))
            {
                LFShape shape      = (LFShape)target;
                string  pathString = Path.Combine(Directory.GetParent(Application.dataPath).ToString(), shape.gameObject.name + " - " + System.DateTime.Now.ToShortTimeString().Replace(":", ".") + ".stl");
                Mesh    toWrite    = shape.tree.RenderMesh(new Bounds(shape.transform.position, Vector3.one * shape.boundsSize), shape.resolution + 0.001f);
                string  stlString  = LFMeshRendering.createSTL(toWrite);
                try {
                    File.WriteAllText(pathString, stlString);
                    Debug.Log("Saved STL at: " + pathString);
                } catch (System.Exception e) {
                    Debug.LogError("Failed to save STL! - " + e);
                }
            }
        }
Esempio n. 7
0
        //Subscribe to Camera callbacks for drawing an refresh the mesh OnEnable
        private void OnEnable()
        {
            Camera.onPreCull -= Draw;
            Camera.onPreCull += Draw;
            LFShape parentShape = null; if (transform.parent != null && (parentShape = transform.parent.GetComponent <LFShape>()) != null)

            {
                parentShape.localTransformHash = 0f;
            }

            if (transform.parent == null)
            {
                localTransformHash = 0f;
            }
#if UNITY_EDITOR
            Undo.undoRedoPerformed += (() => { localTransformHash = 0f; if (parentShape != null)
                                               {
                                                   parentShape.localTransformHash = 0f;
                                               }
                                       });
#endif
        }