/*===========================================================================*\
* *
* OpenFlipper *
* Copyright (C) 2001-2010 by Computer Graphics Group, RWTH Aachen *
* www.openflipper.org *
* *
*--------------------------------------------------------------------------- *
* This file is part of OpenFlipper. *
* *
* OpenFlipper is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 3 of *
* the License, or (at your option) any later version with the *
* following exceptions: *
* *
* If other files instantiate templates or use macros *
* or inline functions from this file, or you compile this file and *
* link it with other files to produce an executable, this file does *
* not by itself cause the resulting executable to be covered by the *
* GNU Lesser General Public License. This exception does not however *
* invalidate any other reasons why the executable file might be *
* covered by the GNU Lesser General Public License. *
* *
* OpenFlipper is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU LesserGeneral Public *
* License along with OpenFlipper. If not, *
* see . *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $LastChangedBy$ *
* $Date$ *
* *
\*===========================================================================*/
// Includes
#include "iniPlugin.hh"
#include
#include
#include
#include
#include
#include
/// Constructor
INIPlugin::INIPlugin() {
}
template <>
void INIPlugin::parseIniFileT(INIFile& _ini, LightObject* _object) {
if ( _object ) {
std::vector< QString > draw_modes;
if( _ini.get_entry(draw_modes, _object->name(), "MaterialDrawMode") )
_object->materialNode()->drawMode( listToDrawMode(draw_modes) );
}
}
template <>
void INIPlugin::saveIniFileT(INIFile& _ini, LightObject* _object) {
if ( _object ) {
_ini.add_entry( _object->name() ,
"MaterialDrawMode" ,
drawModeToList( _object->materialNode()->drawMode()) );
}
}
void INIPlugin::parseIniFile(INIFile& _ini, BaseObjectData* _object) {
if ( _object ) {
std::vector< QString > draw_modes;
if( _ini.get_entry(draw_modes, _object->name(), "MaterialDrawMode") )
_object->materialNode()->drawMode( listToDrawMode(draw_modes) );
ACG::Vec4f col(0.0,0.0,0.0,0.0);
if ( _ini.get_entryVecf( col, _object->name() , "BaseColor" ) )
_object->materialNode()->set_base_color(col);
if ( _ini.get_entryVecf( col, _object->name() , "AmbientColor" ) )
_object->materialNode()->set_ambient_color(col);
if ( _ini.get_entryVecf( col, _object->name() , "DiffuseColor" ) )
_object->materialNode()->set_diffuse_color(col);
if ( _ini.get_entryVecf( col, _object->name() , "SpecularColor" ) )
_object->materialNode()->set_specular_color(col);
double shininess;
if ( _ini.get_entry( shininess, _object->name() , "Shininess" ) )
_object->materialNode()->set_shininess(shininess);
double reflectance;
if ( _ini.get_entry( reflectance, _object->name() , "Reflectance" ) ) {
_object->materialNode()->set_reflectance(reflectance);
}
bool visible;
if ( _ini.get_entry( visible, _object->name() , "Visible" ) ) {
_object->visible(visible);
}
int size = 1;
if ( _ini.get_entry( size, _object->name() , "PointSize" ) )
_object->materialNode()->set_point_size(size);
if ( _ini.get_entry( size, _object->name() , "LineWidth" ) )
_object->materialNode()->set_line_width(size);
}
}
void INIPlugin::saveIniFile(INIFile& _ini, BaseObjectData* _object) {
if ( _object ) {
_ini.add_entry( _object->name() ,
"MaterialDrawMode" ,
drawModeToList( _object->materialNode()->drawMode()) );
_ini.add_entryVec( _object->name() ,
"BaseColor" ,
_object->materialNode()->base_color()) ;
_ini.add_entryVec( _object->name() ,
"AmbientColor" ,
_object->materialNode()->ambient_color()) ;
_ini.add_entryVec( _object->name() ,
"DiffuseColor" ,
_object->materialNode()->diffuse_color());
_ini.add_entryVec( _object->name() ,
"SpecularColor" ,
_object->materialNode()->specular_color());
_ini.add_entry( _object->name() ,
"Shininess" ,
_object->materialNode()->shininess());
_ini.add_entry( _object->name() ,
"Reflectance" ,
_object->materialNode()->reflectance());
_ini.add_entry( _object->name() ,
"Visible" ,
_object->visible() );
_ini.add_entry( _object->name() ,
"PointSize" ,
_object->materialNode()->point_size());
_ini.add_entry( _object->name() ,
"LineWidth" ,
_object->materialNode()->line_width());
}
}
void INIPlugin::loadIniFile( INIFile& _ini, int _id ) {
BaseObjectData* baseObject;
if ( !PluginFunctions::getObject(_id,baseObject) ) {
emit log(LOGERR,tr("Cannot find object for id ") + QString::number(_id) + tr(" in saveFile") );
return;
}
PolyMeshObject* polyObject(0);
TriMeshObject* triObject(0);
LightObject* lightObject(0);
// Load all data from baseobjectdata part
parseIniFile(_ini,baseObject);
if(baseObject->dataType() == DATA_POLY_MESH) {
polyObject = PluginFunctions::polyMeshObject(baseObject);
parseIniFileT(_ini, polyObject);
} else if ( baseObject->dataType() == DATA_TRIANGLE_MESH) {
triObject = PluginFunctions::triMeshObject(baseObject);
parseIniFileT(_ini, triObject);
} else if ( baseObject->dataType() == DATA_LIGHT ) {
lightObject = PluginFunctions::lightObject(baseObject);
parseIniFileT(_ini, lightObject);
} else {
// Unhandled data type
emit log(LOGERR, tr("The specified data type is not supported, yet. Aborting!"));
}
}
void INIPlugin::saveIniFile( INIFile& _ini, int _id) {
BaseObjectData* baseObject;
if ( !PluginFunctions::getObject(_id,baseObject) ) {
emit log(LOGERR,tr("Cannot find object for id ") + QString::number(_id) + tr(" in saveFile") );
return;
}
PolyMeshObject* polyObject(0);
TriMeshObject* triObject(0);
LightObject* lightObject(0);
// Save all data from baseobjectdata part
saveIniFile(_ini,baseObject);
if(baseObject->dataType() == DATA_POLY_MESH) {
polyObject = PluginFunctions::polyMeshObject(baseObject);
saveIniFileT(_ini, polyObject);
} else if ( baseObject->dataType() == DATA_TRIANGLE_MESH) {
triObject = PluginFunctions::triMeshObject(baseObject);
saveIniFileT(_ini, triObject);
} else if ( baseObject->dataType() == DATA_LIGHT ) {
lightObject = PluginFunctions::lightObject(baseObject);
saveIniFileT(_ini, lightObject);
} else {
// Unhandled data type
emit log(LOGERR, tr("The specified data type is not supported, yet. Aborting!"));
}
}
Q_EXPORT_PLUGIN2( iniplugin , INIPlugin );