Workaround for non-ASCII filenames in Windows
This commit is contained in:
parent
966052272f
commit
68bcdec87e
|
@ -1,9 +1,9 @@
|
|||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}/include
|
||||
${CMAKE_SOURCE_DIR}/3d-viewer
|
||||
)
|
||||
)
|
||||
|
||||
add_library( kicad_3dsg SHARED
|
||||
set( SG_FILES
|
||||
sg_base.cpp
|
||||
sg_node.cpp
|
||||
sg_helpers.cpp
|
||||
|
@ -29,6 +29,12 @@ add_library( kicad_3dsg SHARED
|
|||
ifsg_api.cpp
|
||||
)
|
||||
|
||||
if( MINGW )
|
||||
list( APPEND SG_FILES ${CMAKE_SOURCE_DIR}/common/streamwrapper.cpp )
|
||||
endif( MINGW )
|
||||
|
||||
add_library( kicad_3dsg SHARED ${SG_FILES} )
|
||||
|
||||
if( APPLE )
|
||||
# puts library into the main kicad.app bundle in build tree
|
||||
set_target_properties( kicad_3dsg PROPERTIES
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -28,6 +28,7 @@
|
|||
#include <wx/log.h>
|
||||
#include "plugins/3dapi/ifsg_api.h"
|
||||
#include "plugins/3dapi/sg_version.h"
|
||||
#include "streamwrapper.h"
|
||||
#include "3d_cache/sg/sg_node.h"
|
||||
#include "3d_cache/sg/scenegraph.h"
|
||||
#include "3d_cache/sg/sg_appearance.h"
|
||||
|
@ -77,24 +78,6 @@ static void formatMaterial( SMATERIAL& mat, SGAPPEARANCE const* app )
|
|||
}
|
||||
|
||||
|
||||
class VRML_LOCALE
|
||||
{
|
||||
private:
|
||||
std::string lname;
|
||||
|
||||
public:
|
||||
VRML_LOCALE() : lname( setlocale( LC_NUMERIC, NULL ) )
|
||||
{
|
||||
setlocale( LC_NUMERIC, "C" ); // switch the numerics locale to "C"
|
||||
}
|
||||
|
||||
~VRML_LOCALE()
|
||||
{
|
||||
setlocale( LC_NUMERIC, lname.c_str() ); // revert to the previous locale
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
bool S3D::WriteVRML( const char* filename, bool overwrite, SGNODE* aTopNode,
|
||||
bool reuse, bool renameNodes )
|
||||
{
|
||||
|
@ -141,12 +124,9 @@ bool S3D::WriteVRML( const char* filename, bool overwrite, SGNODE* aTopNode,
|
|||
return false;
|
||||
}
|
||||
|
||||
VRML_LOCALE vrmlLocale;
|
||||
std::ofstream op;
|
||||
op.open( filename, std::ios_base::out | std::ios_base::trunc
|
||||
| std::ios_base::binary );
|
||||
OPEN_OSTREAM( op, filename );
|
||||
|
||||
if( !op.is_open() )
|
||||
if( op.fail() )
|
||||
{
|
||||
std::ostringstream ostr;
|
||||
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
|
@ -156,6 +136,7 @@ bool S3D::WriteVRML( const char* filename, bool overwrite, SGNODE* aTopNode,
|
|||
return false;
|
||||
}
|
||||
|
||||
op.imbue( std::locale( "C" ) );
|
||||
op << "#VRML V2.0 utf8\n";
|
||||
|
||||
if( renameNodes )
|
||||
|
@ -168,11 +149,11 @@ bool S3D::WriteVRML( const char* filename, bool overwrite, SGNODE* aTopNode,
|
|||
|
||||
if( !op.fail() )
|
||||
{
|
||||
op.close();
|
||||
CLOSE_STREAM( op );
|
||||
return true;
|
||||
}
|
||||
|
||||
op.close();
|
||||
CLOSE_STREAM( op );
|
||||
|
||||
do {
|
||||
std::ostringstream ostr;
|
||||
|
@ -302,11 +283,9 @@ bool S3D::WriteCache( const char* aFileName, bool overwrite, SGNODE* aNode,
|
|||
}
|
||||
}
|
||||
|
||||
std::ofstream output;
|
||||
output.open( aFileName, std::ios_base::out | std::ios_base::trunc
|
||||
| std::ios_base::binary );
|
||||
OPEN_OSTREAM( output, aFileName );
|
||||
|
||||
if( !output.is_open() )
|
||||
if( output.fail() )
|
||||
{
|
||||
std::ostringstream ostr;
|
||||
ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
|
@ -324,7 +303,7 @@ bool S3D::WriteCache( const char* aFileName, bool overwrite, SGNODE* aNode,
|
|||
output << "(INTERNAL:0.0.0.0)";
|
||||
|
||||
bool rval = aNode->WriteCache( output, NULL );
|
||||
output.close();
|
||||
CLOSE_STREAM( output );
|
||||
|
||||
if( !rval )
|
||||
{
|
||||
|
@ -382,10 +361,9 @@ SGNODE* S3D::ReadCache( const char* aFileName, void* aPluginMgr,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
std::ifstream file;
|
||||
file.open( aFileName, std::ios_base::in | std::ios_base::binary );
|
||||
OPEN_ISTREAM( file, aFileName );
|
||||
|
||||
if( !file.is_open() )
|
||||
if( file.fail() )
|
||||
{
|
||||
delete np;
|
||||
std::ostringstream ostr;
|
||||
|
@ -417,7 +395,7 @@ SGNODE* S3D::ReadCache( const char* aFileName, void* aPluginMgr,
|
|||
} while( 0 );
|
||||
#endif
|
||||
|
||||
file.close();
|
||||
CLOSE_STREAM( file );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -431,7 +409,7 @@ SGNODE* S3D::ReadCache( const char* aFileName, void* aPluginMgr,
|
|||
|
||||
if( name.compare( SG_VERSION_TAG ) )
|
||||
{
|
||||
file.close();
|
||||
CLOSE_STREAM( file );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -457,7 +435,7 @@ SGNODE* S3D::ReadCache( const char* aFileName, void* aPluginMgr,
|
|||
} while( 0 );
|
||||
#endif
|
||||
|
||||
file.close();
|
||||
CLOSE_STREAM( file );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -472,14 +450,14 @@ SGNODE* S3D::ReadCache( const char* aFileName, void* aPluginMgr,
|
|||
// check the plugin tag
|
||||
if( NULL != aTagCheck && NULL != aPluginMgr && !aTagCheck( name.c_str(), aPluginMgr ) )
|
||||
{
|
||||
file.close();
|
||||
CLOSE_STREAM( file );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
} while( 0 );
|
||||
|
||||
bool rval = np->ReadCache( file, NULL );
|
||||
file.close();
|
||||
CLOSE_STREAM( file );
|
||||
|
||||
if( !rval )
|
||||
{
|
||||
|
|
|
@ -257,7 +257,7 @@ void SCENEGRAPH::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SCENEGRAPH::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SCENEGRAPH::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( m_Transforms.empty() && m_RTransforms.empty()
|
||||
&& m_Shape.empty() && m_RShape.empty() )
|
||||
|
@ -364,7 +364,7 @@ bool SCENEGRAPH::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SCENEGRAPH::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SCENEGRAPH::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode && NULL != m_Parent )
|
||||
{
|
||||
|
@ -510,7 +510,7 @@ bool SCENEGRAPH::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SCENEGRAPH::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SCENEGRAPH::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( !m_Transforms.empty() || !m_RTransforms.empty()
|
||||
|| !m_Shape.empty() || !m_RShape.empty() )
|
||||
|
|
|
@ -79,10 +79,10 @@ public:
|
|||
bool AddChildNode( SGNODE* aNode ) override;
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
|
||||
bool Prepare( const glm::dmat4* aTransform,
|
||||
S3D::MATLIST& materials, std::vector< SMESH >& meshes );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -289,7 +289,7 @@ void SGAPPEARANCE::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGAPPEARANCE::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGAPPEARANCE::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( aReuseFlag )
|
||||
{
|
||||
|
@ -366,7 +366,7 @@ bool SGAPPEARANCE::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGAPPEARANCE::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGAPPEARANCE::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -436,7 +436,7 @@ bool SGAPPEARANCE::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGAPPEARANCE::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGAPPEARANCE::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
S3D::ReadColor( aFile, ambient );
|
||||
aFile.read( (char*)&shininess, sizeof(shininess) );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -71,10 +71,10 @@ public:
|
|||
bool AddChildNode( SGNODE* aNode ) override;
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
};
|
||||
|
||||
#endif // SG_APPEARANCE_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -207,7 +207,7 @@ void SGCOLORS::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGCOLORS::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGCOLORS::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( colors.empty() )
|
||||
return false;
|
||||
|
@ -265,7 +265,7 @@ bool SGCOLORS::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGCOLORS::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGCOLORS::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -334,7 +334,7 @@ bool SGCOLORS::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGCOLORS::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGCOLORS::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( !colors.empty() )
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -56,10 +56,10 @@ public:
|
|||
void AddColor( const SGCOLOR& aColor );
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
};
|
||||
|
||||
#endif // SG_COLORS_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -210,7 +210,7 @@ void SGCOORDS::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGCOORDS::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGCOORDS::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( coords.empty() )
|
||||
return false;
|
||||
|
@ -272,7 +272,7 @@ bool SGCOORDS::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGCOORDS::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGCOORDS::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -341,7 +341,7 @@ bool SGCOORDS::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGCOORDS::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGCOORDS::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( !coords.empty() )
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -65,10 +65,10 @@ public:
|
|||
bool CalcNormals( SGFACESET* callingNode, SGNODE** aPtr = NULL );
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
};
|
||||
|
||||
#endif // SG_COORDS_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -482,7 +482,7 @@ void SGFACESET::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGFACESET::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGFACESET::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( ( NULL == m_Coords && NULL == m_RCoords )
|
||||
|| ( NULL == m_CoordIndices ) )
|
||||
|
@ -538,7 +538,7 @@ bool SGFACESET::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGFACESET::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGFACESET::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -670,7 +670,7 @@ bool SGFACESET::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGFACESET::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGFACESET::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( m_Coords || m_RCoords || m_CoordIndices
|
||||
|| m_Colors || m_RColors
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -78,10 +78,10 @@ public:
|
|||
bool CalcNormals( SGNODE** aPtr );
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
|
||||
/**
|
||||
* Function GatherCoordIndices
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -162,7 +162,7 @@ void S3D::FormatColor( std::string& result, const SGCOLOR& aColor )
|
|||
}
|
||||
|
||||
|
||||
bool S3D::WritePoint( std::ofstream& aFile, const SGPOINT& aPoint )
|
||||
bool S3D::WritePoint( std::ostream& aFile, const SGPOINT& aPoint )
|
||||
{
|
||||
aFile.write( (char*)&aPoint.x, sizeof(aPoint.x) );
|
||||
aFile.write( (char*)&aPoint.y, sizeof(aPoint.y) );
|
||||
|
@ -175,7 +175,7 @@ bool S3D::WritePoint( std::ofstream& aFile, const SGPOINT& aPoint )
|
|||
}
|
||||
|
||||
|
||||
bool S3D::WriteVector( std::ofstream& aFile, const SGVECTOR& aVector )
|
||||
bool S3D::WriteVector( std::ostream& aFile, const SGVECTOR& aVector )
|
||||
{
|
||||
double x, y, z;
|
||||
aVector.GetVector( x, y, z );
|
||||
|
@ -190,7 +190,7 @@ bool S3D::WriteVector( std::ofstream& aFile, const SGVECTOR& aVector )
|
|||
}
|
||||
|
||||
|
||||
bool S3D::WriteColor( std::ofstream& aFile, const SGCOLOR& aColor )
|
||||
bool S3D::WriteColor( std::ostream& aFile, const SGCOLOR& aColor )
|
||||
{
|
||||
float r, g, b;
|
||||
aColor.GetColor( r, g, b );
|
||||
|
@ -205,7 +205,7 @@ bool S3D::WriteColor( std::ofstream& aFile, const SGCOLOR& aColor )
|
|||
}
|
||||
|
||||
|
||||
S3D::SGTYPES S3D::ReadTag( std::ifstream& aFile, std::string& aName )
|
||||
S3D::SGTYPES S3D::ReadTag( std::istream& aFile, std::string& aName )
|
||||
{
|
||||
char schar;
|
||||
aFile.get( schar );
|
||||
|
@ -293,7 +293,7 @@ S3D::SGTYPES S3D::ReadTag( std::ifstream& aFile, std::string& aName )
|
|||
}
|
||||
|
||||
|
||||
bool S3D::ReadPoint( std::ifstream& aFile, SGPOINT& aPoint )
|
||||
bool S3D::ReadPoint( std::istream& aFile, SGPOINT& aPoint )
|
||||
{
|
||||
aFile.read( (char*)&aPoint.x, sizeof( aPoint.x ) );
|
||||
aFile.read( (char*)&aPoint.y, sizeof( aPoint.y ) );
|
||||
|
@ -306,7 +306,7 @@ bool S3D::ReadPoint( std::ifstream& aFile, SGPOINT& aPoint )
|
|||
}
|
||||
|
||||
|
||||
bool S3D::ReadVector( std::ifstream& aFile, SGVECTOR& aVector )
|
||||
bool S3D::ReadVector( std::istream& aFile, SGVECTOR& aVector )
|
||||
{
|
||||
double x, y, z;
|
||||
aFile.read( (char*)&x, sizeof(double) );
|
||||
|
@ -321,7 +321,7 @@ bool S3D::ReadVector( std::ifstream& aFile, SGVECTOR& aVector )
|
|||
}
|
||||
|
||||
|
||||
bool S3D::ReadColor( std::ifstream& aFile, SGCOLOR& aColor )
|
||||
bool S3D::ReadColor( std::istream& aFile, SGCOLOR& aColor )
|
||||
{
|
||||
float r, g, b;
|
||||
aFile.read( (char*)&r, sizeof(float) );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -32,7 +32,7 @@
|
|||
#ifndef SG_HELPERS_H
|
||||
#define SG_HELPERS_H
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
@ -210,13 +210,13 @@ namespace S3D
|
|||
//
|
||||
|
||||
// write out an XYZ vertex
|
||||
bool WritePoint( std::ofstream& aFile, const SGPOINT& aPoint );
|
||||
bool WritePoint( std::ostream& aFile, const SGPOINT& aPoint );
|
||||
|
||||
// write out a unit vector
|
||||
bool WriteVector( std::ofstream& aFile, const SGVECTOR& aVector );
|
||||
bool WriteVector( std::ostream& aFile, const SGVECTOR& aVector );
|
||||
|
||||
// write out an RGB color
|
||||
bool WriteColor( std::ofstream& aFile, const SGCOLOR& aColor );
|
||||
bool WriteColor( std::ostream& aFile, const SGCOLOR& aColor );
|
||||
|
||||
//
|
||||
// Cache related READ functions
|
||||
|
@ -232,16 +232,16 @@ namespace S3D
|
|||
* @return will be the NodeType which the tag represents or
|
||||
* S3D::SGTYPES::SGTYPE_END on failure
|
||||
*/
|
||||
S3D::SGTYPES ReadTag( std::ifstream& aFile, std::string& aName );
|
||||
S3D::SGTYPES ReadTag( std::istream& aFile, std::string& aName );
|
||||
|
||||
// read an XYZ vertex
|
||||
bool ReadPoint( std::ifstream& aFile, SGPOINT& aPoint );
|
||||
bool ReadPoint( std::istream& aFile, SGPOINT& aPoint );
|
||||
|
||||
// read a unit vector
|
||||
bool ReadVector( std::ifstream& aFile, SGVECTOR& aVector );
|
||||
bool ReadVector( std::istream& aFile, SGVECTOR& aVector );
|
||||
|
||||
// read an RGB color
|
||||
bool ReadColor( std::ifstream& aFile, SGCOLOR& aColor );
|
||||
bool ReadColor( std::istream& aFile, SGCOLOR& aColor );
|
||||
};
|
||||
|
||||
#endif // SG_HELPERS_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -21,7 +21,6 @@
|
|||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <wx/log.h>
|
||||
|
@ -195,7 +194,7 @@ void SGINDEX::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGINDEX::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGINDEX::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( index.empty() )
|
||||
return false;
|
||||
|
@ -207,7 +206,7 @@ bool SGINDEX::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGINDEX::writeCoordIndex( std::ofstream& aFile )
|
||||
bool SGINDEX::writeCoordIndex( std::ostream& aFile )
|
||||
{
|
||||
size_t n = index.size();
|
||||
|
||||
|
@ -259,14 +258,14 @@ bool SGINDEX::writeCoordIndex( std::ofstream& aFile )
|
|||
}
|
||||
|
||||
|
||||
bool SGINDEX::writeColorIndex( std::ofstream& aFile )
|
||||
bool SGINDEX::writeColorIndex( std::ostream& aFile )
|
||||
{
|
||||
aFile << " colorIndex [\n ";
|
||||
return writeIndexList( aFile );
|
||||
}
|
||||
|
||||
|
||||
bool SGINDEX::writeIndexList( std::ofstream& aFile )
|
||||
bool SGINDEX::writeIndexList( std::ostream& aFile )
|
||||
{
|
||||
// index to control formatting
|
||||
int nv = 0;
|
||||
|
@ -295,7 +294,7 @@ bool SGINDEX::writeIndexList( std::ofstream& aFile )
|
|||
}
|
||||
|
||||
|
||||
bool SGINDEX::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGINDEX::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -364,7 +363,7 @@ bool SGINDEX::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGINDEX::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGINDEX::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( !index.empty() )
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -35,9 +35,9 @@
|
|||
class SGINDEX : public SGNODE
|
||||
{
|
||||
protected:
|
||||
bool writeCoordIndex( std::ofstream& aFile );
|
||||
bool writeColorIndex( std::ofstream& aFile );
|
||||
bool writeIndexList( std::ofstream& aFile );
|
||||
bool writeCoordIndex( std::ostream& aFile );
|
||||
bool writeColorIndex( std::ostream& aFile );
|
||||
bool writeIndexList( std::ostream& aFile );
|
||||
|
||||
public:
|
||||
// for internal SG consumption only
|
||||
|
@ -89,10 +89,10 @@ public:
|
|||
void AddIndex( int aIndex );
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
};
|
||||
|
||||
#endif // SG_INDEX_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -30,7 +30,7 @@
|
|||
#ifndef SG_NODE_H
|
||||
#define SG_NODE_H
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
@ -227,7 +227,7 @@ public:
|
|||
* writes this node's data to a VRML file; this includes
|
||||
* all data of child and referenced nodes.
|
||||
*/
|
||||
virtual bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) = 0;
|
||||
virtual bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) = 0;
|
||||
|
||||
/**
|
||||
* Function WriteCache
|
||||
|
@ -236,7 +236,7 @@ public:
|
|||
* If this function is invoked by the user, parentNode must be
|
||||
* set to NULL in order to ensure coherent data.
|
||||
*/
|
||||
virtual bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) = 0;
|
||||
virtual bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) = 0;
|
||||
|
||||
/**
|
||||
* Function ReadCache
|
||||
|
@ -244,7 +244,7 @@ public:
|
|||
* open the file for reading and invoke this function from a new
|
||||
* SCENEGRAPH node.
|
||||
*/
|
||||
virtual bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) = 0;
|
||||
virtual bool ReadCache( std::istream& aFile, SGNODE* parentNode ) = 0;
|
||||
};
|
||||
|
||||
#endif // SG_NODE_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -208,7 +208,7 @@ void SGNORMALS::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGNORMALS::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGNORMALS::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( norms.empty() )
|
||||
return false;
|
||||
|
@ -264,7 +264,7 @@ bool SGNORMALS::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGNORMALS::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGNORMALS::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -333,7 +333,7 @@ bool SGNORMALS::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGNORMALS::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGNORMALS::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( !norms.empty() )
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -56,10 +56,10 @@ public:
|
|||
void AddNormal( const SGVECTOR& aNormal );
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
};
|
||||
|
||||
#endif // SG_NORMALS_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -22,7 +22,6 @@
|
|||
*/
|
||||
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <wx/log.h>
|
||||
|
@ -357,7 +356,7 @@ void SGSHAPE::ReNameNodes( void )
|
|||
}
|
||||
|
||||
|
||||
bool SGSHAPE::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
||||
bool SGSHAPE::WriteVRML( std::ostream& aFile, bool aReuseFlag )
|
||||
{
|
||||
if( !m_Appearance && !m_RAppearance
|
||||
&& !m_FaceSet && !m_RFaceSet )
|
||||
|
@ -401,7 +400,7 @@ bool SGSHAPE::WriteVRML( std::ofstream& aFile, bool aReuseFlag )
|
|||
}
|
||||
|
||||
|
||||
bool SGSHAPE::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
||||
bool SGSHAPE::WriteCache( std::ostream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( NULL == parentNode )
|
||||
{
|
||||
|
@ -509,7 +508,7 @@ bool SGSHAPE::WriteCache( std::ofstream& aFile, SGNODE* parentNode )
|
|||
}
|
||||
|
||||
|
||||
bool SGSHAPE::ReadCache( std::ifstream& aFile, SGNODE* parentNode )
|
||||
bool SGSHAPE::ReadCache( std::istream& aFile, SGNODE* parentNode )
|
||||
{
|
||||
if( m_Appearance || m_RAppearance || m_FaceSet || m_RFaceSet )
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -65,10 +65,10 @@ public:
|
|||
bool AddChildNode( SGNODE* aNode ) override;
|
||||
|
||||
void ReNameNodes( void ) override;
|
||||
bool WriteVRML( std::ofstream& aFile, bool aReuseFlag ) override;
|
||||
bool WriteVRML( std::ostream& aFile, bool aReuseFlag ) override;
|
||||
|
||||
bool WriteCache( std::ofstream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::ifstream& aFile, SGNODE* parentNode ) override;
|
||||
bool WriteCache( std::ostream& aFile, SGNODE* parentNode ) override;
|
||||
bool ReadCache( std::istream& aFile, SGNODE* parentNode ) override;
|
||||
|
||||
bool Prepare( const glm::dmat4* aTransform,
|
||||
S3D::MATLIST& materials, std::vector< SMESH >& meshes );
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program 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
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#if !defined( WIN32 ) || !defined( __GNUC__ )
|
||||
#error streamwrapper.cpp should not be included in this build
|
||||
#endif
|
||||
|
||||
#include "streamwrapper.h"
|
||||
|
||||
#include <wx/string.h>
|
||||
#include <iostream>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
|
||||
kicad::stream::stream()
|
||||
{
|
||||
m_buf = NULL;
|
||||
m_stream = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
kicad::stream::~stream()
|
||||
{
|
||||
if( NULL != m_stream )
|
||||
delete m_stream;
|
||||
|
||||
if( NULL != m_buf )
|
||||
{
|
||||
m_buf->close(); // ensure file is closed regardless of m_buf's destructor
|
||||
delete m_buf;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
std::iostream* kicad::stream::Open( const char* aFileName, std::ios_base::openmode aMode )
|
||||
{
|
||||
if( NULL != m_stream )
|
||||
{
|
||||
delete m_stream;
|
||||
m_stream = NULL;
|
||||
}
|
||||
|
||||
if( NULL != m_buf )
|
||||
{
|
||||
m_buf->close();
|
||||
delete m_buf;
|
||||
}
|
||||
|
||||
int flags = 0;
|
||||
|
||||
if( aMode & std::ios_base::app )
|
||||
flags |= _O_APPEND;
|
||||
|
||||
if( aMode & std::ios_base::out && aMode & std::ios_base::in )
|
||||
flags |= _O_RDWR;
|
||||
else if( aMode & std::ios_base::out )
|
||||
flags |= _O_WRONLY;
|
||||
else if( aMode & std::ios_base::in )
|
||||
flags |= _O_RDONLY;
|
||||
|
||||
if( aMode & std::ios_base::binary )
|
||||
flags |= _O_BINARY;
|
||||
|
||||
if( aMode & std::ios_base::out && aMode & std::ios_base::trunc
|
||||
&& !( aMode & std::ios_base::app ) && !( aMode & std::ios_base::ate ) )
|
||||
flags |= _O_TRUNC;
|
||||
|
||||
if( aMode & std::ios_base::out )
|
||||
flags |= _O_CREAT;
|
||||
|
||||
//int fd = open( "testfile.txt", flags, S_IRUSR | S_IWUSR );
|
||||
wxString lstr( wxString::FromUTF8Unchecked( aFileName ) );
|
||||
int fd = _wopen( lstr.wc_str(), flags, _S_IREAD | _S_IWRITE );
|
||||
|
||||
if( fd >= 0 && aMode & std::ios_base::ate )
|
||||
lseek( fd, 0, SEEK_END );
|
||||
|
||||
// NOTE: _O_RDONLY in Windows, O_RDONLY in Linux
|
||||
m_buf = new __gnu_cxx::stdio_filebuf<char>( fd, aMode );
|
||||
|
||||
m_stream = new std::iostream( m_buf );
|
||||
|
||||
return m_stream;
|
||||
}
|
||||
|
||||
|
||||
void kicad::stream::Close( void )
|
||||
{
|
||||
if( m_buf )
|
||||
m_buf->close();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
std::iostream* kicad::stream::GetStream( void )
|
||||
{
|
||||
return m_stream;
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation, either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program 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
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef STREAMWRAPPER_H
|
||||
#define STREAMWRAPPER_H
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
#if defined( WIN32 ) && defined( __GNUC__ )
|
||||
#include <ext/stdio_filebuf.h>
|
||||
|
||||
#define OPEN_OSTREAM( var, name ) \
|
||||
kicad::stream var ## _BUF_; \
|
||||
std::ostream& var = *var ## _BUF_.Open( name, std::ios_base::out | std::ios_base::trunc | std::ios_base::binary )
|
||||
|
||||
#define OPEN_ISTREAM( var, name ) \
|
||||
kicad::stream var ## _BUF_; \
|
||||
std::istream& var = *var ## _BUF_.Open( name, std::ios_base::in | std::ios_base::binary )
|
||||
|
||||
#define OPEN_IOSTREAM( var, name ) \
|
||||
kicad::stream var ## _BUF_; \
|
||||
std::iostream& var = *var ## _BUF_.Open( name, std::ios_base::out | std::ios_base::in | std::ios_base::binary )
|
||||
|
||||
#define CLOSE_STREAM( var ) var ## _BUF_.Close()
|
||||
|
||||
namespace kicad
|
||||
{
|
||||
class stream
|
||||
{
|
||||
private:
|
||||
__gnu_cxx::stdio_filebuf<char>* m_buf;
|
||||
std::iostream* m_stream;
|
||||
|
||||
public:
|
||||
stream();
|
||||
virtual ~stream();
|
||||
|
||||
std::iostream* Open( const char* aFileName, std::ios_base::openmode aMode );
|
||||
void Close( void );
|
||||
|
||||
std::iostream* GetStream( void );
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#elif defined( _MSC_VER ) // defined( WIN32 ) && defined( __GNUC__ )
|
||||
|
||||
#define OPEN_OSTREAM( var, name ) \
|
||||
std::ofstream var; \
|
||||
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
|
||||
std::ios_base::out | std::ios_base::trunc | std::ios_base::binary )
|
||||
|
||||
#define OPEN_ISTREAM( var, name ) \
|
||||
std::ifstream var; \
|
||||
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
|
||||
std::ios_base::in | std::ios_base::binary )
|
||||
|
||||
#define OPEN_IOSTREAM( var, name ) \
|
||||
std::fstream var; \
|
||||
var.open( wxString::FromUTF8Unchecked( name ).wc_str(), \
|
||||
std::ios_base::out | std::ios_base::in | std::ios_base::binary )
|
||||
|
||||
#define CLOSE_STREAM( var ) var.close()
|
||||
|
||||
#else // defined( WIN32 ) && defined( __GNUC__ )
|
||||
|
||||
#define OPEN_OSTREAM( var, name ) \
|
||||
std::ofstream var; \
|
||||
var.open( name, std::ios_base::out | std::ios_base::trunc )
|
||||
|
||||
#define OPEN_ISTREAM( var, name ) \
|
||||
std::ifstream var; \
|
||||
var.open( name, std::ios_base::in )
|
||||
|
||||
#define OPEN_IOSTREAM( var, name ) \
|
||||
std::fstream var; \
|
||||
var.open( name, std::ios_base::out | std::ios_base::in )
|
||||
|
||||
#define CLOSE_STREAM( var ) var.close()
|
||||
|
||||
#endif // defined( WIN32 ) && defined( __GNUC__ )
|
||||
|
||||
#endif // STREAMWRAPPER_H
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2009-2013 Lorenzo Mercantonio
|
||||
* Copyright (C) 2014-2016 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
* Copyright (C) 2013 Jean-Pierre Charras jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2004-2016 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
|
@ -44,6 +44,7 @@
|
|||
#include "macros.h"
|
||||
#include "pgm_base.h"
|
||||
#include "plugins/3dapi/ifsg_all.h"
|
||||
#include "streamwrapper.h"
|
||||
#include "vrml_layer.h"
|
||||
#include "wxPcbStruct.h"
|
||||
#include "../../kicad/kicad.h"
|
||||
|
@ -62,7 +63,6 @@ static bool USE_DEFS; // true to reuse component definitions
|
|||
static bool USE_RELPATH; // true to use relative paths in VRML inline{}
|
||||
static double WORLD_SCALE = 1.0; // scaling from 0.1 in to desired VRML unit
|
||||
static double BOARD_SCALE; // scaling from mm to desired VRML world scale
|
||||
static std::ofstream output_file; // legacy VRML output stream
|
||||
static const int PRECISION = 6; // legacy precision factor (now set to 6)
|
||||
static wxString SUBDIR_3D; // legacy 3D subdirectory
|
||||
static wxString PROJ_DIR; // project directory
|
||||
|
@ -315,7 +315,7 @@ static void create_vrml_shell( IFSG_TRANSFORM& PcbOutput, VRML_COLOR_INDEX color
|
|||
static void create_vrml_plane( IFSG_TRANSFORM& PcbOutput, VRML_COLOR_INDEX colorID,
|
||||
VRML_LAYER* layer, double aHeight, bool aTopPlane );
|
||||
|
||||
static void write_triangle_bag( std::ofstream& aOut_file, VRML_COLOR& aColor,
|
||||
static void write_triangle_bag( std::ostream& aOut_file, VRML_COLOR& aColor,
|
||||
VRML_LAYER* aLayer, bool aPlane, bool aTop,
|
||||
double aTop_z, double aBottom_z )
|
||||
{
|
||||
|
@ -415,7 +415,8 @@ static void write_triangle_bag( std::ofstream& aOut_file, VRML_COLOR& aColor,
|
|||
}
|
||||
|
||||
|
||||
static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName )
|
||||
static void write_layers( MODEL_VRML& aModel, BOARD* aPcb,
|
||||
const char* aFileName, std::ofstream* aOutputFile )
|
||||
{
|
||||
// VRML_LAYER board;
|
||||
aModel.m_board.Tesselate( &aModel.m_holes );
|
||||
|
@ -424,7 +425,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_PCB ),
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_PCB ),
|
||||
&aModel.m_board, false, false, brdz, -brdz );
|
||||
}
|
||||
else
|
||||
|
@ -445,7 +446,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_TRACK ),
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_TRACK ),
|
||||
&aModel.m_top_copper, true, true,
|
||||
aModel.GetLayerZ( F_Cu ), 0 );
|
||||
}
|
||||
|
@ -460,7 +461,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_TIN ),
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_TIN ),
|
||||
&aModel.m_top_tin, true, true,
|
||||
aModel.GetLayerZ( F_Cu ) + Millimeter2iu( ART_OFFSET / 2.0 ) * BOARD_SCALE,
|
||||
0 );
|
||||
|
@ -477,7 +478,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_TRACK ),
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_TRACK ),
|
||||
&aModel.m_bot_copper, true, false,
|
||||
aModel.GetLayerZ( B_Cu ), 0 );
|
||||
}
|
||||
|
@ -492,7 +493,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_TIN ),
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_TIN ),
|
||||
&aModel.m_bot_tin, true, false,
|
||||
aModel.GetLayerZ( B_Cu )
|
||||
- Millimeter2iu( ART_OFFSET / 2.0 ) * BOARD_SCALE,
|
||||
|
@ -510,7 +511,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_TIN ),
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_TIN ),
|
||||
&aModel.m_plated_holes, false, false,
|
||||
aModel.GetLayerZ( F_Cu ) + Millimeter2iu( ART_OFFSET / 2.0 ) * BOARD_SCALE,
|
||||
aModel.GetLayerZ( B_Cu ) - Millimeter2iu( ART_OFFSET / 2.0 ) * BOARD_SCALE );
|
||||
|
@ -527,7 +528,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_SILK ), &aModel.m_top_silk,
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_SILK ), &aModel.m_top_silk,
|
||||
true, true, aModel.GetLayerZ( F_SilkS ), 0 );
|
||||
}
|
||||
else
|
||||
|
@ -541,7 +542,7 @@ static void write_layers( MODEL_VRML& aModel, BOARD* aPcb, const char* aFileName
|
|||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
write_triangle_bag( output_file, aModel.GetColor( VRML_COLOR_SILK ), &aModel.m_bot_silk,
|
||||
write_triangle_bag( *aOutputFile, aModel.GetColor( VRML_COLOR_SILK ), &aModel.m_bot_silk,
|
||||
true, false, aModel.GetLayerZ( B_SilkS ), 0 );
|
||||
}
|
||||
else
|
||||
|
@ -1265,7 +1266,8 @@ static void compose_quat( double q1[4], double q2[4], double qr[4] )
|
|||
}
|
||||
|
||||
|
||||
static void export_vrml_module( MODEL_VRML& aModel, BOARD* aPcb, MODULE* aModule )
|
||||
static void export_vrml_module( MODEL_VRML& aModel, BOARD* aPcb,
|
||||
MODULE* aModule, std::ostream* aOutputFile )
|
||||
{
|
||||
if( !aModel.m_plainPCB )
|
||||
{
|
||||
|
@ -1404,29 +1406,28 @@ static void export_vrml_module( MODEL_VRML& aModel, BOARD* aPcb, MODULE* aModule
|
|||
if( !S3D::WriteVRML( dstFile.GetFullPath().ToUTF8(), true, mod3d, USE_DEFS, true ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
output_file << "Transform {\n";
|
||||
(*aOutputFile) << "Transform {\n";
|
||||
|
||||
// only write a rotation if it is >= 0.1 deg
|
||||
if( std::abs( rot[3] ) > 0.0001745 )
|
||||
{
|
||||
output_file << " rotation " << std::setprecision( 5 );
|
||||
output_file << rot[0] << " " << rot[1] << " " << rot[2] << " " << rot[3] << "\n";
|
||||
(*aOutputFile) << " rotation " << std::setprecision( 5 );
|
||||
(*aOutputFile) << rot[0] << " " << rot[1] << " " << rot[2] << " " << rot[3] << "\n";
|
||||
}
|
||||
|
||||
output_file << " translation " << std::setprecision( PRECISION );
|
||||
output_file << trans.x << " ";
|
||||
output_file << trans.y << " ";
|
||||
output_file << trans.z << "\n";
|
||||
(*aOutputFile) << " translation " << std::setprecision( PRECISION );
|
||||
(*aOutputFile) << trans.x << " ";
|
||||
(*aOutputFile) << trans.y << " ";
|
||||
(*aOutputFile) << trans.z << "\n";
|
||||
|
||||
output_file << " scale ";
|
||||
output_file << sM->m_Scale.x << " ";
|
||||
output_file << sM->m_Scale.y << " ";
|
||||
output_file << sM->m_Scale.z << "\n";
|
||||
(*aOutputFile) << " scale ";
|
||||
(*aOutputFile) << sM->m_Scale.x << " ";
|
||||
(*aOutputFile) << sM->m_Scale.y << " ";
|
||||
(*aOutputFile) << sM->m_Scale.z << "\n";
|
||||
|
||||
output_file << " children [\n Inline {\n url \"";
|
||||
(*aOutputFile) << " children [\n Inline {\n url \"";
|
||||
|
||||
if( USE_RELPATH )
|
||||
{
|
||||
|
@ -1439,8 +1440,8 @@ static void export_vrml_module( MODEL_VRML& aModel, BOARD* aPcb, MODULE* aModule
|
|||
|
||||
wxString fn = dstFile.GetFullPath();
|
||||
fn.Replace( "\\", "/" );
|
||||
output_file << TO_UTF8( fn ) << "\"\n } ]\n";
|
||||
output_file << " }\n";
|
||||
(*aOutputFile) << TO_UTF8( fn ) << "\"\n } ]\n";
|
||||
(*aOutputFile) << " }\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1503,9 +1504,6 @@ bool PCB_EDIT_FRAME::ExportVRML_File( const wxString& aFullFileName, double aMMt
|
|||
// plain PCB or else PCB with copper and silkscreen
|
||||
model3d.m_plainPCB = aUsePlainPCB;
|
||||
|
||||
// locale switch for C numeric output
|
||||
LOCALE_IO* toggle = NULL;
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
|
@ -1537,8 +1535,16 @@ bool PCB_EDIT_FRAME::ExportVRML_File( const wxString& aFullFileName, double aMMt
|
|||
throw( std::runtime_error( "Could not create 3D model subdirectory" ) );
|
||||
}
|
||||
|
||||
toggle = new LOCALE_IO;
|
||||
output_file.open( TO_UTF8( aFullFileName ), std::ios_base::out );
|
||||
OPEN_OSTREAM( output_file, TO_UTF8( aFullFileName ) );
|
||||
|
||||
if( output_file.fail() )
|
||||
{
|
||||
std::ostringstream ostr;
|
||||
ostr << "Could not open file '" << TO_UTF8( aFullFileName ) << "'";
|
||||
throw( std::runtime_error( ostr.str().c_str() ) );
|
||||
}
|
||||
|
||||
output_file.imbue( std::locale( "C" ) );
|
||||
|
||||
// Begin with the usual VRML boilerplate
|
||||
wxString fn = aFullFileName;
|
||||
|
@ -1553,19 +1559,28 @@ bool PCB_EDIT_FRAME::ExportVRML_File( const wxString& aFullFileName, double aMMt
|
|||
output_file << WORLD_SCALE << " ";
|
||||
output_file << WORLD_SCALE << "\n";
|
||||
output_file << " children [\n";
|
||||
}
|
||||
|
||||
// Export footprints
|
||||
for( MODULE* module = pcb->m_Modules; module != 0; module = module->Next() )
|
||||
export_vrml_module( model3d, pcb, module );
|
||||
// Export footprints
|
||||
for( MODULE* module = pcb->m_Modules; module != 0; module = module->Next() )
|
||||
export_vrml_module( model3d, pcb, module, &output_file );
|
||||
|
||||
// write out the board and all layers
|
||||
write_layers( model3d, pcb, TO_UTF8( aFullFileName ) );
|
||||
// write out the board and all layers
|
||||
write_layers( model3d, pcb, TO_UTF8( aFullFileName ), &output_file );
|
||||
|
||||
// Close the outer 'transform' node
|
||||
if( USE_INLINES )
|
||||
// Close the outer 'transform' node
|
||||
output_file << "]\n}\n";
|
||||
|
||||
CLOSE_STREAM( output_file );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Export footprints
|
||||
for( MODULE* module = pcb->m_Modules; module != 0; module = module->Next() )
|
||||
export_vrml_module( model3d, pcb, module, NULL );
|
||||
|
||||
// write out the board and all layers
|
||||
write_layers( model3d, pcb, TO_UTF8( aFullFileName ), NULL );
|
||||
}
|
||||
}
|
||||
catch( const std::exception& e )
|
||||
{
|
||||
|
@ -1576,14 +1591,6 @@ bool PCB_EDIT_FRAME::ExportVRML_File( const wxString& aFullFileName, double aMMt
|
|||
ok = false;
|
||||
}
|
||||
|
||||
if( USE_INLINES )
|
||||
{
|
||||
output_file.close();
|
||||
|
||||
if( toggle )
|
||||
delete toggle;
|
||||
}
|
||||
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* 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) 2015-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -28,8 +28,10 @@
|
|||
#include <cmath>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/log.h>
|
||||
#include <wx/string.h>
|
||||
|
||||
#include "plugins/3d/3d_plugin.h"
|
||||
#include "plugins/3dapi/ifsg_all.h"
|
||||
#include "idf_parser.h"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
* Copyright (C) 2016-2017 Cirilo Bernardo <cirilo.bernardo@gmail.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -277,7 +277,7 @@ float FACET::CalcFaceNormal()
|
|||
lCPts[2] = *sV;
|
||||
++sV;
|
||||
|
||||
WRLVEC3F wnorm = face_normal;
|
||||
wnorm = face_normal;
|
||||
a2 = acosf( VCalcCosAngle( lCPts[1], lCPts[0], lCPts[2] ) );
|
||||
wnorm.x *= a1 * a2;
|
||||
wnorm.y *= a1 * a2;
|
||||
|
|
|
@ -1,17 +1,28 @@
|
|||
include_directories(
|
||||
"${CMAKE_SOURCE_DIR}/include"
|
||||
"${CMAKE_SOURCE_DIR}/lib_dxf"
|
||||
"${CMAKE_SOURCE_DIR}/utils/idftools"
|
||||
${OPENGL_INCLUDE_DIR}
|
||||
${Boost_INCLUDE_DIR}
|
||||
)
|
||||
)
|
||||
|
||||
link_directories(
|
||||
"${CMAKE_BINARY_DIR}/lib_dxf"
|
||||
)
|
||||
)
|
||||
|
||||
add_library( idf3 STATIC
|
||||
idf_helpers.cpp idf_common.cpp idf_outlines.cpp
|
||||
idf_parser.cpp vrml_layer.cpp )
|
||||
set( IDF3_FILES
|
||||
idf_helpers.cpp
|
||||
idf_common.cpp
|
||||
idf_outlines.cpp
|
||||
idf_parser.cpp
|
||||
vrml_layer.cpp
|
||||
)
|
||||
|
||||
if( MINGW )
|
||||
list( APPEND IDF3_FILES ${CMAKE_SOURCE_DIR}/common/streamwrapper.cpp )
|
||||
endif( MINGW )
|
||||
|
||||
add_library( idf3 STATIC ${IDF3_FILES} )
|
||||
|
||||
add_executable( idfcyl idf_cylinder.cpp )
|
||||
add_executable( idfrect idf_rect.cpp )
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -47,17 +47,17 @@
|
|||
#include <cerrno>
|
||||
#include <list>
|
||||
#include <utility>
|
||||
#include <clocale>
|
||||
#include <vector>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <algorithm>
|
||||
#include <boost/ptr_container/ptr_map.hpp>
|
||||
|
||||
#include <idf_helpers.h>
|
||||
#include <idf_common.h>
|
||||
#include <idf_parser.h>
|
||||
#include <vrml_layer.h>
|
||||
#include "idf_helpers.h"
|
||||
#include "idf_common.h"
|
||||
#include "idf_parser.h"
|
||||
#include "streamwrapper.h"
|
||||
#include "vrml_layer.h"
|
||||
|
||||
#ifndef MIN_ANG
|
||||
#define MIN_ANG 0.01
|
||||
|
@ -198,14 +198,14 @@ VRML_COLOR colors[NCOLORS] =
|
|||
{ { 0.102, 1, 0.984 }, { 0, 0, 0 }, { 0.102, 1, 0.984 }, 0.9, 0, 0.1 }
|
||||
};
|
||||
|
||||
bool WriteHeader( IDF3_BOARD& board, std::ofstream& file );
|
||||
bool MakeBoard( IDF3_BOARD& board, std::ofstream& file );
|
||||
bool MakeComponents( IDF3_BOARD& board, std::ofstream& file, bool compact );
|
||||
bool MakeOtherOutlines( IDF3_BOARD& board, std::ofstream& file );
|
||||
bool WriteHeader( IDF3_BOARD& board, std::ostream& file );
|
||||
bool MakeBoard( IDF3_BOARD& board, std::ostream& file );
|
||||
bool MakeComponents( IDF3_BOARD& board, std::ostream& file, bool compact );
|
||||
bool MakeOtherOutlines( IDF3_BOARD& board, std::ostream& file );
|
||||
bool PopulateVRML( VRML_LAYER& model, const std::list< IDF_OUTLINE* >* items, bool bottom,
|
||||
double scale, double dX = 0.0, double dY = 0.0, double angle = 0.0 );
|
||||
bool AddSegment( VRML_LAYER& model, IDF_SEGMENT* seg, int icont, int iseg );
|
||||
bool WriteTriangles( std::ofstream& file, VRML_IDS* vID, VRML_LAYER* layer, bool plane,
|
||||
bool WriteTriangles( std::ostream& file, VRML_IDS* vID, VRML_LAYER* layer, bool plane,
|
||||
bool top, double top_z, double bottom_z, int precision, bool compact );
|
||||
inline void TransformPoint( IDF_SEGMENT& seg, double frac, bool bottom,
|
||||
double dX, double dY, double angle );
|
||||
|
@ -215,9 +215,6 @@ VRML_IDS* GetColor( boost::ptr_map<const std::string, VRML_IDS>& cmap,
|
|||
|
||||
int IDF2VRML::OnRun()
|
||||
{
|
||||
// IDF implicitly requires the C locale
|
||||
setlocale( LC_ALL, "C" );
|
||||
|
||||
// Essential inputs:
|
||||
// 1. IDF file
|
||||
// 2. Output scale: internal IDF units are mm, so 1 = 1mm per VRML unit,
|
||||
|
@ -264,9 +261,14 @@ int IDF2VRML::OnRun()
|
|||
fname.Normalize();
|
||||
wxLogMessage( "Writing file: '%s'", fname.GetFullName() );
|
||||
|
||||
std::ofstream ofile;
|
||||
ofile.open( fname.GetFullPath().ToUTF8(), std::ios_base::out );
|
||||
OPEN_OSTREAM( ofile, fname.GetFullPath().ToUTF8() );
|
||||
|
||||
if( ofile.fail() )
|
||||
{
|
||||
wxLogMessage( "Could not open file: '%s'", fname.GetFullName() );
|
||||
}
|
||||
|
||||
ofile.imbue( std::locale( "C" ) );
|
||||
ofile << std::fixed; // do not use exponents in VRML output
|
||||
WriteHeader( pcb, ofile );
|
||||
|
||||
|
@ -280,15 +282,13 @@ int IDF2VRML::OnRun()
|
|||
MakeOtherOutlines( pcb, ofile );
|
||||
|
||||
ofile << "]\n}\n";
|
||||
ofile.close();
|
||||
CLOSE_STREAM( ofile );
|
||||
|
||||
// restore the locale
|
||||
setlocale( LC_ALL, "" );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
bool WriteHeader( IDF3_BOARD& board, std::ofstream& file )
|
||||
bool WriteHeader( IDF3_BOARD& board, std::ostream& file )
|
||||
{
|
||||
std::string bname = board.GetBoardName();
|
||||
|
||||
|
@ -320,7 +320,7 @@ bool WriteHeader( IDF3_BOARD& board, std::ofstream& file )
|
|||
}
|
||||
|
||||
|
||||
bool MakeBoard( IDF3_BOARD& board, std::ofstream& file )
|
||||
bool MakeBoard( IDF3_BOARD& board, std::ostream& file )
|
||||
{
|
||||
VRML_LAYER vpcb;
|
||||
|
||||
|
@ -484,7 +484,7 @@ bool AddSegment( VRML_LAYER& model, IDF_SEGMENT* seg, int icont, int iseg )
|
|||
}
|
||||
|
||||
|
||||
bool WriteTriangles( std::ofstream& file, VRML_IDS* vID, VRML_LAYER* layer, bool plane,
|
||||
bool WriteTriangles( std::ostream& file, VRML_IDS* vID, VRML_LAYER* layer, bool plane,
|
||||
bool top, double top_z, double bottom_z, int precision, bool compact )
|
||||
{
|
||||
if( vID == NULL || layer == NULL )
|
||||
|
@ -699,7 +699,7 @@ inline void TransformPoint( IDF_SEGMENT& seg, double frac, bool bottom,
|
|||
return;
|
||||
}
|
||||
|
||||
bool MakeComponents( IDF3_BOARD& board, std::ofstream& file, bool compact )
|
||||
bool MakeComponents( IDF3_BOARD& board, std::ostream& file, bool compact )
|
||||
{
|
||||
int cidx = 2; // color index; start at 2 since 0,1 are special (board, NOGEOM_NOPART)
|
||||
|
||||
|
@ -883,7 +883,7 @@ VRML_IDS* GetColor( boost::ptr_map<const std::string, VRML_IDS>& cmap, int& inde
|
|||
}
|
||||
|
||||
|
||||
bool MakeOtherOutlines( IDF3_BOARD& board, std::ofstream& file )
|
||||
bool MakeOtherOutlines( IDF3_BOARD& board, std::ostream& file )
|
||||
{
|
||||
int cidx = 2; // color index; start at 2 since 0,1 are special (board, NOGEOM_NOPART)
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013-2014 Cirilo Bernardo
|
||||
* Copyright (C) 2013-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -28,7 +28,6 @@
|
|||
#include <list>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <cerrno>
|
||||
|
@ -91,7 +90,7 @@ IDF_NOTE::IDF_NOTE()
|
|||
}
|
||||
|
||||
|
||||
bool IDF_NOTE::readNote( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
bool IDF_NOTE::readNote( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
IDF3::IDF_UNIT aBoardUnit )
|
||||
{
|
||||
std::string iline; // the input line
|
||||
|
@ -250,7 +249,7 @@ bool IDF_NOTE::readNote( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardStat
|
|||
}
|
||||
|
||||
|
||||
bool IDF_NOTE::writeNote( std::ofstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit )
|
||||
bool IDF_NOTE::writeNote( std::ostream& aBoardFile, IDF3::IDF_UNIT aBoardUnit )
|
||||
{
|
||||
if( aBoardUnit == UNIT_THOU )
|
||||
{
|
||||
|
@ -403,7 +402,7 @@ bool IDF_DRILL_DATA::Matches( double aDrillDia, double aPosX, double aPosY )
|
|||
return false;
|
||||
}
|
||||
|
||||
bool IDF_DRILL_DATA::read( std::ifstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit,
|
||||
bool IDF_DRILL_DATA::read( std::istream& aBoardFile, IDF3::IDF_UNIT aBoardUnit,
|
||||
IDF3::FILE_STATE aBoardState, IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
std::string iline; // the input line
|
||||
|
@ -651,7 +650,7 @@ bool IDF_DRILL_DATA::read( std::ifstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit,
|
|||
return true;
|
||||
}
|
||||
|
||||
void IDF_DRILL_DATA::write( std::ofstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit )
|
||||
void IDF_DRILL_DATA::write( std::ostream& aBoardFile, IDF3::IDF_UNIT aBoardUnit )
|
||||
{
|
||||
std::string holestr;
|
||||
std::string refstr;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013-2014 Cirilo Bernardo
|
||||
* Copyright (C) 2013-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -280,7 +280,7 @@ private:
|
|||
* @return bool: true if a note item was read, false otherwise. In case of unrecoverable errors
|
||||
* an exception is thrown
|
||||
*/
|
||||
bool readNote( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState, IDF3::IDF_UNIT aBoardUnit );
|
||||
bool readNote( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState, IDF3::IDF_UNIT aBoardUnit );
|
||||
|
||||
/**
|
||||
* Function writeNote
|
||||
|
@ -292,7 +292,7 @@ private:
|
|||
* @return bool: true if the item was successfully written, false otherwise. In case of
|
||||
* unrecoverable errors an exception is thrown
|
||||
*/
|
||||
bool writeNote( std::ofstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit );
|
||||
bool writeNote( std::ostream& aBoardFile, IDF3::IDF_UNIT aBoardUnit );
|
||||
|
||||
public:
|
||||
IDF_NOTE();
|
||||
|
@ -366,7 +366,7 @@ private:
|
|||
* @return bool: true if data was successfully read, otherwise false. In case of an
|
||||
* unrecoverable error an exception is thrown
|
||||
*/
|
||||
bool read( std::ifstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit, IDF3::FILE_STATE aBoardState,
|
||||
bool read( std::istream& aBoardFile, IDF3::IDF_UNIT aBoardUnit, IDF3::FILE_STATE aBoardState,
|
||||
IDF3::IDF_VERSION aIdfVersion );
|
||||
|
||||
/**
|
||||
|
@ -377,7 +377,7 @@ private:
|
|||
* @param aBoardFile is an open BOARD file
|
||||
* @param aBoardUnit is the native unit of the output file
|
||||
*/
|
||||
void write( std::ofstream& aBoardFile, IDF3::IDF_UNIT aBoardUnit );
|
||||
void write( std::ostream& aBoardFile, IDF3::IDF_UNIT aBoardUnit );
|
||||
|
||||
public:
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -32,7 +32,7 @@ using namespace std;
|
|||
using namespace IDF3;
|
||||
|
||||
// fetch a line from the given input file and trim the ends
|
||||
bool IDF3::FetchIDFLine( std::ifstream& aModel, std::string& aLine, bool& isComment, std::streampos& aFilePos )
|
||||
bool IDF3::FetchIDFLine( std::istream& aModel, std::string& aLine, bool& isComment, std::streampos& aFilePos )
|
||||
{
|
||||
aLine = "";
|
||||
aFilePos = aModel.tellg();
|
||||
|
@ -205,7 +205,7 @@ bool IDF3::ParseIDFLayer( const std::string& aToken, IDF3::IDF_LAYER& aLayer )
|
|||
}
|
||||
|
||||
|
||||
bool IDF3::WriteLayersText( std::ofstream& aBoardFile, IDF3::IDF_LAYER aLayer )
|
||||
bool IDF3::WriteLayersText( std::ostream& aBoardFile, IDF3::IDF_LAYER aLayer )
|
||||
{
|
||||
switch( aLayer )
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -25,7 +25,7 @@
|
|||
#define IDF_HELPERS_H
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <idf_common.h>
|
||||
|
||||
|
@ -82,7 +82,7 @@ namespace IDF3
|
|||
*
|
||||
* @return bool: true if a line was read and was not empty; otherwise false
|
||||
*/
|
||||
bool FetchIDFLine( std::ifstream& aModel, std::string& aLine, bool& isComment, std::streampos& aFilePos );
|
||||
bool FetchIDFLine( std::istream& aModel, std::string& aLine, bool& isComment, std::streampos& aFilePos );
|
||||
|
||||
|
||||
/**
|
||||
|
@ -145,7 +145,7 @@ bool ParseIDFLayer( const std::string& aToken, IDF3::IDF_LAYER& aLayer );
|
|||
*
|
||||
* @return bool: true if the data was successfully written, otherwise false
|
||||
*/
|
||||
bool WriteLayersText( std::ofstream& aBoardFile, IDF3::IDF_LAYER aLayer );
|
||||
bool WriteLayersText( std::ostream& aBoardFile, IDF3::IDF_LAYER aLayer );
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -151,7 +151,7 @@ IDF3::OUTLINE_TYPE BOARD_OUTLINE::GetOutlineType( void )
|
|||
return outlineType;
|
||||
}
|
||||
|
||||
void BOARD_OUTLINE::readOutlines( std::ifstream& aBoardFile, IDF3::IDF_VERSION aIdfVersion )
|
||||
void BOARD_OUTLINE::readOutlines( std::istream& aBoardFile, IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// reads the outline data from a file
|
||||
double x, y, ang;
|
||||
|
@ -654,7 +654,7 @@ void BOARD_OUTLINE::readOutlines( std::ifstream& aBoardFile, IDF3::IDF_VERSION a
|
|||
return;
|
||||
}
|
||||
|
||||
bool BOARD_OUTLINE::writeComments( std::ofstream& aBoardFile )
|
||||
bool BOARD_OUTLINE::writeComments( std::ostream& aBoardFile )
|
||||
{
|
||||
if( comments.empty() )
|
||||
return true;
|
||||
|
@ -671,7 +671,7 @@ bool BOARD_OUTLINE::writeComments( std::ofstream& aBoardFile )
|
|||
return !aBoardFile.fail();
|
||||
}
|
||||
|
||||
bool BOARD_OUTLINE::writeOwner( std::ofstream& aBoardFile )
|
||||
bool BOARD_OUTLINE::writeOwner( std::ostream& aBoardFile )
|
||||
{
|
||||
switch( owner )
|
||||
{
|
||||
|
@ -691,7 +691,7 @@ bool BOARD_OUTLINE::writeOwner( std::ofstream& aBoardFile )
|
|||
return !aBoardFile.fail();
|
||||
}
|
||||
|
||||
void BOARD_OUTLINE::writeOutline( std::ofstream& aBoardFile, IDF_OUTLINE* aOutline, size_t aIndex )
|
||||
void BOARD_OUTLINE::writeOutline( std::ostream& aBoardFile, IDF_OUTLINE* aOutline, size_t aIndex )
|
||||
{
|
||||
std::list<IDF_SEGMENT*>::iterator bo;
|
||||
std::list<IDF_SEGMENT*>::iterator eo;
|
||||
|
@ -955,7 +955,7 @@ void BOARD_OUTLINE::writeOutline( std::ofstream& aBoardFile, IDF_OUTLINE* aOutli
|
|||
return;
|
||||
}
|
||||
|
||||
void BOARD_OUTLINE::writeOutlines( std::ofstream& aBoardFile )
|
||||
void BOARD_OUTLINE::writeOutlines( std::ostream& aBoardFile )
|
||||
{
|
||||
if( outlines.empty() )
|
||||
return;
|
||||
|
@ -1029,7 +1029,7 @@ double BOARD_OUTLINE::GetThickness( void )
|
|||
return thickness;
|
||||
}
|
||||
|
||||
void BOARD_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
void BOARD_OUTLINE::readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// BOARD_OUTLINE (PANEL_OUTLINE)
|
||||
|
@ -1223,7 +1223,7 @@ void BOARD_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHea
|
|||
}
|
||||
|
||||
|
||||
void BOARD_OUTLINE::writeData( std::ofstream& aBoardFile )
|
||||
void BOARD_OUTLINE::writeData( std::ostream& aBoardFile )
|
||||
{
|
||||
writeComments( aBoardFile );
|
||||
|
||||
|
@ -1610,7 +1610,7 @@ IDF3::IDF_LAYER OTHER_OUTLINE::GetSide( void )
|
|||
return side;
|
||||
}
|
||||
|
||||
void OTHER_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
void OTHER_OUTLINE::readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// OTHER_OUTLINE/VIA_KEEPOUT
|
||||
|
@ -1869,7 +1869,7 @@ void OTHER_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHea
|
|||
return;
|
||||
}
|
||||
|
||||
void OTHER_OUTLINE::writeData( std::ofstream& aBoardFile )
|
||||
void OTHER_OUTLINE::writeData( std::ostream& aBoardFile )
|
||||
{
|
||||
// this section is optional; do not write if not required
|
||||
if( outlines.empty() )
|
||||
|
@ -1970,7 +1970,7 @@ IDF3::IDF_LAYER ROUTE_OUTLINE::GetLayers( void )
|
|||
return layers;
|
||||
}
|
||||
|
||||
void ROUTE_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
void ROUTE_OUTLINE::readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// ROUTE_OUTLINE (or ROUTE_KEEPOUT)
|
||||
|
@ -2183,7 +2183,7 @@ void ROUTE_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHea
|
|||
}
|
||||
|
||||
|
||||
void ROUTE_OUTLINE::writeData( std::ofstream& aBoardFile )
|
||||
void ROUTE_OUTLINE::writeData( std::ostream& aBoardFile )
|
||||
{
|
||||
// this section is optional; do not write if not required
|
||||
if( outlines.empty() )
|
||||
|
@ -2318,7 +2318,7 @@ double PLACE_OUTLINE::GetMaxHeight( void )
|
|||
return thickness;
|
||||
}
|
||||
|
||||
void PLACE_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
void PLACE_OUTLINE::readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// PLACE_OUTLINE/KEEPOUT
|
||||
|
@ -2558,7 +2558,7 @@ void PLACE_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHea
|
|||
return;
|
||||
}
|
||||
|
||||
void PLACE_OUTLINE::writeData( std::ofstream& aBoardFile )
|
||||
void PLACE_OUTLINE::writeData( std::ostream& aBoardFile )
|
||||
{
|
||||
// this section is optional; do not write if not required
|
||||
if( outlines.empty() )
|
||||
|
@ -2742,7 +2742,7 @@ const std::string& GROUP_OUTLINE::GetGroupName( void )
|
|||
}
|
||||
|
||||
|
||||
void GROUP_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
void GROUP_OUTLINE::readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// Placement Group
|
||||
|
@ -2901,7 +2901,7 @@ void GROUP_OUTLINE::readData( std::ifstream& aBoardFile, const std::string& aHea
|
|||
}
|
||||
|
||||
|
||||
void GROUP_OUTLINE::writeData( std::ofstream& aBoardFile )
|
||||
void GROUP_OUTLINE::writeData( std::ostream& aBoardFile )
|
||||
{
|
||||
// this section is optional; do not write if not required
|
||||
if( outlines.empty() )
|
||||
|
@ -2974,7 +2974,7 @@ IDF3_COMP_OUTLINE::IDF3_COMP_OUTLINE( IDF3_BOARD* aParent )
|
|||
return;
|
||||
}
|
||||
|
||||
void IDF3_COMP_OUTLINE::readProperties( std::ifstream& aLibFile )
|
||||
void IDF3_COMP_OUTLINE::readProperties( std::istream& aLibFile )
|
||||
{
|
||||
bool quoted = false;
|
||||
bool comment = false;
|
||||
|
@ -3094,7 +3094,7 @@ void IDF3_COMP_OUTLINE::readProperties( std::ifstream& aLibFile )
|
|||
}
|
||||
|
||||
|
||||
bool IDF3_COMP_OUTLINE::writeProperties( std::ofstream& aLibFile )
|
||||
bool IDF3_COMP_OUTLINE::writeProperties( std::ostream& aLibFile )
|
||||
{
|
||||
if( props.empty() )
|
||||
return true;
|
||||
|
@ -3111,7 +3111,7 @@ bool IDF3_COMP_OUTLINE::writeProperties( std::ofstream& aLibFile )
|
|||
return !aLibFile.fail();
|
||||
}
|
||||
|
||||
void IDF3_COMP_OUTLINE::readData( std::ifstream& aLibFile, const std::string& aHeader,
|
||||
void IDF3_COMP_OUTLINE::readData( std::istream& aLibFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion )
|
||||
{
|
||||
// .ELECTRICAL/.MECHANICAL
|
||||
|
@ -3377,7 +3377,7 @@ void IDF3_COMP_OUTLINE::readData( std::ifstream& aLibFile, const std::string& aH
|
|||
}
|
||||
|
||||
|
||||
void IDF3_COMP_OUTLINE::writeData( std::ofstream& aLibFile )
|
||||
void IDF3_COMP_OUTLINE::writeData( std::ostream& aLibFile )
|
||||
{
|
||||
if( refNum == 0 )
|
||||
return; // nothing to do
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -28,8 +28,6 @@
|
|||
#include <string>
|
||||
#include <list>
|
||||
#include <map>
|
||||
#include <wx/string.h>
|
||||
#include <wx/filename.h>
|
||||
|
||||
#include <idf_common.h>
|
||||
|
||||
|
@ -104,15 +102,15 @@ protected:
|
|||
double thickness; // Board/Extrude Thickness or Height (IDF spec)
|
||||
|
||||
// Read outline data from a BOARD or LIBRARY file's outline section
|
||||
void readOutlines( std::ifstream& aBoardFile, IDF3::IDF_VERSION aIdfVersion );
|
||||
void readOutlines( std::istream& aBoardFile, IDF3::IDF_VERSION aIdfVersion );
|
||||
// Write comments to a BOARD or LIBRARY file (must not be within a SECTION as per IDFv3 spec)
|
||||
bool writeComments( std::ofstream& aBoardFile );
|
||||
bool writeComments( std::ostream& aBoardFile );
|
||||
// Write the outline owner to a BOARD file
|
||||
bool writeOwner( std::ofstream& aBoardFile );
|
||||
bool writeOwner( std::ostream& aBoardFile );
|
||||
// Write the data of a single outline object
|
||||
void writeOutline( std::ofstream& aBoardFile, IDF_OUTLINE* aOutline, size_t aIndex );
|
||||
void writeOutline( std::ostream& aBoardFile, IDF_OUTLINE* aOutline, size_t aIndex );
|
||||
// Iterate through the outlines and write out all data
|
||||
void writeOutlines( std::ofstream& aBoardFile ); // write outline data (no headers)
|
||||
void writeOutlines( std::ostream& aBoardFile ); // write outline data (no headers)
|
||||
// Clear internal list of outlines
|
||||
void clearOutlines( void );
|
||||
/**
|
||||
|
@ -135,7 +133,7 @@ protected:
|
|||
* @param aBoardFile is an IDFv3 file opened for reading
|
||||
* @param aHeader is the ".BOARD_OUTLINE" header line as read by FetchIDFLine
|
||||
*/
|
||||
virtual void readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
virtual void readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion );
|
||||
|
||||
/**
|
||||
|
@ -145,7 +143,7 @@ protected:
|
|||
*
|
||||
* @param aBoardFile is an IDFv3 file opened for writing
|
||||
*/
|
||||
virtual void writeData( std::ofstream& aBoardFile );
|
||||
virtual void writeData( std::ostream& aBoardFile );
|
||||
|
||||
public:
|
||||
BOARD_OUTLINE();
|
||||
|
@ -363,7 +361,7 @@ private:
|
|||
* @param aBoardFile is an IDFv3 file open for reading
|
||||
* @param aHeader is the .OTHER_OUTLINE header as read via FetchIDFLine
|
||||
*/
|
||||
virtual void readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
virtual void readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion ) override;
|
||||
|
||||
/**
|
||||
|
@ -374,7 +372,7 @@ private:
|
|||
*
|
||||
* @return bool: true if the data was successfully written, otherwise false.
|
||||
*/
|
||||
virtual void writeData( std::ofstream& aBoardFile ) override;
|
||||
virtual void writeData( std::ostream& aBoardFile ) override;
|
||||
|
||||
public:
|
||||
OTHER_OUTLINE( IDF3_BOARD* aParent );
|
||||
|
@ -431,14 +429,14 @@ private:
|
|||
* @param aBoardFile is an open IDFv3 board file
|
||||
* @param aHeader is the .ROUTE_OUTLINE header as returned by FetchIDFLine
|
||||
*/
|
||||
virtual void readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
virtual void readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion ) override;
|
||||
|
||||
/**
|
||||
* Function writeData
|
||||
* writes the ROUTE_OUTLINE data to an open IDFv3 file
|
||||
*/
|
||||
virtual void writeData( std::ofstream& aBoardFile ) override;
|
||||
virtual void writeData( std::ostream& aBoardFile ) override;
|
||||
|
||||
protected:
|
||||
IDF3::IDF_LAYER layers; // Routing layers (IDF spec)
|
||||
|
@ -483,7 +481,7 @@ private:
|
|||
* @param aBoardFile is an IDFv3 file opened for reading
|
||||
* @param aHeader is the .PLACE_OUTLINE header as returned by FetchIDFLine
|
||||
*/
|
||||
virtual void readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
virtual void readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion ) override;
|
||||
|
||||
/**
|
||||
|
@ -494,7 +492,7 @@ private:
|
|||
*
|
||||
* @return bool: true if the data was successfully written, otherwise false
|
||||
*/
|
||||
virtual void writeData( std::ofstream& aBoardFile ) override;
|
||||
virtual void writeData( std::ostream& aBoardFile ) override;
|
||||
|
||||
protected:
|
||||
IDF3::IDF_LAYER side; // Board Side [TOP/BOTTOM/BOTH ONLY] (IDF spec)
|
||||
|
@ -592,7 +590,7 @@ private:
|
|||
* @param aBoardFile is an open IDFv3 file
|
||||
* @param aHeader is the .PLACE_REGION header as returned by FetchIDFLine
|
||||
*/
|
||||
virtual void readData( std::ifstream& aBoardFile, const std::string& aHeader,
|
||||
virtual void readData( std::istream& aBoardFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion ) override;
|
||||
|
||||
/**
|
||||
|
@ -603,7 +601,7 @@ private:
|
|||
*
|
||||
* @return bool: true if the data is successfully written, otherwise false
|
||||
*/
|
||||
virtual void writeData( std::ofstream& aBoardFile ) override;
|
||||
virtual void writeData( std::ostream& aBoardFile ) override;
|
||||
|
||||
public:
|
||||
GROUP_OUTLINE( IDF3_BOARD* aParent );
|
||||
|
@ -661,8 +659,8 @@ private:
|
|||
|
||||
std::map< std::string, std::string > props; // properties list
|
||||
|
||||
void readProperties( std::ifstream& aLibFile );
|
||||
bool writeProperties( std::ofstream& aLibFile );
|
||||
void readProperties( std::istream& aLibFile );
|
||||
bool writeProperties( std::ostream& aLibFile );
|
||||
|
||||
/**
|
||||
* Function readData
|
||||
|
@ -672,7 +670,7 @@ private:
|
|||
* @param aLibFile is an open IDFv3 Library file
|
||||
* @param aHeader is the .ELECTRICAL or .MECHANICAL header as returned by FetchIDFLine
|
||||
*/
|
||||
virtual void readData( std::ifstream& aLibFile, const std::string& aHeader,
|
||||
virtual void readData( std::istream& aLibFile, const std::string& aHeader,
|
||||
IDF3::IDF_VERSION aIdfVersion ) override;
|
||||
|
||||
/**
|
||||
|
@ -683,7 +681,7 @@ private:
|
|||
*
|
||||
* @return bool: true if the data was successfully written, otherwise false
|
||||
*/
|
||||
virtual void writeData( std::ofstream& aLibFile ) override;
|
||||
virtual void writeData( std::ostream& aLibFile ) override;
|
||||
|
||||
/**
|
||||
* Function incrementRef
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -24,14 +24,16 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cmath>
|
||||
#include <cerrno>
|
||||
#include <algorithm>
|
||||
#include <wx/string.h>
|
||||
#include <wx/filename.h>
|
||||
|
||||
#include <idf_parser.h>
|
||||
#include <idf_helpers.h>
|
||||
#include "idf_parser.h"
|
||||
#include "idf_helpers.h"
|
||||
#include "streamwrapper.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace IDF3;
|
||||
|
@ -229,7 +231,7 @@ bool IDF3_COMP_OUTLINE_DATA::SetOutline( IDF3_COMP_OUTLINE* aOutline )
|
|||
}
|
||||
|
||||
|
||||
bool IDF3_COMP_OUTLINE_DATA::readPlaceData( std::ifstream &aBoardFile,
|
||||
bool IDF3_COMP_OUTLINE_DATA::readPlaceData( std::istream &aBoardFile,
|
||||
IDF3::FILE_STATE& aBoardState,
|
||||
IDF3_BOARD *aBoard,
|
||||
IDF3::IDF_VERSION aIdfVersion,
|
||||
|
@ -713,7 +715,7 @@ bool IDF3_COMP_OUTLINE_DATA::readPlaceData( std::ifstream &aBoardFile,
|
|||
} // IDF3_COMP_OUTLINE_DATA::readPlaceData
|
||||
|
||||
|
||||
void IDF3_COMP_OUTLINE_DATA::writePlaceData( std::ofstream& aBoardFile,
|
||||
void IDF3_COMP_OUTLINE_DATA::writePlaceData( std::ostream& aBoardFile,
|
||||
double aXpos, double aYpos, double aAngle,
|
||||
const std::string aRefDes,
|
||||
IDF3::IDF_PLACEMENT aPlacement,
|
||||
|
@ -1291,7 +1293,7 @@ bool IDF3_COMPONENT::SetPlacement( IDF3::IDF_PLACEMENT aPlacementValue )
|
|||
return true;
|
||||
}
|
||||
|
||||
bool IDF3_COMPONENT::writeDrillData( std::ofstream& aBoardFile )
|
||||
bool IDF3_COMPONENT::writeDrillData( std::ostream& aBoardFile )
|
||||
{
|
||||
if( drills.empty() )
|
||||
return true;
|
||||
|
@ -1309,7 +1311,7 @@ bool IDF3_COMPONENT::writeDrillData( std::ofstream& aBoardFile )
|
|||
}
|
||||
|
||||
|
||||
bool IDF3_COMPONENT::writePlaceData( std::ofstream& aBoardFile )
|
||||
bool IDF3_COMPONENT::writePlaceData( std::ostream& aBoardFile )
|
||||
{
|
||||
if( components.empty() )
|
||||
return true;
|
||||
|
@ -1330,7 +1332,6 @@ bool IDF3_COMPONENT::writePlaceData( std::ofstream& aBoardFile )
|
|||
IDF3_BOARD::IDF3_BOARD( IDF3::CAD_TYPE aCadType )
|
||||
{
|
||||
idfVer = IDF_V3;
|
||||
state = FILE_START;
|
||||
cadType = aCadType;
|
||||
userPrec = 5;
|
||||
userScale = 1.0;
|
||||
|
@ -1608,7 +1609,7 @@ double IDF3_BOARD::GetBoardThickness( void )
|
|||
|
||||
|
||||
// read the DRILLED HOLES section
|
||||
void IDF3_BOARD::readBrdDrills( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState )
|
||||
void IDF3_BOARD::readBrdDrills( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState )
|
||||
{
|
||||
IDF_DRILL_DATA drill;
|
||||
|
||||
|
@ -1631,7 +1632,7 @@ void IDF3_BOARD::readBrdDrills( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBo
|
|||
|
||||
|
||||
// read the NOTES section
|
||||
void IDF3_BOARD::readBrdNotes( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState )
|
||||
void IDF3_BOARD::readBrdNotes( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState )
|
||||
{
|
||||
IDF_NOTE note;
|
||||
|
||||
|
@ -1647,7 +1648,7 @@ void IDF3_BOARD::readBrdNotes( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoa
|
|||
|
||||
|
||||
// read the component placement section
|
||||
void IDF3_BOARD::readBrdPlacement( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState, bool aNoSubstituteOutlines )
|
||||
void IDF3_BOARD::readBrdPlacement( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState, bool aNoSubstituteOutlines )
|
||||
{
|
||||
IDF3_COMP_OUTLINE_DATA oldata;
|
||||
|
||||
|
@ -1658,7 +1659,7 @@ void IDF3_BOARD::readBrdPlacement( std::ifstream& aBoardFile, IDF3::FILE_STATE&
|
|||
|
||||
|
||||
// read the board HEADER
|
||||
void IDF3_BOARD::readBrdHeader( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState )
|
||||
void IDF3_BOARD::readBrdHeader( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState )
|
||||
{
|
||||
std::string iline; // the input line
|
||||
bool isComment; // true if a line just read in is a comment line
|
||||
|
@ -1874,7 +1875,7 @@ void IDF3_BOARD::readBrdHeader( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBo
|
|||
|
||||
|
||||
// read individual board sections; pay attention to IDFv3 section specifications
|
||||
void IDF3_BOARD::readBrdSection( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
void IDF3_BOARD::readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
bool aNoSubstituteOutlines )
|
||||
{
|
||||
std::list< std::string > comments; // comments associated with a section
|
||||
|
@ -2298,15 +2299,13 @@ void IDF3_BOARD::readBrdSection( std::ifstream& aBoardFile, IDF3::FILE_STATE& aB
|
|||
// read the board file data
|
||||
void IDF3_BOARD::readBoardFile( const std::string& aFileName, bool aNoSubstituteOutlines )
|
||||
{
|
||||
std::ifstream brd;
|
||||
|
||||
brd.exceptions ( std::ifstream::badbit );
|
||||
OPEN_ISTREAM( brd, aFileName.c_str() );
|
||||
|
||||
try
|
||||
{
|
||||
brd.open( aFileName.c_str(), std::ios_base::in | std::ios_base::binary );
|
||||
brd.exceptions ( std::ios_base::badbit );
|
||||
|
||||
if( !brd.is_open() )
|
||||
if( brd.fail() )
|
||||
{
|
||||
ostringstream ostr;
|
||||
ostr << "\n* could not open file: '" << aFileName << "'";
|
||||
|
@ -2314,6 +2313,7 @@ void IDF3_BOARD::readBoardFile( const std::string& aFileName, bool aNoSubstitute
|
|||
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
|
||||
}
|
||||
|
||||
brd.imbue( std::locale( "C" ) );
|
||||
std::string iline; // the input line
|
||||
bool isComment; // true if a line just read in is a comment line
|
||||
std::streampos pos;
|
||||
|
@ -2341,12 +2341,11 @@ void IDF3_BOARD::readBoardFile( const std::string& aFileName, bool aNoSubstitute
|
|||
// check if we have valid data
|
||||
if( brd.eof() && state >= IDF3::FILE_OUTLINE && state < IDF3::FILE_INVALID )
|
||||
{
|
||||
brd.close();
|
||||
CLOSE_STREAM( brd );
|
||||
return;
|
||||
}
|
||||
|
||||
brd.close();
|
||||
|
||||
CLOSE_STREAM( brd );
|
||||
ostringstream ostr;
|
||||
ostr << "\n* empty IDF file: '" << aFileName << "'";
|
||||
|
||||
|
@ -2384,20 +2383,17 @@ void IDF3_BOARD::readBoardFile( const std::string& aFileName, bool aNoSubstitute
|
|||
catch( const std::exception& )
|
||||
{
|
||||
brd.exceptions ( std::ios_base::goodbit );
|
||||
|
||||
if( brd.is_open() )
|
||||
brd.close();
|
||||
|
||||
CLOSE_STREAM( brd );
|
||||
throw;
|
||||
}
|
||||
|
||||
brd.close();
|
||||
CLOSE_STREAM( brd );
|
||||
return;
|
||||
} // readBoardFile()
|
||||
|
||||
|
||||
// read the library sections (outlines)
|
||||
void IDF3_BOARD::readLibSection( std::ifstream& aLibFile, IDF3::FILE_STATE& aLibState, IDF3_BOARD* aBoard )
|
||||
void IDF3_BOARD::readLibSection( std::istream& aLibFile, IDF3::FILE_STATE& aLibState, IDF3_BOARD* aBoard )
|
||||
{
|
||||
if( aBoard == NULL )
|
||||
{
|
||||
|
@ -2527,7 +2523,7 @@ void IDF3_BOARD::readLibSection( std::ifstream& aLibFile, IDF3::FILE_STATE& aLib
|
|||
|
||||
|
||||
// read the library HEADER
|
||||
void IDF3_BOARD::readLibHeader( std::ifstream& aLibFile, IDF3::FILE_STATE& aLibState )
|
||||
void IDF3_BOARD::readLibHeader( std::istream& aLibFile, IDF3::FILE_STATE& aLibState )
|
||||
{
|
||||
std::string iline; // the input line
|
||||
bool isComment; // true if a line just read in is a comment line
|
||||
|
@ -2685,14 +2681,21 @@ void IDF3_BOARD::readLibHeader( std::ifstream& aLibFile, IDF3::FILE_STATE& aLibS
|
|||
// read the library file data
|
||||
void IDF3_BOARD::readLibFile( const std::string& aFileName )
|
||||
{
|
||||
std::ifstream lib;
|
||||
|
||||
lib.exceptions ( std::ifstream::badbit );
|
||||
OPEN_ISTREAM( lib, aFileName.c_str() );
|
||||
|
||||
try
|
||||
{
|
||||
lib.open( aFileName.c_str(), std::ios_base::in | std::ios_base::binary );
|
||||
lib.exceptions ( std::ios_base::badbit );
|
||||
|
||||
if( lib.fail() )
|
||||
{
|
||||
ostringstream ostr;
|
||||
ostr << "\n* could not open file: '" << aFileName << "'";
|
||||
|
||||
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
|
||||
}
|
||||
|
||||
lib.imbue( std::locale( "C" ) );
|
||||
IDF3::FILE_STATE state = IDF3::FILE_START;
|
||||
|
||||
readLibHeader( lib, state );
|
||||
|
@ -2702,14 +2705,11 @@ void IDF3_BOARD::readLibFile( const std::string& aFileName )
|
|||
catch( const std::exception& )
|
||||
{
|
||||
lib.exceptions ( std::ios_base::goodbit );
|
||||
|
||||
if( lib.is_open() )
|
||||
lib.close();
|
||||
|
||||
CLOSE_STREAM( lib );
|
||||
throw;
|
||||
}
|
||||
|
||||
lib.close();
|
||||
CLOSE_STREAM( lib );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2820,13 +2820,21 @@ bool IDF3_BOARD::ReadFile( const wxString& aFullFileName, bool aNoSubstituteOutl
|
|||
// write the library file data
|
||||
bool IDF3_BOARD::writeLibFile( const std::string& aFileName )
|
||||
{
|
||||
std::ofstream lib;
|
||||
lib.exceptions( std::ofstream::failbit );
|
||||
OPEN_OSTREAM( lib, aFileName.c_str() );
|
||||
|
||||
try
|
||||
{
|
||||
lib.open( aFileName.c_str(), std::ios_base::out );
|
||||
lib.exceptions( std::ios_base::failbit );
|
||||
|
||||
if( lib.fail() )
|
||||
{
|
||||
ostringstream ostr;
|
||||
ostr << "\n* could not open file: '" << aFileName << "'";
|
||||
|
||||
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
|
||||
}
|
||||
|
||||
lib.imbue( std::locale( "C" ) );
|
||||
wxDateTime tdate( time( NULL ) );
|
||||
|
||||
if( idfSource.empty() )
|
||||
|
@ -2856,28 +2864,32 @@ bool IDF3_BOARD::writeLibFile( const std::string& aFileName )
|
|||
catch( const std::exception& )
|
||||
{
|
||||
lib.exceptions( std::ios_base::goodbit );
|
||||
|
||||
if( lib.is_open() )
|
||||
lib.close();
|
||||
|
||||
CLOSE_STREAM( lib );
|
||||
throw;
|
||||
}
|
||||
|
||||
lib.close();
|
||||
|
||||
CLOSE_STREAM( lib );
|
||||
return true;
|
||||
}
|
||||
|
||||
// write the board file data
|
||||
void IDF3_BOARD::writeBoardFile( const std::string& aFileName )
|
||||
{
|
||||
std::ofstream brd;
|
||||
brd.exceptions( std::ofstream::failbit );
|
||||
OPEN_OSTREAM( brd, aFileName.c_str() );
|
||||
|
||||
try
|
||||
{
|
||||
brd.open( aFileName.c_str(), std::ios_base::out );
|
||||
brd.exceptions( std::ostream::failbit );
|
||||
|
||||
if( brd.fail() )
|
||||
{
|
||||
ostringstream ostr;
|
||||
ostr << "\n* could not open file: '" << aFileName << "'";
|
||||
|
||||
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
|
||||
}
|
||||
|
||||
brd.imbue( std::locale( "C" ) );
|
||||
wxDateTime tdate( time( NULL ) );
|
||||
|
||||
if( idfSource.empty() )
|
||||
|
@ -3123,15 +3135,11 @@ void IDF3_BOARD::writeBoardFile( const std::string& aFileName )
|
|||
catch( const std::exception& )
|
||||
{
|
||||
brd.exceptions( std::ios_base::goodbit );
|
||||
|
||||
if( brd.is_open() )
|
||||
brd.close();
|
||||
|
||||
CLOSE_STREAM( brd );
|
||||
throw;
|
||||
}
|
||||
|
||||
brd.close();
|
||||
|
||||
CLOSE_STREAM( brd );
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3889,14 +3897,22 @@ IDF3_COMP_OUTLINE* IDF3_BOARD::GetComponentOutline( wxString aFullFileName )
|
|||
return NULL;
|
||||
}
|
||||
|
||||
std::ifstream model;
|
||||
model.exceptions ( std::ifstream::badbit );
|
||||
OPEN_ISTREAM( model, fname.c_str() );
|
||||
|
||||
try
|
||||
{
|
||||
model.open( fname.c_str(), std::ios_base::in | std::ios_base::binary );
|
||||
model.exceptions ( std::ios_base::badbit );
|
||||
|
||||
if( model.fail() )
|
||||
{
|
||||
ostringstream ostr;
|
||||
ostr << "\n* could not open file: '" << fname << "'";
|
||||
|
||||
throw( IDF_ERROR( __FILE__, __FUNCTION__, __LINE__, ostr.str() ) );
|
||||
}
|
||||
|
||||
|
||||
model.imbue( std::locale( "C" ) );
|
||||
std::string iline; // the input line
|
||||
bool isComment; // true if a line just read in is a comment line
|
||||
std::streampos pos;
|
||||
|
@ -3939,18 +3955,13 @@ IDF3_COMP_OUTLINE* IDF3_BOARD::GetComponentOutline( wxString aFullFileName )
|
|||
catch( const std::exception& e )
|
||||
{
|
||||
delete cp;
|
||||
|
||||
model.exceptions ( std::ios_base::goodbit );
|
||||
|
||||
if( model.is_open() )
|
||||
model.close();
|
||||
|
||||
CLOSE_STREAM( model );
|
||||
errormsg = e.what();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
model.close();
|
||||
CLOSE_STREAM( model );
|
||||
|
||||
// check the unique ID against the list from library components
|
||||
std::list< std::string >::iterator lsts = uidLibList.begin();
|
||||
|
@ -4291,7 +4302,6 @@ void IDF3_BOARD::Clear( void )
|
|||
boardName.clear();
|
||||
olnBoard.setThickness( thickness );
|
||||
|
||||
state = FILE_START;
|
||||
unit = UNIT_MM;
|
||||
userScale = 1.0;
|
||||
userXoff = 0.0;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2014 Cirilo Bernardo
|
||||
* Copyright (C) 2014-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -91,7 +91,7 @@ private:
|
|||
* data was encountered or an error occurred. if an error occurred then
|
||||
* an exception is thrown.
|
||||
*/
|
||||
bool readPlaceData( std::ifstream &aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
bool readPlaceData( std::istream &aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
IDF3_BOARD *aBoard, IDF3::IDF_VERSION aIdfVersion,
|
||||
bool aNoSubstituteOutlines );
|
||||
|
||||
|
@ -109,7 +109,7 @@ private:
|
|||
*
|
||||
* @return bool: true if data was successfully written, otherwise false
|
||||
*/
|
||||
void writePlaceData( std::ofstream& aBoardFile, double aXpos, double aYpos, double aAngle,
|
||||
void writePlaceData( std::ostream& aBoardFile, double aXpos, double aYpos, double aAngle,
|
||||
const std::string aRefDes, IDF3::IDF_PLACEMENT aPlacement,
|
||||
IDF3::IDF_LAYER aSide );
|
||||
|
||||
|
@ -233,7 +233,7 @@ private:
|
|||
*
|
||||
* @return bool: true if the operation succeeded, otherwise false
|
||||
*/
|
||||
bool writeDrillData( std::ofstream& aBoardFile );
|
||||
bool writeDrillData( std::ostream& aBoardFile );
|
||||
|
||||
/**
|
||||
* Function WritePlaceData
|
||||
|
@ -243,7 +243,7 @@ private:
|
|||
*
|
||||
* @return bool: true if the operation succeeded, otherwise false
|
||||
*/
|
||||
bool writePlaceData( std::ofstream& aBoardFile );
|
||||
bool writePlaceData( std::ostream& aBoardFile );
|
||||
|
||||
#ifndef DISABLE_IDF_OWNERSHIP
|
||||
bool checkOwnership( int aSourceLine, const char* aSourceFunc );
|
||||
|
@ -474,7 +474,6 @@ private:
|
|||
std::map< std::string, IDF3_COMPONENT*> components; // drill and placement data for components
|
||||
std::map< std::string, IDF3_COMP_OUTLINE*> compOutlines; // component outlines (data for library file)
|
||||
std::string boardName;
|
||||
IDF3::FILE_STATE state;
|
||||
IDF3::CAD_TYPE cadType;
|
||||
IDF3::IDF_UNIT unit;
|
||||
IDF3::IDF_VERSION idfVer; // IDF version of Board or Library
|
||||
|
@ -526,18 +525,18 @@ private:
|
|||
bool delCompDrill( double aDia, double aXpos, double aYpos, std::string aRefDes );
|
||||
|
||||
// read the DRILLED HOLES section
|
||||
void readBrdDrills( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState );
|
||||
void readBrdDrills( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState );
|
||||
// read the NOTES section
|
||||
void readBrdNotes( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState );
|
||||
void readBrdNotes( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState );
|
||||
// read the component placement section
|
||||
void readBrdPlacement( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
void readBrdPlacement( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
bool aNoSubstituteOutlines );
|
||||
// read the board HEADER
|
||||
void readBrdHeader( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState );
|
||||
void readBrdHeader( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState );
|
||||
// read individual board sections; pay attention to IDFv3 section specifications
|
||||
// exception thrown on unrecoverable errors. state flag set to FILE_PLACEMENT
|
||||
// upon reading the PLACEMENT file; according to IDFv3 this is the final section
|
||||
void readBrdSection( std::ifstream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
void readBrdSection( std::istream& aBoardFile, IDF3::FILE_STATE& aBoardState,
|
||||
bool aNoSubstituteOutlines );
|
||||
// read the board file data
|
||||
void readBoardFile( const std::string& aFileName, bool aNoSubstituteOutlines );
|
||||
|
@ -546,9 +545,9 @@ private:
|
|||
void writeBoardFile( const std::string& aFileName );
|
||||
|
||||
// read the library sections (outlines)
|
||||
void readLibSection( std::ifstream& aLibFile, IDF3::FILE_STATE& aLibState, IDF3_BOARD* aBoard );
|
||||
void readLibSection( std::istream& aLibFile, IDF3::FILE_STATE& aLibState, IDF3_BOARD* aBoard );
|
||||
// read the library HEADER
|
||||
void readLibHeader( std::ifstream& aLibFile, IDF3::FILE_STATE& aLibState );
|
||||
void readLibHeader( std::istream& aLibFile, IDF3::FILE_STATE& aLibState );
|
||||
// read the library file data
|
||||
void readLibFile( const std::string& aFileName );
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Cirilo Bernardo
|
||||
* Copyright (C) 2013-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -980,7 +980,7 @@ bool VRML_LAYER::pushOutline( VRML_LAYER* holes )
|
|||
|
||||
|
||||
// writes out the vertex list for a planar feature
|
||||
bool VRML_LAYER::WriteVertices( double aZcoord, std::ofstream& aOutFile, int aPrecision )
|
||||
bool VRML_LAYER::WriteVertices( double aZcoord, std::ostream& aOutFile, int aPrecision )
|
||||
{
|
||||
if( ordmap.size() < 3 )
|
||||
{
|
||||
|
@ -1026,7 +1026,7 @@ bool VRML_LAYER::WriteVertices( double aZcoord, std::ofstream& aOutFile, int aPr
|
|||
// writes out the vertex list for a 3D feature; top and bottom are the
|
||||
// Z values for the top and bottom; top must be > bottom
|
||||
bool VRML_LAYER::Write3DVertices( double aTopZ, double aBottomZ,
|
||||
std::ofstream& aOutFile, int aPrecision )
|
||||
std::ostream& aOutFile, int aPrecision )
|
||||
{
|
||||
if( ordmap.size() < 3 )
|
||||
{
|
||||
|
@ -1113,7 +1113,7 @@ bool VRML_LAYER::Write3DVertices( double aTopZ, double aBottomZ,
|
|||
// writes out the index list;
|
||||
// 'top' indicates the vertex ordering and should be
|
||||
// true for a polygon visible from above the PCB
|
||||
bool VRML_LAYER::WriteIndices( bool aTopFlag, std::ofstream& aOutFile )
|
||||
bool VRML_LAYER::WriteIndices( bool aTopFlag, std::ostream& aOutFile )
|
||||
{
|
||||
if( triplets.empty() )
|
||||
{
|
||||
|
@ -1161,7 +1161,7 @@ bool VRML_LAYER::WriteIndices( bool aTopFlag, std::ofstream& aOutFile )
|
|||
|
||||
|
||||
// writes out the index list for a 3D feature
|
||||
bool VRML_LAYER::Write3DIndices( std::ofstream& aOutFile, bool aIncludePlatedHoles )
|
||||
bool VRML_LAYER::Write3DIndices( std::ostream& aOutFile, bool aIncludePlatedHoles )
|
||||
{
|
||||
if( outline.empty() )
|
||||
{
|
||||
|
@ -1703,7 +1703,7 @@ int VRML_LAYER::GetSize( void )
|
|||
// renumbering of all vertices from 'start'. Returns the end number.
|
||||
// Take care when using this call since tesselators cannot work on
|
||||
// the internal data concurrently
|
||||
int VRML_LAYER::Import( int start, GLUtesselator* tess )
|
||||
int VRML_LAYER::Import( int start, GLUtesselator* aTesselator )
|
||||
{
|
||||
if( start < 0 )
|
||||
{
|
||||
|
@ -1711,7 +1711,7 @@ int VRML_LAYER::Import( int start, GLUtesselator* tess )
|
|||
return -1;
|
||||
}
|
||||
|
||||
if( !tess )
|
||||
if( !aTesselator )
|
||||
{
|
||||
error = "Import(): NULL tesselator pointer";
|
||||
return -1;
|
||||
|
@ -1741,7 +1741,7 @@ int VRML_LAYER::Import( int start, GLUtesselator* tess )
|
|||
cbeg = contours[i]->begin();
|
||||
cend = contours[i]->end();
|
||||
|
||||
gluTessBeginContour( tess );
|
||||
gluTessBeginContour( aTesselator );
|
||||
|
||||
while( cbeg != cend )
|
||||
{
|
||||
|
@ -1749,10 +1749,10 @@ int VRML_LAYER::Import( int start, GLUtesselator* tess )
|
|||
pt[0] = vp->x;
|
||||
pt[1] = vp->y;
|
||||
pt[2] = 0.0;
|
||||
gluTessVertex( tess, pt, vp );
|
||||
gluTessVertex( aTesselator, pt, vp );
|
||||
}
|
||||
|
||||
gluTessEndContour( tess );
|
||||
gluTessEndContour( aTesselator );
|
||||
}
|
||||
|
||||
return start;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2013 Cirilo Bernardo
|
||||
* Copyright (C) 2013-2017 Cirilo Bernardo
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -49,7 +49,7 @@
|
|||
# include <GL/glu.h>
|
||||
#endif
|
||||
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <utility>
|
||||
|
@ -336,7 +336,7 @@ public:
|
|||
*
|
||||
* @return bool: true if the operation succeeded
|
||||
*/
|
||||
bool WriteVertices( double aZcoord, std::ofstream& aOutFile, int aPrecision );
|
||||
bool WriteVertices( double aZcoord, std::ostream& aOutFile, int aPrecision );
|
||||
|
||||
/**
|
||||
* Function Write3DVertices
|
||||
|
@ -349,7 +349,7 @@ public:
|
|||
*
|
||||
* @return bool: true if the operation succeeded
|
||||
*/
|
||||
bool Write3DVertices( double aTopZ, double aBottomZ, std::ofstream& aOutFile, int aPrecision );
|
||||
bool Write3DVertices( double aTopZ, double aBottomZ, std::ostream& aOutFile, int aPrecision );
|
||||
|
||||
/**
|
||||
* Function WriteIndices
|
||||
|
@ -362,7 +362,7 @@ public:
|
|||
*
|
||||
* @return bool: true if the operation succeeded
|
||||
*/
|
||||
bool WriteIndices( bool aTopFlag, std::ofstream& aOutFile );
|
||||
bool WriteIndices( bool aTopFlag, std::ostream& aOutFile );
|
||||
|
||||
/**
|
||||
* Function Write3DIndices
|
||||
|
@ -375,7 +375,7 @@ public:
|
|||
*
|
||||
* @return bool: true if the operation succeeded
|
||||
*/
|
||||
bool Write3DIndices( std::ofstream& aOutFile, bool aIncludePlatedHoles = false );
|
||||
bool Write3DIndices( std::ostream& aOutFile, bool aIncludePlatedHoles = false );
|
||||
|
||||
/**
|
||||
* Function AddExtraVertex
|
||||
|
@ -436,7 +436,7 @@ public:
|
|||
*
|
||||
* @return int: the number of vertices exported
|
||||
*/
|
||||
int Import( int start, GLUtesselator* tess );
|
||||
int Import( int start, GLUtesselator* aTesselator );
|
||||
|
||||
/**
|
||||
* Function GetVertexByIndex
|
||||
|
|
Loading…
Reference in New Issue