public void AddShape(Shape s) { IndexedShape ishape = new IndexedShape(s, this.Vertices.Count); if (!allShapes.Contains(ishape)) { AddVertices(s); allShapes.Add(ishape); s.ShapeUpdated += new ShapeChangeEventHandler(s_ShapeUpdated); this.Update(); } }
public Shape ConvertArrayToShape(Array data) { width = data.GetLength(1); height = data.GetLength(0); shape = new Shape(); double[] prevRow = ReadRow(data, 0); for (int y = 1; y < height; y++) { double[] nextRow = ReadRow(data, y); Vertex[] verts = GetRowOfVertices(nextRow, prevRow, y - 1); shape.Vertices.AddRange(verts); prevRow = nextRow; } return shape; }
public Shape ConvertImageToShape(Image image) { Bitmap bmp = (Bitmap)image; byte [] bytes = ImageConverter.ConvertImageToBytes(bmp); width = image.Width; height = image.Height; shape = new Shape(); int[] prevRow = ReadRow(bmp, 0); for (int y = 1; y < height; y++) { int[] nextRow = ReadRow(bmp, y); Vertex[] verts = GetRowOfVertices(nextRow,prevRow, y - 1); shape.Vertices.AddRange(verts); prevRow = nextRow; } return shape; }
public void UpdateShape(Shape s) { s.Update(device, shaderSignature); }
public bool RemoveShape(Shape s) { IndexedShape ishape = new IndexedShape(s, 0); bool ret = allShapes.Remove(ishape); if (ret) { s.ShapeUpdated -= s_ShapeUpdated; RebuildList(); this.Update(); } return ret; }
public IndexedShape(Shape s, int index) { this.shape = s; this.offset = index; }
private void AddVertices(Shape s) { for(int i = 0; i < s.Vertices.Count; i+=3) { Vertex[] triangle = Vertex.TransformTriangle(new Vertex[] { s.Vertices[i], s.Vertices[i+1], s.Vertices[i+2] }, s.World); this.Vertices.AddRange(triangle); } }
public ShapeChangeEventArgs(Shape changedShape, ChangeAction action) { this.changedShape = changedShape; this.action = action; }
public void CopyShapeTo(Shape other) { other.Vertices = this.Vertices; other.Location = this.Location; other.Rotation = this.Rotation; other.Scale = this.Scale; other.Update(); }
public void CopyShapeFrom(Shape other) { this.Vertices = other.Vertices; this.Location = other.Location; this.Rotation = other.Rotation; this.Scale = other.Scale; this.Update(); }
public bool RemoveShape(Shape s) { bool ret = engine.ShapeList.Remove(s); return ret; }
public void InsertShape(int index,Shape s) { engine.ShapeList.Insert(index,s); engine.UpdateShape(s); }
public void AddShape(Shape s) { engine.ShapeList.Add(s); engine.UpdateShape(s); }
/// <summary> /// Reads a ComplexShape structure from an STL file. /// </summary> /// <param name="filename">Path of the file to read</param> /// <returns></returns> private static Shape CreateFromStlAsciiFile(Stream stream) { Shape ret = new Shape(); System.Drawing.Color col = System.Drawing.Color.FromArgb(240, 240, 240); bool alreadyWarnedAboutNormal = false; int lineNum = 0; StreamReader reader = new StreamReader(stream); string line = reader.ReadLine(); lineNum++; string[] words = line.Split(new char[] { ' ' }); //ret. = words[1]; List<Vector3> verts = new List<Vector3>(); Vector3 norm = Vector3.Zero; // Loop through to end of file. while (!reader.EndOfStream) { line = reader.ReadLine(); lineNum++; words = line.Split(new char[] { ' ', '\t', '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); if (words.Length < 1) continue; else if (words[0].Equals("endsolid")) break; else if (words[0].Equals("facet")) { if (words[1].Equals("normal")) { norm = PopulateVector(words[2], words[3], words[4]); } } else if (words[0].Equals("vertex")) { verts.Add(PopulateVector(words[1], words[2], words[3])); } else if (words[0].Equals("endloop")) continue; else if (words[0].Equals("endfacet")) { if (verts.Count < 3) continue; Vector3 calcNorm; bool normCheck = ComplexShapeFactory.CheckNormal(norm, verts[0], verts[1], verts[2], out calcNorm); if (!normCheck && !alreadyWarnedAboutNormal) { MessageBox.Show(""+stream + " line: " + lineNum + "\nCalculated Normal is different to Normal in file.\n" + "\nin File: " + norm + "\ncalculated: " + calcNorm + "\n\nV0: " + verts[0] + "\nV1: " + verts[1] + "\nV2: " + verts[2] + "\n\nPerhaps it has a different meaning?"); alreadyWarnedAboutNormal = true; } ret.Vertices.Add(new Vertex(verts[0], col, norm)); ret.Vertices.Add(new Vertex(verts[1], col, norm)); ret.Vertices.Add(new Vertex(verts[2], col, norm)); ret.Vertices.Add(new Vertex(verts[2], col, -norm)); ret.Vertices.Add(new Vertex(verts[1], col, -norm)); ret.Vertices.Add(new Vertex(verts[0], col, -norm)); verts.Clear(); } else continue; } return ret; }
public Shape ReadShapeFromStream() { if (reader == null) throw new NullReferenceException("ShapeHGTFactory does not have a valid Stream"); try { shape = new Shape(); Initialize(); SkipToStartRow(); for (int r = 0; r < nRowsToRead - 1; r++) { Vertex[] row = ReadNextRowOfTriangles(); shape.Vertices.AddRange(row); } return shape; } catch (Exception) { throw; } }
public Shape ReadAndReduceShapeFromFile(int logFactorToDecimate) { if (LatitudeDelta > 1 || LongitudeDelta > 1) return GenerateNullShape(); Initialize(); short[,] data = ReadHGT(startCol, startRow, nColumnsToRead, nRowsToRead); int width = data.GetLength(1); int height = data.GetLength(0); int factor = (int)Math.Pow(2.0, logFactorToDecimate); if (factor > 1) { Size newSize = new Size(width / factor, height / factor); data = Decimate(data, factor); } float latScale = (float)(UnitsPerDegreeLatitude * LatitudeDelta); float longScale = (float)(UnitsPerDegreeLatitude * LongitudeDelta); shape = ShapeArrayFactory.CreateFromArray(data, new PointF(latScale, longScale),verticalScale); return shape; }