예제 #1
0
        public ColorGradientWidget(GCodeFile gcodeFileTest)
            : base(FlowDirection.TopToBottom)
        {
            BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);

            HashSet <float>           speeds = new HashSet <float>();
            PrinterMachineInstruction previousInstruction = gcodeFileTest.Instruction(0);

            for (int i = 1; i < gcodeFileTest.LineCount; i++)
            {
                PrinterMachineInstruction instruction = gcodeFileTest.Instruction(i);
                if (instruction.EPosition > previousInstruction.EPosition && (instruction.Line.IndexOf('X') != -1 || instruction.Line.IndexOf('Y') != -1))
                {
                    speeds.Add((float)instruction.FeedRate);
                }
                previousInstruction = instruction;
            }

            ExtrusionColors extrusionColors = new ExtrusionColors();

            speeds.Select(speed => extrusionColors.GetColorForSpeed(speed)).ToArray();

            if (speeds.Count <= 0)
            {
                // There are no paths so don't generate the rest of the widget.
                return;
            }

            float min      = speeds.Min();
            float max      = speeds.Max();
            int   maxItems = Math.Min(7, speeds.Count());

            int   count     = maxItems - 1;
            float increment = (max - min) / count;
            int   index     = 0;

            int[] rangeValues;
            if (speeds.Count < 8)
            {
                rangeValues = speeds.Select(s => (int)s).OrderBy(i => i).ToArray();
            }
            else
            {
                rangeValues = Enumerable.Range(0, maxItems).Select(x => (int)(min + increment * index++)).ToArray();
            }

            RGBA_Bytes[] speedColors = rangeValues.OrderBy(s => s).Select(speed => extrusionColors.GetColorForSpeed(speed)).ToArray();

            for (int i = 0; i < speedColors.Length; i++)
            {
                RGBA_Bytes color = speedColors[i];
                int        speed = rangeValues[i];

                GuiWidget colorWidget = new GuiWidget();
                colorWidget.Width           = 20;
                colorWidget.Height          = 20;
                colorWidget.BackgroundColor = color;
                colorWidget.Margin          = new BorderDouble(2);
                double feedRateToMMPerSecond = speed / 60;

                ColorToSpeedWidget colorToSpeedWidget = new ColorToSpeedWidget(colorWidget, feedRateToMMPerSecond);
                this.AddChild(colorToSpeedWidget);
            }

            Margin   = new BorderDouble(5, 5, 200, 50);
            HAnchor |= Agg.UI.HAnchor.ParentLeft;
            VAnchor  = Agg.UI.VAnchor.ParentTop;
        }
		public ColorGradientWidget(GCodeFile gcodeFileTest)
			: base(FlowDirection.TopToBottom)
		{
			BackgroundColor = new RGBA_Bytes(0, 0, 0, 120);

			HashSet<float> speeds = new HashSet<float>();
			PrinterMachineInstruction previousInstruction = gcodeFileTest.Instruction(0);
			for (int i = 1; i < gcodeFileTest.LineCount; i++)
			{
				PrinterMachineInstruction instruction = gcodeFileTest.Instruction(i);
				if (instruction.EPosition > previousInstruction.EPosition && (instruction.Line.IndexOf('X') != -1 || instruction.Line.IndexOf('Y') != -1))
				{
					speeds.Add((float)instruction.FeedRate);
				}
				previousInstruction = instruction;
			}

			ExtrusionColors extrusionColors = new ExtrusionColors();

			speeds.Select(speed => extrusionColors.GetColorForSpeed(speed)).ToArray();

			if(speeds.Count <= 0)
			{
				// There are no paths so don't generate the rest of the widget.
				return;
			}

			float min = speeds.Min();
			float max = speeds.Max();
			int maxItems = Math.Min(7, speeds.Count());

			int count = maxItems - 1;
			float increment = (max - min) / count;
			int index = 0;

			int[] rangeValues;
			if (speeds.Count < 8)
			{
				rangeValues = speeds.Select(s => (int)s).OrderBy(i => i).ToArray();
			}
			else
			{
				rangeValues = Enumerable.Range(0, maxItems).Select(x => (int)(min + increment * index++)).ToArray();
			}

			RGBA_Bytes[] speedColors = rangeValues.OrderBy(s => s).Select(speed => extrusionColors.GetColorForSpeed(speed)).ToArray();

			for (int i = 0; i < speedColors.Length; i++)
			{
				RGBA_Bytes color = speedColors[i];
				int speed = rangeValues[i];

				GuiWidget colorWidget = new GuiWidget();
				colorWidget.Width = 20;
				colorWidget.Height = 20;
				colorWidget.BackgroundColor = color;
				colorWidget.Margin = new BorderDouble(2);
				double feedRateToMMPerSecond = speed / 60;

				ColorToSpeedWidget colorToSpeedWidget = new ColorToSpeedWidget(colorWidget, feedRateToMMPerSecond);
				this.AddChild(colorToSpeedWidget);
			}

			Margin = new BorderDouble(5, 5, 200, 50);
			HAnchor |= Agg.UI.HAnchor.ParentLeft;
			VAnchor = Agg.UI.VAnchor.ParentTop;
		}