Difference between revisions of "fpvectorial"

From Lazarus wiki
Jump to navigationJump to search
Line 16: Line 16:
 
* '''avisocncgcodereader''' - Read support for the G-Code from the Aviso CNC machine
 
* '''avisocncgcodereader''' - Read support for the G-Code from the Aviso CNC machine
 
* '''avisocncgcodewriter''' - Write support for the G-Code from the Aviso CNC machine
 
* '''avisocncgcodewriter''' - Write support for the G-Code from the Aviso CNC machine
* '''cdrvectorialreader''' - Skeleton of a reader support for Corel Draw CDR files
+
* '''cdrvectorialreader''' - Initial work of a reader support for Corel Draw CDR files
* '''svgvectorialwriter''' - Write support for SVG. Supports lines at the moment
+
* '''svgvectorialwriter''' - Write support for SVG. The most advanced at the moment. Supports lines, curves and text
  
 
'''Other units'''
 
'''Other units'''

Revision as of 10:00, 1 September 2010

Introduction

FPVectorial offers support to read, modify and write vectorial images.

It's counterpart library is fp-image, which works with raster images. FPVectorial comes with a unit which allows to draw a vectorial image to a TFPCustomCanvas, but no routines are provided to convert raster images to vectorial images.

Current file list

FPVectorial is located in Free Pascal 2.3.1+ in the directory fpc/packages/fpvectorial/src

The central unit is fpvectorial.

Readers and writers for various image formats

  • pdfvectorialreader - Read support for PDF files, supports compression, only reads the first page
  • avisocncgcodereader - Read support for the G-Code from the Aviso CNC machine
  • avisocncgcodewriter - Write support for the G-Code from the Aviso CNC machine
  • cdrvectorialreader - Initial work of a reader support for Corel Draw CDR files
  • svgvectorialwriter - Write support for SVG. The most advanced at the moment. Supports lines, curves and text

Other units

  • fpvtocanvas - Converts a vectorial document to a TFPCustomCanvas descendent (like TCanvas). Essentially converts the vectorial image to a raster image
  • pdfvrlexico, pdfvrsemantico, pdfvrsintatico, avisozlib - Other units from the PDF reader, don't use directly

Formats

PDF

The PDF format is developed by Adobe (tm) and it is fully documented. Inside, PDF is simply text, so it is rather easy to parse, but parts of this text are usually can be compressed.

Link to the PDF Reference: http://www.adobe.com/devnet/pdf/pdf_reference.html

CorelDraw

Corel does not release public documentation for it's CorelDraw file format. Any information about this format depends on reverse engineering and guessing. The format is binary and consists of a tree of chunks.

SVG

Scalable Vectorial Graphics (SVG) is a standard from W3C for vectorial graphics. It is the native format of Inkscape and stores it's data as a single, uncompressed XML file with the extension ".svg".

Link to the specification: http://www.w3.org/TR/SVG/

A very serious shortcoming in SVG is that it does not allow real world units to be specified in the drawing routines, only pixel values accepted, which makes it impossible to have a document with real world units. This can be worked around by simply hardcoding to a fixed DPI resolution, which is 90 DPI for Inkscape. Read more here:

Following Inkscape and the Opera Browser, FPVectorial also hardcodes to 90 DPI.

Usage

  • Loads a PDF, converts it to G-Code and writes the G-Code to a TStrings descendent

<delphi> uses

 fpvectorial, pdfvectorialreader, avisocncgcodewriter;

var

 Vec: TvVectorialDocument;

begin

 if dialogoAbrir.Execute() then
 begin
   Vec := TvVectorialDocument.Create;
   try
     Vec.ReadFromFile(dialogoAbrir.FileName, vfPDF);
     Vec.WriteToStrings(synCodigo.Lines, vfGCodeAvisoCNCPrototipoV5);
   finally
     Vec.Free;
   end;
 end;

end; </delphi>

More examples

Please see in the FPC repository: http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/fpvectorial/examples/

Go to back Packages List