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))); }
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); }); }