2003-04-18 00:22:51 +08:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
< HTML >
< HEAD >
< TITLE > class SG_EXPORT osg::ShadowVolumeOccluder< / TITLE >
< META NAME = "GENERATOR" CONTENT = "DOC++ 3.4.10" >
< / HEAD >
< BODY BGCOLOR = "#ffffff" >
< H2 > class SG_EXPORT < A HREF = "#DOC.DOCU" > osg::ShadowVolumeOccluder< / A > < / H2 > < / H2 > < BLOCKQUOTE > ShadowVolumeOccluder is a helper class for implementating shadow occlusion culling.< / BLOCKQUOTE >
< HR >
< DL >
< P > < DL >
< DT > < H3 > Public Methods< / H3 > < DD > < DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > < B > < A HREF = "#DOC.2.167.2" > ShadowVolumeOccluder< / A > < / B > (const <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.2" > ShadowVolumeOccluder< / A > & svo)
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > < B > < A HREF = "#DOC.2.167.3" > ShadowVolumeOccluder< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > bool < B > < A HREF = "#DOC.2.167.4" > operator < < / A > < / B > (const <!1> < A HREF = "ShadowVolumeOccluder.html" > ShadowVolumeOccluder< / A > & svo) const
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > bool < B > < A HREF = "#DOC.2.167.5" > computeOccluder< / A > < / B > (const <!1> < A HREF = "NodePath.html" > NodePath< / A > & nodePath, const <!1> < A HREF = "ConvexPlanarOccluder.html" > ConvexPlanarOccluder< / A > & occluder, <!1> < A HREF = "CullStack.html" > CullStack< / A > & cullStack, bool createDrawables=false)
2003-04-18 00:22:51 +08:00
< DD > < I > compute the shadow volume occluder.< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > bool < B > < A HREF = "#DOC.2.167.6" > matchProjectionMatrix< / A > < / B > (const <!1> < A HREF = "osg.html#DOC.2.102" > osg::Matrix< / A > & matrix) const
2003-04-18 00:22:51 +08:00
< DD > < I > return true if the matrix passed in matches the projection matrix that this ShaowVolumeOccluder is associated with< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline void < B > < A HREF = "#DOC.2.167.7" > setNodePath< / A > < / B > (<!1> < A HREF = "NodePath.html" > NodePath< / A > & nodePath)
2003-04-18 00:22:51 +08:00
< DD > < I > Set the NodePath which describes the which node in the scene graph that this occluder was attached to< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline <!1> < A HREF = "NodePath.html" > NodePath< / A > & < B > < A HREF = "#DOC.2.167.8" > getNodePath< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline const <!1> < A HREF = "NodePath.html" > NodePath< / A > & < B > < A HREF = "#DOC.2.167.9" > getNodePath< / A > < / B > () const
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > float < B > < A HREF = "#DOC.2.167.10" > getVolume< / A > < / B > () const
2003-04-18 00:22:51 +08:00
< DD > < I > get the volume of the occluder minus its holes, in eye coords, the volume is normalized by dividing by the volume of the view frustum in eye coords< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > <!1> < A HREF = "Polytope.html" > Polytope< / A > & < B > < A HREF = "#DOC.2.167.11" > getOccluder< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< DD > < I > return the occluder polytope< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > const <!1> < A HREF = "Polytope.html" > Polytope< / A > & < B > < A HREF = "#DOC.2.167.12" > getOccluder< / A > < / B > () const
2003-04-18 00:22:51 +08:00
< DD > < I > return the const occluder polytope< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.1" > HoleList< / A > & < B > < A HREF = "#DOC.2.167.13" > getHoleList< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< DD > < I > return the list of holes< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > const <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.1" > HoleList< / A > & < B > < A HREF = "#DOC.2.167.14" > getHoleList< / A > < / B > () const
2003-04-18 00:22:51 +08:00
< DD > < I > return the const list of holes< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > bool < B > < A HREF = "#DOC.2.167.15" > contains< / A > < / B > (const std::vector< <!1> < A HREF = "Vec3.html" > Vec3< / A > > & vertices)
2003-04-18 00:22:51 +08:00
< DD > < I > return true if the specified vertex list is contaned entirely within this shadow occluder volume< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > bool < B > < A HREF = "#DOC.2.167.16" > contains< / A > < / B > (const <!1> < A HREF = "BoundingSphere.html" > BoundingSphere< / A > & bound)
2003-04-18 00:22:51 +08:00
< DD > < I > return true if the specified bounding sphere is contaned entirely within this shadow occluder volume< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > bool < B > < A HREF = "#DOC.2.167.17" > contains< / A > < / B > (const <!1> < A HREF = "BoundingBox.html" > BoundingBox< / A > & bound)
2003-04-18 00:22:51 +08:00
< DD > < I > return true if the specified bounding box is contained entirely within this shadow occluder volume< / I >
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline void < B > < A HREF = "#DOC.2.167.18" > transformProvidingInverse< / A > < / B > (const <!1> < A HREF = "osg.html#DOC.2.102" > osg::Matrix< / A > & matrix)
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline void < B > < A HREF = "#DOC.2.167.24" > disableResultMasks< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline void < B > < A HREF = "#DOC.2.167.25" > pushCurrentMask< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > inline void < B > < A HREF = "#DOC.2.167.26" > popCurrentMask< / A > < / B > ()
2003-04-18 00:22:51 +08:00
< / DL > < / P >
< P > < DL >
< DT > < H3 > Public Members< / H3 > < DD > < DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > typedef std::vector< <!1> < A HREF = "Polytope.html" > Polytope< / A > > < B > < A HREF = "#DOC.2.167.1" > HoleList< / A > < / B >
2003-04-18 00:22:51 +08:00
< / DL > < / P >
< P > < DL >
< DT > < H3 > Protected Fields< / H3 > < DD > < DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > float < B > < A HREF = "#DOC.2.167.19" > _volume< / A > < / B >
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > <!1> < A HREF = "NodePath.html" > NodePath< / A > < B > < A HREF = "#DOC.2.167.20" > _nodePath< / A > < / B >
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > <!1> < A HREF = "ref_ptr.html" > ref_ptr< / A > < const <!1> < A HREF = "osg.html#DOC.2.103" > RefMatrix< / A > > < B > < A HREF = "#DOC.2.167.21" > _projectionMatrix< / A > < / B >
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > <!1> < A HREF = "Polytope.html" > Polytope< / A > < B > < A HREF = "#DOC.2.167.22" > _occluderVolume< / A > < / B >
2003-04-18 00:22:51 +08:00
< DT >
2003-09-10 16:35:16 +08:00
< IMG ALT = "[more]" BORDER = 0 SRC = icon1.gif > <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.1" > HoleList< / A > < B > < A HREF = "#DOC.2.167.23" > _holeList< / A > < / B >
2003-04-18 00:22:51 +08:00
< / DL > < / P >
< / DL >
< A NAME = "DOC.DOCU" > < / A >
< HR >
< H2 > Documentation< / H2 >
< BLOCKQUOTE > ShadowVolumeOccluder is a helper class for implementating shadow occlusion culling. < / BLOCKQUOTE >
< DL >
< A NAME = "HoleList" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.1" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > typedef std::vector< <!1> < A HREF = "Polytope.html" > Polytope< / A > > HoleList< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "ShadowVolumeOccluder" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.2" > < / A >
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > ShadowVolumeOccluder(const <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.2" > ShadowVolumeOccluder< / A > & svo)< / B > < / TT >
2003-04-18 00:22:51 +08:00
< DL > < DT > < DD > < / DL > < P >
< A NAME = "ShadowVolumeOccluder" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.3" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > ShadowVolumeOccluder()< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "operator < " > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.4" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > bool operator < (const <!1> < A HREF = "ShadowVolumeOccluder.html" > ShadowVolumeOccluder< / A > & svo) const < / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "computeOccluder" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.5" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > bool computeOccluder(const <!1> < A HREF = "NodePath.html" > NodePath< / A > & nodePath, const <!1> < A HREF = "ConvexPlanarOccluder.html" > ConvexPlanarOccluder< / A > & occluder, <!1> < A HREF = "CullStack.html" > CullStack< / A > & cullStack, bool createDrawables=false)< / B > < / TT >
< DD > compute the shadow volume occluder.
< DL > < DT > < DD > < / DL > < P >
< A NAME = "matchProjectionMatrix" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.6" > < / A >
2003-09-08 18:51:14 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > bool matchProjectionMatrix(const <!1> < A HREF = "osg.html#DOC.2.102" > osg::Matrix< / A > & matrix) const < / B > < / TT >
2003-04-18 00:22:51 +08:00
< DD > return true if the matrix passed in matches the projection matrix that this ShaowVolumeOccluder is
associated with
< DL > < DT > < DD > < / DL > < P >
< A NAME = "setNodePath" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.7" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline void setNodePath(<!1> < A HREF = "NodePath.html" > NodePath< / A > & nodePath)< / B > < / TT >
< DD > Set the NodePath which describes the which node in the scene graph
that this occluder was attached to
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getNodePath" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.8" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline <!1> < A HREF = "NodePath.html" > NodePath< / A > & getNodePath()< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getNodePath" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.9" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline const <!1> < A HREF = "NodePath.html" > NodePath< / A > & getNodePath() const < / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getVolume" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.10" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > float getVolume() const < / B > < / TT >
< DD > get the volume of the occluder minus its holes, in eye coords, the volume is normalized by dividing by
the volume of the view frustum in eye coords
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getOccluder" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.11" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > <!1> < A HREF = "Polytope.html" > Polytope< / A > & getOccluder()< / B > < / TT >
< DD > return the occluder polytope
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getOccluder" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.12" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > const <!1> < A HREF = "Polytope.html" > Polytope< / A > & getOccluder() const < / B > < / TT >
< DD > return the const occluder polytope
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getHoleList" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.13" > < / A >
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.1" > HoleList< / A > & getHoleList()< / B > < / TT >
2003-04-18 00:22:51 +08:00
< DD > return the list of holes
< DL > < DT > < DD > < / DL > < P >
< A NAME = "getHoleList" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.14" > < / A >
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > const <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.1" > HoleList< / A > & getHoleList() const < / B > < / TT >
2003-04-18 00:22:51 +08:00
< DD > return the const list of holes
< DL > < DT > < DD > < / DL > < P >
< A NAME = "contains" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.15" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > bool contains(const std::vector< <!1> < A HREF = "Vec3.html" > Vec3< / A > > & vertices)< / B > < / TT >
< DD > return true if the specified vertex list is contaned entirely
within this shadow occluder volume
< DL > < DT > < DD > < / DL > < P >
< A NAME = "contains" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.16" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > bool contains(const <!1> < A HREF = "BoundingSphere.html" > BoundingSphere< / A > & bound)< / B > < / TT >
< DD > return true if the specified bounding sphere is contaned entirely
within this shadow occluder volume
< DL > < DT > < DD > < / DL > < P >
< A NAME = "contains" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.17" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > bool contains(const <!1> < A HREF = "BoundingBox.html" > BoundingBox< / A > & bound)< / B > < / TT >
< DD > return true if the specified bounding box is contained entirely
within this shadow occluder volume
< DL > < DT > < DD > < / DL > < P >
< A NAME = "transformProvidingInverse" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.18" > < / A >
2003-09-08 18:51:14 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline void transformProvidingInverse(const <!1> < A HREF = "osg.html#DOC.2.102" > osg::Matrix< / A > & matrix)< / B > < / TT >
2003-04-18 00:22:51 +08:00
< DL > < DT > < DD > < / DL > < P >
< A NAME = "_volume" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.19" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > float _volume< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "_nodePath" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.20" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > <!1> < A HREF = "NodePath.html" > NodePath< / A > _nodePath< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "_projectionMatrix" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.21" > < / A >
2003-09-08 18:51:14 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > <!1> < A HREF = "ref_ptr.html" > ref_ptr< / A > < const <!1> < A HREF = "osg.html#DOC.2.103" > RefMatrix< / A > > _projectionMatrix< / B > < / TT >
2003-04-18 00:22:51 +08:00
< DL > < DT > < DD > < / DL > < P >
< A NAME = "_occluderVolume" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.22" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > <!1> < A HREF = "Polytope.html" > Polytope< / A > _occluderVolume< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "_holeList" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.23" > < / A >
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > <!1> < A HREF = "ShadowVolumeOccluder.html#DOC.2.167.1" > HoleList< / A > _holeList< / B > < / TT >
2003-04-18 00:22:51 +08:00
< DL > < DT > < DD > < / DL > < P >
< A NAME = "disableResultMasks" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.24" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline void disableResultMasks()< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "pushCurrentMask" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.25" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline void pushCurrentMask()< / B > < / TT >
< DL > < DT > < DD > < / DL > < P >
< A NAME = "popCurrentMask" > < / A >
2003-09-10 16:35:16 +08:00
< A NAME = "DOC.2.167.26" > < / A >
2003-04-18 00:22:51 +08:00
< DT > < IMG ALT = "o" BORDER = 0 SRC = icon2.gif > < TT > < B > inline void popCurrentMask()< / B > < / TT >
< DL > < DT > < DD > < / DL > < P > < / DL >
< HR > < DL > < DT > < B > This class has no child classes.< / B > < / DL >
< DL > < DT > < DD > < / DL > < P > < P > < I > < A HREF = "index.html" > Alphabetic index< / A > < / I > < I > < A HREF = "HIER.html" > HTML hierarchy of classes< / A > or < A HREF = "HIERjava.html" > Java< / A > < / I > < / P > < HR >
< BR >
This page was generated with the help of < A HREF = "http://docpp.sourceforge.net" > DOC++< / A > .
< / BODY >
< / HTML >