Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Components not refreshing
#1
I'm trying to use Curvy to read in data, generate meshes from the data, and save just the meshes out to the scene (since they will be static and I don't want the overhead of Curvy), but I'm running into an issue with the components not updating which is preventing me from being able to save out the mesh. I've created a test script (below) to figure out the process, and the debug statements print 0, for the first one giving the length of the spline, and null, for the second one which should be the saved mesh.  I was reading through prior posts in the forum and took the advice to set auto refresh to false and force a refresh before I want to use the results of a component, but that is clearly not working.  I thought it might be an editor specific bug, so I tried running the same script at start and got the same results.  Why is this not working to generate my mesh in a way that I can save it out?  When I go to the scene view afterwards, I can see that everything has been created as expected, it just seems to be happening after I try to access it within the script.

Code:
using UnityEngine;
using FluffyUnderware.Curvy;
using FluffyUnderware.Curvy.Generator.Modules;
using FluffyUnderware.Curvy.Generator;
using FluffyUnderware.Curvy.Shapes;

public class CurvyTest : MonoBehaviour
{
    [ContextMenu("Test")]
    public void Test() {
        // Create the generator and required build components
        CurvyGenerator generator = CurvyGenerator.Create();
        generator.AutoRefresh = false;
        InputSplinePath wirePath = generator.AddModule<InputSplinePath>();
        InputSplinePath crossPath = generator.AddModule<InputSplinePath>();
        BuildShapeExtrusion buildShapeExtrusion = generator.AddModule<BuildShapeExtrusion>();
        BuildVolumeMesh buildVolumeMesh = generator.AddModule<BuildVolumeMesh>();
        CreateMesh createMesh = generator.AddModule<CreateMesh>();

        // Create inputs to generator components

        // Create the wire spline
        CurvySpline wireSpline = CurvySpline.Create();
        CurvySplineSegment controlPoint1 = wireSpline.Add();
        controlPoint1.gameObject.transform.localPosition = new Vector3(0, 0, 0);
        CurvySplineSegment controlPoint2 = wireSpline.Add();
        controlPoint2.gameObject.transform.localPosition = new Vector3(0, 1, 0);
        CurvySplineSegment controlPoint3 = wireSpline.Add();
        controlPoint3.gameObject.transform.localPosition = new Vector3(1, 1, 0);
        CurvySplineSegment controlPoint4 = wireSpline.Add();
        controlPoint4.gameObject.transform.localPosition = new Vector3(1, 2, 0);
        CurvySplineSegment controlPoint5 = wireSpline.Add();
        controlPoint5.gameObject.transform.localPosition = new Vector3(1, 2, 1);

        // Create the circle cross section
        CurvySpline crossSpline = CurvySpline.Create();
        CSCircle circle = crossSpline.gameObject.AddComponent(typeof(CSCircle)) as CSCircle;
        circle.Radius = 0.005f;
        circle.Count = 10;
        crossSpline.Refresh();
        Debug.Log(crossSpline.Length);
        crossSpline.MaxPointsPerUnit = 10 / crossSpline.Length;
        circle.Refresh();

        // Link the splines to the shape extruder
        wirePath.Spline = wireSpline;
        crossPath.Spline = crossSpline;
        CGModuleInputSlot pathInput = buildShapeExtrusion.GetInputSlot("Path");
        CGModuleInputSlot crossInput = buildShapeExtrusion.GetInputSlot("Cross");
        CGModuleOutputSlot pathOutput = wirePath.GetOutputSlot("Path");
        CGModuleOutputSlot crossOutput = crossPath.GetOutputSlot("Path");
        pathInput.LinkTo(pathOutput);
        crossInput.LinkTo(crossOutput);

        // Set shape extruder parameters
        buildShapeExtrusion.Resolution = 100;
        buildShapeExtrusion.CrossResolution = 100;

        // Link the mesh and mesh generator
        CGModuleInputSlot volumeInput = buildVolumeMesh.GetInputSlot("Volume");
        CGModuleOutputSlot volumeOutput = buildShapeExtrusion.GetOutputSlot("Volume");
        volumeInput.LinkTo(volumeOutput);
        CGModuleInputSlot meshInput = createMesh.GetInputSlot("VMesh");
        CGModuleOutputSlot meshOutput = buildVolumeMesh.GetOutputSlot("VMesh");
        meshInput.LinkTo(meshOutput);

        // Save the mesh and destroy the components used to make it
        generator.Refresh(true);
        GameObject mesh = createMesh.SaveToScene(null);
        Debug.Log(mesh);
    }

    public void Start() {
        Test();
    }
}
Reply


Messages In This Thread
Components not refreshing - by amccraw - 02-14-2020, 07:34 PM
RE: Components not refreshing - by _Aka_ - 02-14-2020, 11:08 PM
RE: Components not refreshing - by amccraw - 02-17-2020, 01:16 PM
RE: Components not refreshing - by _Aka_ - 02-19-2020, 12:36 AM
RE: Components not refreshing - by _Aka_ - 02-20-2020, 01:00 AM
RE: Components not refreshing - by _Aka_ - 02-20-2020, 01:09 AM
RE: Components not refreshing - by Diasporism - 04-09-2021, 01:17 AM
RE: Components not refreshing - by _Aka_ - 04-09-2021, 09:13 AM
RE: Components not refreshing - by Diasporism - 04-09-2021, 02:51 PM
RE: Components not refreshing - by _Aka_ - 04-09-2021, 02:54 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Adding a point, then refreshing the mesh results in wrong mesh for one frame Jellybit 2 7,745 02-17-2014, 05:29 PM
Last Post: Jellybit

Forum Jump: