PdfSharp.Xps.Rendering.PdfContentWriter.WriteGeometry C# (CSharp) Méthode

WriteGeometry() private méthode

Writes the specified PathGeometry to the content stream.
private WriteGeometry ( PdfSharp.Xps.XpsModel.PathGeometry geo ) : void
geo PdfSharp.Xps.XpsModel.PathGeometry
Résultat void
    internal void WriteGeometry(PathGeometry geo)
    {
      BeginGraphic();

      // PathGeometry itself may have its own transform
      if (geo.Transform != null) // also check render mode?
      {
          MultiplyTransform(geo.Transform);
          WriteRenderTransform(geo.Transform);
      }

      foreach (PathFigure figure in geo.Figures)
      {
        PolyLineSegment pseg;
        PolyBezierSegment bseg;
        ArcSegment aseg;
        PolyQuadraticBezierSegment qseg;

        // And now for the most superfluous and unnecessary optimization within the whole PDFsharp library
        if (figure.IsClosed && figure.Segments.Count == 1 && (pseg = figure.Segments[0] as PolyLineSegment) != null && pseg.Points.Count == 3)
        {
          // Identify rectangles
          Point pt0 = figure.StartPoint;
          Point pt1 = pseg.Points[0];
          Point pt2 = pseg.Points[1];
          Point pt3 = pseg.Points[2];
          // This
          //   M16,0 L24,0 24,144 16,144 Z
          // becomes
          //   16 0 m  24 0 l  24 144 l  16 144 l  h
          // but shorter is this
          //   16 0 8 144 re
          if (pt0.X == pt3.X && pt0.Y == pt1.Y && pt1.X == pt2.X && pt2.Y == pt3.Y)
          {
            WriteLiteral("{0:0.###} {1:0.###} {2:0.###} {3:0.###} re \n", pt0.X, pt0.Y, pt2.X - pt0.X, pt2.Y - pt1.Y);
            continue;
          }
        }
        WriteMoveStart(figure.StartPoint);
        foreach (PathSegment seg in figure.Segments)
        {
          if ((pseg = seg as PolyLineSegment) != null)
            WriteSegment(pseg);
          else if ((bseg = seg as PolyBezierSegment) != null)
            WriteSegment(bseg);
          else if ((aseg = seg as ArcSegment) != null)
            WriteSegment(aseg);
          else if ((qseg = seg as PolyQuadraticBezierSegment) != null)
            WriteSegment(qseg);
        }
        if (figure.IsClosed)
          WriteLiteral("h\n"); // Close current figure
      }
    }