Exemplo n.º 1
0
        private void Btn_CNC_Click(object sender, RoutedEventArgs e)
        {
            var facets         = new List <Facet>();
            var cloneMeshGroup = sceneView.MeshGroup.Clone();

            Dispatcher.Invoke(new Action(() =>
            {
                var transform = myViewport3D.Children[myViewport3D.Children.Count - 1].Transform.Clone() as Transform3DGroup;
                var bb        = cloneMeshGroup.Bounds;
                var f         = SlicerHelper.ScaleWeight(new Size3D(bb.SizeX, bb.SizeY, bb.SizeZ), new Size3D(800, 800, 2000));//1500,2000
                var s         = (transform.Children[1] as ScaleTransform3D);
                s.ScaleX      = f;
                s.ScaleY      = f;
                s.ScaleZ      = f;

                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);
                        mesh.Positions[mesh.TriangleIndices[i]] = p0;

                        p      = mesh.Positions[mesh.TriangleIndices[i + 1]];
                        var p1 = transform.Transform(p);
                        mesh.Positions[mesh.TriangleIndices[i + 1]] = p1;

                        p      = mesh.Positions[mesh.TriangleIndices[i + 2]];
                        var p2 = transform.Transform(p);
                        mesh.Positions[mesh.TriangleIndices[i + 2]] = p2;

                        if (p0 != p1 && p0 != p2 && p1 != p2)
                        {
                            var face = new Facet(p0, p1, p2);
                            facets.Add(face);
                        }
                    }
                }

                var b      = cloneMeshGroup.Bounds;
                var c      = (int)Math.Round((b.SizeY - b.Y) / 10.0);
                var d      = new LinearArrayDefine(new Vector3(0, 1, 0), c, (float)b.Y, (float)(b.Y + b.SizeY));
                var result = SlicerHelper.DoLinearSlice(facets.ToArray(), d);

                var form = new CNCForm(result);
                form.ShowDialog();

                /*
                 * var images = LinearSlicer.ToImage(result, 1600, 1600);
                 * for (int i = 0; i < images.Count; i++)
                 * {
                 *  var bmp = images[i];
                 *  bmp.Save(AppDomain.CurrentDomain.BaseDirectory + @"1\" + i + ".bmp");
                 *  bmp.Dispose();
                 * }
                 */
            }));
        }
Exemplo n.º 2
0
        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());
        }