示例#1
0
        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);
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }