Beispiel #1
0
    private void prepareEdit()
    {
        _meshCollider  = _targetObject.GetComponent <MeshCollider>();
        _mesh          = _targetObject.GetComponent <MeshFilter>().sharedMesh;
        _geomProcessor = new GeomProcessor(_mesh, _preData.trilinks, _preData.GetTav(), _targetObject.transform);
        _transform     = _targetObject.GetComponent <Transform>();
        Renderer renderer = _targetObject.GetComponent <Renderer>();

        if (_nativeMaterial == null)
        {
            _nativeMaterial = renderer.sharedMaterial;
        }
        renderer.sharedMaterial = _matForEdit = s_getRedoMaterial();
    }
Beispiel #2
0
    private void OnEnable()
    {
        Debug.LogError("OnEnable");

        SpawnAreaCreator spawnArea = target as SpawnAreaCreator;

        _icecream      = spawnArea.GetComponent <Icecream>();
        _transform     = spawnArea.GetComponent <Transform>();
        _mesh          = spawnArea.GetComponent <MeshFilter>().sharedMesh;
        _meshFilter    = spawnArea.GetComponent <MeshFilter>();
        _meshCollider  = spawnArea.GetComponent <MeshCollider>();
        _renderer      = spawnArea.GetComponent <Renderer>();
        _geomProcessor = new GeomProcessor(_mesh, _icecream.trilinks, _icecream.trisAroundVertex, _icecream.gameObject.transform);
    }
Beispiel #3
0
    void Start()
    {
        Application.targetFrameRate = 60;

        string trisAroundVertex;

        //trisAroundVertex = string.Join(",", GeomPreprocessor.CreateTrisAroundVertex(icSpincone.mesh));
        //   trisAroundVertex = string.Join(",", GeomPreprocessor.CreateTrisAroundVertex(icSpiralLow.mesh));
        //   trisAroundVertex = string.Join(",", GeomPreprocessor.CreateTrisAroundVertex(icSpiralMid.mesh));
        //   trisAroundVertex = string.Join(",", GeomPreprocessor.CreateTrisAroundVertex(testIce.mesh));
        //trisAroundVertex = string.Join(",", GeomPreprocessor.CreateTrisAroundVertex(tanyaTest.mesh));
        // Debug.Log(DateTime.Now.ToString());

        int[]  _trilinks;
        String str;
        //   _trilinks = GeomPreprocessor.CreateTrilinks(icSpincone.mesh);
        //   str = String.Join(",", _trilinks);
        //   _trilinks = GeomPreprocessor.CreateTrilinks(icSpiralLow.mesh);
        //   str = String.Join(",", _trilinks);
        //   _trilinks = GeomPreprocessor.CreateTrilinks(icSpiralMid.mesh);
        //   str = String.Join(",", _trilinks);
        //   _trilinks = GeomPreprocessor.CreateTrilinks(testIce.mesh);
        // str = String.Join(",", _trilinks);
        //_trilinks = GeomPreprocessor.CreateTrilinks(tanyaTest.mesh);
        //str = String.Join(",", _trilinks);

        // Debug.Log(DateTime.Now.ToString());


        TextAsset txt = Resources.Load("Trilinks/spincone") as TextAsset;

        int[] trilinks_spincone = Array.ConvertAll(txt.text.Split(','), int.Parse);
        txt = Resources.Load("Trilinks/spiralLow") as TextAsset;
        int[] trilinks_spiralLow = Array.ConvertAll(txt.text.Split(','), int.Parse);
        txt = Resources.Load("Trilinks/spiralMid") as TextAsset;
        int[] trilinks_spiralMid = Array.ConvertAll(txt.text.Split(','), int.Parse);
        txt = Resources.Load("Trilinks/icecream_01") as TextAsset;
        int[] trilinks_tanyaTest = Array.ConvertAll(txt.text.Split(','), int.Parse);

        int[][] tav_spincone  = createTav("TrisAroundVertex/spincone");
        int[][] tav_spiralLow = createTav("TrisAroundVertex/spiralLow");
        int[][] tav_spiralMid = createTav("TrisAroundVertex/spiralMid");
        int[][] tav_tanyaTest = createTav("TrisAroundVertex/icecream_01");

        //TimeSpan ts1 = TimeSpan.FromTicks(DateTime.Now.Ticks);
        //Debug.Log(DateTime.Now.ToString());
        _testGeomProcessor_spincone  = new GeomProcessor(icSpincone.sharedMesh, trilinks_spincone, tav_spincone, icSpincone.transform);
        _testGeomProcessor_spiralLow = new GeomProcessor(icSpiralLow.sharedMesh, trilinks_spiralLow, tav_spiralLow, icSpiralLow.transform);
        _testGeomProcessor_spiralMid = new GeomProcessor(icSpiralMid.sharedMesh, trilinks_spiralMid, tav_spiralMid, icSpiralMid.transform);
        _testGeomProcessor_tanyaTEst = new GeomProcessor(tanyaTest.sharedMesh, trilinks_tanyaTest, tav_tanyaTest, tanyaTest.transform);
        TimeSpan ts2 = TimeSpan.FromTicks(DateTime.Now.Ticks);
        //Debug.Log((ts2 - ts1).Milliseconds);
        //Debug.Log(DateTime.Now.ToString());

        /*      Transform cb;
         *        cb = Instantiate(cube, new Vector3(), Quaternion.identity);
         *        cb.GetComponent<Renderer>().material.color = new Color(0, 0, 0);
         *        cb.SetParent(testIce.transform);
         *        cb.transform.localPosition = testIce.mesh.vertices[testIce.mesh.triangles[3*83]];
         *
         *    cb = Instantiate(cube, new Vector3(), Quaternion.identity);
         *    cb.GetComponent<Renderer>().material.color = new Color(0.5f, 0.5f, 0.5f);
         *    cb.SetParent(testIce.transform);
         *    cb.transform.localPosition = testIce.mesh.vertices[testIce.mesh.triangles[3 * 83+1]];
         *
         *    cb = Instantiate(cube, new Vector3(), Quaternion.identity);
         *    cb.GetComponent<Renderer>().material.color = new Color(0.9f, 0.9f, 0.9f);
         *    cb.SetParent(testIce.transform);
         *    cb.transform.localPosition = testIce.mesh.vertices[testIce.mesh.triangles[3 * 83+2]];
         */
    }
Beispiel #4
0
    // Update is called once per frame
    void Update()
    {
        int i;

        for (i = 0; i < cubes.Count; i++)
        {
            cubes[i].GetComponent <Renderer>().enabled = false;
        }

        /*      Vector3 A = new Vector3(6.37312E-08f, -0.7039801f, -0.4557033f);
         *    int triN = 415;
         *    Vector3 Anew;
         *    int edgeN;
         *    _testGeomProcessor.processTriangle(triN, A, out edgeN, out Anew);
         *
         *
         *    Vector3 V01 = _vertices[_triangles[triN * 3 + 1]] - _vertices[_triangles[triN * 3 + 0]];
         *    Vector3 V02 = _vertices[_triangles[triN * 3 + 2]] - _vertices[_triangles[triN * 3 + 0]];
         *    Vector3 v0 = _vertices[_triangles[triN * 3 + 0]];
         *    Vector3 v1 = _vertices[_triangles[triN * 3 + 1]];
         *    Vector3 v2 = _vertices[_triangles[triN * 3 + 2]];
         *
         *    Vector3 n = Vector3.Cross(V01, V02);
         *    Debug.DrawRay(A, n);
         *    return;*/

        foreach (BlobGuide guide in _guides)
        {
            guide.Update();
        }


        List <Vector3> points;

        RaycastHit hit;

        //    Debug.LogError(Input.mousePosition.x+", "+ Input.mousePosition.y+", "+ Input.mousePosition.z);
        if (!Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hit))
        {
            return;
        }
        MeshCollider meshCollider = hit.collider as MeshCollider;

        if (meshCollider == null || meshCollider.sharedMesh == null)
        {
            return;
        }

        Transform     targetObject    = null;
        GeomProcessor targetProcessor = null;

        if (meshCollider == icSpincone.GetComponent <MeshCollider>())
        {
            targetObject    = icSpincone.transform;
            targetProcessor = _testGeomProcessor_spincone;
        }
        else if (meshCollider == icSpiralLow.GetComponent <MeshCollider>())
        {
            targetObject    = icSpiralLow.transform;
            targetProcessor = _testGeomProcessor_spiralLow;
        }
        else if (meshCollider == icSpiralMid.GetComponent <MeshCollider>())
        {
            targetObject    = icSpiralMid.transform;
            targetProcessor = _testGeomProcessor_spiralMid;
        }
        else if (meshCollider == tanyaTest.GetComponent <MeshCollider>())
        {
            targetObject    = tanyaTest.transform;
            targetProcessor = _testGeomProcessor_tanyaTEst;
        }

        if (targetObject == null)
        {
            return;
        }

        points = targetProcessor.GetEdgeIntersectPoints(targetObject.InverseTransformPoint(hit.point), hit.triangleIndex);



        //points = _testGeomProcessor_testIce.GetEdgeIntersectPoints(testIce.transform.InverseTransformPoint(hit.point), hit.triangleIndex);

        /*        MeshCollider meshCollider = testIce.GetComponent<MeshCollider>();
         *      //points = _testGeomProcessor_testIce.GetEdgeIntersectPoints(testIce.transform.InverseTransformPoint(new Vector3(-0.7801354f, 0.1426054f, -0.2359176f)), 202);
         *      points = _testGeomProcessor_testIce.GetEdgeIntersectPoints(testIce.transform.InverseTransformPoint(new Vector3(-1.349147f, 0.7382534f, -0.1626387f)), 322);
         *
         *      MeshCollider meshCollider = icSpiralLow.GetComponent<MeshCollider>();
         *      points = _testGeomProcessor_spiralLow.GetEdgeIntersectPoints(icSpiralLow.transform.InverseTransformPoint(new Vector3(2.927554f, 0.9878784f, -0.008455698f)), 9092);
         */

        /*       MeshCollider meshCollider = icSpiralMid.GetComponent<MeshCollider>();
         *     //points = _testGeomProcessor_spiralMid.GetEdgeIntersectPoints(icSpiralMid.transform.InverseTransformPoint(new Vector3(1.112241f, 0.9138252f, -0.04689942f)), 15931);
         *     points = _testGeomProcessor_spiralMid.GetEdgeIntersectPoints(icSpiralMid.transform.InverseTransformPoint(new Vector3(1.002526f, 0.9781381f, -0.05147566f)), 16524);
         */
        Transform cb;

        while (points.Count > cubes.Count)
        {
            cb = Instantiate(cube, new Vector3(), Quaternion.identity);
            cb.GetComponent <Renderer>().material.color = new Color(1, 0, 0);
            cubes.Add(cb);
        }
        for (i = 0; i < points.Count; i++)
        {
            cubes[i].GetComponent <Renderer>().enabled = true;
            cubes[i].SetParent(targetObject);

            if (float.IsInfinity(points[i].x))
            {
                Debug.LogError("!!!" + meshCollider.name + ": (" + hit.point.x + "; " + hit.point.y + "; " + hit.point.z + ")|" + hit.triangleIndex);
            }
            cubes[i].transform.localPosition = points[i];
        }

        if (Input.GetMouseButtonDown(0))
        {
            Transform blob = getBlob();
            blob.SetParent(targetObject);
            BlobGuide blobGuide = new BlobGuide(blob, points);
            _guides.Add(blobGuide);
        }
    }
Beispiel #5
0
 void Start() {
     _mesh = GetComponent<MeshFilter>().sharedMesh;
     _geomProcessor = new GeomProcessor(_mesh, trilinks, trisAroundVertex, gameObject.transform);
 }