diff --git a/PROMS/VG/AssemblyInfo.cs b/PROMS/VG/AssemblyInfo.cs new file mode 100644 index 00000000..9f89a328 --- /dev/null +++ b/PROMS/VG/AssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("1.0.*")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/PROMS/VG/Properties/licenses.licx b/PROMS/VG/Properties/licenses.licx new file mode 100644 index 00000000..804d7209 --- /dev/null +++ b/PROMS/VG/Properties/licenses.licx @@ -0,0 +1 @@ +C1.C1Pdf.C1PdfDocument, C1.C1Pdf.2, Version=2.1.20082.76, Culture=neutral, PublicKeyToken=79882d576c6336da diff --git a/PROMS/VG/VG.cs b/PROMS/VG/VG.cs new file mode 100644 index 00000000..38139d75 --- /dev/null +++ b/PROMS/VG/VG.cs @@ -0,0 +1,365 @@ +/********************************************************************************************* + * Copyright 2005 - Volian Enterprises, Inc. All rights reserved. + * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + * ------------------------------------------------------------------------------ + * $Workfile: VG.cs $ $Revision: 2 $ + * $Author: Jsj $ $Date: 2/28/06 1:33p $ + * + * $History: VG.cs $ + * + * ***************** Version 2 ***************** + * User: Jsj Date: 2/28/06 Time: 1:33p + * Updated in $/LibSource/VG + * updated for X/Y Plots + * + * ***************** Version 1 ***************** + * User: Kathy Date: 12/06/05 Time: 12:06p + * Created in $/LibSource/VG + * + * ***************** Version 1 ***************** + * User: Kathy Date: 12/06/05 Time: 12:01p + * Created in $/LibSource/VG.root/VG + *********************************************************************************************/ +using System; +using System.Xml; +using System.Drawing; +using System.Text; +using C1.C1Pdf; + +namespace VG +{ + /// + /// VG is the class representing vector graphics. It provides objects for: + /// Line, Rectangle, Text, Ellipse, Bitmaps, etc. + /// VG provides constructors for these objects from coordinate system locations + /// (such as starting x,y ending x,y, etc), xml and svg. + /// VG provides output to PDF. (More can be added). + /// VG data is stored in TWIPS (1440 per inch) + /// + + // Temporary page class to store portrait/landscape, Left Margin, Vertical offset, etc + public class Page + { + public bool portrait=true; + public float LeftMargin=0f; + public float VertOffset=0f; + public Page(bool iport, float lm, float voff) + { + portrait=iport; + LeftMargin=lm; + VertOffset=voff; + } + } + + public class VG + { + // Values of vector graphics items are stored as twips (1440 twips in an inch) + public int cx; + public int cy; + public int dx; + public int dy; + public float lnwid; + public Page pg; + public bool MoveAbsolute; // TODO: Not sure what to do with this. + + public VG() + { + cx = 0; + cy = 0; + dx = 0; + dy = 0; + MoveAbsolute = false; + pg=null; + } + + public VG(int sx, int sy, int ex, int ey, bool ima, Page ipg) + { + cx = sx; + cy = sy; + dx = ex; + dy = ey; + MoveAbsolute = ima; + pg=ipg; + } + + public float ToPoints(float twip) + { + float r = ((float)twip) * 0.05f; + return r; + } + + public void UpdatePageInfo(Page pa) + { + pg.LeftMargin=pa.LeftMargin; + pg.portrait=pg.portrait; + pg.VertOffset=pg.VertOffset; + } + + public string AddRTFBUI(string origStr, string bold, string underline, string italics) + { + if (bold==""&&underline==""&&italics=="")return origStr; + StringBuilder sb = new StringBuilder(); + if (bold == "bold")sb.Append("{\\b"); + if (underline == "underline")sb.Append("{\\u"); + if (italics == "italics") sb.Append("{\\i"); + sb.Append(" "); + sb.Append(origStr); + if (bold == "bold")sb.Append("}"); + if (underline == "underline")sb.Append("}"); + if (italics == "italics") sb.Append("}"); + return sb.ToString(); + } + } + + public class VG_Line : VG + { + // Line is defined as starting & ending points. + public VG_Line(int sx, int sy, int ex, int ey, int w, Page ipg) + { + cx = sx; + cy = sy; + dx = ex; + dy = ey; + lnwid = w; + pg=ipg; + } + + public VG_Line(XmlElement svg, Page ipg) + { + cx = System.Convert.ToInt32(svg.GetAttribute("x1")); + cy = System.Convert.ToInt32(svg.GetAttribute("y1")); + dx = System.Convert.ToInt32(svg.GetAttribute("x2")); + dy = System.Convert.ToInt32(svg.GetAttribute("y2")); + lnwid = System.Convert.ToInt32(svg.GetAttribute("stroke-width")); + pg = ipg; + } + + public void ToPdf(C1PdfDocument c1pdf) + { + float startx = pg.portrait ? (cx + pg.LeftMargin): (pg.VertOffset + cy); + float starty = pg.portrait ? (cy + pg.VertOffset): (pg.LeftMargin - cx); + float endx = pg.portrait ? (dx + pg.LeftMargin): (pg.VertOffset + dy); + float endy = pg.portrait ? (dy + pg.VertOffset): (pg.LeftMargin - dx); + Pen pn = new Pen(Brushes.Black,ToPoints(lnwid)); + c1pdf.DrawLine(pn, ToPoints(startx), ToPoints(starty), ToPoints(endx), ToPoints(endy)); + } + + } + + public class VG_Rect : VG + { + // Rectangle is defined as starting point & length/width + public VG_Rect(int sx, int sy, int ex, int ey, int w, Page ipg) + { + cx = sx; + cy = sy; + dx = ex; + dy = ey; + lnwid = w; + pg = ipg; + } + + public VG_Rect(XmlElement svg, Page ipg) + { + cx = System.Convert.ToInt32(svg.GetAttribute("x")); + cy = System.Convert.ToInt32(svg.GetAttribute("y")); + dx = System.Convert.ToInt32(svg.GetAttribute("width")); + dy = System.Convert.ToInt32(svg.GetAttribute("height")); + lnwid = System.Convert.ToInt32(svg.GetAttribute("stroke-width")); + pg = ipg; + } + + public void ToPdf(C1PdfDocument c1pdf) + { + Pen pn = new Pen(Brushes.Black,ToPoints(lnwid)); + + float startx = pg.portrait ? (cx + pg.LeftMargin): (pg.VertOffset + cy) ; + float starty = pg.portrait ? (cy + pg.VertOffset): (pg.LeftMargin - cx); + float endx = pg.portrait ? dx: dy; + float endy = pg.portrait ? dy: dx; + RectangleF rc = new RectangleF(ToPoints(startx), ToPoints(starty), ToPoints(endx), ToPoints(endy)); + c1pdf.DrawRectangle(pn,rc); + } + } + + public class VG_Image : VG + { + private int Scale; + private string FileName; + + // Image is defined as starting point, scale factor (defaults to 1) & image file name + public VG_Image(int sx, int sy, int iscale, string fname) + { + cx = sx; + cy = sy; + Scale = 1; + FileName = fname; + } + + public VG_Image(XmlElement svg, Page ipg) + { + cx = System.Convert.ToInt32(svg.GetAttribute("x")); + cy = System.Convert.ToInt32(svg.GetAttribute("y")); + Scale=1; + if (svg.HasAttribute("scale")) Scale = System.Convert.ToInt32(svg.GetAttribute("scale")); + FileName = svg.GetAttribute("bname"); + pg = ipg; + } + + public void ToPdf(C1PdfDocument c1pdf) + { + Pen pn = new Pen(Brushes.Black,lnwid); + Bitmap bm = new Bitmap(FileName); + RectangleF rc = new RectangleF(); + rc.Height = ToPoints((bm.Height*Scale)*4.8f); + rc.Width = ToPoints((bm.Width*Scale)*4.8f); + rc.X = ToPoints(pg.LeftMargin+cx); + rc.Y = ToPoints(pg.VertOffset+cy); + c1pdf.DrawImage(bm, rc, ContentAlignment.MiddleCenter, ImageSizeModeEnum.Scale); + } + } + + public class VG_Ellipse : VG + { + // Ellipse (circle) is defined by a bounding rectangle specified by a coordinate pair, a width, and a height + public VG_Ellipse(int sx, int sy, int ex, int ey, int w, Page ipg) + { + cx = sx; + cy = sy; + dx = ex; + dy = ey; + lnwid = w; + pg = ipg; + } + + public VG_Ellipse(XmlElement svg, Page ipg) + { + cx = System.Convert.ToInt32(svg.GetAttribute("cx")); + cy = System.Convert.ToInt32(svg.GetAttribute("cy")); + dx = System.Convert.ToInt32(svg.GetAttribute("rx")); + dy = System.Convert.ToInt32(svg.GetAttribute("ry")); + lnwid = System.Convert.ToInt32(svg.GetAttribute("stroke-width")); + pg = ipg; + } + + public void ToPdf(C1PdfDocument c1pdf) + { + Pen pn = new Pen(Brushes.Black,ToPoints(lnwid)); + c1pdf.DrawEllipse(pn,ToPoints(pg.LeftMargin+cx), ToPoints(pg.VertOffset+cy), ToPoints(dx), ToPoints(dy)); + } + } + + public class VG_Text : VG + { + private string FontName; + private int FontSize; + private string Bold; + private string Underline; + private string Italics; + private string Text; + + // Text is defined by a starting location, attributes & the string + public VG_Text(int sx, int sy, int fs, string txt, string fn, string ibold, string iunder, string iitalics, Page ipg) + { + cx = sx; + cy = sy; + FontSize = fs; + FontName = fn; + Text = txt; + Bold = ibold; + Underline = iunder; + Italics = iitalics; + pg = ipg; + // TODO: The following were in the 16-bit code - we may need to use these, wait and see +// strokeWidth = stroke; +// strokeWidthBold = strokebold; +// ULOffset = UnderlineOffset; +// ULWidth = UnderlineWidth; + } + + public VG_Text(XmlElement svg, Page ipg) + { + cx = System.Convert.ToInt32(svg.GetAttribute("x")); + cy = System.Convert.ToInt32(svg.GetAttribute("y")); + FontSize = System.Convert.ToInt32(svg.GetAttribute("font-size")); + Bold = svg.GetAttribute("font-weight"); + Underline = svg.GetAttribute("text-decoration"); + Italics = svg.GetAttribute("font-style"); + FontName = svg.GetAttribute("font-family"); + Text = svg.InnerText; + pg = ipg; + } + + public void ToPdf(C1PdfDocument c1pdf) + { + Font myfont = new Font(FontName,FontSize); + RectangleF rc = new RectangleF(); + // the returned value from c1 pdf code is already in points, + // so need to convert the size. + rc.Size = c1pdf.MeasureStringRtf(Text,myfont,500); // TODO: 500 or pagewidth, or what + rc.X = ToPoints(pg.LeftMargin+cx); + rc.Y = ToPoints(pg.VertOffset+cy)-FontSize; + // add bold, underline & italics for entire object. + string rtfout = AddRTFBUI(Text,Bold,Underline,Italics); + c1pdf.DrawStringRtf(rtfout,myfont,Brushes.Black,rc); + } + } +public class VG_Arc : VG + { + public Single sweepAngle; + public Single startAngle; + public float stX,stY; + public float rWid,rHgt; +#if DEBUG + public static int iColor=0; + public Color [] myColors={Color.Red,Color.Orange,Color.Yellow,Color.Green,Color.Blue,Color.BlueViolet,Color.Violet}; +#endif + // Arc is defined by a bounding rectangle specified by a coordinate pair, a width, and a height + public VG_Arc(float sx, float sy, float width, float hight, float stAngle, float swpAngle, int w, Page ipg) + { + stX = sx; + stY = sy; + rWid = width; + rHgt = hight; + startAngle = stAngle; +// startAngle = 90; + sweepAngle = swpAngle; +// sweepAngle = -45; + lnwid = w; + pg = ipg; + } + +// public VG_Arc(XmlElement svg, Page ipg) +// { +// cx = System.Convert.ToInt32(svg.GetAttribute("cx")); +// cy = System.Convert.ToInt32(svg.GetAttribute("cy")); +// dx = System.Convert.ToInt32(svg.GetAttribute("rx")); +// dy = System.Convert.ToInt32(svg.GetAttribute("ry")); +// lnwid = System.Convert.ToInt32(svg.GetAttribute("stroke-width")); +// pg = ipg; +// } + + public void ToPdf(C1PdfDocument c1pdf) + { +// Pen pn = new Pen(Brushes.Black,ToPoints(lnwid)); +#if DEBUG + Pen pn = new Pen(myColors[iColor],ToPoints(lnwid)); + iColor=(iColor+1)%myColors.Length; +#else + Pen pn = new Pen(Color.Black,ToPoints(lnwid)); +#endif +// PointF startpt = new PointF(stX,stY); +// SizeF recsize = new SizeF(rWid,rHgt); +// RectangleF rc = new RectangleF(startpt,recsize); + float startx = pg.portrait ? (stX + pg.LeftMargin): (pg.VertOffset + stY); + float starty = pg.portrait ? (stY + pg.VertOffset): (pg.LeftMargin - stX); + RectangleF rc = new RectangleF(ToPoints(startx),ToPoints(starty),ToPoints(rWid),ToPoints(rHgt)); +// c1pdf.DrawRectangle(pn,rc); //debug + +// c1pdf.DrawArc(new Pen(Color.Black,ToPoints(lnwid)),new RectangleF(stX,stY,rWid,rHgt),startAngle,sweepAngle); + c1pdf.DrawArc(pn,rc,startAngle,sweepAngle); + // c1pdf.DrawArc(new Pen(Color.Black, 4),rc,startAngle,sweepAngle); + } + } +} + diff --git a/PROMS/VG/VG.csproj b/PROMS/VG/VG.csproj new file mode 100644 index 00000000..9009867a --- /dev/null +++ b/PROMS/VG/VG.csproj @@ -0,0 +1,114 @@ + + + Local + 8.0.50727 + 2.0 + {52D74078-3822-410E-889B-464BD21AAB9E} + SAK + SAK + SAK + SAK + Debug + AnyCPU + + + + + VG + + + JScript + Grid + IE50 + false + Library + VG + OnBuildSuccess + + + + + + + + + bin\Debug\ + false + 285212672 + false + + + DEBUG;TRACE + + + true + 4096 + false + + + false + false + false + false + 4 + full + prompt + + + bin\Release\ + false + 285212672 + false + + + TRACE + + + false + 4096 + false + + + true + false + false + false + 4 + none + prompt + + + + + System + + + System.Data + + + System.Drawing + + + + System.XML + + + + + Code + + + Code + + + + + + + + + + + + + \ No newline at end of file diff --git a/PROMS/VG/VG.csproj.vspscc b/PROMS/VG/VG.csproj.vspscc new file mode 100644 index 00000000..b6d32892 --- /dev/null +++ b/PROMS/VG/VG.csproj.vspscc @@ -0,0 +1,10 @@ +"" +{ +"FILE_VERSION" = "9237" +"ENLISTMENT_CHOICE" = "NEVER" +"PROJECT_FILE_RELATIVE_PATH" = "" +"NUMBER_OF_EXCLUDED_FILES" = "0" +"ORIGINAL_PROJECT_FILE_PATH" = "" +"NUMBER_OF_NESTED_PROJECTS" = "0" +"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER" +}