From e4b83b40961f8fde69dd48ac3f831c34f0e00e47 Mon Sep 17 00:00:00 2001 From: charras Date: Tue, 30 Jun 2009 15:36:17 +0000 Subject: [PATCH] added forgotten files --- eeschema/plotdxf.cpp | 397 +++++++++++++++++++++++++++++++++++++++++++ eeschema/plotdxf.h | 123 ++++++++++++++ 2 files changed, 520 insertions(+) create mode 100644 eeschema/plotdxf.cpp create mode 100644 eeschema/plotdxf.h diff --git a/eeschema/plotdxf.cpp b/eeschema/plotdxf.cpp new file mode 100644 index 0000000000..53f06a0b30 --- /dev/null +++ b/eeschema/plotdxf.cpp @@ -0,0 +1,397 @@ +///////////////////////////////////////////////////////////////////////////// + +// Name: plotdxf.cpp +// Purpose: +// Author: Lorenzo Marcantonio +// Modified by: +// Created: 01/02/2006 08:37:24 +// RCS-ID: +// Copyright: GNU License +// Licence: +///////////////////////////////////////////////////////////////////////////// + +// Generated by DialogBlocks (unregistered), 01/02/2006 08:37:24 + +#if defined (__GNUG__) && !defined (NO_GCC_PRAGMA) +#pragma implementation "plotdxf.h" +#endif + +#include "fctsys.h" +#include "gr_basic.h" +#include "common.h" +#include "confirm.h" +#include "program.h" +#include "libcmp.h" +#include "general.h" +#include "worksheet.h" +#include "plot_common.h" +#include "protos.h" + +/* Variables locales : */ +static bool Plot_Sheet_Ref = TRUE; + +#include "plotdxf.h" + +////@begin XPM images +////@end XPM images + + +/***********************************************************/ +void WinEDA_SchematicFrame::ToPlot_DXF( wxCommandEvent& event ) +/***********************************************************/ + +/* fonction relai de creation de la frame de dialogue pour trace Postscript + */ +{ + wxPoint pos; + + pos = GetPosition(); + + pos.x += 10; + pos.y += 20; + + WinEDA_PlotDXFFrame* DXF_frame = new WinEDA_PlotDXFFrame( this ); + + DXF_frame->ShowModal(); + DXF_frame->Destroy(); +} + + +/*! + * WinEDA_PlotDXFFrame type definition + */ + +IMPLEMENT_DYNAMIC_CLASS( WinEDA_PlotDXFFrame, wxDialog ) + +/*! + * WinEDA_PlotDXFFrame event table definition + */ + +BEGIN_EVENT_TABLE( WinEDA_PlotDXFFrame, wxDialog ) + +////@begin WinEDA_PlotDXFFrame event table entries + EVT_BUTTON( ID_PLOT_DXF_CURRENT_EXECUTE, WinEDA_PlotDXFFrame::OnPlotDXFCurrentExecuteClick ) + + EVT_BUTTON( ID_PLOT_DXF_ALL_EXECUTE, WinEDA_PlotDXFFrame::OnPlotDXFAllExecuteClick ) + + EVT_BUTTON( wxID_CANCEL, WinEDA_PlotDXFFrame::OnCancelClick ) + +////@end WinEDA_PlotDXFFrame event table entries + +END_EVENT_TABLE() + +/*! + * WinEDA_PlotDXFFrame constructors + */ + +WinEDA_PlotDXFFrame::WinEDA_PlotDXFFrame() +{ +} + + +WinEDA_PlotDXFFrame::WinEDA_PlotDXFFrame( WinEDA_DrawFrame* parent, + wxWindowID id, + const wxString& caption, + const wxPoint& pos, + const wxSize& size, + long style ) +{ + m_Parent = parent; + PlotDXFColorOpt = false; + Create( parent, id, caption, pos, size, style ); +} + + +/*! + * WinEDA_PlotDXFFrame creator + */ + +bool WinEDA_PlotDXFFrame::Create( wxWindow* parent, + wxWindowID id, + const wxString& caption, + const wxPoint& pos, + const wxSize& size, + long style ) +{ +////@begin WinEDA_PlotDXFFrame member initialisation + m_PlotDXFColorOption = NULL; + m_Plot_Sheet_Ref = NULL; + m_btClose = NULL; + m_MsgBox = NULL; +////@end WinEDA_PlotDXFFrame member initialisation + +////@begin WinEDA_PlotDXFFrame creation + SetExtraStyle(wxWS_EX_BLOCK_EVENTS); + wxDialog::Create( parent, id, caption, pos, size, style ); + + CreateControls(); + if (GetSizer()) + { + GetSizer()->SetSizeHints(this); + } + Centre(); +////@end WinEDA_PlotDXFFrame creation + return true; +} + +/*! + * Control creation for WinEDA_PlotDXFFrame + */ + +void WinEDA_PlotDXFFrame::CreateControls() +{ +////@begin WinEDA_PlotDXFFrame content construction + // Generated by DialogBlocks, 24/04/2009 14:25:24 (unregistered) + + WinEDA_PlotDXFFrame* itemDialog1 = this; + + wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL); + itemDialog1->SetSizer(itemBoxSizer2); + + wxBoxSizer* itemBoxSizer3 = new wxBoxSizer(wxHORIZONTAL); + itemBoxSizer2->Add(itemBoxSizer3, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); + + wxStaticBox* itemStaticBoxSizer6Static = new wxStaticBox(itemDialog1, wxID_ANY, _("Plot Options:")); + wxStaticBoxSizer* itemStaticBoxSizer6 = new wxStaticBoxSizer(itemStaticBoxSizer6Static, wxVERTICAL); + itemBoxSizer3->Add(itemStaticBoxSizer6, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + + wxArrayString m_PlotDXFColorOptionStrings; + m_PlotDXFColorOptionStrings.Add(_("B/W")); + m_PlotDXFColorOptionStrings.Add(_("Color")); + m_PlotDXFColorOption = new wxRadioBox( itemDialog1, ID_RADIOBOX, _("Plot Color:"), wxDefaultPosition, wxDefaultSize, m_PlotDXFColorOptionStrings, 1, wxRA_SPECIFY_COLS ); + m_PlotDXFColorOption->SetSelection(0); + itemStaticBoxSizer6->Add(m_PlotDXFColorOption, 0, wxGROW|wxALL, 5); + + m_Plot_Sheet_Ref = new wxCheckBox( itemDialog1, ID_CHECKBOX, _("Print Sheet Ref"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); + m_Plot_Sheet_Ref->SetValue(false); + itemStaticBoxSizer6->Add(m_Plot_Sheet_Ref, 0, wxGROW|wxALL, 5); + + itemBoxSizer3->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + + wxBoxSizer* itemBoxSizer10 = new wxBoxSizer(wxVERTICAL); + itemBoxSizer3->Add(itemBoxSizer10, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); + + wxButton* itemButton11 = new wxButton( itemDialog1, ID_PLOT_DXF_CURRENT_EXECUTE, _("&Plot Page"), wxDefaultPosition, wxDefaultSize, 0 ); + itemButton11->SetDefault(); + itemBoxSizer10->Add(itemButton11, 0, wxGROW|wxALL, 5); + + wxButton* itemButton12 = new wxButton( itemDialog1, ID_PLOT_DXF_ALL_EXECUTE, _("Plot A&LL"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer10->Add(itemButton12, 0, wxGROW|wxALL, 5); + + m_btClose = new wxButton( itemDialog1, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer10->Add(m_btClose, 0, wxGROW|wxALL, 5); + + wxStaticText* itemStaticText15 = new wxStaticText( itemDialog1, wxID_STATIC, _("Messages :"), wxDefaultPosition, wxDefaultSize, 0 ); + itemBoxSizer2->Add(itemStaticText15, 0, wxALIGN_LEFT|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); + + m_MsgBox = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxSize(-1, 200), wxTE_MULTILINE ); + itemBoxSizer2->Add(m_MsgBox, 0, wxGROW|wxALL|wxFIXED_MINSIZE, 5); + + // Set validators + m_PlotDXFColorOption->SetValidator( wxGenericValidator(& PlotDXFColorOpt) ); + m_Plot_Sheet_Ref->SetValidator( wxGenericValidator(& Plot_Sheet_Ref) ); +////@end WinEDA_PlotDXFFrame content construction + + SetFocus(); // make the ESC work +} + + +/*! + * Should we show tooltips? + */ + +bool WinEDA_PlotDXFFrame::ShowToolTips() +{ + return true; +} + + +/*! + * Get bitmap resources + */ + +wxBitmap WinEDA_PlotDXFFrame::GetBitmapResource( const wxString& name ) +{ + // Bitmap retrieval +////@begin WinEDA_PlotDXFFrame bitmap retrieval + wxUnusedVar(name); + return wxNullBitmap; +////@end WinEDA_PlotDXFFrame bitmap retrieval +} + + +/*! + * Get icon resources + */ + +wxIcon WinEDA_PlotDXFFrame::GetIconResource( const wxString& name ) +{ + // Icon retrieval +////@begin WinEDA_PlotDXFFrame icon retrieval + wxUnusedVar(name); + return wxNullIcon; +////@end WinEDA_PlotDXFFrame icon retrieval +} + + +/*! + * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON + */ + +void WinEDA_PlotDXFFrame::OnPlotDXFCurrentExecuteClick( wxCommandEvent& event ) +{ + int Select_PlotAll = FALSE; + + InitOptVars(); + CreateDXFFile( Select_PlotAll ); + m_MsgBox->AppendText( wxT( "*****\n" ) ); +} + + +/*! + * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BUTTON1 + */ + +void WinEDA_PlotDXFFrame::OnPlotDXFAllExecuteClick( wxCommandEvent& event ) +{ + int Select_PlotAll = TRUE; + + InitOptVars(); + CreateDXFFile( Select_PlotAll ); + m_MsgBox->AppendText( wxT( "*****\n" ) ); +} + + +/*! + * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL + */ + +void WinEDA_PlotDXFFrame::OnCancelClick( wxCommandEvent& event ) +{ + InitOptVars(); + EndModal( 0 ); +} + + +/*****************************************/ +void WinEDA_PlotDXFFrame::InitOptVars() +/*****************************************/ +{ + Plot_Sheet_Ref = m_Plot_Sheet_Ref->GetValue(); + PlotDXFColorOpt = m_PlotDXFColorOption->GetSelection(); +} + + +/*************************************************************/ +void WinEDA_PlotDXFFrame::CreateDXFFile( int AllPages ) +/*************************************************************/ +{ + WinEDA_SchematicFrame* schframe = (WinEDA_SchematicFrame*) m_Parent; + SCH_SCREEN* screen = schframe->GetScreen(); + SCH_SCREEN* oldscreen = screen; + DrawSheetPath* sheetpath, *oldsheetpath = schframe->GetSheet(); + wxString PlotFileName; + Ki_PageDescr* PlotSheet; + wxPoint plot_offset; + + /* When printing all pages, the printed page is not the current page. + * In complex hierarchies, we must setup references and others parameters in the printed SCH_SCREEN + * because in complex hierarchies a SCH_SCREEN (a schematic drawings) + * is shared between many sheets + */ + EDA_SheetList SheetList( NULL ); + sheetpath = SheetList.GetFirst(); + DrawSheetPath list; + + while (true) + { + if( AllPages ) + { + if( sheetpath == NULL ) + break; + list.Clear(); + if( list.BuildSheetPathInfoFromSheetPathValue( sheetpath->Path() ) ) + { + schframe->m_CurrentSheet = &list; + schframe->m_CurrentSheet->UpdateAllScreenReferences(); + schframe->SetSheetNumberAndCount(); + screen = schframe->m_CurrentSheet->LastScreen(); + ActiveScreen = screen; + } + else // Should not happen + return; + sheetpath = SheetList.GetNext(); + } + PlotSheet = screen->m_CurrentSheetDesc; + double scale = 10; + + plot_offset.x = 0; + plot_offset.y = 0; + + PlotFileName = schframe->GetUniqueFilenameForCurrentSheet( ) + wxT( ".dxf" ); + + PlotOneSheetDXF( PlotFileName, screen, PlotSheet, plot_offset, scale ); + + if( !AllPages ) + break; + } + + ActiveScreen = oldscreen; + schframe->m_CurrentSheet = oldsheetpath; + schframe->m_CurrentSheet->UpdateAllScreenReferences(); + schframe->SetSheetNumberAndCount(); +} + + +/*****************************************************************************************/ +void WinEDA_PlotDXFFrame::PlotOneSheetDXF( const wxString& FileName, + SCH_SCREEN* screen, + Ki_PageDescr* sheet, + wxPoint plot_offset, + double scale) +/*****************************************************************************************/ + +/* Trace en format DXF. d'une feuille de dessin + */ +{ + wxString msg; + + FILE *output_file = wxFopen( FileName, wxT( "wt" ) ); + if( output_file == NULL ) + { + msg = wxT( "\n** " ); + msg += _( "Unable to create " ) + FileName + wxT( " **\n\n" ); + m_MsgBox->AppendText( msg ); + wxBell(); + return; + } + + SetLocaleTo_C_standard(); + msg.Printf( _( "Plot: %s\n" ), FileName.GetData() ); + m_MsgBox->AppendText( msg ); + + DXF_Plotter *plotter = new DXF_Plotter(); + plotter->set_paper_size(sheet); + plotter->set_viewport( plot_offset, scale, 0); + plotter->set_color_mode(PlotDXFColorOpt); + + /* Init : */ + plotter->set_creator(wxT("EESchema-DXF")); + plotter->set_filename(FileName); + plotter->start_plot(output_file); + + if( Plot_Sheet_Ref ) + { + plotter->set_color( BLACK ); + m_Parent->PlotWorkSheet( plotter, screen ); + } + + PlotDrawlist(plotter, screen->EEDrawList); + + /* fin */ + plotter->end_plot(); + delete plotter; + SetLocaleTo_Default(); + + m_MsgBox->AppendText( wxT( "Ok\n" ) ); +} diff --git a/eeschema/plotdxf.h b/eeschema/plotdxf.h new file mode 100644 index 0000000000..b4f41b80a1 --- /dev/null +++ b/eeschema/plotdxf.h @@ -0,0 +1,123 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: plotdxf.h +// Purpose: +// Author: Lorenzo Marcantonio +// Modified by: +// Created: 01/02/2006 08:37:24 +// RCS-ID: +// Copyright: GNU License +// Licence: +///////////////////////////////////////////////////////////////////////////// + +#ifndef _PLOTDXF_H_ +#define _PLOTDXF_H_ + +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) +#pragma interface "plotdxf.h" +#endif + +/*! + * Includes + */ + +////@begin includes +#include "wx/valgen.h" +////@end includes + +/*! + * Forward declarations + */ + +////@begin forward declarations +class wxBoxSizer; +////@end forward declarations + +/*! + * Control identifiers + */ + +////@begin control identifiers +#define ID_DIALOG 10000 +#define ID_RADIOBOX 10001 +#define ID_CHECKBOX 10005 +#define ID_PLOT_DXF_CURRENT_EXECUTE 10003 +#define ID_PLOT_DXF_ALL_EXECUTE 10004 +#define ID_TEXTCTRL 10006 +#define SYMBOL_WINEDA_PLOTDXFFRAME_STYLE wxDEFAULT_DIALOG_STYLE|wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|wxTAB_TRAVERSAL|MAYBE_RESIZE_BORDER +#define SYMBOL_WINEDA_PLOTDXFFRAME_TITLE _("EESchema Plot DXF") +#define SYMBOL_WINEDA_PLOTDXFFRAME_IDNAME ID_DIALOG +#define SYMBOL_WINEDA_PLOTDXFFRAME_SIZE wxSize(400, 300) +#define SYMBOL_WINEDA_PLOTDXFFRAME_POSITION wxDefaultPosition +////@end control identifiers + +/*! + * Compatibility + */ + +#ifndef wxCLOSE_BOX +#define wxCLOSE_BOX 0x1000 +#endif + +/*! + * WinEDA_PlotDXFFrame class declaration + */ + +class WinEDA_PlotDXFFrame: public wxDialog +{ + DECLARE_DYNAMIC_CLASS( WinEDA_PlotDXFFrame ) + DECLARE_EVENT_TABLE() + +public: + /// Constructors + WinEDA_PlotDXFFrame( ); + WinEDA_PlotDXFFrame( WinEDA_DrawFrame* parent, wxWindowID id = SYMBOL_WINEDA_PLOTDXFFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PLOTDXFFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PLOTDXFFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PLOTDXFFRAME_SIZE, long style = SYMBOL_WINEDA_PLOTDXFFRAME_STYLE ); + + /// Creation + bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_PLOTDXFFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PLOTDXFFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PLOTDXFFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PLOTDXFFRAME_SIZE, long style = SYMBOL_WINEDA_PLOTDXFFRAME_STYLE ); + + /// Creates the controls and sizers + void CreateControls(); + +////@begin WinEDA_PlotDXFFrame event handler declarations + + /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PLOT_DXF_CURRENT_EXECUTE + void OnPlotDXFCurrentExecuteClick( wxCommandEvent& event ); + + /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PLOT_DXF_ALL_EXECUTE + void OnPlotDXFAllExecuteClick( wxCommandEvent& event ); + + /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL + void OnCancelClick( wxCommandEvent& event ); + +////@end WinEDA_PlotDXFFrame event handler declarations + +////@begin WinEDA_PlotDXFFrame member function declarations + + /// Retrieves bitmap resources + wxBitmap GetBitmapResource( const wxString& name ); + + /// Retrieves icon resources + wxIcon GetIconResource( const wxString& name ); +////@end WinEDA_PlotDXFFrame member function declarations + + void InitOptVars(); + void CreateDXFFile(int AllPages); + void PlotOneSheetDXF(const wxString & FileName, + SCH_SCREEN * screen, Ki_PageDescr * sheet, + wxPoint plot_offset, double scale); + + /// Should we show tooltips? + static bool ShowToolTips(); + +////@begin WinEDA_PlotDXFFrame member variables + wxRadioBox* m_PlotDXFColorOption; + wxCheckBox* m_Plot_Sheet_Ref; + wxButton* m_btClose; + wxTextCtrl* m_MsgBox; +////@end WinEDA_PlotDXFFrame member variables + WinEDA_DrawFrame * m_Parent; + int PlotDXFColorOpt; +}; + +#endif +// _PLOTDXF_H_