Example #1
0
        private Surfaces[] TranslateAndScale(Surfaces[] ElementSurfaces)
        {
            Surfaces.CalculateMinMax_Location(ElementSurfaces, out MinX, out MaxX);
            Vector Scale;

            GetScalingParameters(ref MinX, ref MaxX, out Scale);

            Surfaces[] ScaledSurfaces;
            if (ColorPlotOn)
            {
                Surfaces.CalculateMinMax_Values(ElementSurfaces, out Min, out Max);
                double ValueScale;
                if (Math.Abs(Max - Min) > small)
                {
                    ValueScale = 1.0D / (Max - Min);
                }
                else if (Math.Abs(Max) > small)
                {
                    ValueScale = 1.0D / Max;
                }
                else
                {
                    ValueScale = 1.0D;
                }
                ScaledSurfaces = Surfaces.TranslateAndScale(ElementSurfaces, MinX, Scale, Min, ValueScale);
            }
            else
            {
                ScaledSurfaces = Surfaces.TranslateAndScale(ElementSurfaces, MinX, Scale);
            }
            return(ScaledSurfaces);
        }
Example #2
0
        public Metafile[] DrawPlot(Element_ND[] Elements, Node_ND[] Nodes, Vector[] GlobalUnknowns, out Vector MinV, out Vector MaxV)
        {
            int NP = GlobalUnknowns.Length;

            Metafile[] Plots = new Metafile[NP];
            Graphics[] gs    = new Graphics[NP];
            for (int i = 0; i < NP; i++)
            {
                Plots[i] = ImageMethods.MakeMetafile(PageWidth, PageHeight);
                gs[i]    = Graphics.FromImage(Plots[i]);
            }

            SetPlotTypeToDisplay();
            MinV = new Vector(NP);
            MaxV = new Vector(NP);
            Node_ND.Set_UnknownForNode(Nodes, GlobalUnknowns[0]);
            Surfaces[] TheSurfaces = Element_ND.Make_GraphicSurfaces(Elements, Plot_ObjectResolution);
            Surfaces.CalculateMinMax_Values(TheSurfaces, out MinV.Values[0], out MaxV.Values[0]);
            for (int i = 1; i < NP; i++)
            {
                Node_ND.Set_UnknownForNode(Nodes, GlobalUnknowns[i]);
                Element_ND.Change_GraphicSurfaces_Values(Elements, ref TheSurfaces, Plot_ObjectResolution);
                Surfaces.CalculateMinMax_Values(TheSurfaces, out MinV.Values[i], out MaxV.Values[i]);
            }
            double Min = MinV.Min();
            double Max = MaxV.Max();

            for (int i = 0; i < NP; i++)
            {
                Node_ND.Set_UnknownForNode(Nodes, GlobalUnknowns[i]);
                Element_ND.Change_GraphicSurfaces_Values(Elements, ref TheSurfaces, Plot_ObjectResolution);
                if (FixedScale)
                {
                    TheGraph.DrawGraph(gs[i], Xo, TheSurfaces, Min, Max);
                }
                else
                {
                    TheGraph.DrawGraph(gs[i], Xo, TheSurfaces, MinV.Values[i], MaxV.Values[i]);
                }
                if (ColorPlotOn)
                {
                    if (FixedScale)
                    {
                        Plot_ColorScale.Initialize_Calculate_WidthAndHeight(ref gs[i], Min, Max);
                    }
                    else
                    {
                        Plot_ColorScale.Initialize_Calculate_WidthAndHeight(ref gs[i], MinV.Values[i], MaxV.Values[i]);
                    }
                    Plot_ColorScale.x_c            = new Vector(X_TR);
                    Plot_ColorScale.x_c.Values[0] += ColorScalePad + Plot_ColorScale.Width / 2.0D;
                    Plot_ColorScale.AddColorScale(ref gs[i]);
                }
                Vector Title_c = new Vector(X_TC);
                Plot_Title.GetWidthAndHeight(gs[i]);
                Title_c.Values[1] += -TitlePad - Plot_Title.Height;
                Plot_Title.DrawTitle(gs[i], Title_c);

                Vector OPPS_Graphics_c = new Vector(2);
                OOPS_Graphics_Title.GetWidthAndHeight(gs[i]);
                OPPS_Graphics_c.Values[0] = PageWidth - ColorScalePad - OOPS_Graphics_Title.Width / 2.0D;
                OPPS_Graphics_c.Values[1] = PageHeight - ColorScalePad - OOPS_Graphics_Title.Height;
                OOPS_Graphics_Title.DrawTitle(gs[i], OPPS_Graphics_c);

                gs[i].Dispose();
            }
            return(Plots);
        }