//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; } }
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; } }
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(); }
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); }
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(); } }
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); } } }
//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 }