diff --git a/3d-viewer/3d_cache/3d_plugin_manager.cpp b/3d-viewer/3d_cache/3d_plugin_manager.cpp index 2f952af38f..fb3c336f89 100644 --- a/3d-viewer/3d_cache/3d_plugin_manager.cpp +++ b/3d-viewer/3d_cache/3d_plugin_manager.cpp @@ -135,7 +135,9 @@ void S3D_PLUGIN_MANAGER::loadPlugins( void ) #endif fn.Assign( wxStandardPaths::Get().GetPluginsDir() ); - fn.AppendDir( wxT( "kicad" ) ); + #ifndef _WIN32 // suppress 'kicad' subdir since it is redundant on MSWin + fn.AppendDir( wxT( "kicad" ) ); + #endif fn.AppendDir( wxT( "plugins" ) ); fn.AppendDir( wxT( "3d" ) ); checkPluginPath( std::string( fn.GetPathWithSep().ToUTF8() ), searchpaths ); diff --git a/3d-viewer/3d_cache/sg/CMakeLists.txt b/3d-viewer/3d_cache/sg/CMakeLists.txt index 45be0fb426..f517600923 100644 --- a/3d-viewer/3d_cache/sg/CMakeLists.txt +++ b/3d-viewer/3d_cache/sg/CMakeLists.txt @@ -3,7 +3,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/3d-viewer ) -add_library( s3d_sg SHARED +add_library( kicad_3dsg SHARED sg_base.cpp sg_node.cpp sg_helpers.cpp @@ -31,21 +31,60 @@ add_library( s3d_sg SHARED ifsg_api.cpp ) -# Define a flag to expose the appropriate EXPORT macro at build time -target_compile_definitions( s3d_sg PRIVATE -DCOMPILE_SGLIB ) +find_file( S3DSG_VERSION_FILE sg_version.h + PATHS ${CMAKE_CURRENT_SOURCE_DIR} NO_DEFAULT_PATH ) -target_link_libraries( s3d_sg ${wxWidgets_LIBRARIES} ) +if( NOT ${S3DSG_VERSION_FILE} STREQUAL "S3DSG_VERSION_FILE-NOTFOUND" ) + + # extract the "#define SG_VERSION_*" lines + file( STRINGS ${S3DSG_VERSION_FILE} _version + REGEX "^[' ','\t']*#define[' ','\t']*SG_VERSION_.*" ) + + foreach( SVAR ${_version} ) + string( REGEX MATCH SG_VERSION_[M,A,J,O,R,I,N,P,T,C,H,E,V]* _VARNAME ${SVAR} ) + string( REGEX MATCH [0-9]+ _VALUE ${SVAR} ) + + if( NOT ${_VARNAME} STREQUAL "" ) + message( "INFO: " ${_VARNAME} " = " ${_VALUE} ) + if( NOT ${_VALUE} STREQUAL "" ) + set( ${_VARNAME} ${_VALUE} ) + else() + set( ${_VARNAME} 0 ) + endif() + endif() + + endforeach() + + if( NOT SG_VERSION_MAJOR AND NOT ${SG_VERSION_MAJOR} STREQUAL "0" ) + message( FATAL_ERROR "Cannot determine the S3DSG library version" ) + endif() + + #ensure that NOT SG_VERSION* will evaluate to '0' + if( NOT SG_VERSION_MINOR ) + set( SG_VERSION_MINOR 0 ) + endif() + + if( NOT SG_VERSION_PATCH ) + set( SG_VERSION_PATCH 0 ) + endif() + + set_target_properties( kicad_3dsg + PROPERTIES SOVERSION + ${SG_VERSION_MAJOR}.${SG_VERSION_MINOR}.${SG_VERSION_PATCH} ) -if( APPLE ) - install( TARGETS - s3d_sg - DESTINATION /Applications/kicad.app/SharedSupport - COMPONENT binary - ) else() - install( TARGETS - s3d_sg - DESTINATION lib/kicad - COMPONENT binary - ) + message( FATAL_ERROR "Cannot determine the S3DSG library version" ) endif() + +unset( S3DSG_VERSION_FILE CACHE ) + +# Define a flag to expose the appropriate EXPORT macro at build time +target_compile_definitions( kicad_3dsg PRIVATE -DCOMPILE_SGLIB ) + +target_link_libraries( kicad_3dsg ${wxWidgets_LIBRARIES} ) + +install( TARGETS + kicad_3dsg + DESTINATION ${KICAD_LIB} + COMPONENT binary + ) diff --git a/3d-viewer/3d_cache/sg/ifsg_api.cpp b/3d-viewer/3d_cache/sg/ifsg_api.cpp index 6c88dea9f7..cec683f900 100644 --- a/3d-viewer/3d_cache/sg/ifsg_api.cpp +++ b/3d-viewer/3d_cache/sg/ifsg_api.cpp @@ -39,6 +39,7 @@ #include "3d_cache/sg/sg_faceset.h" #include "3d_cache/sg/sg_normals.h" #include "3d_cache/sg/sg_shape.h" +#include "3d_cache/sg/sg_version.h" #include "3d_info.h" #include "plugins/3dapi/c3dmodel.h" @@ -411,3 +412,22 @@ void S3D::Init3DMesh( SMESH& aMesh ) return; } + + +void S3D::GetLibVersion( unsigned char* Major, unsigned char* Minor, + unsigned char* Patch, unsigned char* Revision ) +{ + if( Major ) + *Major = SG_VERSION_MAJOR; + + if( Minor ) + *Minor = SG_VERSION_MINOR; + + if( Revision ) + *Revision = SG_VERSION_REVNO; + + if( Patch ) + *Patch = SG_VERSION_PATCH; + + return; +} diff --git a/plugins/3d/dummy/s3d_plugin_dummy.h b/3d-viewer/3d_cache/sg/sg_version.h similarity index 55% rename from plugins/3d/dummy/s3d_plugin_dummy.h rename to 3d-viewer/3d_cache/sg/sg_version.h index 6484eb0506..31b20e4f4f 100644 --- a/plugins/3d/dummy/s3d_plugin_dummy.h +++ b/3d-viewer/3d_cache/sg/sg_version.h @@ -22,37 +22,17 @@ */ /** - * @file 3d_plugin_dummy.h - * is a sample dummy plugin which doesn't do much other than serve as - * an example of how a plugin must be built. + * @file sg_version.h + * defines the version number of 3DSG library. This file is parsed by + * CMake to determine the version number of the 3DSG library. */ +#ifndef SG_VERSION_H +#define SG_VERSION_H -#ifndef PLUGIN_3D_DUMMY_H -#define PLUGIN_3D_DUMMY_H +#define SG_VERSION_MAJOR 1 +#define SG_VERSION_MINOR 0 +#define SG_VERSION_PATCH 0 +#define SG_VERSION_REVNO 0 -#include -#include - -class SCENEGRAPH; - -class S3D_PLUGIN_DUMMY : public S3D_PLUGIN -{ -private: - std::vector< wxString > m_extensions; // supported extensions - std::vector< wxString > m_filters; // file filters - -public: - S3D_PLUGIN_DUMMY(); - virtual ~S3D_PLUGIN_DUMMY(); - - virtual int GetNExtensions( void ) const; - virtual const wxString GetModelExtension( int aIndex ) const; - virtual int GetNFilters( void ) const; - virtual const wxString GetFileFilter( int aIndex ) const; - - bool CanRender( void ) const; - SCENEGRAPH* Load( const wxString& aFileName ); -}; - -#endif // PLUGIN_3D_DUMMY_H +#endif // SG_VERSION_H diff --git a/3d-viewer/CMakeLists.txt b/3d-viewer/CMakeLists.txt index e356900782..326343ed87 100644 --- a/3d-viewer/CMakeLists.txt +++ b/3d-viewer/CMakeLists.txt @@ -147,9 +147,9 @@ elseif(NOT GLM_ENABLE_FAST_MATH) endif() if( WIN32 ) - target_link_libraries( 3d-viewer ${Boost_} ${wxWidgets_LIBRARIES} ${OPENGL_LIBRARIES} s3d_sg ) + target_link_libraries( 3d-viewer ${Boost_} ${wxWidgets_LIBRARIES} ${OPENGL_LIBRARIES} kicad_3dsg ) else() - target_link_libraries( 3d-viewer ${Boost_} ${wxWidgets_LIBRARIES} ${OPENGL_LIBRARIES} s3d_sg dl ) + target_link_libraries( 3d-viewer ${Boost_} ${wxWidgets_LIBRARIES} ${OPENGL_LIBRARIES} kicad_3dsg dl ) endif() add_subdirectory( 3d_cache ) diff --git a/CMakeLists.txt b/CMakeLists.txt index 208e5390c9..ed164bb34b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -341,9 +341,22 @@ if( NOT APPLE ) if( WIN32 ) set( KICAD_PLUGINS ${KICAD_BIN}/scripting/plugins CACHE PATH "Location of KiCad plugins." ) + + set( KICAD_LIB ${KICAD_BIN} + CACHE PATH "Location of KiCad shared objects" ) + + set( KICAD_USER_PLUGIN ${KICAD_BIN}/plugins + CACHE PATH "Location of KiCad user-loaded plugins" ) + else() set( KICAD_PLUGINS lib/kicad/plugins CACHE PATH "Location of KiCad plugins." ) + + set( KICAD_LIB ${CMAKE_INSTALL_PREFIX}/lib + CACHE PATH "Location of KiCad shared objects" ) + + set( KICAD_USER_PLUGIN ${CMAKE_INSTALL_PREFIX}/lib/kicad/plugins + CACHE PATH "Location of KiCad user-loaded plugins" ) endif() set( KICAD_DATA share/kicad @@ -360,6 +373,12 @@ else() set( KICAD_BIN ${CMAKE_INSTALL_PREFIX} CACHE PATH "Location of KiCad binaries." FORCE ) + set( KICAD_LIB /Applications/kicad.app/Contents/Macos + CACHE PATH "Location of KiCad shared objects" FORCE ) + + set( KICAD_USER_PLUGIN /Applications/kicad.app/SharedSupport/plugins + CACHE PATH "Location of KiCad user-loaded plugins" FORCE ) + # some paths to single app bundle set( OSX_BUNDLE_MAIN "kicad.app" ) set( OSX_BUNDLE_BIN_DIR "Contents/MacOS" ) @@ -411,6 +430,8 @@ endif() mark_as_advanced( KICAD_BIN KICAD_PLUGINS + KICAD_USER_PLUGIN + KICAD_LIB KICAD_DATA KICAD_DOCS KICAD_DEMOS diff --git a/include/plugins/3d/3d_plugin.h b/include/plugins/3d/3d_plugin.h index 8fffb8f458..60f0f99661 100644 --- a/include/plugins/3d/3d_plugin.h +++ b/include/plugins/3d/3d_plugin.h @@ -53,7 +53,7 @@ KICAD_PLUGIN_EXPORT char const* GetKicadPluginClass( void ) KICAD_PLUGIN_EXPORT void GetClassVersion( unsigned char* Major, - unsigned char* Minor, unsigned char* Revision, unsigned char* Patch ) + unsigned char* Minor, unsigned char* Patch, unsigned char* Revision ) { if( Major ) *Major = MAJOR; @@ -61,17 +61,17 @@ KICAD_PLUGIN_EXPORT void GetClassVersion( unsigned char* Major, if( Minor ) *Minor = MINOR; - if( Revision ) - *Revision = REVISION; - if( Patch ) *Patch = PATCH; + if( Revision ) + *Revision = REVISION; + return; } KICAD_PLUGIN_EXPORT bool CheckClassVersion( unsigned char Major, - unsigned char Minor, unsigned char Revision, unsigned char Patch ) + unsigned char Minor, unsigned char Patch, unsigned char Revision ) { if( Major != MAJOR ) return false; diff --git a/include/plugins/3dapi/ifsg_api.h b/include/plugins/3dapi/ifsg_api.h index 83fea25950..987b5ee6e8 100644 --- a/include/plugins/3dapi/ifsg_api.h +++ b/include/plugins/3dapi/ifsg_api.h @@ -178,6 +178,9 @@ namespace S3D * creates and initializes an SMESH struct */ SGLIB_API void Init3DMesh( SMESH& aMesh ); + + SGLIB_API void GetLibVersion( unsigned char* Major, unsigned char* Minor, + unsigned char* Patch, unsigned char* Revision ); }; #endif // IFSG_API_H diff --git a/include/plugins/3dapi/ifsg_colors.h b/include/plugins/3dapi/ifsg_colors.h index 9c1632fce8..b8fd5257ed 100644 --- a/include/plugins/3dapi/ifsg_colors.h +++ b/include/plugins/3dapi/ifsg_colors.h @@ -30,6 +30,7 @@ #ifndef IFSG_COLORS_H #define IFSG_COLORS_H +#include #include "plugins/3dapi/ifsg_node.h" diff --git a/include/plugins/kicad_plugin.h b/include/plugins/kicad_plugin.h index 43460f01a8..e89f8ffc67 100644 --- a/include/plugins/kicad_plugin.h +++ b/include/plugins/kicad_plugin.h @@ -67,7 +67,7 @@ KICAD_PLUGIN_EXPORT char const* GetKicadPluginClass( void ); * @param Patch will hold the Plugin Class Patch level */ KICAD_PLUGIN_EXPORT void GetClassVersion( unsigned char* Major, - unsigned char* Minor, unsigned char* Revision, unsigned char* Patch ); + unsigned char* Minor, unsigned char* Patch, unsigned char* Revision ); /** * Function CheckClassVersion @@ -80,7 +80,7 @@ KICAD_PLUGIN_EXPORT void GetClassVersion( unsigned char* Major, * of the return value of this function. */ KICAD_PLUGIN_EXPORT bool CheckClassVersion( unsigned char Major, - unsigned char Minor, unsigned char Revision, unsigned char Patch ); + unsigned char Minor, unsigned char Patch, unsigned char Revision ); /** * Function GetKicadPluginName @@ -103,10 +103,10 @@ KICAD_PLUGIN_EXPORT const char* GetKicadPluginName( void ); * * @param Major will hold the Plugin Major version * @param Minor will hold the Plugin Minor version - * @param Revision will hold the Plugin Revision * @param Patch will hold the Plugin Patch level + * @param Revision will hold the Plugin Revision */ KICAD_PLUGIN_EXPORT void GetVersion( unsigned char* Major, - unsigned char* Minor, unsigned char* Revision, unsigned char* Patch ); + unsigned char* Minor, unsigned char* Patch, unsigned char* Revision ); #endif // KICAD_PLUGIN_H diff --git a/plugins/3d/CMakeLists.txt b/plugins/3d/CMakeLists.txt index 7e518dab2c..72fe752465 100644 --- a/plugins/3d/CMakeLists.txt +++ b/plugins/3d/CMakeLists.txt @@ -1,3 +1,2 @@ -#add_subdirectory( dummy ) -#add_subdirectory( tetra ) +add_subdirectory( demo ) add_subdirectory( idf ) diff --git a/plugins/3d/demo/CMakeLists.txt b/plugins/3d/demo/CMakeLists.txt new file mode 100644 index 0000000000..7e5fa834ca --- /dev/null +++ b/plugins/3d/demo/CMakeLists.txt @@ -0,0 +1,19 @@ +add_library( s3d_plugin_demo1 MODULE + s3d_plugin_demo1.cpp + ) + +target_link_libraries( s3d_plugin_demo1 ${wxWidgets_LIBRARIES} ) + + +add_library( s3d_plugin_demo2 MODULE + s3d_plugin_demo2.cpp + ) + +target_link_libraries( s3d_plugin_demo2 kicad_3dsg ${wxWidgets_LIBRARIES} ) + +install( TARGETS + s3d_plugin_demo1 + s3d_plugin_demo2 + DESTINATION ${KICAD_USER_PLUGIN}/3d + COMPONENT binary + ) diff --git a/plugins/3d/demo/s3d_plugin_demo1.cpp b/plugins/3d/demo/s3d_plugin_demo1.cpp new file mode 100644 index 0000000000..f3d9275502 --- /dev/null +++ b/plugins/3d/demo/s3d_plugin_demo1.cpp @@ -0,0 +1,181 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2015 Cirilo Bernardo + * + * 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 2 + * 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, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* + * NOTES: + * + * 1. Notice that the plugin class is instantiated as a static; this + * ensures that it created an destroyed. + */ + +#include +#include "plugins/3d/3d_plugin.h" + +#define PLUGIN_3D_DEMO1_MAJOR 1 +#define PLUGIN_3D_DEMO1_MINOR 0 +#define PLUGIN_3D_DEMO1_PATCH 0 +#define PLUGIN_3D_DEMO1_REVNO 0 + + +const char* GetKicadPluginName( void ) +{ + return "PLUGIN_3D_DEMO1"; +} + + +void GetVersion( unsigned char* Major, unsigned char* Minor, + unsigned char* Patch, unsigned char* Revision ) +{ + if( Major ) + *Major = PLUGIN_3D_DEMO1_MAJOR; + + if( Minor ) + *Minor = PLUGIN_3D_DEMO1_MINOR; + + if( Patch ) + *Patch = PLUGIN_3D_DEMO1_PATCH; + + if( Revision ) + *Revision = PLUGIN_3D_DEMO1_REVNO; + + return; +} + +// number of extensions supported +#ifdef _WIN32 +#define NEXTS 7 +#else +#define NEXTS 14 +#endif + +// number of filter sets supported +#define NFILS 5 + +static char ext0[] = "wrl"; +static char ext1[] = "x3d"; +static char ext2[] = "emn"; +static char ext3[] = "iges"; +static char ext4[] = "igs"; +static char ext5[] = "stp"; +static char ext6[] = "step"; + +#ifdef _WIN32 +static char fil0[] = "VRML 1.0/2.0 (*.wrl)|*.wrl"; +static char fil1[] = "X3D (*.x3d)|*.x3d"; +static char fil2[] = "IDF 2.0/3.0 (*.emn)|*.emn"; +static char fil3[] = "IGESv5.3 (*.igs;*.iges)|*.igs;*.iges"; +static char fil4[] = "STEP (*.stp;*.step)|*.stp;*.step"; +#else +static char ext7[] = "WRL"; +static char ext8[] = "X3D"; +static char ext9[] = "EMN"; +static char ext10[] = "IGES"; +static char ext11[] = "IGS"; +static char ext12[] = "STP"; +static char ext13[] = "STEP"; + +static char fil0[] = "VRML 1.0/2.0 (*.wrl;*.WRL)|*.wrl;*.WRL"; +static char fil1[] = "X3D (*.x3d;*.X3D)|*.x3d;*.X3D"; +static char fil2[] = "IDF 2.0/3.0 (*.emn;*.EMN)|*.emn;*.EMN"; +static char fil3[] = "IGESv5.3 (*.igs;*.iges;*.IGS;*.IGES)|*.igs;*.iges;*.IGS;*.IGES"; +static char fil4[] = "STEP (*.stp;*.step;*.STP;*.STEP)|*.stp;*.step;*.STP;*.STEP"; +#endif + + +static struct FILE_DATA +{ + char const* extensions[NEXTS]; + char const* filters[NFILS]; + + FILE_DATA() + { + extensions[0] = ext0; + extensions[1] = ext1; + extensions[2] = ext2; + extensions[3] = ext3; + extensions[4] = ext4; + extensions[5] = ext5; + extensions[6] = ext6; + filters[0] = fil0; + filters[1] = fil1; + filters[2] = fil2; + filters[3] = fil3; + filters[4] = fil4; + +#ifndef _WIN32 + extensions[7] = ext7; + extensions[8] = ext8; + extensions[9] = ext9; + extensions[10] = ext10; + extensions[11] = ext11; + extensions[12] = ext12; + extensions[13] = ext13; +#endif + return; + } + +} file_data; + + +int GetNExtensions( void ) +{ + return NEXTS; +} + + +char const* GetModelExtension( int aIndex ) +{ + if( aIndex < 0 || aIndex >= NEXTS ) + return NULL; + + return file_data.extensions[aIndex]; +} + + +int GetNFilters( void ) +{ + return NFILS; +} + + +char const* GetFileFilter( int aIndex ) +{ + if( aIndex < 0 || aIndex >= NFILS ) + return NULL; + + return file_data.filters[aIndex]; +} + + +bool CanRender( void ) +{ + // this dummy plugin does not support rendering of any models + return false; +} + + +SCENEGRAPH* Load( char const* aFileName ) +{ + // this dummy plugin does not support rendering of any models + return NULL; +} diff --git a/plugins/3d/tetra/s3d_plugin_tetra.cpp b/plugins/3d/demo/s3d_plugin_demo2.cpp similarity index 79% rename from plugins/3d/tetra/s3d_plugin_tetra.cpp rename to plugins/3d/demo/s3d_plugin_demo2.cpp index e22cfda48a..665db2bb0e 100644 --- a/plugins/3d/tetra/s3d_plugin_tetra.cpp +++ b/plugins/3d/demo/s3d_plugin_demo2.cpp @@ -22,72 +22,119 @@ */ #include -#include -#include +#include "plugins/3d/3d_plugin.h" +#include "plugins/3dapi/ifsg_all.h" -S3D_PLUGIN_TETRA::S3D_PLUGIN_TETRA() +#define PLUGIN_3D_DEMO2_MAJOR 1 +#define PLUGIN_3D_DEMO2_MINOR 0 +#define PLUGIN_3D_DEMO2_PATCH 0 +#define PLUGIN_3D_DEMO2_REVNO 0 + + +const char* GetKicadPluginName( void ) { - m_extensions.push_back( wxString::FromUTF8Unchecked( "wrl" ) ); + return "PLUGIN_3D_DEMO2"; +} + + +void GetVersion( unsigned char* Major, unsigned char* Minor, + unsigned char* Patch, unsigned char* Revision ) +{ + if( Major ) + *Major = PLUGIN_3D_DEMO2_MAJOR; + + if( Minor ) + *Minor = PLUGIN_3D_DEMO2_MINOR; + + if( Patch ) + *Patch = PLUGIN_3D_DEMO2_PATCH; + + if( Revision ) + *Revision = PLUGIN_3D_DEMO2_REVNO; + + return; +} + + +// number of extensions supported +#ifdef _WIN32 +#define NEXTS 1 +#else +#define NEXTS 2 +#endif + +// number of filter sets supported +#define NFILS 1 + +static char ext0[] = "wrl"; #ifdef _WIN32 - // assume a case-insensitive file system - m_filters.push_back( wxT( "VRML 1.0/2.0 (*.wrl)|*.wrl" ) ); +static char fil0[] = "VRML 1.0/2.0 (*.wrl)|*.wrl"; #else - // assume the filesystem is case sensitive - m_extensions.push_back( wxString::FromUTF8Unchecked( "WRL" ) ); +static char ext1[] = "WRL"; - m_filters.push_back( wxT( "VRML 1.0/2.0 (*.wrl;*.WRL)|*.wrl;*.WRL" ) ); +static char fil0[] = "VRML 1.0/2.0 (*.wrl;*.WRL)|*.wrl;*.WRL"; #endif - return; +static struct FILE_DATA +{ + char const* extensions[NEXTS]; + char const* filters[NFILS]; + + FILE_DATA() + { + extensions[0] = ext0; + filters[0] = fil0; + +#ifndef _WIN32 + extensions[1] = ext1; +#endif + return; + } + +} file_data; + + +int GetNExtensions( void ) +{ + return NEXTS; } -S3D_PLUGIN_TETRA::~S3D_PLUGIN_TETRA() +char const* GetModelExtension( int aIndex ) { - return; + if( aIndex < 0 || aIndex >= NEXTS ) + return NULL; + + return file_data.extensions[aIndex]; } -int S3D_PLUGIN_TETRA::GetNExtensions( void ) const +int GetNFilters( void ) { - return (int) m_extensions.size(); + return NFILS; } -const wxString S3D_PLUGIN_TETRA::GetModelExtension( int aIndex ) const +char const* GetFileFilter( int aIndex ) { - if( aIndex < 0 || aIndex >= (int) m_extensions.size() ) - return wxString( "" ); + if( aIndex < 0 || aIndex >= NFILS ) + return NULL; - return m_extensions[aIndex]; + return file_data.filters[aIndex]; } -int S3D_PLUGIN_TETRA::GetNFilters( void ) const -{ - return (int)m_filters.size(); -} - - -const wxString S3D_PLUGIN_TETRA::GetFileFilter( int aIndex ) const -{ - if( aIndex < 0 || aIndex >= (int)m_filters.size() ) - return wxEmptyString; - - return m_filters[aIndex]; -} - - -bool S3D_PLUGIN_TETRA::CanRender( void ) const +bool CanRender( void ) { + // this dummy pretends to render a VRML model return true; } -SCENEGRAPH* S3D_PLUGIN_TETRA::Load( const wxString& aFileName ) +SCENEGRAPH* Load( char const* aFileName ) { // For this demonstration we create a tetrahedron and // paint its faces Magenta Red Green Blue. Steps: @@ -234,18 +281,3 @@ SCENEGRAPH* S3D_PLUGIN_TETRA::Load( const wxString& aFileName ) return (SCENEGRAPH*)data; } - - -static S3D_PLUGIN_TETRA plugin_3d_tetra; - -#ifndef _WIN32 -extern "C" __attribute__((__visibility__("default"))) S3D_PLUGIN* Get3DPlugin( void ) -{ - return &plugin_3d_tetra; -} -#else -extern "C" __declspec( dllexport ) S3D_PLUGIN* Get3DPlugin( void ) - { - return &plugin_3d_tetra; - } -#endif diff --git a/plugins/3d/dummy/CMakeLists.txt b/plugins/3d/dummy/CMakeLists.txt deleted file mode 100644 index 6974d1bee2..0000000000 --- a/plugins/3d/dummy/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR} -) - -add_library( s3d_plugin_dummy MODULE - s3d_plugin_dummy.cpp - ) - -target_link_libraries( s3d_plugin_dummy ${wxWidgets_LIBRARIES} ) - -if( APPLE ) - install( TARGETS - s3d_plugin_dummy - DESTINATION /Applications/kicad.app/SharedSupport/plugins/3d - COMPONENT binary - ) -else() - install( TARGETS - s3d_plugin_dummy - DESTINATION lib/kicad/plugins/3d - COMPONENT binary - ) -endif() diff --git a/plugins/3d/dummy/s3d_plugin_dummy.cpp b/plugins/3d/dummy/s3d_plugin_dummy.cpp deleted file mode 100644 index bbaffaae32..0000000000 --- a/plugins/3d/dummy/s3d_plugin_dummy.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * This program source code file is part of KiCad, a free EDA CAD application. - * - * Copyright (C) 2015 Cirilo Bernardo - * - * 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 2 - * 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, you may find one here: - * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html - * or you may search the http://www.gnu.org website for the version 2 license, - * or you may write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -/* - * NOTES: - * - * 1. Notice that the plugin class is instantiated as a static; this - * ensures that it created an destroyed. - */ - -#include -#include - - -S3D_PLUGIN_DUMMY::S3D_PLUGIN_DUMMY() -{ - m_extensions.push_back( wxString::FromUTF8Unchecked( "wrl" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "x3d" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "idf" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "iges" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "igs" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "stp" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "step" ) ); - -#ifdef _WIN32 - // assume a case-insensitive file system - m_filters.push_back( wxT( "VRML 1.0/2.0 (*.wrl)|*.wrl" ) ); - m_filters.push_back( wxT( "X3D (*.x3d)|*.x3d" ) ); - m_filters.push_back( wxT( "IDF 2.0/3.0 (*.idf)|*.idf" ) ); - m_filters.push_back( wxT( "IGESv5.3 (*.igs;*.iges)|*.igs;*.iges" ) ); - m_filters.push_back( wxT( "STEP (*.stp;*.step)|*.stp;*.step" ) ); -#else - // assume the filesystem is case sensitive - m_extensions.push_back( wxString::FromUTF8Unchecked( "WRL" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "X3D" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "IDF" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "IGES" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "IGS" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "STP" ) ); - m_extensions.push_back( wxString::FromUTF8Unchecked( "STEP" ) ); - - m_filters.push_back( wxT( "VRML 1.0/2.0 (*.wrl;*.WRL)|*.wrl;*.WRL" ) ); - m_filters.push_back( wxT( "X3D (*.x3d;*.X3D)|*.x3d;*.X3D" ) ); - m_filters.push_back( wxT( "IDF 2.0/3.0 (*.idf;*.IDF)|*.idf;*.IDF" ) ); - m_filters.push_back( wxT( "IGESv5.3 (*.igs;*.iges;*.IGS;*.IGES)|*.igs;*.iges;*.IGS;*.IGES" ) ); - m_filters.push_back( wxT( "STEP (*.stp;*.step;*.STP;*.STEP)|*.stp;*.step;*.STP;*.STEP" ) ); -#endif - - - return; -} - - -S3D_PLUGIN_DUMMY::~S3D_PLUGIN_DUMMY() -{ - return; -} - - -int S3D_PLUGIN_DUMMY::GetNExtensions( void ) const -{ - return (int) m_extensions.size(); -} - - -const wxString S3D_PLUGIN_DUMMY::GetModelExtension( int aIndex ) const -{ - if( aIndex < 0 || aIndex >= (int) m_extensions.size() ) - return wxString( "" ); - - return m_extensions[aIndex]; -} - - -int S3D_PLUGIN_DUMMY::GetNFilters( void ) const -{ - return (int)m_filters.size(); -} - - -const wxString S3D_PLUGIN_DUMMY::GetFileFilter( int aIndex ) const -{ - if( aIndex < 0 || aIndex >= (int)m_filters.size() ) - return wxEmptyString; - - return m_filters[aIndex]; -} - - -bool S3D_PLUGIN_DUMMY::CanRender( void ) const -{ - // this dummy plugin does not support rendering of any models - return false; -} - - -SCENEGRAPH* S3D_PLUGIN_DUMMY::Load( const wxString& aFileName ) -{ - // this dummy plugin does not support rendering of any models - return NULL; -} - - -static S3D_PLUGIN_DUMMY dummy; - -#ifndef _WIN32 - extern "C" __attribute__((__visibility__("default"))) S3D_PLUGIN* Get3DPlugin( void ) - { - return &dummy; - } -#else -extern "C" __declspec( dllexport ) S3D_PLUGIN* Get3DPlugin( void ) - { - return &dummy; - } -#endif diff --git a/plugins/3d/idf/CMakeLists.txt b/plugins/3d/idf/CMakeLists.txt index 70087dee62..c2f5a84e6a 100644 --- a/plugins/3d/idf/CMakeLists.txt +++ b/plugins/3d/idf/CMakeLists.txt @@ -11,18 +11,10 @@ add_library( s3d_plugin_idf MODULE set_target_properties( s3d_plugin_idf PROPERTIES LINK_FLAGS -L${CMAKE_BINARY_DIR}/utils/idftools ) -target_link_libraries( s3d_plugin_idf s3d_sg idf3 ${OPENGL_LIBRARIES} ${wxWidgets_LIBRARIES} ) +target_link_libraries( s3d_plugin_idf kicad_3dsg idf3 ${OPENGL_LIBRARIES} ${wxWidgets_LIBRARIES} ) -if( APPLE ) - install( TARGETS - s3d_plugin_idf - DESTINATION /Applications/kicad.app/SharedSupport/plugins/3d - COMPONENT binary +install( TARGETS + s3d_plugin_idf + DESTINATION ${KICAD_USER_PLUGIN}/3d + COMPONENT binary ) -else() - install( TARGETS - s3d_plugin_idf - DESTINATION lib/kicad/plugins/3d - COMPONENT binary - ) -endif() diff --git a/plugins/3d/idf/s3d_plugin_idf.cpp b/plugins/3d/idf/s3d_plugin_idf.cpp index 609f55a85f..50e191c976 100644 --- a/plugins/3d/idf/s3d_plugin_idf.cpp +++ b/plugins/3d/idf/s3d_plugin_idf.cpp @@ -33,18 +33,18 @@ #define PLUGIN_3D_IDF_MAJOR 1 #define PLUGIN_3D_IDF_MINOR 0 -#define PLUGIN_3D_IDF_REVNO 0 #define PLUGIN_3D_IDF_PATCH 0 +#define PLUGIN_3D_IDF_REVNO 0 -KICAD_PLUGIN_EXPORT const char* GetKicadPluginName( void ) +const char* GetKicadPluginName( void ) { return "PLUGIN_3D_IDF"; } -KICAD_PLUGIN_EXPORT void GetVersion( unsigned char* Major, - unsigned char* Minor, unsigned char* Revision, unsigned char* Patch ) +void GetVersion( unsigned char* Major, + unsigned char* Minor, unsigned char* Patch, unsigned char* Revision ) { if( Major ) *Major = PLUGIN_3D_IDF_MAJOR; @@ -52,12 +52,12 @@ KICAD_PLUGIN_EXPORT void GetVersion( unsigned char* Major, if( Minor ) *Minor = PLUGIN_3D_IDF_MINOR; - if( Revision ) - *Revision = PLUGIN_3D_IDF_REVNO; - if( Patch ) *Patch = PLUGIN_3D_IDF_PATCH; + if( Revision ) + *Revision = PLUGIN_3D_IDF_REVNO; + return; } @@ -72,11 +72,12 @@ KICAD_PLUGIN_EXPORT void GetVersion( unsigned char* Major, #define NFILS 1 static char ext0[] = "idf"; -static char fil0[] = "IDF 2.0/3.0 (*.idf)|*.idf"; -#ifndef _WIN32 +#ifdef _WIN32 + static char fil0[] = "IDF 2.0/3.0 (*.idf)|*.idf"; +#else static char ext1[] = "IDF"; - static char fil1[] = "IDF 2.0/3.0 (*.idf;*.IDF)|*.idf;*.IDF"; + static char fil0[] = "IDF 2.0/3.0 (*.idf;*.IDF)|*.idf;*.IDF"; #endif static struct FILE_DATA @@ -91,7 +92,6 @@ static struct FILE_DATA #ifndef _WIN32 extensions[1] = ext1; - filters[1] = fil1; #endif return; @@ -104,13 +104,13 @@ static bool PopulateVRML( VRML_LAYER& model, const std::list< IDF_OUTLINE* >* it static bool AddSegment( VRML_LAYER& model, IDF_SEGMENT* seg, int icont, int iseg ); -KICAD_PLUGIN_EXPORT int GetNExtensions( void ) +int GetNExtensions( void ) { return NEXTS; } -KICAD_PLUGIN_EXPORT char const* GetModelExtension( int aIndex ) +char const* GetModelExtension( int aIndex ) { if( aIndex < 0 || aIndex >= NEXTS ) return NULL; @@ -119,13 +119,13 @@ KICAD_PLUGIN_EXPORT char const* GetModelExtension( int aIndex ) } -KICAD_PLUGIN_EXPORT int GetNFilters( void ) +int GetNFilters( void ) { return NFILS; } -KICAD_PLUGIN_EXPORT char const* GetFileFilter( int aIndex ) +char const* GetFileFilter( int aIndex ) { if( aIndex < 0 || aIndex >= NFILS ) return NULL; @@ -134,14 +134,14 @@ KICAD_PLUGIN_EXPORT char const* GetFileFilter( int aIndex ) } -KICAD_PLUGIN_EXPORT bool CanRender( void ) +bool CanRender( void ) { // this plugin supports rendering of IDF component outlines return true; } -KICAD_PLUGIN_EXPORT SCENEGRAPH* Load( char const* aFileName ) +SCENEGRAPH* Load( char const* aFileName ) { if( NULL == aFileName ) return NULL; diff --git a/plugins/3d/tetra/CMakeLists.txt b/plugins/3d/tetra/CMakeLists.txt deleted file mode 100644 index e121b63b1d..0000000000 --- a/plugins/3d/tetra/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR} -) - -add_library( s3d_plugin_tetra MODULE - s3d_plugin_tetra.cpp - ) - -target_link_libraries( s3d_plugin_tetra s3d_sg ${wxWidgets_LIBRARIES} ) - -if( APPLE ) - install( TARGETS - s3d_plugin_tetra - DESTINATION /Applications/kicad.app/SharedSupport/plugins/3d - COMPONENT binary - ) -else() - install( TARGETS - s3d_plugin_tetra - DESTINATION lib/kicad/plugins/3d - COMPONENT binary - ) -endif() diff --git a/plugins/3d/tetra/s3d_plugin_tetra.h b/plugins/3d/tetra/s3d_plugin_tetra.h deleted file mode 100644 index 19b10c4310..0000000000 --- a/plugins/3d/tetra/s3d_plugin_tetra.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This program source code file is part of KiCad, a free EDA CAD application. - * - * Copyright (C) 2015 Cirilo Bernardo - * - * 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 2 - * 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, you may find one here: - * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html - * or you may search the http://www.gnu.org website for the version 2 license, - * or you may write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -/** - * @file 3d_plugin_tetra.h - * is a sample plugin which demonstrates the basic use of the SG* - * classes for the intermediate representation of objects. The plugin - * accepts any *.wrl filename but does not actually load any files, - * instead the Load() routine only creates a magenta tetrahedron. - */ - - -#ifndef PLUGIN_3D_TETRA_H -#define PLUGIN_3D_TETRA_H - -#include -#include - -class SCENEGRAPH; - -class S3D_PLUGIN_TETRA : public S3D_PLUGIN -{ -private: - std::vector< wxString > m_extensions; // supported extensions - std::vector< wxString > m_filters; // file filters - -public: - S3D_PLUGIN_TETRA(); - virtual ~S3D_PLUGIN_TETRA(); - - virtual int GetNExtensions( void ) const; - virtual const wxString GetModelExtension( int aIndex ) const; - virtual int GetNFilters( void ) const; - virtual const wxString GetFileFilter( int aIndex ) const; - - bool CanRender( void ) const; - SCENEGRAPH* Load( const wxString& aFileName ); -}; - -#endif // PLUGIN_3D_TETRA_H diff --git a/plugins/ldr/3d/pluginldr3D.cpp b/plugins/ldr/3d/pluginldr3D.cpp index 572cecc75c..abcb1e6d5d 100644 --- a/plugins/ldr/3d/pluginldr3D.cpp +++ b/plugins/ldr/3d/pluginldr3D.cpp @@ -28,8 +28,8 @@ #define PLUGIN_CLASS_3D "PLUGIN_3D" #define PLUGIN_3D_MAJOR 1 #define PLUGIN_3D_MINOR 0 -#define PLUGIN_3D_REVISION 0 #define PLUGIN_3D_PATCH 0 +#define PLUGIN_3D_REVISION 0 KICAD_PLUGIN_LDR_3D::KICAD_PLUGIN_LDR_3D() @@ -182,9 +182,13 @@ bool KICAD_PLUGIN_LDR_3D::Open( const wxString& aFullFileName ) void KICAD_PLUGIN_LDR_3D::Close( void ) { #ifdef DEBUG - std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; - std::cerr << " * [INFO] closing plugin\n"; + if( ok ) + { + std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; + std::cerr << " * [INFO] closing plugin\n"; + } #endif + ok = false; m_getNExtensions = NULL; m_getModelExtension = NULL; @@ -199,7 +203,7 @@ void KICAD_PLUGIN_LDR_3D::Close( void ) void KICAD_PLUGIN_LDR_3D::GetLoaderVersion( unsigned char* Major, unsigned char* Minor, - unsigned char* Revision, unsigned char* Patch ) const + unsigned char* Patch, unsigned char* Revision ) const { if( Major ) *Major = PLUGIN_3D_MAJOR; @@ -207,12 +211,12 @@ void KICAD_PLUGIN_LDR_3D::GetLoaderVersion( unsigned char* Major, unsigned char* if( Minor ) *Minor = PLUGIN_3D_MINOR; - if( Revision ) - *Revision = PLUGIN_3D_REVISION; - if( Patch ) *Patch = PLUGIN_3D_PATCH; + if( Revision ) + *Revision = PLUGIN_3D_REVISION; + return; } diff --git a/plugins/ldr/pluginldr.cpp b/plugins/ldr/pluginldr.cpp index d25d190914..3dee73dc78 100644 --- a/plugins/ldr/pluginldr.cpp +++ b/plugins/ldr/pluginldr.cpp @@ -188,15 +188,15 @@ bool KICAD_PLUGIN_LDR::open( const wxString& aFullFileName, const char* aPluginC // perform a universally enforced version check (major number must match) unsigned char lMajor; unsigned char lMinor; - unsigned char lRevno; unsigned char lPatch; + unsigned char lRevno; unsigned char pMajor; unsigned char pMinor; - unsigned char pRevno; unsigned char pPatch; + unsigned char pRevno; - m_getClassVersion( &pMajor, &pMinor, &pRevno, &pPatch ); - GetLoaderVersion( &lMajor, &lMinor, &lRevno, &lPatch ); + m_getClassVersion( &pMajor, &pMinor, &pPatch, &pRevno ); + GetLoaderVersion( &lMajor, &lMinor, &lPatch, &lRevno ); // major version changes by definition are incompatible and // that is enforced here. @@ -211,12 +211,12 @@ bool KICAD_PLUGIN_LDR::open( const wxString& aFullFileName, const char* aPluginC return false; } - if( !m_checkClassVersion( lMajor, lMinor, lRevno, lPatch ) ) + if( !m_checkClassVersion( lMajor, lMinor, lPatch, lRevno ) ) { std::ostringstream ostr; - ostr << "Plugin Version (" << pMajor << "." << pMinor << "." << pRevno << "." << pPatch; + ostr << "Plugin Version (" << pMajor << "." << pMinor << "." << pPatch << "." << pRevno; ostr << ") does not support Loader Version (" << pMajor << "." << pMinor; - ostr << "." << pRevno << "." << pPatch << ")"; + ostr << "." << pPatch << "." << pRevno << ")"; m_error = ostr.str(); close(); @@ -307,7 +307,7 @@ char const* KICAD_PLUGIN_LDR::GetKicadPluginClass( void ) bool KICAD_PLUGIN_LDR::GetClassVersion( unsigned char* Major, unsigned char* Minor, - unsigned char* Revision, unsigned char* Patch ) + unsigned char* Patch, unsigned char* Revision ) { m_error.clear(); @@ -317,16 +317,16 @@ bool KICAD_PLUGIN_LDR::GetClassVersion( unsigned char* Major, unsigned char* Min if( Minor ) *Minor = 0; - if( Revision ) - *Revision = 0; - if( Patch ) *Patch = 0; + if( Revision ) + *Revision = 0; + unsigned char major; unsigned char minor; - unsigned char revno; unsigned char patch; + unsigned char revno; if( !ok && !reopen() ) { @@ -344,7 +344,7 @@ bool KICAD_PLUGIN_LDR::GetClassVersion( unsigned char* Major, unsigned char* Min return false; } - m_getClassVersion( &major, &minor, &revno, &patch ); + m_getClassVersion( &major, &minor, &patch, &revno ); if( Major ) *Major = major; @@ -352,18 +352,18 @@ bool KICAD_PLUGIN_LDR::GetClassVersion( unsigned char* Major, unsigned char* Min if( Minor ) *Minor = minor; - if( Revision ) - *Revision = revno; - if( Patch ) *Patch = patch; + if( Revision ) + *Revision = revno; + return true; } bool KICAD_PLUGIN_LDR::CheckClassVersion( unsigned char Major, unsigned char Minor, - unsigned char Revision, unsigned char Patch ) + unsigned char Patch, unsigned char Revision ) { m_error.clear(); @@ -383,7 +383,7 @@ bool KICAD_PLUGIN_LDR::CheckClassVersion( unsigned char Major, unsigned char Min return NULL; } - return m_checkClassVersion( Major, Minor, Revision, Patch ); + return m_checkClassVersion( Major, Minor, Patch, Revision ); } @@ -412,7 +412,7 @@ const char* KICAD_PLUGIN_LDR::GetKicadPluginName( void ) bool KICAD_PLUGIN_LDR::GetVersion( unsigned char* Major, unsigned char* Minor, - unsigned char* Revision, unsigned char* Patch ) + unsigned char* Patch, unsigned char* Revision ) { m_error.clear(); @@ -432,7 +432,7 @@ bool KICAD_PLUGIN_LDR::GetVersion( unsigned char* Major, unsigned char* Minor, return false; } - m_getVersion( Major, Minor, Revision, Patch ); + m_getVersion( Major, Minor, Patch, Revision ); return true; } diff --git a/plugins/ldr/pluginldr.h b/plugins/ldr/pluginldr.h index 473adf4ad5..8ed0446a64 100644 --- a/plugins/ldr/pluginldr.h +++ b/plugins/ldr/pluginldr.h @@ -110,7 +110,7 @@ public: * for plugin compatibility checking. */ virtual void GetLoaderVersion( unsigned char* Major, unsigned char* Minor, - unsigned char* Revision, unsigned char* Patch ) const = 0; + unsigned char* Patch, unsigned char* Revision ) const = 0; /** * Function Open @@ -141,18 +141,18 @@ public: // returns false if no plugin loaded bool GetClassVersion( unsigned char* Major, unsigned char* Minor, - unsigned char* Revision, unsigned char* Patch ); + unsigned char* Patch, unsigned char* Revision ); // returns false if the class version check fails or no plugin is loaded bool CheckClassVersion( unsigned char Major, unsigned char Minor, - unsigned char Revision, unsigned char Patch ); + unsigned char Patch, unsigned char Revision ); // returns the Plugin Name or NULL if no plugin loaded const char* GetKicadPluginName( void ); // returns false if no plugin is loaded bool GetVersion( unsigned char* Major, unsigned char* Minor, - unsigned char* Revision, unsigned char* Patch ); + unsigned char* Patch, unsigned char* Revision ); }; #endif // PLUGINLDR_H