[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