Ejemplo n.º 1
0
 private void Start()
 {
     pointCloud = GameObject.Find("PointCloud").GetComponent <PointCloud>();
     generator  = GameObject.Find("VertexGenerator").GetComponent <VertexGenerator>();
     edges      = new List <Edge>();
     container  = new TriangleContainer();
     added      = new List <Vertex>();
 }
Ejemplo n.º 2
0
 public void Seal()
 {
     VertexGenerator.GenerateVertexInformation(this);
     foreach (var virtualPiece in VirtualPieces)
     {
         virtualPiece.Seal();
     }
     this.CalculateVolume();
 }
Ejemplo n.º 3
0
    public void GenerateCloud()
    {
        //Random.InitState(10);
        float radius = 5f;

        float[] densityZones = new float[] { 1f };

        VertexGenerator generator = GameObject.Find("VertexGenerator").GetComponent <VertexGenerator>();

        for (int i = 0; i < Size; i++)
        {
            int   zone = 0;
            float f    = Random.Range(0, 1);
            float t    = 0;
            for (int d = 0; d < densityZones.Length; d++)
            {
                t += densityZones[d];
                if (f <= t)
                {
                    zone = d;
                    break;
                }
            }

            float[] range = new float[] {
                (((float)zone) / densityZones.Length) * radius,
                (((float)zone + 1) / densityZones.Length) * radius,
            };

            float angle = Random.Range(0f, 360f);

            Vector2 direction = Quaternion.AngleAxis(angle, Vector3.back) * Vector2.up;
            Vector2 position  = direction * Random.Range(range[0], range[1]);

            Vertex vert = Instantiate(vertexPrefab, position, Quaternion.identity).GetComponent <Vertex>();
            if (generator.Vertices.Add(vert))
            {
                generator.IterableVertices.Add(vert);
            }
        }
    }
Ejemplo n.º 4
0
        private void InitializeVisuals()
        {
            m_mesh = new MeshGeometry3D();
            m_ellipsePts.Clear();

            double armRadius = m_arm.Radius;
            double diffMajor = armRadius - m_arm.WristWidth / 2.0;
            double diffMinor = armRadius - m_arm.WristHeight / 2.0;

            // create the first and last points
            List <Point3D> forearmPts = VertexGenerator.GenerateCirclePoints(
                armRadius, Constants.NumberOfArmShapeSegments, true);
            List <Point3D> wristPts = VertexGenerator.GenerateEllipsePoints(
                m_arm.WristWidth / 2.0, m_arm.WristHeight / 2.0,
                Constants.NumberOfArmShapeSegments, true);

            // create the remaining points (in between)
            m_ellipsePts.Add(forearmPts.ToArray());
            for (int i = 1; i < Constants.NumberOfArmLengthSegments; i++)
            {
                List <Point3D> ellipsePoints = new List <Point3D>();
                for (int j = 0; j < forearmPts.Count; j++)
                {
                    double correctX = forearmPts[j].X - i
                                      * (forearmPts[j].X - wristPts[j].X) / Constants.NumberOfArmLengthSegments;
                    double correctY = forearmPts[j].Y - i
                                      * (forearmPts[j].Y - wristPts[j].Y) / Constants.NumberOfArmLengthSegments;

                    ellipsePoints.Add(new Point3D(correctX, correctY, 0.0));
                }

                m_ellipsePts.Add(ellipsePoints.ToArray());
            }
            m_ellipsePts.Add(wristPts.ToArray());

            // add positions and triangle indices
            for (int i = 0; i <= Constants.NumberOfArmLengthSegments; i++)
            {
                for (int j = 0; j <= Constants.NumberOfArmShapeSegments; j++)
                {
                    m_mesh.Positions.Add(m_ellipsePts[i][j]);

                    double textureX = i / (double)Constants.NumberOfArmLengthSegments;
                    double textureY = j / (double)Constants.NumberOfArmShapeSegments;

                    m_mesh.TextureCoordinates.Add(new Point(textureX, textureY));
                }
            }

            for (int i = 0; i < Constants.NumberOfArmLengthSegments; i++)
            {
                for (int j = 0; j < Constants.NumberOfArmShapeSegments; j++)
                {
                    m_mesh.TriangleIndices.Add(j + i * (Constants.NumberOfArmShapeSegments + 1));
                    m_mesh.TriangleIndices.Add(j + 1 + (i + 1) * (Constants.NumberOfArmShapeSegments + 1));
                    m_mesh.TriangleIndices.Add(j + (i + 1) * (Constants.NumberOfArmShapeSegments + 1));

                    m_mesh.TriangleIndices.Add(j + i * (Constants.NumberOfArmShapeSegments + 1));
                    m_mesh.TriangleIndices.Add(j + 1 + i * (Constants.NumberOfArmShapeSegments + 1));
                    m_mesh.TriangleIndices.Add(j + 1 + (i + 1) * (Constants.NumberOfArmShapeSegments + 1));
                }
            }

            // create the model
            if (m_armModel == null)
            {
                m_armModel = new GeometryModel3D();
            }
            m_armModel.Geometry = m_mesh;

            if (m_model == null)
            {
                m_model = new Model3DGroup();
            }

            m_model.Children.Clear();
            m_model.Children.Add(m_armModel);

            // add the two marker coordinate systems
            m_forearmSystem = new CoordinateSystem(0.05 * 1000.0, true, true, false, 0.5);
            m_wristSystem   = new CoordinateSystem(0.05 * 1000.0, true, true, false, 0.5);

            m_model.Children.Add(m_forearmSystem.Model);
            m_model.Children.Add(m_wristSystem.Model);

            // add all models
            Content = m_model;
        }
Ejemplo n.º 5
0
 public void Seal()
 {
     Original.Seal();
     VertexGenerator.GenerateMeshesForAllOrientations(this);
 }
 // Use this for initialization
 void Start()
 {
     generator  = GameObject.Find("VertexGenerator").GetComponent <VertexGenerator>();
     pointCloud = GameObject.Find("PointCloud").GetComponent <PointCloud>();
 }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.D) && !IsGenerating)
        {
            foreach (Edge e in edges)
            {
                e.gameObject.SetActive(true);
                Destroy(e.gameObject);
            }
            edges.Clear();
            VertexGenerator generator = GameObject.Find("VertexGenerator").GetComponent <VertexGenerator>();
            generator.Clear();
            upper.Clear();
            lower.Clear();
            hull.Clear();
        }

        if (Input.GetKeyDown(KeyCode.R) && !IsGenerating)
        {
            pointCloud.GenerateCloud();
        }

        if (Input.GetKeyDown(KeyCode.G) && !IsGenerating)
        {
            Debug.Log("Generating convex hull with Graham Scan");
            foreach (Edge e in edges)
            {
                e.gameObject.SetActive(true);
                Destroy(e.gameObject);
            }
            edges.Clear();
            upper.Clear();
            lower.Clear();
            hull.Clear();

            VertexGenerator generator = GameObject.Find("VertexGenerator").GetComponent <VertexGenerator>();
            StartCoroutine(DoGrahamScan(new List <Vertex>(generator.Vertices).ToArray()));
        }

        if (IsGenerating)
        {
            ConstructHull();
            for (int i = 1; i < hull.Count; i++)
            {
                if (i >= edges.Count)
                {
                    Edge edge = Instantiate(edgePrefab).GetComponent <Edge>();
                    edges.Add(edge);
                }
                edges[i - 1].Point1 = hull[i - 1];
                edges[i - 1].Point2 = hull[i];
                edges[i - 1].SetPosition(hull[i - 1].transform.position, hull[i].transform.position);
                edges[i - 1].transform.SetParent(transform);
                edges[i - 1].gameObject.SetActive(true);

                edges[i - 1].isHighlighted = i >= hull.Count - 1 && edges[0].Point1 != edges[i - 1].Point2;
            }


            for (int i = hull.Count; i < edges.Count; i++)
            {
                edges[i].gameObject.SetActive(false);
            }
        }
    }