예제 #1
0
파일: DViewer.cs 프로젝트: djpnewton/ddraw
 public void Paint(DGraphics dg, DPrintSettings dps, Figure backgroundFigure, IList<Figure> figures)
 {
     // margin
     dg.Translate(dps.MarginLeft, dps.MarginTop);
     // scale & center
     double pgAreaX = dps.PageWidth - dps.MarginLeft - dps.MarginRight;
     double pgAreaY = dps.PageHeight - dps.MarginTop - dps.MarginBottom;
     double sx = pgAreaX / PageSize.X;
     double sy = pgAreaY / PageSize.Y;
     if (sx > sy)
     {
         dg.Translate(pgAreaX / 2, 0);
         dg.Scale(sy, sy);
         dg.Translate(- PageSize.X / 2, 0);
     }
     else
     {
         dg.Translate(0, pgAreaY / 2);
         dg.Scale(sx, sx);
         dg.Translate(0, - PageSize.Y / 2);
     }
     // paint figures
     base.Paint(dg, backgroundFigure, figures);
     // paint outline
     dg.DrawRect(0, 0, pageSize.X, pageSize.Y, DColor.Black);
 }
예제 #2
0
파일: Figure.cs 프로젝트: djpnewton/ddraw
 void UnFlipTransform(DGraphics dg)
 {
     DPoint ctr = Rect.Center;
     if (FlipX)
     {
         dg.Scale(-1, 1);
         dg.Translate(-ctr.X * 2, 0);
     }
     if (FlipY)
     {
         dg.Scale(1, -1);
         dg.Translate(0, -ctr.Y * 2);
     }
 }
예제 #3
0
파일: DViewer.cs 프로젝트: djpnewton/ddraw
 public void Paint(DGraphics dg, Figure backgroundFigure, IList<Figure> figures, Figure[] controlFigures)
 {
     // set antialias value
     dg.AntiAlias = AntiAlias;
     // draw backround and transform canvas accordind to the pagesize
     if (Preview)
         dg.Scale(Width / PageSize.X, Height / PageSize.Y); // scale to width & height as this is a preview viewer
     else
     {
         dg.FillRect(0, 0, Width, Height, DColor.LightGray, 1); // gray background
         DPoint offset = CanvasOffset();
         dg.Translate(offset.X, offset.Y); // center drawing
         dg.Scale(scale, scale); // scale canvas
         dg.FillRect(SHADOW_OFFSET, SHADOW_OFFSET, PageSize.X, PageSize.Y, DColor.Black, 1); // draw black canvas shadow
     }
     // paint figures
     if (backgroundFigure != null)
     {
         backgroundFigure.Width = PageSize.X;
         backgroundFigure.Height = PageSize.Y;
         backgroundFigure.Paint(dg);
     }
     if (!Preview && Grid > 0)
     {
         for (int i = 1; i < (PageSize.X / Grid); i++)
             dg.DrawLine(new DPoint(i * grid, 0), new DPoint(i * grid, PageSize.Y), DColor.LightGray, 1, DStrokeStyle.Solid, 1, DStrokeCap.Butt);
         for (int i = 1; i < (PageSize.Y / Grid); i++)
             dg.DrawLine(new DPoint(0, i * grid), new DPoint(PageSize.X, i * grid), DColor.LightGray, 1, DStrokeStyle.Solid, 1, DStrokeCap.Butt);
     }
     double invScale = 1 / scale;
     foreach (Figure figure in figures)
     {
         figure._controlScale = invScale;
         figure.GlyphsVisible = editFigures;
         figure.Paint(dg);
     }
     if (editFigures)
     {
         foreach (Figure figure in figures)
             figure.PaintSelectionChrome(dg);
         if (controlFigures != null)
             foreach (Figure figure in controlFigures)
             {
                 figure._controlScale = invScale;
                 figure.Paint(dg);
             }
     }
 }
예제 #4
0
파일: Figure.cs 프로젝트: djpnewton/ddraw
 protected void ApplyTransforms(DGraphics dg, bool doFlips)
 {
     DPoint ctr = Rect.Center;
     dg.Rotate(Rotation, ctr);
     if (doFlips)
     {
         if (FlipX)
         {
             dg.Translate(ctr.X * 2, 0);
             dg.Scale(-1, 1);
         }
         if (FlipY)
         {
             dg.Translate(0, ctr.Y * 2);
             dg.Scale(1, -1);
         }
     }
 }