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:
Jeff Young 2023-06-12 22:33:55 +01:00
parent 62f24aca1e
commit 782c73300b
18 changed files with 91 additions and 107 deletions

View File

@ -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;
}
} }

View File

@ -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() )
{ {

View File

@ -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 );

View File

@ -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 );

View File

@ -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;
} }

View File

@ -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

View File

@ -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 );

View File

@ -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" ) );

View File

@ -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() ) );

View File

@ -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() )
{ {

View File

@ -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.

View File

@ -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 */

View File

@ -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;

View File

@ -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 );

View File

@ -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 );

View File

@ -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 );

View File

@ -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" ) );

View File

@ -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(),