Cleaned up 3D SceneGraph API by removing references to wxString

This commit is contained in:
Cirilo Bernardo 2016-01-29 11:52:42 +11:00
parent 8264d393e8
commit dddc3d91e9
6 changed files with 59 additions and 42 deletions

View File

@ -405,7 +405,7 @@ bool S3D_CACHE::loadCacheData( S3D_CACHE_ENTRY* aCacheItem )
if( NULL != aCacheItem->sceneData ) if( NULL != aCacheItem->sceneData )
S3D::DestroyNode( (SGNODE*) aCacheItem->sceneData ); S3D::DestroyNode( (SGNODE*) aCacheItem->sceneData );
aCacheItem->sceneData = (SCENEGRAPH*)S3D::ReadCache( fname ); aCacheItem->sceneData = (SCENEGRAPH*)S3D::ReadCache( fname.ToUTF8() );
if( NULL == aCacheItem->sceneData ) if( NULL == aCacheItem->sceneData )
return false; return false;
@ -475,7 +475,7 @@ bool S3D_CACHE::saveCacheData( S3D_CACHE_ENTRY* aCacheItem )
} }
} }
return S3D::WriteCache( fname, true, (SGNODE*)aCacheItem->sceneData ); return S3D::WriteCache( fname.ToUTF8(), true, (SGNODE*)aCacheItem->sceneData );
} }

View File

@ -29,6 +29,7 @@
#include <wx/string.h> #include <wx/string.h>
#include "plugins/3dapi/ifsg_api.h" #include "plugins/3dapi/ifsg_api.h"
#include "plugins/3dapi/sg_types.h" #include "plugins/3dapi/sg_types.h"
#include "plugins/3dapi/sg_version.h"
#include "3d_cache/sg/sg_node.h" #include "3d_cache/sg/sg_node.h"
#include "3d_cache/sg/scenegraph.h" #include "3d_cache/sg/scenegraph.h"
#include "3d_cache/sg/sg_appearance.h" #include "3d_cache/sg/sg_appearance.h"
@ -38,7 +39,6 @@
#include "3d_cache/sg/sg_faceset.h" #include "3d_cache/sg/sg_faceset.h"
#include "3d_cache/sg/sg_normals.h" #include "3d_cache/sg/sg_normals.h"
#include "3d_cache/sg/sg_shape.h" #include "3d_cache/sg/sg_shape.h"
#include "3d_cache/sg/sg_version.h"
#include "3d_cache/sg/sg_helpers.h" #include "3d_cache/sg/sg_helpers.h"
#include "3d_info.h" #include "3d_info.h"
#include "plugins/3dapi/c3dmodel.h" #include "plugins/3dapi/c3dmodel.h"
@ -98,16 +98,21 @@ public:
}; };
bool S3D::WriteVRML( const wxString& filename, bool overwrite, SGNODE* aTopNode, bool S3D::WriteVRML( const char* filename, bool overwrite, SGNODE* aTopNode,
bool reuse, bool renameNodes ) bool reuse, bool renameNodes )
{ {
if( wxFileName::Exists( filename ) ) if( NULL == filename || filename[0] == 0 )
return false;
wxString ofile = wxString::FromUTF8Unchecked( filename );
if( wxFileName::Exists( ofile ) )
{ {
if( !overwrite ) if( !overwrite )
return false; return false;
// make sure we make no attempt to write a directory // make sure we make no attempt to write a directory
if( !wxFileName::FileExists( filename ) ) if( !wxFileName::FileExists( ofile ) )
return false; return false;
} }
@ -133,14 +138,14 @@ bool S3D::WriteVRML( const wxString& filename, bool overwrite, SGNODE* aTopNode,
VRML_LOCALE vrmlLocale; VRML_LOCALE vrmlLocale;
std::ofstream op; std::ofstream op;
op.open( filename.ToUTF8(), std::ios_base::out | std::ios_base::trunc op.open( filename, std::ios_base::out | std::ios_base::trunc
| std::ios_base::binary ); | std::ios_base::binary );
if( !op.is_open() ) if( !op.is_open() )
{ {
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "failed to open file" ); wxString errmsg = _( "failed to open file" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '" << filename.ToUTF8() << "'\n"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '" << filename << "'\n";
return false; return false;
} }
@ -164,7 +169,7 @@ bool S3D::WriteVRML( const wxString& filename, bool overwrite, SGNODE* aTopNode,
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "problems encountered writing file" ); wxString errmsg = _( "problems encountered writing file" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '" << filename.ToUTF8() << "'\n"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '" << filename << "'\n";
return false; return false;
} }
@ -224,8 +229,13 @@ void S3D::DestroyNode( SGNODE* aNode )
} }
bool S3D::WriteCache( const wxString& aFileName, bool overwrite, SGNODE* aNode ) bool S3D::WriteCache( const char* aFileName, bool overwrite, SGNODE* aNode )
{ {
if( NULL == aFileName || aFileName[0] == 0 )
return false;
wxString ofile = wxString::FromUTF8Unchecked( aFileName );
if( NULL == aNode ) if( NULL == aNode )
{ {
#ifdef DEBUG #ifdef DEBUG
@ -237,14 +247,14 @@ bool S3D::WriteCache( const wxString& aFileName, bool overwrite, SGNODE* aNode )
} }
if( wxFileName::Exists( aFileName ) ) if( wxFileName::Exists( ofile ) )
{ {
if( !overwrite ) if( !overwrite )
{ {
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "file exists; not overwriting" ); wxString errmsg = _( "file exists; not overwriting" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '";
std::cerr << aFileName.ToUTF8() << "'\n"; std::cerr << aFileName << "'\n";
return false; return false;
} }
@ -254,20 +264,20 @@ bool S3D::WriteCache( const wxString& aFileName, bool overwrite, SGNODE* aNode )
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "specified path is a directory" ); wxString errmsg = _( "specified path is a directory" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '";
std::cerr << aFileName.ToUTF8() << "'\n"; std::cerr << aFileName << "'\n";
return false; return false;
} }
} }
std::ofstream output; std::ofstream output;
output.open( aFileName.ToUTF8(), std::ios_base::out | std::ios_base::trunc output.open( aFileName, std::ios_base::out | std::ios_base::trunc
| std::ios_base::binary ); | std::ios_base::binary );
if( !output.is_open() ) if( !output.is_open() )
{ {
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "failed to open file" ); wxString errmsg = _( "failed to open file" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '" << aFileName.ToUTF8() << "'\n"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '" << aFileName << "'\n";
return false; return false;
} }
@ -279,7 +289,7 @@ bool S3D::WriteCache( const wxString& aFileName, bool overwrite, SGNODE* aNode )
{ {
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
std::cerr << " * [INFO] problems encountered writing cache file '"; std::cerr << " * [INFO] problems encountered writing cache file '";
std::cerr << aFileName.ToUTF8() << "'\n"; std::cerr << aFileName << "'\n";
} }
#endif #endif
@ -287,14 +297,19 @@ bool S3D::WriteCache( const wxString& aFileName, bool overwrite, SGNODE* aNode )
} }
SGNODE* S3D::ReadCache( const wxString& aFileName ) SGNODE* S3D::ReadCache( const char* aFileName )
{ {
if( NULL == aFileName || aFileName[0] == 0 )
return NULL;
wxString ofile = wxString::FromUTF8Unchecked( aFileName );
if( !wxFileName::FileExists( aFileName ) ) if( !wxFileName::FileExists( aFileName ) )
{ {
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "no such file" ); wxString errmsg = _( "no such file" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '";
std::cerr << aFileName.ToUTF8() << "'\n"; std::cerr << aFileName << "'\n";
} }
SGNODE* np = new SCENEGRAPH( NULL ); SGNODE* np = new SCENEGRAPH( NULL );
@ -309,7 +324,7 @@ SGNODE* S3D::ReadCache( const wxString& aFileName )
} }
std::ifstream file; std::ifstream file;
file.open( aFileName.ToUTF8(), std::ios_base::in | std::ios_base::binary ); file.open( aFileName, std::ios_base::in | std::ios_base::binary );
if( !file.is_open() ) if( !file.is_open() )
{ {
@ -317,7 +332,7 @@ SGNODE* S3D::ReadCache( const wxString& aFileName )
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "failed to open file" ); wxString errmsg = _( "failed to open file" );
std::cerr << " * [INFO] " << " '"; std::cerr << " * [INFO] " << " '";
std::cerr << aFileName.ToUTF8() << "'\n"; std::cerr << aFileName << "'\n";
return NULL; return NULL;
} }
@ -330,7 +345,7 @@ SGNODE* S3D::ReadCache( const wxString& aFileName )
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
wxString errmsg = _( "problems encountered reading cache file" ); wxString errmsg = _( "problems encountered reading cache file" );
std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '"; std::cerr << " * [INFO] " << errmsg.ToUTF8() << " '";
std::cerr << aFileName.ToUTF8() << "'\n"; std::cerr << aFileName << "'\n";
return NULL; return NULL;
} }
@ -458,16 +473,16 @@ void S3D::GetLibVersion( unsigned char* Major, unsigned char* Minor,
unsigned char* Patch, unsigned char* Revision ) unsigned char* Patch, unsigned char* Revision )
{ {
if( Major ) if( Major )
*Major = SG_VERSION_MAJOR; *Major = KICADSG_VERSION_MAJOR;
if( Minor ) if( Minor )
*Minor = SG_VERSION_MINOR; *Minor = KICADSG_VERSION_MINOR;
if( Revision ) if( Revision )
*Revision = SG_VERSION_REVNO; *Revision = KICADSG_VERSION_REVISION;
if( Patch ) if( Patch )
*Patch = SG_VERSION_PATCH; *Patch = KICADSG_VERSION_PATCH;
return; return;
} }

View File

@ -29,8 +29,6 @@
#ifndef IFSG_API_H #ifndef IFSG_API_H
#define IFSG_API_H #define IFSG_API_H
#include <wx/string.h>
#include "plugins/3dapi/sg_types.h" #include "plugins/3dapi/sg_types.h"
#include "plugins/3dapi/sg_base.h" #include "plugins/3dapi/sg_base.h"
#include "plugins/3dapi/c3dmodel.h" #include "plugins/3dapi/c3dmodel.h"
@ -42,6 +40,13 @@ struct S3D_POINT;
namespace S3D namespace S3D
{ {
/**
* Function GetLibVersion retrieves version information of the
* kicad_3dsg library
*/
SGLIB_API void GetLibVersion( unsigned char* Major, unsigned char* Minor,
unsigned char* Patch, unsigned char* Revision );
// functions to extract information from SGNODE pointers // functions to extract information from SGNODE pointers
SGLIB_API S3D::SGTYPES GetSGNodeType( SGNODE* aNode ); SGLIB_API S3D::SGTYPES GetSGNodeType( SGNODE* aNode );
SGLIB_API SGNODE* GetSGNodeParent( SGNODE* aNode ); SGLIB_API SGNODE* GetSGNodeParent( SGNODE* aNode );
@ -64,7 +69,7 @@ namespace S3D
* @param aNode is any node within the node tree which is to be written * @param aNode is any node within the node tree which is to be written
* @return true on success * @return true on success
*/ */
SGLIB_API bool WriteCache( const wxString& aFileName, bool overwrite, SGNODE* aNode ); SGLIB_API bool WriteCache( const char* aFileName, bool overwrite, SGNODE* aNode );
/** /**
* Function ReadCache * Function ReadCache
@ -75,7 +80,7 @@ namespace S3D
* if desired this node can be associated with an IFSG_TRANSFORM wrapper via * if desired this node can be associated with an IFSG_TRANSFORM wrapper via
* the IFSG_TRANSFORM::Attach() function. * the IFSG_TRANSFORM::Attach() function.
*/ */
SGLIB_API SGNODE* ReadCache( const wxString& aFileName ); SGLIB_API SGNODE* ReadCache( const char* aFileName );
/** /**
* Function WriteVRML * Function WriteVRML
@ -87,7 +92,7 @@ namespace S3D
* @param reuse should be set to true to make use of VRML DEF/USE features * @param reuse should be set to true to make use of VRML DEF/USE features
* @return true on success * @return true on success
*/ */
SGLIB_API bool WriteVRML( const wxString& filename, bool overwrite, SGNODE* aTopNode, SGLIB_API bool WriteVRML( const char* filename, bool overwrite, SGNODE* aTopNode,
bool reuse, bool renameNodes ); bool reuse, bool renameNodes );
// NOTE: The following functions are used in combination to create a VRML // NOTE: The following functions are used in combination to create a VRML
@ -187,9 +192,6 @@ namespace S3D
* creates and initializes an SMESH struct * creates and initializes an SMESH struct
*/ */
SGLIB_API void Init3DMesh( SMESH& aMesh ); SGLIB_API void Init3DMesh( SMESH& aMesh );
SGLIB_API void GetLibVersion( unsigned char* Major, unsigned char* Minor,
unsigned char* Patch, unsigned char* Revision );
}; };
#endif // IFSG_API_H #endif // IFSG_API_H

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2015 Cirilo Bernardo <cirilo.bernardo@gmail.com> * Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -23,16 +23,16 @@
/** /**
* @file sg_version.h * @file sg_version.h
* defines the version number of 3DSG library. This file is parsed by * defines the library version of the intermediate scenegraph (SG)
* CMake to determine the version number of the 3DSG library. * implementation
*/ */
#ifndef SG_VERSION_H #ifndef SG_VERSION_H
#define SG_VERSION_H #define SG_VERSION_H
#define SG_VERSION_MAJOR 1 #define KICADSG_VERSION_MAJOR 1
#define SG_VERSION_MINOR 0 #define KICADSG_VERSION_MINOR 0
#define SG_VERSION_PATCH 0 #define KICADSG_VERSION_PATCH 0
#define SG_VERSION_REVNO 0 #define KICADSG_VERSION_REVISION 0
#endif // SG_VERSION_H #endif // SG_VERSION_H

View File

@ -302,7 +302,7 @@ SCENEGRAPH* Load( char const* aFileName )
wxString output = wxT( "_idf-" ); wxString output = wxT( "_idf-" );
output.append( fn.GetName() ); output.append( fn.GetName() );
output.append( wxT(".wrl") ); output.append( wxT(".wrl") );
S3D::WriteVRML( output, true, (SGNODE*)(data), true, true ); S3D::WriteVRML( output.ToUTF8(), true, (SGNODE*)(data), true, true );
} }
#endif #endif

View File

@ -276,7 +276,7 @@ SCENEGRAPH* Load( char const* aFileName )
output.append( fn.GetName() ); output.append( fn.GetName() );
output.append( wxT(".wrl") ); output.append( wxT(".wrl") );
S3D::WriteVRML( output, true, (SGNODE*)(scene), true, true ); S3D::WriteVRML( output.ToUTF8(), true, (SGNODE*)(scene), true, true );
} }
#endif #endif