Show
Ignore:
Timestamp:
03/21/12 18:36:20 (3 years ago)
Author:
robert
Message:

Ran script to remove trailing spaces and tabs

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgPlugins/obj/OBJWriterNodeVisitor.cpp

    r12292 r13041  
    99 * texture coord arrays, bug fixes, and support for texture mapping. 
    1010 * 
    11  * Writing support added 2007 by Stephan Huber, http://digitalmind.de,  
     11 * Writing support added 2007 by Stephan Huber, http://digitalmind.de, 
    1212 * some ideas taken from the dae-plugin 
    1313 * 
    14  * The Open Scene Graph (OSG) is a cross platform C++/OpenGL library for  
    15  * real-time rendering of large 3D photo-realistic models.  
     14 * The Open Scene Graph (OSG) is a cross platform C++/OpenGL library for 
     15 * real-time rendering of large 3D photo-realistic models. 
    1616 * The OSG homepage is http://www.openscenegraph.org/ 
    1717 */ 
     
    1919#include <osg/io_utils> 
    2020#include "OBJWriterNodeVisitor.h" 
    21   
     21 
    2222 
    2323 
     
    2525class ValueVisitor : public osg::ValueVisitor { 
    2626    public: 
    27         ValueVisitor(std::ostream& fout, const osg::Matrix& m = osg::Matrix::identity(), bool isNormal = false) :     
    28             osg::ValueVisitor(),  
    29             _fout(fout),  
    30             _m(m),  
     27        ValueVisitor(std::ostream& fout, const osg::Matrix& m = osg::Matrix::identity(), bool isNormal = false) : 
     28            osg::ValueVisitor(), 
     29            _fout(fout), 
     30            _m(m), 
    3131            _isNormal(isNormal) 
    32         {  
     32        { 
    3333            _applyMatrix = (_m != osg::Matrix::identity()); 
    3434            if (_isNormal) _origin = osg::Vec3(0,0,0) * _m; 
    3535        } 
    36          
    37         virtual void apply (osg::Vec2 & inv)  
    38         {  
    39             _fout << inv[0] << ' ' << inv[1];  
    40         } 
    41          
    42         virtual void apply (osg::Vec3 & inv)  
    43         {  
     36 
     37        virtual void apply (osg::Vec2 & inv) 
     38        { 
     39            _fout << inv[0] << ' ' << inv[1]; 
     40        } 
     41 
     42        virtual void apply (osg::Vec3 & inv) 
     43        { 
    4444            osg::Vec3 v(inv); 
    4545            if (_applyMatrix)  v = (_isNormal) ? (v * _m) - _origin : v * _m; 
    46             _fout << v[0] << ' ' << v[1] << ' ' << v[2];  
    47         } 
    48          
     46            _fout << v[0] << ' ' << v[1] << ' ' << v[2]; 
     47        } 
     48 
    4949        virtual void apply (osg::Vec2b & inv) 
    50         {  
    51             _fout << inv[0] << ' ' << inv[1];  
    52         } 
    53          
    54         virtual void apply (osg::Vec3b & inv)  
    55         {  
     50        { 
     51            _fout << inv[0] << ' ' << inv[1]; 
     52        } 
     53 
     54        virtual void apply (osg::Vec3b & inv) 
     55        { 
    5656            osg::Vec3 v(inv[0], inv[1], inv[2]); 
    5757            if (_applyMatrix)  v = (_isNormal) ? (v * _m) - _origin : v * _m; 
    58             _fout << v[0] << ' ' << v[1] << ' ' << v[2];  
    59         } 
    60          
    61         virtual void apply (osg::Vec2s & inv)  
    62         {     
    63             _fout << inv[0] << ' ' << inv[1];  
    64         } 
    65          
    66         virtual void apply (osg::Vec3s & inv)  
    67         {  
     58            _fout << v[0] << ' ' << v[1] << ' ' << v[2]; 
     59        } 
     60 
     61        virtual void apply (osg::Vec2s & inv) 
     62        { 
     63            _fout << inv[0] << ' ' << inv[1]; 
     64        } 
     65 
     66        virtual void apply (osg::Vec3s & inv) 
     67        { 
    6868            osg::Vec3 v(inv[0], inv[1], inv[2]); 
    6969            if (_applyMatrix)  v = (_isNormal) ? (v * _m) - _origin : v * _m; 
    70             _fout << v[0] << ' ' << v[1] << ' ' << v[2];  
     70            _fout << v[0] << ' ' << v[1] << ' ' << v[2]; 
    7171        } 
    7272    private: 
     
    8282/** writes all primitives of a primitive-set out to a stream, decomposes quads to triangles, line-strips to lines etc */ 
    8383class ObjPrimitiveIndexWriter : public osg::PrimitiveIndexFunctor { 
    84      
     84 
    8585    public: 
    86         ObjPrimitiveIndexWriter(std::ostream& fout,osg::Geometry* geo, unsigned int normalIndex, unsigned int lastVertexIndex, unsigned int  lastNormalIndex, unsigned int lastTexIndex) :  
    87             osg::PrimitiveIndexFunctor(),  
     86        ObjPrimitiveIndexWriter(std::ostream& fout,osg::Geometry* geo, unsigned int normalIndex, unsigned int lastVertexIndex, unsigned int  lastNormalIndex, unsigned int lastTexIndex) : 
     87            osg::PrimitiveIndexFunctor(), 
    8888            _fout(fout), 
    8989            _lastVertexIndex(lastVertexIndex), 
     
    9696        { 
    9797        } 
    98          
     98 
    9999        virtual void setVertexArray(unsigned int,const osg::Vec2*) {} 
    100100 
     
    102102 
    103103        virtual void setVertexArray(unsigned int,const osg::Vec4* ) {} 
    104          
     104 
    105105        virtual void setVertexArray(unsigned int,const osg::Vec2d*) {} 
    106106 
     
    108108 
    109109        virtual void setVertexArray(unsigned int,const osg::Vec4d* ) {} 
    110          
    111         void write(unsigned int i)  
     110 
     111        void write(unsigned int i) 
    112112        { 
    113113            _fout << (i + _lastVertexIndex) << "/"; 
    114              
    115             if (_hasTexCoords || _hasNormalCoords)  
     114 
     115            if (_hasTexCoords || _hasNormalCoords) 
    116116            { 
    117117                if (_hasTexCoords) 
    118118                    _fout << (i + _lastTexIndex); 
    119119                _fout << "/"; 
    120                 if (_hasNormalCoords)  
     120                if (_hasNormalCoords) 
    121121                { 
    122122                    if (_geo->getNormalBinding() == osg::Geometry::BIND_PER_VERTEX) 
     
    128128            _fout << " "; 
    129129        } 
    130          
     130 
    131131        // operator for triangles 
    132132        void writeTriangle(unsigned int i1, unsigned int i2, unsigned int i3) 
     
    140140            if(_geo->getNormalBinding() && _geo->getNormalBinding() == osg::Geometry::BIND_PER_PRIMITIVE) ++_normalIndex; 
    141141        } 
    142          
     142 
    143143        // operator for lines 
    144         void writeLine(unsigned int i1, unsigned int i2)  
     144        void writeLine(unsigned int i1, unsigned int i2) 
    145145        { 
    146146            _fout << "l "; 
     
    151151            if(_geo->getNormalBinding() && _geo->getNormalBinding() == osg::Geometry::BIND_PER_PRIMITIVE) ++_normalIndex; 
    152152        } 
    153          
     153 
    154154        // operator for points 
    155         void writePoint(unsigned int i1)  
     155        void writePoint(unsigned int i1) 
    156156        { 
    157157            _fout << "p "; 
     
    181181        } 
    182182 
    183         virtual void drawArrays(GLenum mode,GLint first,GLsizei count);                     
    184          
     183        virtual void drawArrays(GLenum mode,GLint first,GLsizei count); 
     184 
    185185        virtual void drawElements(GLenum mode,GLsizei count,const GLubyte* indices) 
    186186        { 
     
    190190        { 
    191191            drawElementsImplementation<GLushort>(mode, count, indices); 
    192         }     
     192        } 
    193193 
    194194        virtual void drawElements(GLenum mode,GLsizei count,const GLuint* indices) 
    195195        { 
    196196            drawElementsImplementation<GLuint>(mode, count, indices); 
    197         }     
     197        } 
    198198 
    199199    protected: 
    200          
    201         template<typename T>void drawElementsImplementation(GLenum mode, GLsizei count, const T* indices)  
     200 
     201        template<typename T>void drawElementsImplementation(GLenum mode, GLsizei count, const T* indices) 
    202202        { 
    203203            if (indices==0 || count==0) return; 
    204204 
    205205            typedef const T* IndexPointer; 
    206          
     206 
    207207            switch(mode) 
    208208            { 
     
    212212                    for(IndexPointer  iptr=indices;iptr<ilast;iptr+=3) 
    213213                        writeTriangle(*iptr,*(iptr+1),*(iptr+2)); 
    214      
     214 
    215215                    break; 
    216216                } 
     
    261261                    IndexPointer ilast = &indices[count]; 
    262262                    for(IndexPointer  iptr=indices;iptr<ilast;++iptr) 
    263                      
     263 
    264264                    { 
    265265                        writePoint(*iptr); 
     
    279279                case(GL_LINE_STRIP): 
    280280                { 
    281                      
     281 
    282282                    IndexPointer ilast = &indices[count]; 
    283283                    for(IndexPointer  iptr=indices+1;iptr<ilast;iptr+=2) 
     
    303303                    break; 
    304304            } 
    305         }     
    306      
     305        } 
     306 
    307307    private: 
    308308 
     
    374374        case(GL_POINTS): 
    375375        { 
    376              
     376 
    377377            for(GLsizei i=0;i<count;++i) 
    378378            { 
     
    408408        } 
    409409        default: 
    410             OSG_WARN << "OBJWriterNodeVisitor :: can't handle mode " << mode << std::endl;  
    411             break; 
    412     } 
    413 } 
    414                      
     410            OSG_WARN << "OBJWriterNodeVisitor :: can't handle mode " << mode << std::endl; 
     411            break; 
     412    } 
     413} 
     414 
    415415 
    416416OBJWriterNodeVisitor::OBJMaterial::OBJMaterial(osg::Material* mat, osg::Texture* tex) : 
     
    422422    static unsigned int s_objmaterial_id = 0; 
    423423    ++s_objmaterial_id; 
    424     std::stringstream ss;  
     424    std::stringstream ss; 
    425425    ss << "material_" << s_objmaterial_id; 
    426426    name = ss.str(); 
    427      
     427 
    428428    if (mat) { 
    429429        diffuse = mat->getDiffuse(osg::Material::FRONT); 
     
    431431        specular = mat->getSpecular(osg::Material::FRONT); 
    432432    } 
    433      
     433 
    434434    if (tex) { 
    435435        osg::Image* img = tex->getImage(0); 
    436436        if ((img) && (!img->getFileName().empty())) 
    437437            image = img->getFileName(); 
    438          
    439     } 
    440          
     438 
     439    } 
     440 
    441441} 
    442442 
    443443std::ostream& operator<<(std::ostream& fout, const OBJWriterNodeVisitor::OBJMaterial& mat) { 
    444      
     444 
    445445    fout << "newmtl " << mat.name << std::endl; 
    446446    fout << "       " << "Ka " << mat.ambient << std::endl; 
    447447    fout << "       " << "Kd " << mat.diffuse << std::endl; 
    448448    fout << "       " << "Ks " << mat.specular << std::endl; 
    449      
     449 
    450450    if(!mat.image.empty()) 
    451451        fout << "       " << "map_Kd " << mat.image << std::endl; 
    452      
     452 
    453453    return fout; 
    454      
    455 } 
    456  
    457 void OBJWriterNodeVisitor::writeMaterials(std::ostream& fout)  
     454 
     455} 
     456 
     457void OBJWriterNodeVisitor::writeMaterials(std::ostream& fout) 
    458458{ 
    459459    for(MaterialMap::iterator i = _materialMap.begin(); i != _materialMap.end(); ++i) 
     
    465465 
    466466std::string OBJWriterNodeVisitor::getUniqueName(const std::string& defaultvalue) { 
    467      
     467 
    468468    std::string name = ""; 
    469469    for(std::list<std::string>::iterator i = _nameStack.begin(); i != _nameStack.end(); ++i) { 
     
    471471        name += (*i); 
    472472    } 
    473      
     473 
    474474    if (!defaultvalue.empty()) 
    475475        name += "_" +defaultvalue; 
    476      
     476 
    477477    if (_nameMap.find(name) == _nameMap.end()) 
    478478        _nameMap.insert(std::make_pair(name, 0u)); 
    479          
     479 
    480480    std::stringstream ss; 
    481481    ss << name << "_" << _nameMap[name]; 
     
    489489    if (array == NULL) 
    490490        return; 
    491      
     491 
    492492    ValueVisitor vv(_fout, m, isNormal); 
    493493    _fout << std::endl; 
     
    497497        _fout << std::endl; 
    498498    } 
    499      
     499 
    500500    _fout << "# " << array->getNumElements() << " elements written" << std::endl; 
    501      
    502 } 
    503  
    504 void OBJWriterNodeVisitor::processStateSet(osg::StateSet* ss)  
     501 
     502} 
     503 
     504void OBJWriterNodeVisitor::processStateSet(osg::StateSet* ss) 
    505505{ 
    506506    if (_materialMap.find(ss) != _materialMap.end()) { 
     
    508508        return; 
    509509    } 
    510      
     510 
    511511    osg::Material* mat = dynamic_cast<osg::Material*>(ss->getAttribute(osg::StateAttribute::MATERIAL)); 
    512512    osg::Texture* tex = dynamic_cast<osg::Texture*>(ss->getTextureAttribute(0, osg::StateAttribute::TEXTURE)); 
    513      
    514     if (mat || tex)  
     513 
     514    if (mat || tex) 
    515515    { 
    516516        _materialMap.insert(std::make_pair(osg::ref_ptr<osg::StateSet>(ss), OBJMaterial(mat, tex))); 
    517517        _fout << "usemtl " << _materialMap[ss].name << std::endl; 
    518518    } 
    519      
     519 
    520520} 
    521521 
     
    524524    _fout << std::endl; 
    525525    _fout << "o " << getUniqueName( geo->getName().empty() ? geo->className() : geo->getName() ) << std::endl; 
    526      
     526 
    527527    processStateSet(_currentStateSet.get()); 
    528      
     528 
    529529    processArray("v", geo->getVertexArray(), m, false); 
    530530    processArray("vn", geo->getNormalArray(), m, true); 
    531531    processArray("vt", geo->getTexCoordArray(0)); // we support only tex-unit 0 
    532532    unsigned int normalIndex = 0; 
    533     for(unsigned int i = 0; i < geo->getNumPrimitiveSets(); ++i)  
     533    for(unsigned int i = 0; i < geo->getNumPrimitiveSets(); ++i) 
    534534    { 
    535535        osg::PrimitiveSet* ps = geo->getPrimitiveSet(i); 
    536          
     536 
    537537        ObjPrimitiveIndexWriter pif(_fout, geo, normalIndex, _lastVertexIndex, _lastNormalIndex, _lastTexIndex); 
    538538        ps->accept(pif); 
    539          
     539 
    540540        if(geo->getNormalArray() && geo->getNormalBinding() == osg::Geometry::BIND_PER_PRIMITIVE_SET) 
    541541            ++normalIndex; 
    542542    } 
    543     if (geo->getVertexArray())  
     543    if (geo->getVertexArray()) 
    544544        _lastVertexIndex += geo->getVertexArray()->getNumElements(); 
    545545    if (geo->getNormalArray()) 
     
    547547    if(geo->getTexCoordArray(0)) 
    548548        _lastTexIndex += geo->getTexCoordArray(0)->getNumElements(); 
    549      
     549 
    550550} 
    551551 
     
    563563        { 
    564564            pushStateSet(g->getStateSet()); 
    565              
     565 
    566566            processGeometry(g,m); 
    567              
     567 
    568568            popStateSet(g->getStateSet()); 
    569569        }