Пример #1
0
        private Model3D createCube(Point3D center, double size)
        {
            var line = new SegmentCollection3D();

            var v = new Vector3D(0, 0, 1);

            var p1 = center + (v * size / 2);
            var p2 = center - (v * size / 2);

            line.AddSegment(p1, p2);

            return(createModel(line.CreateMesh(size)));
        }
Пример #2
0
        private void gCodeDemo(object sender, RoutedEventArgs e)
        {
            enable3dOutput();

            var test   = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
            var gcodes = Encoding.ASCII.GetString(ExampleData.hemisphere_gcodes);

            var parser = new Parser(gcodes);
            var path   = parser.GetToolPath();

            // collect the path segments
            var targets         = path.Targets.ToArray();
            var rapidSegments   = new SegmentCollection3D();
            var workingSegments = new SegmentCollection3D();
            var lastTarget      = path.Targets.First();

            foreach (var target in path.Targets.Skip(1))
            {
                var activeSegments = workingSegments;
                if (target.MotionMode == MotionMode.IsLinearRapid)
                {
                    activeSegments = rapidSegments;
                }

                activeSegments.AddSegment(lastTarget.End, target.End);
                lastTarget = target;
            }

            // draw gcode as 3D meshes
            var lineThickness = 0.05;
            var workingMesh   = workingSegments.CreateMesh(lineThickness);
            var rapidMesh     = rapidSegments.CreateMesh(lineThickness);

            output3D(createModel(workingMesh, frontColor: Brushes.Blue, useComplexMaterial: true));
            output3D(createModel(rapidMesh, frontColor: Brushes.DarkOrange, useComplexMaterial: true));

            var pointSize   = 1.0;
            var activePoint = createCube(targets.First().End, pointSize);

            output3D(activePoint);

            enableSlider(targets.Length, (tick) =>
            {
                remove3D(activePoint);
                activePoint = createCube(targets[tick].End, pointSize);
                output3D(activePoint);
            });
        }