static void TestSlicer() { //-0.03141076,0.9995066 var doc = STLDocument.Open(AppDomain.CurrentDomain.BaseDirectory + @"/stl/squirtle__repaired_.stl"); doc.MakeCenter(); var results = Slicer.DoSlice(doc.Facets.ToArray(), new ArrayDefine[] { new ArrayDefine(new Plane(0, 1, 0, 0), ArrayType.Circle, 200, 360) //new ArrayDefine(new Plane(-0.03141076f, 0.9995066f, 0, 8), ArrayType.Circle, 8) }); var prefix = 0; IImageMould im = new LED6432P(); foreach (var key in results.Keys) { var filename = AppDomain.CurrentDomain.BaseDirectory + prefix + "_frame.h"; System.IO.File.Delete(filename); var code = ""; var frameTable = new List <string>(); var images = SliceImage.ToImage(results[key], doc.Size, 64, 32, 0, 0); for (int i = 0; i < images.Count; i++) { var bmp = images[i]; bmp.Save(AppDomain.CurrentDomain.BaseDirectory + "/" + prefix + "_" + i + ".bmp", ImageFormat.Bmp); code += im.GetFrameCode(prefix, i, bmp); frameTable.Add("_" + prefix + "_frame_" + i); } code += im.GetFramesCode(prefix, frameTable); System.IO.File.AppendAllText(filename, code); prefix++; } Console.WriteLine("TestSlicer finish"); }
private byte[] GetFrameBuff(Model3DGroup meshGroup, AxisAngleRotation3D rotation = null) { var frame = ","; var facets = new List <Facet>(); var size = new ModelSize(64, 64, 32); var axis = new System.Windows.Media.Media3D.Vector3D(); var angle = 0d; if (rotation != null) { axis = rotation.Axis; angle = rotation.Angle; } Dispatcher.Invoke(new Action(() => { var cloneMeshGroup = meshGroup.Clone(); var transform = myViewport3D.Children[myViewport3D.Children.Count - 1].Transform.Clone() as Transform3DGroup; foreach (GeometryModel3D geo in cloneMeshGroup.Children) { var mesh = geo.Geometry as MeshGeometry3D; for (int i = 0; i < mesh.TriangleIndices.Count; i += 3) { var p = mesh.Positions[mesh.TriangleIndices[i]]; var p0 = transform.Transform(p); p = mesh.Positions[mesh.TriangleIndices[i + 1]]; var p1 = transform.Transform(p); p = mesh.Positions[mesh.TriangleIndices[i + 2]]; var p2 = transform.Transform(p); facets.Add(new Facet(p0, p1, p2)); } } })); //facets.RemoveAll(m => m.TooSmall); var results = SlicerHelper.DoCircleSlice(facets.ToArray(), new CircleArrayDefine[] { new CircleArrayDefine(new System.Numerics.Plane(0, 0, 1, 0), 200, 360) }); IImageMould im = new LED6432P(); foreach (var key in results.Keys) { var images = CircleSlicer.ToImage(results[key], size, 64, 32, 0, 0); for (int i = 0; i < images.Count; i++) { var bmp = images[i]; //bmp.Save(AppDomain.CurrentDomain.BaseDirectory + i + ".bmp"); frame += "," + im.GetMould(bmp); } } frame = frame.TrimStart(','); return(frame.Split(',').Select(m => Byte.Parse(m.Replace("0x", ""), System.Globalization.NumberStyles.AllowHexSpecifier)).ToArray()); }