Move drawing sheet datastructures to EDA_IU_SCALE.
Or mostly, at least. Plotters still define their own mils-to-iu scale. Fixes https://gitlab.com/kicad/code/kicad/-/issues/14934
This commit is contained in:
parent
62f24aca1e
commit
782c73300b
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
|
* Copyright (C) 1992-2013 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
|
||||||
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -580,8 +580,10 @@ void DS_DATA_ITEM_TEXT::SyncDrawItems( DS_DRAW_ITEM_LIST* aCollector, KIGFX::VIE
|
||||||
if( j > 0 && !IsInsidePage( j ) )
|
if( j > 0 && !IsInsidePage( j ) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
text = new DS_DRAW_ITEM_TEXT( this, j, m_FullText, GetStartPosIU( j ), textsize, pensize,
|
text = new DS_DRAW_ITEM_TEXT( aCollector->GetIuScale(), this, j, m_FullText,
|
||||||
m_Font, m_Italic, m_Bold, m_TextColor );
|
GetStartPosIU( j ), textsize, pensize, m_Font, m_Italic,
|
||||||
|
m_Bold, m_TextColor );
|
||||||
|
|
||||||
text->SetFlags( itemFlags[ j ] );
|
text->SetFlags( itemFlags[ j ] );
|
||||||
m_drawItems.push_back( text );
|
m_drawItems.push_back( text );
|
||||||
|
|
||||||
|
@ -677,36 +679,6 @@ void DS_DATA_ITEM_TEXT::SetConstrainedTextSize()
|
||||||
|
|
||||||
if( m_ConstrainedTextSize.y == 0 )
|
if( m_ConstrainedTextSize.y == 0 )
|
||||||
m_ConstrainedTextSize.y = DS_DATA_MODEL::GetTheInstance().m_DefaultTextSize.y;
|
m_ConstrainedTextSize.y = DS_DATA_MODEL::GetTheInstance().m_DefaultTextSize.y;
|
||||||
|
|
||||||
if( m_BoundingBoxSize.x || m_BoundingBoxSize.y )
|
|
||||||
{
|
|
||||||
// to know the X and Y size of the line, we should use
|
|
||||||
// EDA_TEXT::GetTextBox()
|
|
||||||
// but this function uses integers
|
|
||||||
// So, to avoid truncations with our unit in mm, use microns.
|
|
||||||
VECTOR2I size_micron;
|
|
||||||
#define FSCALE 1000.0
|
|
||||||
int linewidth = 0;
|
|
||||||
size_micron.x = KiROUND( m_ConstrainedTextSize.x * FSCALE );
|
|
||||||
size_micron.y = KiROUND( m_ConstrainedTextSize.y * FSCALE );
|
|
||||||
DS_DRAW_ITEM_TEXT dummy( this, 0, m_FullText, VECTOR2I( 0, 0 ), size_micron, linewidth,
|
|
||||||
m_Font, m_Italic, m_Bold, m_TextColor );
|
|
||||||
dummy.SetMultilineAllowed( true );
|
|
||||||
dummy.SetHorizJustify( m_Hjustify ) ;
|
|
||||||
dummy.SetVertJustify( m_Vjustify );
|
|
||||||
dummy.SetTextAngle( EDA_ANGLE( m_Orient, DEGREES_T ) );
|
|
||||||
|
|
||||||
BOX2I rect = dummy.GetTextBox();
|
|
||||||
VECTOR2D size;
|
|
||||||
size.x = rect.GetWidth() / FSCALE;
|
|
||||||
size.y = rect.GetHeight() / FSCALE;
|
|
||||||
|
|
||||||
if( m_BoundingBoxSize.x && size.x > m_BoundingBoxSize.x )
|
|
||||||
m_ConstrainedTextSize.x *= m_BoundingBoxSize.x / size.x;
|
|
||||||
|
|
||||||
if( m_BoundingBoxSize.y && size.y > m_BoundingBoxSize.y )
|
|
||||||
m_ConstrainedTextSize.y *= m_BoundingBoxSize.y / size.y;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -536,7 +536,7 @@ void DS_DRAW_ITEM_LIST::BuildDrawItemsList( const PAGE_INFO& aPageInfo,
|
||||||
if( model.GetCount() == 0 && !model.VoidListAllowed() )
|
if( model.GetCount() == 0 && !model.VoidListAllowed() )
|
||||||
model.LoadDrawingSheet();
|
model.LoadDrawingSheet();
|
||||||
|
|
||||||
model.SetupDrawEnvironment( aPageInfo, m_milsToIu );
|
model.SetupDrawEnvironment( aPageInfo, GetMilsToIUfactor() );
|
||||||
|
|
||||||
for( DS_DATA_ITEM* wsItem : model.GetItems() )
|
for( DS_DATA_ITEM* wsItem : model.GetItems() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KICAD, a free EDA CAD application.
|
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013-2020 CERN
|
* Copyright (C) 2013-2020 CERN
|
||||||
* Copyright (C) 2018-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2018-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
@ -34,11 +34,11 @@
|
||||||
|
|
||||||
using namespace KIGFX;
|
using namespace KIGFX;
|
||||||
|
|
||||||
DS_PROXY_VIEW_ITEM::DS_PROXY_VIEW_ITEM( int aMils2IUscalefactor, const PAGE_INFO* aPageInfo,
|
DS_PROXY_VIEW_ITEM::DS_PROXY_VIEW_ITEM( const EDA_IU_SCALE& aIuScale, const PAGE_INFO* aPageInfo,
|
||||||
const PROJECT* aProject, const TITLE_BLOCK* aTitleBlock,
|
const PROJECT* aProject, const TITLE_BLOCK* aTitleBlock,
|
||||||
const std::map<wxString, wxString>* aProperties ) :
|
const std::map<wxString, wxString>* aProperties ) :
|
||||||
EDA_ITEM( NOT_USED ), // this item is never added to a BOARD so it needs no type
|
EDA_ITEM( NOT_USED ), // this item is never added to a BOARD so it needs no type
|
||||||
m_mils2IUscalefactor( aMils2IUscalefactor ),
|
m_iuScale( aIuScale ),
|
||||||
m_titleBlock( aTitleBlock ),
|
m_titleBlock( aTitleBlock ),
|
||||||
m_pageInfo( aPageInfo ),
|
m_pageInfo( aPageInfo ),
|
||||||
m_pageNumber( "1" ),
|
m_pageNumber( "1" ),
|
||||||
|
@ -56,11 +56,11 @@ const BOX2I DS_PROXY_VIEW_ITEM::ViewBBox() const
|
||||||
{
|
{
|
||||||
BOX2I bbox;
|
BOX2I bbox;
|
||||||
|
|
||||||
if( m_pageInfo != NULL )
|
if( m_pageInfo )
|
||||||
{
|
{
|
||||||
bbox.SetOrigin( VECTOR2I( 0, 0 ) );
|
bbox.SetOrigin( VECTOR2I( 0, 0 ) );
|
||||||
bbox.SetEnd( VECTOR2I( m_pageInfo->GetWidthMils() * m_mils2IUscalefactor,
|
bbox.SetEnd( VECTOR2I( m_iuScale.MilsToIU( m_pageInfo->GetWidthMils() ),
|
||||||
m_pageInfo->GetHeightMils() * m_mils2IUscalefactor ) );
|
m_iuScale.MilsToIU( m_pageInfo->GetHeightMils() ) ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -81,9 +81,6 @@ void DS_PROXY_VIEW_ITEM::buildDrawList( VIEW* aView,
|
||||||
wxString sheetPath( m_sheetPath.c_str(), wxConvUTF8 );
|
wxString sheetPath( m_sheetPath.c_str(), wxConvUTF8 );
|
||||||
|
|
||||||
aDrawList->SetDefaultPenSize( (int) settings->GetDrawingSheetLineWidth() );
|
aDrawList->SetDefaultPenSize( (int) settings->GetDrawingSheetLineWidth() );
|
||||||
// Adjust the scaling factor: drawing sheet item coordinates and sizes are stored in mils,
|
|
||||||
// and must be scaled to the same units as the caller
|
|
||||||
aDrawList->SetMilsToIUfactor( m_mils2IUscalefactor );
|
|
||||||
aDrawList->SetIsFirstPage( m_isFirstPage );
|
aDrawList->SetIsFirstPage( m_isFirstPage );
|
||||||
aDrawList->SetPageNumber( m_pageNumber );
|
aDrawList->SetPageNumber( m_pageNumber );
|
||||||
aDrawList->SetSheetCount( m_sheetCount );
|
aDrawList->SetSheetCount( m_sheetCount );
|
||||||
|
@ -102,7 +99,7 @@ void DS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
|
||||||
{
|
{
|
||||||
GAL* gal = aView->GetGAL();
|
GAL* gal = aView->GetGAL();
|
||||||
RENDER_SETTINGS* settings = aView->GetPainter()->GetSettings();
|
RENDER_SETTINGS* settings = aView->GetPainter()->GetSettings();
|
||||||
DS_DRAW_ITEM_LIST drawList;
|
DS_DRAW_ITEM_LIST drawList( m_iuScale );
|
||||||
|
|
||||||
buildDrawList( aView, m_properties, &drawList );
|
buildDrawList( aView, m_properties, &drawList );
|
||||||
|
|
||||||
|
@ -112,7 +109,7 @@ void DS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
|
||||||
if( flipped )
|
if( flipped )
|
||||||
{
|
{
|
||||||
gal->Save();
|
gal->Save();
|
||||||
gal->Translate( VECTOR2D( m_pageInfo->GetWidthMils() * m_mils2IUscalefactor, 0 ) );
|
gal->Translate( VECTOR2D( m_iuScale.MilsToIU( m_pageInfo->GetWidthMils() ), 0 ) );
|
||||||
gal->Scale( VECTOR2D( -1.0, 1.0 ) );
|
gal->Scale( VECTOR2D( -1.0, 1.0 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +133,7 @@ void DS_PROXY_VIEW_ITEM::ViewDraw( int aLayer, VIEW* aView ) const
|
||||||
|
|
||||||
// Draw gray line that outlines the sheet size
|
// Draw gray line that outlines the sheet size
|
||||||
if( settings->GetShowPageLimits() )
|
if( settings->GetShowPageLimits() )
|
||||||
ws_painter.DrawBorder( m_pageInfo, m_mils2IUscalefactor );
|
ws_painter.DrawBorder( m_pageInfo, m_iuScale.IU_PER_MILS );
|
||||||
|
|
||||||
if( flipped )
|
if( flipped )
|
||||||
gal->Restore();
|
gal->Restore();
|
||||||
|
@ -153,7 +150,7 @@ void DS_PROXY_VIEW_ITEM::ViewGetLayers( int aLayers[], int& aCount ) const
|
||||||
bool DS_PROXY_VIEW_ITEM::HitTestDrawingSheetItems( VIEW* aView, const VECTOR2I& aPosition )
|
bool DS_PROXY_VIEW_ITEM::HitTestDrawingSheetItems( VIEW* aView, const VECTOR2I& aPosition )
|
||||||
{
|
{
|
||||||
int accuracy = (int) aView->ToWorld( 5.0 ); // five pixels at current zoom
|
int accuracy = (int) aView->ToWorld( 5.0 ); // five pixels at current zoom
|
||||||
DS_DRAW_ITEM_LIST drawList;
|
DS_DRAW_ITEM_LIST drawList( m_iuScale );
|
||||||
|
|
||||||
buildDrawList( aView, m_properties, &drawList );
|
buildDrawList( aView, m_properties, &drawList );
|
||||||
|
|
||||||
|
|
|
@ -982,10 +982,10 @@ void PrintDrawingSheet( const RENDER_SETTINGS* aSettings, const PAGE_INFO& aPage
|
||||||
const wxString& aPageNumber, double aMils2Iu, const PROJECT* aProject,
|
const wxString& aPageNumber, double aMils2Iu, const PROJECT* aProject,
|
||||||
const wxString& aSheetLayer, bool aIsFirstPage )
|
const wxString& aSheetLayer, bool aIsFirstPage )
|
||||||
{
|
{
|
||||||
DS_DRAW_ITEM_LIST drawList;
|
DS_DRAW_ITEM_LIST drawList( unityScale );
|
||||||
|
|
||||||
drawList.SetDefaultPenSize( aSettings->GetDefaultPenWidth() );
|
drawList.SetDefaultPenSize( aSettings->GetDefaultPenWidth() );
|
||||||
drawList.SetMilsToIUfactor( aMils2Iu );
|
drawList.SetPlotterMilsToIUfactor( aMils2Iu );
|
||||||
drawList.SetPageNumber( aPageNumber );
|
drawList.SetPageNumber( aPageNumber );
|
||||||
drawList.SetSheetCount( aSheetCount );
|
drawList.SetSheetCount( aSheetCount );
|
||||||
drawList.SetFileName( aFileName );
|
drawList.SetFileName( aFileName );
|
||||||
|
|
|
@ -356,13 +356,22 @@ void EDA_TEXT::SetLineSpacing( double aLineSpacing )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EDA_TEXT::SetTextSize( const VECTOR2I& aNewSize )
|
void EDA_TEXT::SetTextSize( VECTOR2I aNewSize )
|
||||||
{
|
{
|
||||||
int min = m_IuScale.get().MilsToIU( TEXT_MIN_SIZE_MILS );
|
if( m_IuScale.get().IU_PER_MM != unityScale.IU_PER_MM )
|
||||||
int max = m_IuScale.get().MilsToIU( TEXT_MAX_SIZE_MILS );
|
{
|
||||||
|
// Plotting uses unityScale and independently scales the text. If we clamp here we'll
|
||||||
|
// clamp to *really* small values.
|
||||||
|
|
||||||
|
int min = m_IuScale.get().MilsToIU( TEXT_MIN_SIZE_MILS );
|
||||||
|
int max = m_IuScale.get().MilsToIU( TEXT_MAX_SIZE_MILS );
|
||||||
|
|
||||||
|
aNewSize = VECTOR2I( alg::clamp( min, aNewSize.x, max ),
|
||||||
|
alg::clamp( min, aNewSize.y, max ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
m_attributes.m_Size = aNewSize;
|
||||||
|
|
||||||
m_attributes.m_Size = VECTOR2I( alg::clamp( min, aNewSize.x, max ),
|
|
||||||
alg::clamp( min, aNewSize.y, max ) );
|
|
||||||
ClearRenderCache();
|
ClearRenderCache();
|
||||||
m_bounding_box_cache_valid = false;
|
m_bounding_box_cache_valid = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,14 +65,14 @@ void PlotDrawingSheet( PLOTTER* plotter, const PROJECT* aProject, const TITLE_BL
|
||||||
if( plotColor == COLOR4D::UNSPECIFIED )
|
if( plotColor == COLOR4D::UNSPECIFIED )
|
||||||
plotColor = COLOR4D( RED );
|
plotColor = COLOR4D( RED );
|
||||||
|
|
||||||
DS_DRAW_ITEM_LIST drawList;
|
DS_DRAW_ITEM_LIST drawList( unityScale );
|
||||||
|
|
||||||
// Print only a short filename, if aFilename is the full filename
|
// Print only a short filename, if aFilename is the full filename
|
||||||
wxFileName fn( aFilename );
|
wxFileName fn( aFilename );
|
||||||
|
|
||||||
// Prepare plot parameters
|
// Prepare plot parameters
|
||||||
drawList.SetDefaultPenSize( PLOTTER::USE_DEFAULT_LINE_WIDTH );
|
drawList.SetDefaultPenSize( PLOTTER::USE_DEFAULT_LINE_WIDTH );
|
||||||
drawList.SetMilsToIUfactor( iusPerMil );
|
drawList.SetPlotterMilsToIUfactor( iusPerMil );
|
||||||
drawList.SetPageNumber( aSheetNumber );
|
drawList.SetPageNumber( aSheetNumber );
|
||||||
drawList.SetSheetCount( aSheetCount );
|
drawList.SetSheetCount( aSheetCount );
|
||||||
drawList.SetFileName( fn.GetFullName() ); // Print only the short filename
|
drawList.SetFileName( fn.GetFullName() ); // Print only the short filename
|
||||||
|
|
|
@ -250,8 +250,7 @@ void PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems()
|
||||||
m_page->SetHeightMils( 5000 );
|
m_page->SetHeightMils( 5000 );
|
||||||
m_page->SetWidthMils( 6000 );
|
m_page->SetWidthMils( 6000 );
|
||||||
|
|
||||||
m_drawingSheet = new DS_PROXY_VIEW_ITEM( (int) schIUScale.IU_PER_MILS, m_page, nullptr,
|
m_drawingSheet = new DS_PROXY_VIEW_ITEM( schIUScale, m_page, nullptr, m_titleBlock, nullptr );
|
||||||
m_titleBlock, nullptr );
|
|
||||||
m_drawingSheet->SetColorLayer( LAYER_SCHEMATIC_DRAWINGSHEET );
|
m_drawingSheet->SetColorLayer( LAYER_SCHEMATIC_DRAWINGSHEET );
|
||||||
m_drawingSheet->SetPageBorderColorLayer( LAYER_SCHEMATIC_PAGE_LIMITS );
|
m_drawingSheet->SetPageBorderColorLayer( LAYER_SCHEMATIC_PAGE_LIMITS );
|
||||||
view->Add( m_drawingSheet );
|
view->Add( m_drawingSheet );
|
||||||
|
|
|
@ -170,7 +170,7 @@ int ERC_TESTER::TestDuplicateSheetNames( bool aCreateMarker )
|
||||||
|
|
||||||
void ERC_TESTER::TestTextVars( DS_PROXY_VIEW_ITEM* aDrawingSheet )
|
void ERC_TESTER::TestTextVars( DS_PROXY_VIEW_ITEM* aDrawingSheet )
|
||||||
{
|
{
|
||||||
DS_DRAW_ITEM_LIST wsItems;
|
DS_DRAW_ITEM_LIST wsItems( schIUScale );
|
||||||
|
|
||||||
auto unresolved = [this]( wxString str )
|
auto unresolved = [this]( wxString str )
|
||||||
{
|
{
|
||||||
|
@ -180,7 +180,6 @@ void ERC_TESTER::TestTextVars( DS_PROXY_VIEW_ITEM* aDrawingSheet )
|
||||||
|
|
||||||
if( aDrawingSheet )
|
if( aDrawingSheet )
|
||||||
{
|
{
|
||||||
wsItems.SetMilsToIUfactor( schIUScale.IU_PER_MILS );
|
|
||||||
wsItems.SetPageNumber( wxS( "1" ) );
|
wsItems.SetPageNumber( wxS( "1" ) );
|
||||||
wsItems.SetSheetCount( 1 );
|
wsItems.SetSheetCount( 1 );
|
||||||
wsItems.SetFileName( wxS( "dummyFilename" ) );
|
wsItems.SetFileName( wxS( "dummyFilename" ) );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013-2018 CERN
|
* Copyright (C) 2013-2018 CERN
|
||||||
* Copyright (C) 2019-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
* @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
|
||||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||||
|
@ -95,8 +95,7 @@ void SCH_VIEW::DisplaySheet( const SCH_SCREEN *aScreen )
|
||||||
for( SCH_ITEM* item : aScreen->Items() )
|
for( SCH_ITEM* item : aScreen->Items() )
|
||||||
Add( item );
|
Add( item );
|
||||||
|
|
||||||
m_drawingSheet.reset( new DS_PROXY_VIEW_ITEM( static_cast<int>( schIUScale.IU_PER_MILS ),
|
m_drawingSheet.reset( new DS_PROXY_VIEW_ITEM( schIUScale, &aScreen->GetPageSettings(),
|
||||||
&aScreen->GetPageSettings(),
|
|
||||||
&aScreen->Schematic()->Prj(),
|
&aScreen->Schematic()->Prj(),
|
||||||
&aScreen->GetTitleBlock(),
|
&aScreen->GetTitleBlock(),
|
||||||
aScreen->Schematic()->GetProperties() ) );
|
aScreen->Schematic()->GetProperties() ) );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||||
* Copyright (C) 1992-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
@ -826,9 +826,8 @@ void GERBVIEW_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
||||||
GERBVIEW_DRAW_PANEL_GAL* drawPanel = static_cast<GERBVIEW_DRAW_PANEL_GAL*>( GetCanvas() );
|
GERBVIEW_DRAW_PANEL_GAL* drawPanel = static_cast<GERBVIEW_DRAW_PANEL_GAL*>( GetCanvas() );
|
||||||
|
|
||||||
// Prepare drawing-sheet template
|
// Prepare drawing-sheet template
|
||||||
DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( gerbIUScale.IU_PER_MILS,
|
DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( gerbIUScale, &GetPageSettings(),
|
||||||
&GetPageSettings(), &Prj(),
|
&Prj(), &GetTitleBlock(), nullptr );
|
||||||
&GetTitleBlock(), nullptr );
|
|
||||||
|
|
||||||
if( GetScreen() )
|
if( GetScreen() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -310,12 +310,13 @@ private:
|
||||||
class DS_DRAW_ITEM_TEXT : public DS_DRAW_ITEM_BASE, public EDA_TEXT
|
class DS_DRAW_ITEM_TEXT : public DS_DRAW_ITEM_BASE, public EDA_TEXT
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DS_DRAW_ITEM_TEXT( DS_DATA_ITEM* aPeer, int aIndex, const wxString& aText, const VECTOR2I& aPos,
|
DS_DRAW_ITEM_TEXT( const EDA_IU_SCALE& aIuScale, DS_DATA_ITEM* aPeer, int aIndex,
|
||||||
const VECTOR2I& aSize, int aPenWidth, KIFONT::FONT* aFont,
|
const wxString& aText, const VECTOR2I& aPos, const VECTOR2I& aSize,
|
||||||
|
int aPenWidth, KIFONT::FONT* aFont,
|
||||||
bool aItalic = false, bool aBold = false,
|
bool aItalic = false, bool aBold = false,
|
||||||
const KIGFX::COLOR4D& aColor = KIGFX::COLOR4D::UNSPECIFIED ) :
|
const KIGFX::COLOR4D& aColor = KIGFX::COLOR4D::UNSPECIFIED ) :
|
||||||
DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_TEXT_T),
|
DS_DRAW_ITEM_BASE( aPeer, aIndex, WSG_TEXT_T),
|
||||||
EDA_TEXT( drawSheetIUScale, aText )
|
EDA_TEXT( aIuScale, aText )
|
||||||
{
|
{
|
||||||
SetTextPos( aPos );
|
SetTextPos( aPos );
|
||||||
SetTextSize( aSize );
|
SetTextSize( aSize );
|
||||||
|
@ -394,10 +395,11 @@ private:
|
||||||
class DS_DRAW_ITEM_LIST
|
class DS_DRAW_ITEM_LIST
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DS_DRAW_ITEM_LIST()
|
DS_DRAW_ITEM_LIST( const EDA_IU_SCALE& aIuScale ) :
|
||||||
|
m_iuScale( aIuScale )
|
||||||
{
|
{
|
||||||
m_idx = 0;
|
m_idx = 0;
|
||||||
m_milsToIu = 1.0;
|
m_plotterMilsToIu = 0.0;
|
||||||
m_penSize = 1;
|
m_penSize = 1;
|
||||||
m_pageNumber = "1";
|
m_pageNumber = "1";
|
||||||
m_sheetCount = 1;
|
m_sheetCount = 1;
|
||||||
|
@ -455,14 +457,25 @@ public:
|
||||||
int GetDefaultPenSize() const { return m_penSize; }
|
int GetDefaultPenSize() const { return m_penSize; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the scalar to convert pages units (mils) to draw/plot units
|
* Set the scalar to convert pages units (mils) to plot units.
|
||||||
*/
|
*/
|
||||||
void SetMilsToIUfactor( double aMils2Iu ) { m_milsToIu = aMils2Iu; }
|
void SetPlotterMilsToIUfactor( double aMils2Iu ) { m_plotterMilsToIu = aMils2Iu; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the scalar to convert pages units (mils) to draw/plot units
|
* Get the scalar to convert pages units (mils) to draw/plot units.
|
||||||
|
*
|
||||||
|
* This will be controlled by EITHER the parent frame's EDA_IU_SCALE or the plotter's
|
||||||
|
* mils-to-iu factor.
|
||||||
*/
|
*/
|
||||||
double GetMilsToIUfactor() { return m_milsToIu; }
|
double GetMilsToIUfactor()
|
||||||
|
{
|
||||||
|
if( m_plotterMilsToIu > 0.0 )
|
||||||
|
return m_plotterMilsToIu;
|
||||||
|
else
|
||||||
|
return m_iuScale.IU_PER_MILS;
|
||||||
|
}
|
||||||
|
|
||||||
|
const EDA_IU_SCALE& GetIuScale() const { return m_iuScale; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the value of the sheet number.
|
* Set the value of the sheet number.
|
||||||
|
@ -520,7 +533,6 @@ public:
|
||||||
*
|
*
|
||||||
* Before calling this function, some parameters should be initialized by calling:
|
* Before calling this function, some parameters should be initialized by calling:
|
||||||
* SetPenSize( aPenWidth );
|
* SetPenSize( aPenWidth );
|
||||||
* SetMilsToIUfactor( aMils2Iu );
|
|
||||||
* SetSheetNumber( aSheetNumber );
|
* SetSheetNumber( aSheetNumber );
|
||||||
* SetSheetCount( aSheetCount );
|
* SetSheetCount( aSheetCount );
|
||||||
* SetFileName( aFileName );
|
* SetFileName( aFileName );
|
||||||
|
@ -544,9 +556,10 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector <DS_DRAW_ITEM_BASE*> m_graphicList; // Items to draw/plot
|
std::vector <DS_DRAW_ITEM_BASE*> m_graphicList; // Items to draw/plot
|
||||||
|
const EDA_IU_SCALE& m_iuScale; // IU scale for drawing
|
||||||
|
double m_plotterMilsToIu; // IU scale for plotting
|
||||||
|
|
||||||
unsigned m_idx; // for GetFirst, GetNext functions
|
unsigned m_idx; // for GetFirst, GetNext functions
|
||||||
double m_milsToIu; // the scalar to convert pages units ( mils)
|
|
||||||
// to draw/plot units.
|
|
||||||
int m_penSize; // The default line width for drawings.
|
int m_penSize; // The default line width for drawings.
|
||||||
// used when an item has a pen size = 0
|
// used when an item has a pen size = 0
|
||||||
bool m_isFirstPage; ///< Is this the first page or not.
|
bool m_isFirstPage; ///< Is this the first page or not.
|
||||||
|
|
|
@ -47,8 +47,8 @@ class GAL;
|
||||||
class DS_PROXY_VIEW_ITEM : public EDA_ITEM
|
class DS_PROXY_VIEW_ITEM : public EDA_ITEM
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DS_PROXY_VIEW_ITEM( int aScaleFactor, const PAGE_INFO* aPageInfo, const PROJECT* aProject,
|
DS_PROXY_VIEW_ITEM( const EDA_IU_SCALE& aIuScale, const PAGE_INFO* aPageInfo,
|
||||||
const TITLE_BLOCK* aTitleBlock,
|
const PROJECT* aProject, const TITLE_BLOCK* aTitleBlock,
|
||||||
const std::map<wxString, wxString>* aProperties );
|
const std::map<wxString, wxString>* aProperties );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -128,27 +128,25 @@ protected:
|
||||||
DS_DRAW_ITEM_LIST* aDrawList ) const;
|
DS_DRAW_ITEM_LIST* aDrawList ) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// the factor between mils (units used in drawing sheet and internal units)
|
const EDA_IU_SCALE& m_iuScale;
|
||||||
/// it is the value IU_PER_MILS used in the caller
|
|
||||||
int m_mils2IUscalefactor;
|
|
||||||
|
|
||||||
std::string m_fileName;
|
std::string m_fileName;
|
||||||
std::string m_sheetName;
|
std::string m_sheetName;
|
||||||
std::string m_sheetPath;
|
std::string m_sheetPath;
|
||||||
const TITLE_BLOCK* m_titleBlock;
|
const TITLE_BLOCK* m_titleBlock;
|
||||||
const PAGE_INFO* m_pageInfo;
|
const PAGE_INFO* m_pageInfo;
|
||||||
std::string m_pageNumber;
|
std::string m_pageNumber;
|
||||||
int m_sheetCount;
|
int m_sheetCount;
|
||||||
bool m_isFirstPage;
|
bool m_isFirstPage;
|
||||||
const PROJECT* m_project;
|
const PROJECT* m_project;
|
||||||
|
|
||||||
const std::map<wxString, wxString>* m_properties;
|
const std::map<wxString, wxString>* m_properties;
|
||||||
|
|
||||||
/// Layer that is used for drawing sheet color (LAYER_DRAWINGSHEET is always used for visibility)
|
/// Layer that is used for drawing sheet color (LAYER_DRAWINGSHEET is always used for visibility)
|
||||||
int m_colorLayer;
|
int m_colorLayer;
|
||||||
|
|
||||||
/// Layer that is used for page border color
|
/// Layer that is used for page border color
|
||||||
int m_pageBorderColorLayer;
|
int m_pageBorderColorLayer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* DS_PROXY_VIEW_ITEM_H */
|
#endif /* DS_PROXY_VIEW_ITEM_H */
|
||||||
|
|
|
@ -200,7 +200,7 @@ public:
|
||||||
void SetLineSpacing( double aLineSpacing );
|
void SetLineSpacing( double aLineSpacing );
|
||||||
double GetLineSpacing() const { return m_attributes.m_LineSpacing; }
|
double GetLineSpacing() const { return m_attributes.m_LineSpacing; }
|
||||||
|
|
||||||
void SetTextSize( const VECTOR2I& aNewSize );
|
void SetTextSize( VECTOR2I aNewSize );
|
||||||
VECTOR2I GetTextSize() const { return m_attributes.m_Size; }
|
VECTOR2I GetTextSize() const { return m_attributes.m_Size; }
|
||||||
|
|
||||||
void SetTextWidth( int aWidth );
|
void SetTextWidth( int aWidth );
|
||||||
|
@ -389,7 +389,7 @@ private:
|
||||||
wxString m_shown_text; // Cache of unescaped text for efficient access
|
wxString m_shown_text; // Cache of unescaped text for efficient access
|
||||||
bool m_shown_text_has_text_var_refs;
|
bool m_shown_text_has_text_var_refs;
|
||||||
|
|
||||||
std::reference_wrapper<const EDA_IU_SCALE> m_IuScale;
|
std::reference_wrapper<const EDA_IU_SCALE> m_IuScale;
|
||||||
|
|
||||||
mutable wxString m_render_cache_text;
|
mutable wxString m_render_cache_text;
|
||||||
mutable const KIFONT::FONT* m_render_cache_font;
|
mutable const KIFONT::FONT* m_render_cache_font;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2018 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2018-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it
|
* 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
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
@ -97,11 +97,10 @@ void PL_DRAW_PANEL_GAL::DisplayDrawingSheet()
|
||||||
|
|
||||||
// To show the formatted texts instead of raw texts in drawing sheet editor, we need
|
// To show the formatted texts instead of raw texts in drawing sheet editor, we need
|
||||||
// a dummy DS_DRAW_ITEM_LIST.
|
// a dummy DS_DRAW_ITEM_LIST.
|
||||||
DS_DRAW_ITEM_LIST dummy;
|
DS_DRAW_ITEM_LIST dummy( drawSheetIUScale );
|
||||||
dummy.SetPaperFormat( m_edaFrame->GetPageSettings().GetType() );
|
dummy.SetPaperFormat( m_edaFrame->GetPageSettings().GetType() );
|
||||||
dummy.SetTitleBlock( &m_edaFrame->GetTitleBlock() );
|
dummy.SetTitleBlock( &m_edaFrame->GetTitleBlock() );
|
||||||
dummy.SetProject( &m_edaFrame->Prj() );
|
dummy.SetProject( &m_edaFrame->Prj() );
|
||||||
dummy.SetMilsToIUfactor( drawSheetIUScale.IU_PER_MILS );
|
|
||||||
|
|
||||||
for( DS_DATA_ITEM* dataItem : model.GetItems() )
|
for( DS_DATA_ITEM* dataItem : model.GetItems() )
|
||||||
dataItem->SyncDrawItems( &dummy, m_view );
|
dataItem->SyncDrawItems( &dummy, m_view );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2013 CERN
|
* Copyright (C) 2013 CERN
|
||||||
* Copyright (C) 2019-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
* @author Jean-Pierre Charras, jp.charras at wanadoo.fr
|
* @author Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
|
@ -26,7 +26,8 @@
|
||||||
#include <eda_draw_frame.h>
|
#include <eda_draw_frame.h>
|
||||||
#include "pl_editor_layout.h"
|
#include "pl_editor_layout.h"
|
||||||
|
|
||||||
PL_EDITOR_LAYOUT::PL_EDITOR_LAYOUT()
|
PL_EDITOR_LAYOUT::PL_EDITOR_LAYOUT() :
|
||||||
|
m_drawItemList( drawSheetIUScale )
|
||||||
{
|
{
|
||||||
PAGE_INFO pageInfo( wxT( "A4" ) );
|
PAGE_INFO pageInfo( wxT( "A4" ) );
|
||||||
SetPageSettings( pageInfo );
|
SetPageSettings( pageInfo );
|
||||||
|
|
|
@ -504,8 +504,8 @@ void PANEL_PCBNEW_COLOR_SETTINGS::createPreviewItems()
|
||||||
m_preview->UpdateColors();
|
m_preview->UpdateColors();
|
||||||
m_preview->DisplayBoard( m_preview->GetBoard() );
|
m_preview->DisplayBoard( m_preview->GetBoard() );
|
||||||
|
|
||||||
DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( (int) pcbIUScale.IU_PER_MILS, m_page,
|
DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( pcbIUScale, m_page, nullptr,
|
||||||
nullptr, m_titleBlock, nullptr );
|
m_titleBlock, nullptr );
|
||||||
drawingSheet->SetIsFirstPage( true );
|
drawingSheet->SetIsFirstPage( true );
|
||||||
drawingSheet->SetColorLayer( LAYER_DRAWINGSHEET );
|
drawingSheet->SetColorLayer( LAYER_DRAWINGSHEET );
|
||||||
drawingSheet->SetPageBorderColorLayer( LAYER_PAGE_LIMITS );
|
drawingSheet->SetPageBorderColorLayer( LAYER_PAGE_LIMITS );
|
||||||
|
|
|
@ -299,12 +299,11 @@ void DRC_TEST_PROVIDER_MISC::testTextVars()
|
||||||
} );
|
} );
|
||||||
|
|
||||||
DS_PROXY_VIEW_ITEM* drawingSheet = m_drcEngine->GetDrawingSheet();
|
DS_PROXY_VIEW_ITEM* drawingSheet = m_drcEngine->GetDrawingSheet();
|
||||||
DS_DRAW_ITEM_LIST drawItems;
|
DS_DRAW_ITEM_LIST drawItems( pcbIUScale );
|
||||||
|
|
||||||
if( !drawingSheet || m_drcEngine->IsErrorLimitExceeded( DRCE_UNRESOLVED_VARIABLE ) )
|
if( !drawingSheet || m_drcEngine->IsErrorLimitExceeded( DRCE_UNRESOLVED_VARIABLE ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
drawItems.SetMilsToIUfactor( pcbIUScale.IU_PER_MILS );
|
|
||||||
drawItems.SetPageNumber( wxT( "1" ) );
|
drawItems.SetPageNumber( wxT( "1" ) );
|
||||||
drawItems.SetSheetCount( 1 );
|
drawItems.SetSheetCount( 1 );
|
||||||
drawItems.SetFileName( wxT( "dummyFilename" ) );
|
drawItems.SetFileName( wxT( "dummyFilename" ) );
|
||||||
|
|
|
@ -583,7 +583,7 @@ void PCB_EDIT_FRAME::SetPageSettings( const PAGE_INFO& aPageSettings )
|
||||||
PCB_BASE_FRAME::SetPageSettings( aPageSettings );
|
PCB_BASE_FRAME::SetPageSettings( aPageSettings );
|
||||||
|
|
||||||
// Prepare drawing-sheet template
|
// Prepare drawing-sheet template
|
||||||
DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( pcbIUScale.IU_PER_MILS,
|
DS_PROXY_VIEW_ITEM* drawingSheet = new DS_PROXY_VIEW_ITEM( pcbIUScale,
|
||||||
&m_pcb->GetPageSettings(),
|
&m_pcb->GetPageSettings(),
|
||||||
m_pcb->GetProject(),
|
m_pcb->GetProject(),
|
||||||
&m_pcb->GetTitleBlock(),
|
&m_pcb->GetTitleBlock(),
|
||||||
|
|
Loading…
Reference in New Issue