[fitz-dev] Re: Vector graphics

Antony Courtney antony at apocalypse.org
Wed Nov 27 16:46:54 PST 2002


Hi Jon,

Unfortunately, the page you found is rather out of date; there is a 
somewhat more up to date discussion available on the Fitz wiki:

http://wiki.ghostscript.com/cgi-bin/fitz

I think your message can probably be better answered by Raph Levien, who 
is really in charge of the Fitz project, so I'm Cc-ing this to the 
fitz-dev mailing list.

In the meantime, I attempted to download and install smoke.  It looks 
pretty neat, but I ran in to trouble when trying to compile it on my 
RedHat 7.2 system.  I ran into some compile problems because it seemed 
to need the Blitz library (probably worth mentionining in the README). 
After finding and installing Blitz 0.6, I got some other compile errors 
(included as an attachment to this message) about issues with private 
member access.  I hope there is a quick fix, as I'd be quite keen to 
play with your system.

best regards,

	-antony

Jon Harrop wrote:
> I just stumbled across the page:
> 
> http://www.haskell.org/fitz/arch/arch.html
> 
> which has your name at the bottom of it and, given the host, I'd guess you 
> wrote it. ;)
> 
> I'm also very interested in vector graphics and, it appears, have similar 
> beliefs to you. I have long thought that vector graphics should be integrated 
> into far more applications. I believe this process is inevitable but would be 
> greatly accelerated by the release of a superior, open-source vector graphics 
> rendering library. Libart is good at what it does but lacks many features and 
> a simple API.
> 
> I've been dabbling in the area for some years and I actually released some 
> code in the last couple of days:
> 
> http://www.chem.pwf.cam.ac.uk/~jdh30/programming/opengl/smoke/index.html
> 
> This is a functioning vector graphics engine which is in many ways similar to 
> existing libraries. The main difference is that this library uses OpenGL for 
> all rendering. This has two main advantages:
> 
> a) the library is much smaller and
> b) rendering can be offloaded to dedicated hardware when available.
> 
> Like you I also believe it is important to use the same renderer for screen 
> display as well as print and have written a related library:
> 
> http://www.chem.pwf.cam.ac.uk/~jdh30/programming/opengl/pbuffer/index.html
> 
> This library greatly simplifies the use of pixel buffers under X. Pixel 
> buffers (pbuffers) are an SGI OpenGL extension which allow hardware 
> accelerated rendering to off-screen buffers. I wrote this library for my 
> vector graphics engine for two reasons:
> 
> a) to allow a printer driver to work in the background whilst using hardware 
> acceleration and
> b) to allow more flexible anti-aliasing whilst exploiting the hardware as 
> much as possible.
> 
> My renderer uses the SGI reference polygon tesselator which was recently 
> incorporated into Mesa. Previously the Mesa tesselator was horribly broken 
> and I wasn't able to use this approach. Now, contour objects composed of 
> bezier and straight line segments are flattened to straight line 
> approximations before being tesselated into polygons ready for rendering. 
> This has a couple of main advantages:
> 
> a) the tesselation can be cached and is invariant under more conditions than 
> a software scanconversion (e.g. rotation) and
> b) the CPU doesn't have to handle any pixel level operations with all 
> scanconversion being done in hardware.
> 
> I've love to see vector graphics become standard under Linux (and beyond) and 
> look forward to hearing your comments!
> 
> Cheers,
> Jon.
> 



-- 
Antony Courtney
Grad. Student, Dept. of Computer Science, Yale University
antony at apocalypse.org          http://www.apocalypse.org/pub/u/antony
-------------- next part --------------
g++ -c -pipe -Wall -O2 -pg -g -DBZ_DEBUG -D_REENTRANT -I/usr/include/freetype2 -I/usr/X11R6/include -o src/contourobject.o src/contourobject.cc
In file included from src/contourobject.cc:4:
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:138: within this context
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:139: within this context
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:142: within this context
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:145: within this context
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:148: within this context
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:150: within this context
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:150: within this context
src/contourobject.h: In method `void Contour::flatten (const Mat &, 
double, const ViewPort &, list<Vec, allocator<Vec> > &, Num &) const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:157: within this context
src/contourobject.h: In method `void Contour::flatten (double, const 
ViewPort &, list<Vec, allocator<Vec> > &, Num &) const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:163: within this context
src/contourobject.h: In method `list<Segment *, allocator<Segment *> > 
&Contour::get ()':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:178: within this context
src/contourobject.h: In method `const list<Segment *, allocator<Segment 
*> > &Contour::get () const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:182: within this context
src/contourobject.h: In method `const bool &Contour::isClosed () 
const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:185: within this context
src/contourobject.h: In method `void Contour::setClosed (bool)':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:192: within this context
src/contourobject.h: In method `const Vec &Contour::getStart () const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:196: within this context
src/contourobject.h: In method `void Contour::insert (Segment *)':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:200: within this context
src/contourobject.h: In method `unsigned int Contour::size () const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:203: within this context
src/contourobject.h: In method `void Contour::calcBounds () const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:206: within this context
src/contourobject.h: In method `Vec Contour::getBottomLeft () const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:209: within this context
src/contourobject.h: In method `Vec Contour::getTopRight () const':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.h:212: within this context
src/contourobject.cc: In method `void ContourObject::preRenderRecreate 
(const ViewPort &)':
src/object.h:94: `class PathObject::Projector' is private
src/contourobject.cc:380: within this context
src/contourobject.cc: In method `void ContourObject::preRender (const 
ViewPort &)':
src/contourobject.cc:443: no match for `Vec & + Vec &'
/usr/include/g++-3/std/fcomplex.h:60: candidates are: complex<float> 
operator+ (const complex<float> &, float)
/usr/include/g++-3/std/fcomplex.h:62:                 complex<float> 
operator+ (float, const complex<float> &)
/usr/include/g++-3/std/dcomplex.h:60:                 complex<double> 
operator+ (const complex<double> &, double)
/usr/include/g++-3/std/dcomplex.h:62:                 complex<double> 
operator+ (double, const complex<double> &)
/usr/include/g++-3/std/ldcomplex.h:60:                 complex<long 
double> operator+ (const complex<long double> &, long double)
/usr/include/g++-3/std/ldcomplex.h:62:                 complex<long 
double> operator+ (long double, const complex<long double> &)
/usr/local/include/blitz/meta/metaprog.h:56:                 T blitz::operator+ (const T &, 
blitz::_bz_meta_nullOperand) [with T = Vec]
src/contourobject.cc:443: no match for `Vec & - Vec &'
/usr/include/g++-3/std/fcomplex.h:64: candidates are: complex<float> 
operator- (const complex<float> &, float)
/usr/include/g++-3/std/fcomplex.h:66:                 complex<float> 
operator- (float, const complex<float> &)
/usr/include/g++-3/std/dcomplex.h:64:                 complex<double> 
operator- (const complex<double> &, double)
/usr/include/g++-3/std/dcomplex.h:66:                 complex<double> 
operator- (double, const complex<double> &)
/usr/include/g++-3/std/ldcomplex.h:64:                 complex<long 
double> operator- (const complex<long double> &, long double)
/usr/include/g++-3/std/ldcomplex.h:66:                 complex<long 
double> operator- (long double, const complex<long double> &)
/usr/local/include/blitz/vecexpr.h:289:                 
blitz::_bz_VecExpr<blitz::_bz_VecExprUnaryOp<blitz::Range, 
blitz::_bz_negate<int> > > blitz::operator- (blitz::Range)
src/contourobject.cc:444: no match for `double * Vec &'
/usr/include/g++-3/std/fcomplex.h:68: candidates are: complex<float> 
operator* (const complex<float> &, float)
/usr/include/g++-3/std/fcomplex.h:70:                 complex<float> 
operator* (float, const complex<float> &)
/usr/include/g++-3/std/dcomplex.h:68:                 complex<double> 
operator* (const complex<double> &, double)
/usr/include/g++-3/std/dcomplex.h:70:                 complex<double> 
operator* (double, const complex<double> &)
/usr/include/g++-3/std/ldcomplex.h:68:                 complex<long 
double> operator* (const complex<long double> &, long double)
/usr/include/g++-3/std/ldcomplex.h:70:                 complex<long 
double> operator* (long double, const complex<long double> &)
src/vecmat.h:23:                 Vec operator* (blitz::TinyMatrix<Num, 
4, 4>, blitz::TinyVector<Num, 2>)
/usr/local/include/blitz/meta/metaprog.h:58:                 T blitz::operator* (const T &, 
blitz::_bz_meta_nullOperand) [with T = double]
src/contourobject.cc:445: no match for `double * Vec &'
/usr/include/g++-3/std/fcomplex.h:68: candidates are: complex<float> 
operator* (const complex<float> &, float)
/usr/include/g++-3/std/fcomplex.h:70:                 complex<float> 
operator* (float, const complex<float> &)
/usr/include/g++-3/std/dcomplex.h:68:                 complex<double> 
operator* (const complex<double> &, double)
/usr/include/g++-3/std/dcomplex.h:70:                 complex<double> 
operator* (double, const complex<double> &)
/usr/include/g++-3/std/ldcomplex.h:68:                 complex<long 
double> operator* (const complex<long double> &, long double)
/usr/include/g++-3/std/ldcomplex.h:70:                 complex<long 
double> operator* (long double, const complex<long double> &)
src/vecmat.h:23:                 Vec operator* (blitz::TinyMatrix<Num, 
4, 4>, blitz::TinyVector<Num, 2>)
/usr/local/include/blitz/meta/metaprog.h:58:                 T blitz::operator* (const T &, 
blitz::_bz_meta_nullOperand) [with T = double]
make: *** [src/contourobject.o] Error 1


More information about the fitz-dev mailing list