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>(); }
public void Seal() { VertexGenerator.GenerateVertexInformation(this); foreach (var virtualPiece in VirtualPieces) { virtualPiece.Seal(); } this.CalculateVolume(); }
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); } } }
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; }
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); } } }