public GCodeExporter(Model model, SlicerOptions options, Vector2 offset) { Model = model ?? throw new ArgumentNullException("model"); Options = options ?? throw new ArgumentNullException("options"); ObjectDimensions dimensions = model.Dimensions; Position = new Vector3(offset.X - (dimensions.Size.X / 2 + dimensions.MinPoint.X), offset.Y - (dimensions.Size.Y / 2 + dimensions.MinPoint.Y), -dimensions.MinPoint.Z); }
public void Defaults() { SlicerOptions options = new SlicerOptions(); Assert.IsNotNull(options.Printer); Assert.IsNotNull(options.Slice); Assert.IsNotNull(options.Fill); Assert.IsNotNull(options.Skirt); Assert.IsNotNull(options.View); }
private void LoadSettings() { string path = GetSettingsFilePath(); if (!File.Exists(path)) { return; } try { using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { XmlSerializer serializer = new XmlSerializer(typeof(SlicerOptions)); options = (SlicerOptions)serializer.Deserialize(fs); } } catch { MessageBox.Show("Не могу загрузить настройки приложения!", Text, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public static Slice GetSkirt(this Model model, float scale, SlicerOptions options) { Slice slice = new Slice(); SlicePart part = new SlicePart(); ObjectDimensions dimensions = model.Dimensions; Vector3 minPoint = dimensions.MinPoint; Vector3 maxPoint = dimensions.MaxPoint; float skirtDistance = options.Skirt.Distance / scale; float skirtZ = dimensions.MinPoint.Z + options.Printer.ExtruderDiameter / 2; part.Points.Add(new Vector3(minPoint.X - skirtDistance / 2, minPoint.Y - skirtDistance, skirtZ)); // 0 part.Normals.Add(-Vector3.UnitY); part.Points.Add(new Vector3(maxPoint.X + skirtDistance / 2, minPoint.Y - skirtDistance, skirtZ)); // 1 part.Normals.Add((Vector3.UnitX - Vector3.UnitY).Normalized()); part.Points.Add(new Vector3(maxPoint.X + skirtDistance, minPoint.Y - skirtDistance / 2, skirtZ)); // 2 part.Normals.Add(Vector3.UnitX); part.Points.Add(new Vector3(maxPoint.X + skirtDistance, maxPoint.Y + skirtDistance / 2, skirtZ)); // 3 part.Normals.Add((Vector3.UnitX + Vector3.UnitY).Normalized()); part.Points.Add(new Vector3(maxPoint.X + skirtDistance / 2, maxPoint.Y + skirtDistance, skirtZ)); // 4 part.Normals.Add(Vector3.UnitY); part.Points.Add(new Vector3(minPoint.X - skirtDistance / 2, maxPoint.Y + skirtDistance, skirtZ)); // 5 part.Normals.Add((-Vector3.UnitX + Vector3.UnitY).Normalized()); part.Points.Add(new Vector3(minPoint.X - skirtDistance, maxPoint.Y + skirtDistance / 2, skirtZ)); // 6 part.Normals.Add(-Vector3.UnitX); part.Points.Add(new Vector3(minPoint.X - skirtDistance, minPoint.Y - skirtDistance / 2, skirtZ)); // 7 part.Normals.Add((-Vector3.UnitX - Vector3.UnitY).Normalized()); part.Closed = true; slice.Parts.Add(part); return(slice); }
public static Slice GetSlice(this Model model, float z, SlicerOptions options) { Slice slice = new Slice(); foreach (Facet facet in model.Facets) { PlanePosition position = facet.GetPlanePosition(z); if (position == PlanePosition.Intersect) { List <Vector3> points = facet.GetSection(z); if (points.Count == 2) { slice.AddSection(points[0], points[1], facet.Normal); } } } slice.Join(); slice.Simplify(options.Slice.SimplifyDistance); if (options.Slice.Flatten) { slice.Flatten(options.Slice.FlattenTolerance); } return(slice); }