Ejemplo n.º 1
0
        public SvgDocument RectangleToSVG(FigureSettings settings, int width, int height, string filepath)
        {
            SvgDocument svg = new SvgDocument();

            svg.Width  = width;
            svg.Height = height;

            SvgLinearGradientServer gradientFill = new SvgLinearGradientServer
            {
                ID = "lgradient"
            };
            SvgGradientStop from = new SvgGradientStop();

            from.Offset    = new SvgUnit(SvgUnitType.Percentage, 0.0f);
            from.StopColor = new SvgColourServer(settings.ColorFrom);

            SvgGradientStop to = new SvgGradientStop();

            to.Offset    = new SvgUnit(SvgUnitType.Percentage, 100.0f);
            to.StopColor = new SvgColourServer(settings.ColorTo);

            gradientFill.Children.Add(from);
            gradientFill.Children.Add(to);


            SvgRectangle rectangle = new SvgRectangle();

            rectangle.SetRectangle(new RectangleF(getTopLeft(settings, width, height), settings.Dimensions));
            rectangle.Fill = gradientFill;


            SvgDefinitionList defs = new SvgDefinitionList();

            defs.Children.Add(gradientFill);

            svg.Children.Add(defs);
            svg.Children.Add(rectangle);
            File.WriteAllText(filepath, svg.GetXML());
            return(svg);
        }
Ejemplo n.º 2
0
        public void Refresh()
        {
            foreach (Component component in _session.Mapping.Components())
            {
                SvgText text = null;

                if (component.GraphicID != null && _svgElements.ContainsKey(component.GraphicID))
                {
                    text = (SvgText)_svgElements[component.GraphicID];
                    FindTextByID(component.GraphicID + "_NAME").Color = nominalColor;

                    if (!component.Enabled)
                    {
                        FindTextByID(component.GraphicID + "_NAME").Color = disabledColor;
                        text.Text  = "N/A";
                        text.Color = disabledColor;
                        continue;
                    }
                }

                switch (component)
                {
                case PressureComponent pt:
                    bool showAbsolute = PreferenceManager.Manager.Preferences.Visual.ShowAbsolutePressure;
                    if (showAbsolute)
                    {
                        float pressure = pt.Absolute(PreferenceManager.Manager.Preferences.Fluid.TodaysPressure);
                        text.Text  = Component.ToRounded(pressure, 2) + " bara";
                        text.Color = pt.IsNominal(pressure) ? nominalColor : warningColor;
                    }
                    else
                    {
                        text.Text  = Component.ToRounded(pt.Relative(), 2) + " barg";
                        text.Color = pt.IsNominal(pt.Relative()) ? nominalColor : warningColor;
                    }
                    break;

                case TemperatureComponent tc:
                    text.Text  = tc.ToDisplay() + " °C";
                    text.Color = tc.IsNominal(tc.Celcius()) ? nominalColor : warningColor;
                    break;

                case LoadComponent load:
                    text.Text  = load.ToDisplay() + " N";
                    text.Color = load.IsNominal(load.Newtons()) ? nominalColor : warningColor;
                    break;

                case LevelComponent level:
                    text.Text = level.ToDisplay() + " %";

                    float levelGradientStop = 1 - (level.PercentageFull() / 100.0f);
                    SvgLinearGradientServer levelGradient = (SvgLinearGradientServer)_svgElements[level.GraphicIDGradient];
                    levelGradient.Stops[0].Offset = 0.0f;
                    levelGradient.Stops[1].Offset = levelGradientStop;
                    levelGradient.Stops[2].Offset = levelGradientStop;
                    levelGradient.Stops[3].Offset = 1.0f;
                    break;

                case TankComponent tank:
                    text.Text = tank.ToDisplay();

                    float gradientStop = 1 - (tank.ToPercentage() / 100.0f);
                    SvgLinearGradientServer gradient = (SvgLinearGradientServer)_svgElements[tank.GraphicIDGradient];
                    gradient.Stops[0].Offset = 0.0f;
                    gradient.Stops[1].Offset = gradientStop;
                    gradient.Stops[2].Offset = gradientStop;
                    gradient.Stops[3].Offset = 1.0f;
                    break;

                case ServoComponent servo:
                    text.Text = servo.ToDisplay() + " %";
                    break;

                case SolenoidComponent solenoid:
                    text.Text = solenoid.State().ToString();
                    break;

                case VoltageComponent voltage:
                    float volts = voltage.Volts();
                    text.Text  = string.Format(CultureInfo.InvariantCulture, "{0} V / {1} %", volts, Math.Floor(voltage.Percentage() * 100) / 100);
                    text.Color = voltage.IsNominal(voltage.Volts()) ? nominalColor : warningColor;
                    break;

                case FlowComponent flow:
                    text.Text  = flow.ToDisplay() + " kg/s";
                    text.Color = flow.IsNominal(flow.MassFlow) ? nominalColor : warningColor;
                    break;

                case StackHealthComponent health:
                    bool isActive = (DateTime.Now - _session.LastReceived).TotalMilliseconds < 4000;
                    _svgElements[health.GraphicId2].Fill = (_session.Connected && isActive && health.IsMainAlive) ? aliveColor : warningColor;
                    _svgElements[health.GraphicId4].Fill = (_session.Connected && isActive && health.IsSensorAlive) ? aliveColor : warningColor;
                    _svgElements[health.GraphicId3].Fill = (_session.Connected && isActive && health.IsActuatorAlive) ? aliveColor : warningColor;
                    break;
                }
            }
            SvgText       ofRatioText = FindTextByID("MASS_FLOW_RATIO");
            FlowComponent fuelFlow    = _session.Mapping.ComponentsByID()[100] as FlowComponent;
            FlowComponent oxidFlow    = _session.Mapping.ComponentsByID()[101] as FlowComponent;

            if (ofRatioText != null && fuelFlow != null && oxidFlow != null)
            {
                float ofRatio = (oxidFlow.MassFlow / fuelFlow.MassFlow);
                ofRatioText.Text = !float.IsNaN(ofRatio) ?
                                   Component.ToRounded(oxidFlow.MassFlow / fuelFlow.MassFlow, 2)
                        : "0.00";
            }

            UpdateImage();
        }