kicad/3d-viewer/3d_cache
Cirilo Bernardo c251fbac75 + Improved the normals calculations (however it's still buggy)
+ Reworked 3D plugins to use normals calculations
2015-12-16 14:25:46 +11:00
..
dialogs
sg + Improved the normals calculations (however it's still buggy) 2015-12-16 14:25:46 +11:00
3d_cache.cpp
3d_cache.h
3d_cache_wrapper.cpp
3d_cache_wrapper.h
3d_filename_resolver.cpp
3d_filename_resolver.h
3d_info.h
3d_plugin_manager.cpp
3d_plugin_manager.h
CMakeLists.txt
README
ansidecl.h
md5.cpp
md5.h
str_rsort.h

README

This directory will contain code used in the refactoring of
the 3D viewer and 3D model management.

Notes on building the test program on Linux:
1. Configure to build KiCad; ensue you have "-DS3D_TEST=ON" to
   enable the "test3dmm" test program.

mkdir build
cd build
cmake   -DKICAD_SCRIPTING=ON \
        -DKICAD_SCRIPTING_MODULES=ON \
        -DBUILD_GITHUB_PLUGIN=ON  \
        -DCMAKE_BUILD_TYPE=Debug \
        -DKICAD_SKIP_BOOST=ON \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DS3D_TEST=ON \
        -DCMAKE_VERBOSE_MAKEFILE=ON ..

2. After configuring to build KiCad, descend into the 3dv build
directory:

  cd 3dv

3. Build all files in the 3dv directory:

  make -j8

4. Install to a directory within the build directory:

  mkdir inst
  make install DESTDIR=./inst

5. Set LD_LIBRARY_PATH so that the 3d manager code can be found:

  export LD_LIBRARY_PATH=${PWD}/inst/usr/lib/kicad

  ( note: the previous step may have installed the library in
   ${PWD}/inst/usr/local/lib/kicad )
  There is no need to include the plugins directory in
  LD_LIBRARY_PATH since the manager should magically find
  plugins there and load them.

6. Run the test program:

   ./inst/usr/bin/test3dmm

   
===========================
     For OSX and MSWin
===========================
The dynamic plugin has only been built and tested on Linux; until
the dynamic plugin system can be made to work on MSWin and OSX, those
systems will not be able to use the 3D cache framework for anything
other than a filename resolver and model file browser. Without the
plugins the 3D viewer will not be able to use the new framework for
loading generic 3D model formats.

Dynamic plugins are managed in 3dv/3d_plugin_manager.cpp so that is the
only source file which developers need to modify to support plugins
on OSX and MSWin

1. OSX:
    + In general some attention is required wherever the __APPLE__
      macro is found
      
    + void S3D_PLUGIN_MANAGER::loadPlugins( void )
      In this function a list of reasonable search paths must be provided;
      these paths will be checked for the existence of a plugin
    
    + void S3D_PLUGIN_MANAGER::listPlugins( ... )
      In this function the list of suffixes to use in the plugin
      discovery should be checked to ensure that they comply with
      the expectations of OSX
      
    + bool S3D_PLUGIN_ITEM::Open( void )
      This function loads the dynamic plugins. If OSX use the gcc dlopen
      set of functions then there may be no further work to be done here.
      
2. MSWin:
    + In general some attention is required wherever the _WIN32 macro is found
      
    + void S3D_PLUGIN_MANAGER::loadPlugins( void )
      In this function a list of reasonable search paths must be provided;
      these paths will be checked for the existence of a plugin
    
    + bool S3D_PLUGIN_ITEM::Open( void )
      This function loads the dynamic plugins. Since the gcc dlopen family
      of functions do not exist on MSWin, some _WIN32 specific code must
      be added to handle the library loading.

===

Q. How do you know the plugin system is working?
A. The plugin system is working if the dummy plugin is located and loaded.
   If the plugin is located and the software was built with the DEBUG flag,
   you will see a group of messages which, among other things, advertises
   the file types supported by the dummy plugin:

        ~/code/kicad/branch_3d/3dv/3d_plugin_manager.cpp:loadPlugins:404:
        * [DEBUG] searching path: '~/usr/lib/kicad/plugins'
        XXX - Initializing S3D_PLUGIN_DUMMY
        ~/code/kicad/branch_3d/3dv/3d_plugin_manager.cpp:loadPlugins:426:
        * [DEBUG] adding plugin
        XXX - Destroying S3D_PLUGIN_DUMMY
        ~/code/kicad/branch_3d/3dv/3d_plugin_manager.cpp:loadPlugins:461:
        * [DEBUG] plugins loaded
        * Extension [plugin name]:
        + 'IDF' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'IGES' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'IGS' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'STEP' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'STP' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'WRL' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'X3D' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'idf' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'iges' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'igs' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'step' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'stp' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'wrl' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        + 'x3d' [~/usr/lib/kicad/plugins/libs3d_plugin_dummy.so]
        * File filters:
        + 'All Files (*.*)|*.*'
        + 'VRML 1.0/2.0 (*.wrl;*.WRL)|*.wrl;*.WRL'
        + 'X3D (*.x3d;*.X3D)|*.x3d;*.X3D'
        + 'IDF 2.0/3.0 (*.idf;*.IDF)|*.idf;*.IDF'
        + 'IGESv5.3 (*.igs;*.iges;*.IGS;*.IGES)|*.igs;*.iges;*.IGS;*.IGES'
        + 'STEP (*.stp;*.step;*.STP;*.STEP)|*.stp;*.step;*.STP;*.STEP'

   The supported file extensions should appear in the list of file filters within the
   model selection dialog; if no plugins are loaded then the only available file
   filter will be the wildcard filter *.*