OpenSceneGraph/include/osgText/Font3D

51 lines
1.5 KiB
Plaintext
Raw Normal View History

From David Callu, "Problem: osgText::Text and osgText::Text3D use the same font file. The first really load the file and obtain an osgText::Font object, the second use the cache created during the first load of the font file, and so obtain an osgText::Font object instead of osgText::Font3D object. To obtain an osgText::Font3D object, osgText::Text3D call osgDB::readObjectFile(...) with an option to specify the plugin we want an osgText::Font3D instead of osgText::Font. Generalised Problem: In osgDB::Registry, loaded file cache is referenced by the name of this file, so if I load a file with some options, and the cache already contain object for this filename, I obtain an object potentially not loaded with my options. Behaviours: Cache management is delegate to osgDB::Registry, but cache coherence (load a file with option then reuse it, deactivate the cache when load a specific file or don't cached the loaded file) is user's responsibility. Text3D solution: Postfix the font file name by .text3d or something similar and then have the freetype plugin return osgText::Font3D when it detects this. This operation is done by osgText::readFont3DFile() which unsure the filename have .text3d as extension. This is totaly transparent for user, and backward compatible. BTW, I fix the bug about the Normal of 3D text. Currently, the front and wall face have the same normal (0,0,1) in the Text3D object coordinate. Now the wall face have its own normal array computed by the plugin. BTW 2, I implement - void Text3D::accept(osg::Drawable::ConstAttributeFunctor& af) const - void Text3D::accept(osg::PrimitiveFunctor& pf) const so now statistics are well reported. "
2009-03-10 18:56:00 +08:00
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
*
From David Callu, "Problem: osgText::Text and osgText::Text3D use the same font file. The first really load the file and obtain an osgText::Font object, the second use the cache created during the first load of the font file, and so obtain an osgText::Font object instead of osgText::Font3D object. To obtain an osgText::Font3D object, osgText::Text3D call osgDB::readObjectFile(...) with an option to specify the plugin we want an osgText::Font3D instead of osgText::Font. Generalised Problem: In osgDB::Registry, loaded file cache is referenced by the name of this file, so if I load a file with some options, and the cache already contain object for this filename, I obtain an object potentially not loaded with my options. Behaviours: Cache management is delegate to osgDB::Registry, but cache coherence (load a file with option then reuse it, deactivate the cache when load a specific file or don't cached the loaded file) is user's responsibility. Text3D solution: Postfix the font file name by .text3d or something similar and then have the freetype plugin return osgText::Font3D when it detects this. This operation is done by osgText::readFont3DFile() which unsure the filename have .text3d as extension. This is totaly transparent for user, and backward compatible. BTW, I fix the bug about the Normal of 3D text. Currently, the front and wall face have the same normal (0,0,1) in the Text3D object coordinate. Now the wall face have its own normal array computed by the plugin. BTW 2, I implement - void Text3D::accept(osg::Drawable::ConstAttributeFunctor& af) const - void Text3D::accept(osg::PrimitiveFunctor& pf) const so now statistics are well reported. "
2009-03-10 18:56:00 +08:00
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
From David Callu, "Problem: osgText::Text and osgText::Text3D use the same font file. The first really load the file and obtain an osgText::Font object, the second use the cache created during the first load of the font file, and so obtain an osgText::Font object instead of osgText::Font3D object. To obtain an osgText::Font3D object, osgText::Text3D call osgDB::readObjectFile(...) with an option to specify the plugin we want an osgText::Font3D instead of osgText::Font. Generalised Problem: In osgDB::Registry, loaded file cache is referenced by the name of this file, so if I load a file with some options, and the cache already contain object for this filename, I obtain an object potentially not loaded with my options. Behaviours: Cache management is delegate to osgDB::Registry, but cache coherence (load a file with option then reuse it, deactivate the cache when load a specific file or don't cached the loaded file) is user's responsibility. Text3D solution: Postfix the font file name by .text3d or something similar and then have the freetype plugin return osgText::Font3D when it detects this. This operation is done by osgText::readFont3DFile() which unsure the filename have .text3d as extension. This is totaly transparent for user, and backward compatible. BTW, I fix the bug about the Normal of 3D text. Currently, the front and wall face have the same normal (0,0,1) in the Text3D object coordinate. Now the wall face have its own normal array computed by the plugin. BTW 2, I implement - void Text3D::accept(osg::Drawable::ConstAttributeFunctor& af) const - void Text3D::accept(osg::PrimitiveFunctor& pf) const so now statistics are well reported. "
2009-03-10 18:56:00 +08:00
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
From David Callu, "Problem: osgText::Text and osgText::Text3D use the same font file. The first really load the file and obtain an osgText::Font object, the second use the cache created during the first load of the font file, and so obtain an osgText::Font object instead of osgText::Font3D object. To obtain an osgText::Font3D object, osgText::Text3D call osgDB::readObjectFile(...) with an option to specify the plugin we want an osgText::Font3D instead of osgText::Font. Generalised Problem: In osgDB::Registry, loaded file cache is referenced by the name of this file, so if I load a file with some options, and the cache already contain object for this filename, I obtain an object potentially not loaded with my options. Behaviours: Cache management is delegate to osgDB::Registry, but cache coherence (load a file with option then reuse it, deactivate the cache when load a specific file or don't cached the loaded file) is user's responsibility. Text3D solution: Postfix the font file name by .text3d or something similar and then have the freetype plugin return osgText::Font3D when it detects this. This operation is done by osgText::readFont3DFile() which unsure the filename have .text3d as extension. This is totaly transparent for user, and backward compatible. BTW, I fix the bug about the Normal of 3D text. Currently, the front and wall face have the same normal (0,0,1) in the Text3D object coordinate. Now the wall face have its own normal array computed by the plugin. BTW 2, I implement - void Text3D::accept(osg::Drawable::ConstAttributeFunctor& af) const - void Text3D::accept(osg::PrimitiveFunctor& pf) const so now statistics are well reported. "
2009-03-10 18:56:00 +08:00
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*/
#ifndef OSGTEXT_FONT3D
#define OSGTEXT_FONT3D 1
#include <osgText/Font>
namespace osgText {
typedef Font Font3D;
inline Font* readFont3DFile(const std::string& filename, const osgDB::ReaderWriter::Options* userOptions = 0)
{
return readFontFile(filename,userOptions);
}
inline Font* readFont3DStream(std::istream& stream, const osgDB::ReaderWriter::Options* userOptions = 0)
{
return readFontStream(stream, userOptions);
}
inline osg::ref_ptr<Font> readRefFont3DFile(const std::string& filename, const osgDB::ReaderWriter::Options* userOptions = 0)
{
return readRefFontFile(filename, userOptions);
}
inline osg::ref_ptr<Font> readRefFont3DStream(std::istream& stream, const osgDB::ReaderWriter::Options* userOptions = 0)
{
return readRefFontStream(stream, userOptions);
}
inline std::string findFont3DFile(const std::string& str)
{
return findFontFile(str);
}
}
#endif