Commit a864ab6f authored by jean-pierre charras's avatar jean-pierre charras
Browse files

Kicad manager: fix a recent bug: project tree not updated when kicad is...

Kicad manager: fix a recent bug: project tree not updated when kicad is launched by a command line with a project name to open.
Pcbnew: export vrml:
* move dialog functions to a new file: dialog_export_vrml.cpp (to be consistent with other dialogs).
* fix some coding style issues
* added patch from Cirilo Bernardo.
parents 8d5479ca 7819efac
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -888,13 +888,14 @@ public:
     * Function ExportVRML_File
     * Function ExportVRML_File
     * Creates the file(s) exporting current BOARD to a VRML file.
     * Creates the file(s) exporting current BOARD to a VRML file.
     * @param aFullFileName = the full filename of the file to create
     * @param aFullFileName = the full filename of the file to create
     * @param aScale = the general scaling factor. 1.0 to export in inches
     * @param aMMtoWRMLunit = the VRML scaling factor:
     *      1.0 to export in mm. 0.001 for meters
     * @param aExport3DFiles = true to copy 3D shapes in the subir a3D_Subdir
     * @param aExport3DFiles = true to copy 3D shapes in the subir a3D_Subdir
     * @param a3D_Subdir = sub directory where 3D shapes files are copied
     * @param a3D_Subdir = sub directory where 3D shapes files are copied
     * used only when aExport3DFiles == true
     * used only when aExport3DFiles == true
     * @return true if Ok.
     * @return true if Ok.
     */
     */
    bool ExportVRML_File( const wxString & aFullFileName, double aScale,
    bool ExportVRML_File( const wxString & aFullFileName, double aMMtoWRMLunit,
                          bool aExport3DFiles, const wxString & a3D_Subdir );
                          bool aExport3DFiles, const wxString & a3D_Subdir );


    /**
    /**
+12 −8
Original line number Original line Diff line number Diff line
@@ -97,36 +97,40 @@ bool EDA_APP::OnInit()
    bool reopenLastUsedDirectory = argc == 1;
    bool reopenLastUsedDirectory = argc == 1;
    GetSettings( reopenLastUsedDirectory );
    GetSettings( reopenLastUsedDirectory );


    /* Make nameless project translatable */
    wxFileName namelessProject( wxGetCwd(), NAMELESS_PROJECT, ProjectFileExtension );

    frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ),
    frame = new KICAD_MANAGER_FRAME( NULL, wxT( "KiCad" ),
                                     wxDefaultPosition, wxDefaultSize );
                                     wxDefaultPosition, wxDefaultSize );
    SetTopWindow( frame );
    SetTopWindow( frame );


    bool prjloaded = false;    // true when the project is loaded

    if( argc > 1 )
    if( argc > 1 )
    {
        frame->m_ProjectFileName = argv[1];
        frame->m_ProjectFileName = argv[1];
    }
    else if( m_fileHistory.GetCount() )
    else if( m_fileHistory.GetCount() )
    {
    {
        // Try to open the last opened project,
        // if a project name is not given when starting Kicad
        frame->m_ProjectFileName = m_fileHistory.GetHistoryFile( 0 );
        frame->m_ProjectFileName = m_fileHistory.GetHistoryFile( 0 );


        if( !frame->m_ProjectFileName.FileExists() )
        if( !frame->m_ProjectFileName.FileExists() )
        {
            m_fileHistory.RemoveFileFromHistory( 0 );
            m_fileHistory.RemoveFileFromHistory( 0 );
        }
        else
        else
        {
        {
            wxCommandEvent cmd( 0, wxID_FILE1 );
            wxCommandEvent cmd( 0, wxID_FILE1 );
            frame->OnFileHistory( cmd );
            frame->OnFileHistory( cmd );
            prjloaded = true;    // OnFileHistory() loads the project
        }
        }
    }
    }


    if( !frame->m_ProjectFileName.FileExists() )
    if( !frame->m_ProjectFileName.FileExists() )
    {
    {
        wxCommandEvent cmd( 0, wxID_ANY );
        wxFileName namelessProject( wxGetCwd(), NAMELESS_PROJECT,
                                    ProjectFileExtension );
        frame->m_ProjectFileName = namelessProject;
        frame->m_ProjectFileName = namelessProject;
    }

    if( ! prjloaded )
    {
        wxCommandEvent cmd( 0, wxID_ANY );
        frame->OnLoadProject( cmd );
        frame->OnLoadProject( cmd );
    }
    }


+1 −1
Original line number Original line Diff line number Diff line
@@ -226,7 +226,7 @@ void KICAD_MANAGER_FRAME::OnLoadProject( wxCommandEvent& event )
#ifdef KICAD_USE_FILES_WATCHER
#ifdef KICAD_USE_FILES_WATCHER
    // Rebuild the list of watched paths.
    // Rebuild the list of watched paths.
    // however this is possible only when the main loop event handler is running,
    // however this is possible only when the main loop event handler is running,
    // so we use it to rub the rebuild function.
    // so we use it to run the rebuild function.
    wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_INIT_WATCHED_PATHS );
    wxCommandEvent cmd( wxEVT_COMMAND_MENU_SELECTED, ID_INIT_WATCHED_PATHS );
    wxPostEvent( this, cmd);
    wxPostEvent( this, cmd);
#endif
#endif
+2 −1
Original line number Original line Diff line number Diff line
@@ -47,7 +47,8 @@ set(PCBNEW_DIALOGS
    dialogs/dialog_edit_module_text.cpp
    dialogs/dialog_edit_module_text.cpp
    dialogs/dialog_edit_module_text_base.cpp
    dialogs/dialog_edit_module_text_base.cpp
    dialogs/dialog_exchange_modules_base.cpp
    dialogs/dialog_exchange_modules_base.cpp
    dialogs/dialog_export_3Dfiles_base.cpp
    dialogs/dialog_export_vrml_base.cpp
    dialogs/dialog_export_vrml.cpp
    dialogs/dialog_find_base.cpp
    dialogs/dialog_find_base.cpp
    dialogs/dialog_find.cpp
    dialogs/dialog_find.cpp
    dialogs/dialog_fp_lib_table_base.cpp
    dialogs/dialog_fp_lib_table_base.cpp
+146 −0
Original line number Original line Diff line number Diff line
/**
 * @file dialog_export_vrml.cpp
 */

/*
 * This program source code file is part of KiCad, a free EDA CAD application.
 *
 * Copyright (C) 2009-2013  Lorenzo Mercantonio
 * Copyright (C) 2013 Jean-Pierre Charras jp.charras at wanadoo.fr
 * Copyright (C) 2004-2013 KiCad Developers, see change_log.txt for contributors.
 *
 * 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
 */
#include <fctsys.h>
#include <wxPcbStruct.h>
#include <appl_wxstruct.h>
#include <pcbnew.h>
#include <class_board.h>

/* the dialog to create VRML files, derived from DIALOG_EXPORT_3DFILE_BASE,
 * created by wxFormBuilder
 */
#include <dialog_export_vrml_base.h> // the wxFormBuilder header file

#define OPTKEY_OUTPUT_UNIT wxT("VrmlExportUnit" )
#define OPTKEY_3DFILES_OPT wxT("VrmlExport3DShapeFilesOpt" )

class DIALOG_EXPORT_3DFILE : public DIALOG_EXPORT_3DFILE_BASE
{
private:
    PCB_EDIT_FRAME* m_parent;
    wxConfig* m_config;
    int m_unitsOpt;          // to remember last option
    int m_3DFilesOpt;        // to remember last option

    void OnCancelClick( wxCommandEvent& event ){ EndModal( wxID_CANCEL ); }
    void OnOkClick( wxCommandEvent& event ){ EndModal( wxID_OK ); }

public:
    DIALOG_EXPORT_3DFILE( PCB_EDIT_FRAME* parent ) :
        DIALOG_EXPORT_3DFILE_BASE( parent )
    {
        m_parent = parent;
        m_config = wxGetApp().GetSettings();
        SetFocus();
        m_config->Read( OPTKEY_OUTPUT_UNIT, &m_unitsOpt );
        m_config->Read( OPTKEY_3DFILES_OPT, &m_3DFilesOpt );
        m_rbSelectUnits->SetSelection(m_unitsOpt);
        m_rb3DFilesOption->SetSelection(m_3DFilesOpt);
        GetSizer()->SetSizeHints( this );
        Centre();
    }
    ~DIALOG_EXPORT_3DFILE()
    {
        m_unitsOpt = GetUnits( );
        m_3DFilesOpt = Get3DFilesOption( );
        m_config->Write( OPTKEY_OUTPUT_UNIT, m_unitsOpt );
        m_config->Write( OPTKEY_3DFILES_OPT, m_3DFilesOpt );
    };

    void SetSubdir( const wxString & aDir )
    {
        m_SubdirNameCtrl->SetValue( aDir);
    }

    wxString GetSubdir( )
    {
        return m_SubdirNameCtrl->GetValue( );
    }

    wxFilePickerCtrl* FilePicker()
    {
        return m_filePicker;
    }

    int GetUnits( )
    {
        return m_unitsOpt = m_rbSelectUnits->GetSelection();
    }

    int Get3DFilesOption( )
    {
        return m_3DFilesOpt = m_rb3DFilesOption->GetSelection();
    }
};


/**
 * Function OnExportVRML
 * will export the current BOARD to a VRML file.
 */
void PCB_EDIT_FRAME::OnExportVRML( wxCommandEvent& event )
{
    wxFileName fn;
    static wxString subDirFor3Dshapes = wxT("shapes3D");

    // The general VRML scale factor
    // Assuming the VRML default unit is the mm
    // this is the mm to VRML scaling factor for inch, mm and meter
    double scaleList[3] = { 1.0/25.4, 1, 0.001 };

    // Build default file name
    wxString ext = wxT( "wrl" );
    fn = GetBoard()->GetFileName();
    fn.SetExt( ext );

    DIALOG_EXPORT_3DFILE dlg( this );
    dlg.FilePicker()->SetPath( fn.GetFullPath() );
    dlg.SetSubdir( subDirFor3Dshapes );

    if( dlg.ShowModal() != wxID_OK )
        return;

    double scale = scaleList[dlg.GetUnits( )];     // final scale export
    bool export3DFiles = dlg.Get3DFilesOption( ) == 0;

    wxBusyCursor dummy;

    wxString fullFilename = dlg.FilePicker()->GetPath();
    subDirFor3Dshapes = dlg.GetSubdir();

    if( ! wxDirExists( subDirFor3Dshapes ) )
        wxMkdir( subDirFor3Dshapes );

    if( ! ExportVRML_File( fullFilename, scale, export3DFiles, subDirFor3Dshapes ) )
    {
        wxString msg = _( "Unable to create " ) + fullFilename;
        wxMessageBox( msg );
        return;
    }
}
Loading