/** * @file common_plot_functions.cpp * @brief Kicad: Common plotting functions */ /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 1992-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 #include #include #include #include #include #include #include "worksheet_shape_builder.h" wxString GetDefaultPlotExtension( PlotFormat aFormat ) { switch( aFormat ) { case PLOT_FORMAT_DXF: return DXF_PLOTTER::GetDefaultFileExtension(); case PLOT_FORMAT_POST: return PS_PLOTTER::GetDefaultFileExtension(); case PLOT_FORMAT_PDF: return PDF_PLOTTER::GetDefaultFileExtension(); case PLOT_FORMAT_HPGL: return HPGL_PLOTTER::GetDefaultFileExtension(); case PLOT_FORMAT_GERBER: return GERBER_PLOTTER::GetDefaultFileExtension(); case PLOT_FORMAT_SVG: return SVG_PLOTTER::GetDefaultFileExtension(); default: wxASSERT( false ); return wxEmptyString; } } void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock, const PAGE_INFO& aPageInfo, int aSheetNumber, int aNumberOfSheets, const wxString &aSheetDesc, const wxString &aFilename ) { /* Note: Page sizes values are given in mils */ double iusPerMil = plotter->GetIUsPerDecimil() * 10.0; wxSize pageSize = aPageInfo.GetSizeMils(); // in mils wxPoint LTmargin; LTmargin.x = aPageInfo.GetLeftMarginMils() * iusPerMil; LTmargin.y = aPageInfo.GetTopMarginMils() * iusPerMil; wxPoint RBmargin; RBmargin.x = aPageInfo.GetRightMarginMils() * iusPerMil; RBmargin.y = aPageInfo.GetBottomMarginMils() * iusPerMil; EDA_COLOR_T plotColor = plotter->GetColorMode() ? RED : BLACK; plotter->SetColor( plotColor ); plotter->SetCurrentLineWidth( PLOTTER::DEFAULT_LINE_WIDTH ); WS_DRAW_ITEM_LIST drawList; // Prepare plot parameters drawList.SetMargins( LTmargin, RBmargin); drawList.SetPenSize(PLOTTER::DEFAULT_LINE_WIDTH ); drawList.SetMilsToIUfactor( iusPerMil ); drawList.SetPageSize( pageSize ); drawList.SetSheetNumber( aSheetNumber ); drawList.SetSheetCount( aNumberOfSheets ); drawList.BuildWorkSheetGraphicList( aPageInfo.GetType(), aSheetDesc, aFilename, aTitleBlock, plotColor, plotColor ); // Draw item list for( WS_DRAW_ITEM_BASE* item = drawList.GetFirst(); item; item = drawList.GetNext() ) { switch( item->GetType() ) { case WS_DRAW_ITEM_BASE::wsg_line: { WS_DRAW_ITEM_LINE* line = (WS_DRAW_ITEM_LINE*) item; plotter->MoveTo( line->GetStart() ); plotter->FinishTo( line->GetEnd() ); } break; case WS_DRAW_ITEM_BASE::wsg_rect: { WS_DRAW_ITEM_RECT* rect = (WS_DRAW_ITEM_RECT*) item; plotter->Rect( rect->GetStart(), rect->GetEnd(), NO_FILL ); } break; case WS_DRAW_ITEM_BASE::wsg_text: { WS_DRAW_ITEM_TEXT* text = (WS_DRAW_ITEM_TEXT*) item; plotter->Text( text->GetTextPosition(), text->GetColor(), text->GetText(), text->GetOrientation(), text->GetSize(), text->GetHorizJustify(), text->GetVertJustify(), text->GetPenWidth(), text->IsItalic(), text->IsBold() ); } break; case WS_DRAW_ITEM_BASE::wsg_poly: { WS_DRAW_ITEM_POLYGON* poly = (WS_DRAW_ITEM_POLYGON*) item; plotter->PlotPoly( poly->m_Corners, poly->IsFilled() ? FILLED_SHAPE : NO_FILL ); } break; } } }