/// <summary>
        /// Reset parameters when a non-Droplet Print action is used.
        /// Returns the remaining movement (in mm) that has not yet been covered by droplet printing.
        /// Index 0 of the return value is X, 1 is Y, 2 is Z.
        /// When calling this method, the remaining movement in the return value should be executed.
        /// </summary>
        /// <param name="materialModel"></param>
        public double[] ResetDropletPrintParameters(MaterialModel currentMaterial, MaterialModel newMaterial)
        {
            //Return the remaining movement (in mm) from the previous material that was not covered by droplet printing.
            double[] remainingDistanceToMove = { 0, 0, 0 };
            if ((currentMaterial != null) &&
                (currentMaterial.PrintStyle == PrintStyle.Droplet))
            {
                remainingDistanceToMove = _dropletModel.PreDistance;
            }

            //Set new droplet parameters if applicable.
            if (newMaterial == null)
            {
                //A new material is not being set but Droplet parameters still need to be reset.
                DropletPrintStyleModel dropletPrintStyleModel = (DropletPrintStyleModel)currentMaterial.PrintStyleModel;
                _dropletModel = new DropletModel(dropletPrintStyleModel);
            }
            else if (newMaterial.PrintStyle == PrintStyle.Droplet)
            {
                //A new material is being set. Create new Droplet parameters.
                DropletPrintStyleModel dropletPrintStyleModel = (DropletPrintStyleModel)newMaterial.PrintStyleModel;
                _dropletModel = new DropletModel(dropletPrintStyleModel);
            }

            return(remainingDistanceToMove);
        }
示例#2
0
        /// <summary>
        /// Supports concentration gradients.
        /// </summary>
        /// <param name="DropletPrintStyleModel"></param>
        public DropletModel(DropletPrintStyleModel DropletPrintStyleModel)
        {
            _interpolateDistance = DropletPrintStyleModel.InterpolateDistance;
            _gradientShape       = DropletPrintStyleModel.GradientShape;
            _gradientScaling     = DropletPrintStyleModel.GradientScaling;

            Point3D point1 = new Point3D(DropletPrintStyleModel.X1, DropletPrintStyleModel.Y1, DropletPrintStyleModel.Z1);
            Point3D point2 = new Point3D(DropletPrintStyleModel.X2, DropletPrintStyleModel.Y2, DropletPrintStyleModel.Z2);
            Point3D point3 = new Point3D(DropletPrintStyleModel.X3, DropletPrintStyleModel.Y3, DropletPrintStyleModel.Z3);

            switch (DropletPrintStyleModel.GradientShape)
            {
            case GradientShape.None:
                _gradientModel = null;
                break;

            case GradientShape.Point:
                _gradientModel = new PointModel(_gradientScaling, DropletPrintStyleModel.PercentPerMm, point1);
                break;

            case GradientShape.Line:
                _gradientModel = new LineModel(_gradientScaling, DropletPrintStyleModel.PercentPerMm, point1, point2);
                break;

            case GradientShape.Plane:
                _gradientModel = new PlaneModel(_gradientScaling, DropletPrintStyleModel.PercentPerMm, point1, point2, point3);
                break;
            }
        }
 public DropletPrintStyleViewModel(DropletPrintStyleModel DropletPrintStyleModel) : base(DropletPrintStyleModel)
 {
     _dropletPrintStyleModel = DropletPrintStyleModel;
 }