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); }
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); }