PAGE_INFO: use double instead of int to store the page size.
For historical reasons, they are stored in mils, but using int create rounding issues when converting to/from mils to IU in dialogs. This is a minor but annoying issue. Fixes #16000 https://gitlab.com/kicad/code/kicad/-/issues/16000
This commit is contained in:
parent
19ca7cedaa
commit
d8be69c3c1
|
@ -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) 2021-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2021-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
|
||||||
|
@ -75,7 +75,7 @@ static const wxString pageFmts[] =
|
||||||
};
|
};
|
||||||
|
|
||||||
DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* aParent, double aIuPerMils,
|
DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* aParent, double aIuPerMils,
|
||||||
const VECTOR2I& aMaxUserSizeMils ) :
|
const VECTOR2D& aMaxUserSizeMils ) :
|
||||||
DIALOG_PAGES_SETTINGS_BASE( aParent ),
|
DIALOG_PAGES_SETTINGS_BASE( aParent ),
|
||||||
m_parent( aParent ),
|
m_parent( aParent ),
|
||||||
m_screen( m_parent->GetScreen() ),
|
m_screen( m_parent->GetScreen() ),
|
||||||
|
@ -151,13 +151,13 @@ bool DIALOG_PAGES_SETTINGS::TransferDataToWindow()
|
||||||
|
|
||||||
if( m_customFmt )
|
if( m_customFmt )
|
||||||
{
|
{
|
||||||
m_customSizeX.SetValue( m_pageInfo.GetWidthMils() * m_iuPerMils );
|
m_customSizeX.SetDoubleValue( m_pageInfo.GetWidthMils() * m_iuPerMils );
|
||||||
m_customSizeY.SetValue( m_pageInfo.GetHeightMils() * m_iuPerMils );
|
m_customSizeY.SetDoubleValue( m_pageInfo.GetHeightMils() * m_iuPerMils );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_customSizeX.SetValue( m_pageInfo.GetCustomWidthMils() * m_iuPerMils );
|
m_customSizeX.SetDoubleValue( m_pageInfo.GetCustomWidthMils() * m_iuPerMils );
|
||||||
m_customSizeY.SetValue( m_pageInfo.GetCustomHeightMils() * m_iuPerMils );
|
m_customSizeY.SetDoubleValue( m_pageInfo.GetCustomHeightMils() * m_iuPerMils );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_TextRevision->SetValue( m_tb.GetRevision() );
|
m_TextRevision->SetValue( m_tb.GetRevision() );
|
||||||
|
@ -592,8 +592,8 @@ void DIALOG_PAGES_SETTINGS::UpdateDrawingSheetExample()
|
||||||
{
|
{
|
||||||
int lyWidth, lyHeight;
|
int lyWidth, lyHeight;
|
||||||
|
|
||||||
wxSize clamped_layout_size( Clamp( MIN_PAGE_SIZE_MILS, m_layout_size.x, m_maxPageSizeMils.x ),
|
VECTOR2D clamped_layout_size( Clamp( (double)MIN_PAGE_SIZE_MILS, m_layout_size.x, m_maxPageSizeMils.x ),
|
||||||
Clamp( MIN_PAGE_SIZE_MILS, m_layout_size.y, m_maxPageSizeMils.y ) );
|
Clamp( (double)MIN_PAGE_SIZE_MILS, m_layout_size.y, m_maxPageSizeMils.y ) );
|
||||||
|
|
||||||
double lyRatio = clamped_layout_size.x < clamped_layout_size.y ?
|
double lyRatio = clamped_layout_size.x < clamped_layout_size.y ?
|
||||||
(double) clamped_layout_size.y / clamped_layout_size.x :
|
(double) clamped_layout_size.y / clamped_layout_size.x :
|
||||||
|
@ -744,8 +744,8 @@ void DIALOG_PAGES_SETTINGS::GetPageLayoutInfoFromDialog()
|
||||||
|
|
||||||
wxASSERT( i != arrayDim(papers) ); // dialog UI match the above list?
|
wxASSERT( i != arrayDim(papers) ); // dialog UI match the above list?
|
||||||
|
|
||||||
VECTOR2I sz = pageInfo.GetSizeMils();
|
VECTOR2D sz = pageInfo.GetSizeMils();
|
||||||
m_layout_size = VECTOR2I( sz.x, sz.y );
|
m_layout_size = VECTOR2D( sz.x, sz.y );
|
||||||
|
|
||||||
// swap sizes to match orientation
|
// swap sizes to match orientation
|
||||||
bool isPortrait = (bool) m_orientationComboBox->GetSelection();
|
bool isPortrait = (bool) m_orientationComboBox->GetSelection();
|
||||||
|
@ -761,13 +761,13 @@ void DIALOG_PAGES_SETTINGS::GetPageLayoutInfoFromDialog()
|
||||||
|
|
||||||
void DIALOG_PAGES_SETTINGS::GetCustomSizeMilsFromDialog()
|
void DIALOG_PAGES_SETTINGS::GetCustomSizeMilsFromDialog()
|
||||||
{
|
{
|
||||||
double customSizeX = (double) m_customSizeX.GetValue() / m_iuPerMils;
|
double customSizeX = (double) m_customSizeX.GetDoubleValue() / m_iuPerMils;
|
||||||
double customSizeY = (double) m_customSizeY.GetValue() / m_iuPerMils;
|
double customSizeY = (double) m_customSizeY.GetDoubleValue() / m_iuPerMils;
|
||||||
|
|
||||||
// Prepare to painless double -> int conversion.
|
// Ensure layout size can be converted to int coordinates later
|
||||||
customSizeX = Clamp( double( INT_MIN ), customSizeX, double( INT_MAX ) );
|
customSizeX = Clamp( double( INT_MIN ), customSizeX, double( INT_MAX ) );
|
||||||
customSizeY = Clamp( double( INT_MIN ), customSizeY, double( INT_MAX ) );
|
customSizeY = Clamp( double( INT_MIN ), customSizeY, double( INT_MAX ) );
|
||||||
m_layout_size = VECTOR2I( KiROUND( customSizeX ), KiROUND( customSizeY ) );
|
m_layout_size = VECTOR2D( customSizeX, customSizeY );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ const wxChar PAGE_INFO::Custom[] = wxT( "User" );
|
||||||
// also see: wx/defs.h
|
// also see: wx/defs.h
|
||||||
|
|
||||||
// local readability macro for millimeter wxSize
|
// local readability macro for millimeter wxSize
|
||||||
#define MMsize( x, y ) VECTOR2I( EDA_UNIT_UTILS::Mm2mils( x ), EDA_UNIT_UTILS::Mm2mils( y ) )
|
#define MMsize( x, y ) VECTOR2D( EDA_UNIT_UTILS::Mm2mils( x ), EDA_UNIT_UTILS::Mm2mils( y ) )
|
||||||
|
|
||||||
// All MUST be defined as landscape.
|
// All MUST be defined as landscape.
|
||||||
const PAGE_INFO PAGE_INFO::pageA5( MMsize( 210, 148 ), wxT( "A5" ), wxPAPER_A5 );
|
const PAGE_INFO PAGE_INFO::pageA5( MMsize( 210, 148 ), wxT( "A5" ), wxPAPER_A5 );
|
||||||
|
@ -75,24 +75,24 @@ const PAGE_INFO PAGE_INFO::pageA2( MMsize( 594, 420 ), wxT( "A2" ),
|
||||||
const PAGE_INFO PAGE_INFO::pageA1( MMsize( 841, 594 ), wxT( "A1" ), PAPER_A1 );
|
const PAGE_INFO PAGE_INFO::pageA1( MMsize( 841, 594 ), wxT( "A1" ), PAPER_A1 );
|
||||||
const PAGE_INFO PAGE_INFO::pageA0( MMsize( 1189, 841 ), wxT( "A0" ), PAPER_A0 );
|
const PAGE_INFO PAGE_INFO::pageA0( MMsize( 1189, 841 ), wxT( "A0" ), PAPER_A0 );
|
||||||
|
|
||||||
const PAGE_INFO PAGE_INFO::pageA( VECTOR2I( 11000, 8500 ), wxT( "A" ), wxPAPER_LETTER );
|
const PAGE_INFO PAGE_INFO::pageA( VECTOR2D( 11000, 8500 ), wxT( "A" ), wxPAPER_LETTER );
|
||||||
const PAGE_INFO PAGE_INFO::pageB( VECTOR2I( 17000, 11000 ), wxT( "B" ), wxPAPER_TABLOID );
|
const PAGE_INFO PAGE_INFO::pageB( VECTOR2D( 17000, 11000 ), wxT( "B" ), wxPAPER_TABLOID );
|
||||||
const PAGE_INFO PAGE_INFO::pageC( VECTOR2I( 22000, 17000 ), wxT( "C" ), wxPAPER_CSHEET );
|
const PAGE_INFO PAGE_INFO::pageC( VECTOR2D( 22000, 17000 ), wxT( "C" ), wxPAPER_CSHEET );
|
||||||
const PAGE_INFO PAGE_INFO::pageD( VECTOR2I( 34000, 22000 ), wxT( "D" ), wxPAPER_DSHEET );
|
const PAGE_INFO PAGE_INFO::pageD( VECTOR2D( 34000, 22000 ), wxT( "D" ), wxPAPER_DSHEET );
|
||||||
const PAGE_INFO PAGE_INFO::pageE( VECTOR2I( 44000, 34000 ), wxT( "E" ), wxPAPER_ESHEET );
|
const PAGE_INFO PAGE_INFO::pageE( VECTOR2D( 44000, 34000 ), wxT( "E" ), wxPAPER_ESHEET );
|
||||||
|
|
||||||
const PAGE_INFO PAGE_INFO::pageGERBER( VECTOR2I( 32000, 32000 ), wxT( "GERBER" ), wxPAPER_NONE );
|
const PAGE_INFO PAGE_INFO::pageGERBER( VECTOR2D( 32000, 32000 ), wxT( "GERBER" ), wxPAPER_NONE );
|
||||||
const PAGE_INFO PAGE_INFO::pageUser( VECTOR2I( 17000, 11000 ), Custom, wxPAPER_NONE );
|
const PAGE_INFO PAGE_INFO::pageUser( VECTOR2D( 17000, 11000 ), Custom, wxPAPER_NONE );
|
||||||
|
|
||||||
// US paper sizes
|
// US paper sizes
|
||||||
const PAGE_INFO PAGE_INFO::pageUSLetter( VECTOR2I( 11000, 8500 ), wxT( "USLetter" ), wxPAPER_LETTER );
|
const PAGE_INFO PAGE_INFO::pageUSLetter( VECTOR2D( 11000, 8500 ), wxT( "USLetter" ), wxPAPER_LETTER );
|
||||||
const PAGE_INFO PAGE_INFO::pageUSLegal( VECTOR2I( 14000, 8500 ), wxT( "USLegal" ), wxPAPER_LEGAL );
|
const PAGE_INFO PAGE_INFO::pageUSLegal( VECTOR2D( 14000, 8500 ), wxT( "USLegal" ), wxPAPER_LEGAL );
|
||||||
const PAGE_INFO PAGE_INFO::pageUSLedger( VECTOR2I( 17000, 11000 ), wxT( "USLedger" ),
|
const PAGE_INFO PAGE_INFO::pageUSLedger( VECTOR2D( 17000, 11000 ), wxT( "USLedger" ),
|
||||||
wxPAPER_TABLOID );
|
wxPAPER_TABLOID );
|
||||||
|
|
||||||
// Custom paper size for next instantiation of type "User"
|
// Custom paper size for next instantiation of type "User"
|
||||||
int PAGE_INFO::s_user_width = 17000;
|
double PAGE_INFO::s_user_width = 17000;
|
||||||
int PAGE_INFO::s_user_height = 11000;
|
double PAGE_INFO::s_user_height = 11000;
|
||||||
|
|
||||||
|
|
||||||
inline void PAGE_INFO::updatePortrait()
|
inline void PAGE_INFO::updatePortrait()
|
||||||
|
@ -102,7 +102,7 @@ inline void PAGE_INFO::updatePortrait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PAGE_INFO::PAGE_INFO( const VECTOR2I& aSizeMils, const wxString& aType, wxPaperSize aPaperId ) :
|
PAGE_INFO::PAGE_INFO( const VECTOR2D& aSizeMils, const wxString& aType, wxPaperSize aPaperId ) :
|
||||||
m_type( aType ), m_size( aSizeMils ), m_paper_id( aPaperId )
|
m_type( aType ), m_size( aSizeMils ), m_paper_id( aPaperId )
|
||||||
{
|
{
|
||||||
updatePortrait();
|
updatePortrait();
|
||||||
|
@ -200,7 +200,7 @@ void PAGE_INFO::SetPortrait( bool aIsPortrait )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int clampWidth( int aWidthInMils )
|
static double clampWidth( double aWidthInMils )
|
||||||
{
|
{
|
||||||
/* was giving EESCHEMA single component SVG plotter grief
|
/* was giving EESCHEMA single component SVG plotter grief
|
||||||
However a minimal test is made to avoid values that crashes Kicad
|
However a minimal test is made to avoid values that crashes Kicad
|
||||||
|
@ -215,7 +215,7 @@ static int clampWidth( int aWidthInMils )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int clampHeight( int aHeightInMils )
|
static double clampHeight( double aHeightInMils )
|
||||||
{
|
{
|
||||||
/* was giving EESCHEMA single component SVG plotter grief
|
/* was giving EESCHEMA single component SVG plotter grief
|
||||||
clamping is best done at the UI, i.e. dialog, levels
|
clamping is best done at the UI, i.e. dialog, levels
|
||||||
|
@ -225,25 +225,26 @@ static int clampHeight( int aHeightInMils )
|
||||||
else if( aHeightInMils > 44000 )
|
else if( aHeightInMils > 44000 )
|
||||||
aHeightInMils = 44000;
|
aHeightInMils = 44000;
|
||||||
*/
|
*/
|
||||||
if( aHeightInMils < 10 )
|
if( aHeightInMils < 10.0 )
|
||||||
aHeightInMils = 10;
|
aHeightInMils = 10.0;
|
||||||
|
|
||||||
return aHeightInMils;
|
return aHeightInMils;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PAGE_INFO::SetCustomWidthMils( int aWidthInMils )
|
void PAGE_INFO::SetCustomWidthMils( double aWidthInMils )
|
||||||
{
|
{
|
||||||
s_user_width = clampWidth( aWidthInMils );
|
s_user_width = clampWidth( aWidthInMils );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PAGE_INFO::SetCustomHeightMils( int aHeightInMils )
|
void PAGE_INFO::SetCustomHeightMils( double aHeightInMils )
|
||||||
{
|
{
|
||||||
s_user_height = clampHeight( aHeightInMils );
|
s_user_height = clampHeight( aHeightInMils );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PAGE_INFO::SetWidthMils( int aWidthInMils )
|
void PAGE_INFO::SetWidthMils( double aWidthInMils )
|
||||||
{
|
{
|
||||||
if( m_size.x != aWidthInMils )
|
if( m_size.x != aWidthInMils )
|
||||||
{
|
{
|
||||||
|
@ -257,7 +258,7 @@ void PAGE_INFO::SetWidthMils( int aWidthInMils )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PAGE_INFO::SetHeightMils( int aHeightInMils )
|
void PAGE_INFO::SetHeightMils( double aHeightInMils )
|
||||||
{
|
{
|
||||||
if( m_size.y != aHeightInMils )
|
if( m_size.y != aHeightInMils )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1838,23 +1838,23 @@ void SCH_SEXPR_PARSER::parsePAGE_INFO( PAGE_INFO& aPageInfo )
|
||||||
|
|
||||||
if( pageType == PAGE_INFO::Custom )
|
if( pageType == PAGE_INFO::Custom )
|
||||||
{
|
{
|
||||||
int width = EDA_UNIT_UTILS::Mm2mils( parseDouble( "width" ) ); // width stored in mm so we convert to mils
|
int width = parseDouble( "width" );
|
||||||
|
|
||||||
// Perform some controls to avoid crashes if the size is edited by hands
|
// Perform some controls to avoid crashes if the size is edited by hands
|
||||||
if( width < MIN_PAGE_SIZE_MILS )
|
if( width < MIN_PAGE_SIZE_MM )
|
||||||
width = MIN_PAGE_SIZE_MILS;
|
width = MIN_PAGE_SIZE_MM;
|
||||||
else if( width > MAX_PAGE_SIZE_EESCHEMA_MILS )
|
else if( width > MAX_PAGE_SIZE_EESCHEMA_MM )
|
||||||
width = MAX_PAGE_SIZE_EESCHEMA_MILS;
|
width = MAX_PAGE_SIZE_EESCHEMA_MM;
|
||||||
|
|
||||||
int height = EDA_UNIT_UTILS::Mm2mils( parseDouble( "height" ) ); // height stored in mm so we convert to mils
|
int height = parseDouble( "height" );
|
||||||
|
|
||||||
if( height < MIN_PAGE_SIZE_MILS )
|
if( height < MIN_PAGE_SIZE_MM )
|
||||||
height = MIN_PAGE_SIZE_MILS;
|
height = MIN_PAGE_SIZE_MM;
|
||||||
else if( height > MAX_PAGE_SIZE_EESCHEMA_MILS )
|
else if( height > MAX_PAGE_SIZE_EESCHEMA_MM )
|
||||||
height = MAX_PAGE_SIZE_EESCHEMA_MILS;
|
height = MAX_PAGE_SIZE_EESCHEMA_MM;
|
||||||
|
|
||||||
aPageInfo.SetWidthMils( width );
|
aPageInfo.SetWidthMM( width );
|
||||||
aPageInfo.SetHeightMils( height );
|
aPageInfo.SetHeightMM( height );
|
||||||
}
|
}
|
||||||
|
|
||||||
token = NextTok();
|
token = NextTok();
|
||||||
|
|
|
@ -1505,8 +1505,8 @@ void SCH_LEGACY_PLUGIN::Format( SCH_SHEET* aSheet )
|
||||||
const PAGE_INFO& page = screen->GetPageSettings();
|
const PAGE_INFO& page = screen->GetPageSettings();
|
||||||
|
|
||||||
m_out->Print( 0, "$Descr %s %d %d%s\n", TO_UTF8( page.GetType() ),
|
m_out->Print( 0, "$Descr %s %d %d%s\n", TO_UTF8( page.GetType() ),
|
||||||
page.GetWidthMils(),
|
(int)page.GetWidthMils(),
|
||||||
page.GetHeightMils(),
|
(int)page.GetHeightMils(),
|
||||||
!page.IsCustom() && page.IsPortrait() ? " portrait" : "" );
|
!page.IsCustom() && page.IsPortrait() ? " portrait" : "" );
|
||||||
m_out->Print( 0, "encoding utf-8\n" );
|
m_out->Print( 0, "encoding utf-8\n" );
|
||||||
m_out->Print( 0, "Sheet %d %d\n", screen->GetVirtualPageNumber(), screen->GetPageCount() );
|
m_out->Print( 0, "Sheet %d %d\n", screen->GetVirtualPageNumber(), screen->GetPageCount() );
|
||||||
|
|
|
@ -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) 2020-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2020-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
|
||||||
|
@ -36,7 +36,7 @@ class DIALOG_PAGES_SETTINGS: public DIALOG_PAGES_SETTINGS_BASE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* aParent, double aIuPerMils,
|
DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* aParent, double aIuPerMils,
|
||||||
const VECTOR2I& aMaxUserSizeMils );
|
const VECTOR2D& aMaxUserSizeMils );
|
||||||
virtual ~DIALOG_PAGES_SETTINGS();
|
virtual ~DIALOG_PAGES_SETTINGS();
|
||||||
|
|
||||||
const wxString GetWksFileName()
|
const wxString GetWksFileName()
|
||||||
|
@ -121,8 +121,8 @@ protected:
|
||||||
bool m_initialized;
|
bool m_initialized;
|
||||||
bool m_localPrjConfigChanged; /// the page layuout filename was changed
|
bool m_localPrjConfigChanged; /// the page layuout filename was changed
|
||||||
wxBitmap* m_pageBitmap; /// Temporary bitmap for the drawing sheet example.
|
wxBitmap* m_pageBitmap; /// Temporary bitmap for the drawing sheet example.
|
||||||
VECTOR2I m_layout_size; /// Logical drawing sheet size.
|
VECTOR2D m_layout_size; /// Logical drawing sheet size.
|
||||||
VECTOR2I m_maxPageSizeMils; /// The max page size allowed by the caller frame
|
VECTOR2D m_maxPageSizeMils; /// The max page size allowed by the caller frame
|
||||||
PAGE_INFO m_pageInfo; /// Temporary page info.
|
PAGE_INFO m_pageInfo; /// Temporary page info.
|
||||||
bool m_customFmt; /// true if the page selection is custom
|
bool m_customFmt; /// true if the page selection is custom
|
||||||
TITLE_BLOCK m_tb; /// Temporary title block (basic inscriptions).
|
TITLE_BLOCK m_tb; /// Temporary title block (basic inscriptions).
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
* Copyright (C) 2007-2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
|
||||||
* Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@gmail.com>
|
* Copyright (C) 2008-2013 Wayne Stambaugh <stambaughw@gmail.com>
|
||||||
* Copyright (C) 2007-2022 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 2007-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
|
||||||
|
@ -38,6 +38,11 @@
|
||||||
#define MAX_PAGE_SIZE_PCBNEW_MILS 48000
|
#define MAX_PAGE_SIZE_PCBNEW_MILS 48000
|
||||||
#define MAX_PAGE_SIZE_EESCHEMA_MILS 120000
|
#define MAX_PAGE_SIZE_EESCHEMA_MILS 120000
|
||||||
|
|
||||||
|
/// Min and max page sizes for clamping, in mm.
|
||||||
|
#define MIN_PAGE_SIZE_MM 25.4
|
||||||
|
#define MAX_PAGE_SIZE_PCBNEW_MM 48000*.0254
|
||||||
|
#define MAX_PAGE_SIZE_EESCHEMA_MM 120000*.0254
|
||||||
|
|
||||||
class OUTPUTFORMATTER;
|
class OUTPUTFORMATTER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -125,13 +130,17 @@ public:
|
||||||
*/
|
*/
|
||||||
wxPaperSize GetPaperId() const { return m_paper_id; }
|
wxPaperSize GetPaperId() const { return m_paper_id; }
|
||||||
|
|
||||||
void SetWidthMils( int aWidthInMils );
|
void SetWidthMM( double aWidthInMM ) { SetWidthMils( aWidthInMM * 1000 / 25.4 ); }
|
||||||
int GetWidthMils() const { return m_size.x; }
|
void SetWidthMils( double aWidthInMils );
|
||||||
|
double GetWidthMils() const { return m_size.x; }
|
||||||
|
double GetWidthMM() const { return m_size.x * 25.4 / 1000; }
|
||||||
|
|
||||||
void SetHeightMils( int aHeightInMils );
|
void SetHeightMM( double aHeightInMM ) { SetHeightMils( aHeightInMM * 1000 / 25.4 ); }
|
||||||
int GetHeightMils() const { return m_size.y; }
|
void SetHeightMils( double aHeightInMils );
|
||||||
|
double GetHeightMils() const { return m_size.y; }
|
||||||
|
double GetHeightMM() const { return m_size.y * 25.4 / 1000; }
|
||||||
|
|
||||||
const VECTOR2I& GetSizeMils() const { return m_size; }
|
const VECTOR2D& GetSizeMils() const { return m_size; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the page width in IU
|
* Gets the page width in IU
|
||||||
|
@ -158,32 +167,32 @@ public:
|
||||||
* variable being passed. Note, this constexpr variable changes depending
|
* variable being passed. Note, this constexpr variable changes depending
|
||||||
* on application, hence why it is passed.
|
* on application, hence why it is passed.
|
||||||
*/
|
*/
|
||||||
const VECTOR2I GetSizeIU( double aIUScale ) const
|
const VECTOR2D GetSizeIU( double aIUScale ) const
|
||||||
{
|
{
|
||||||
return VECTOR2I( GetWidthIU( aIUScale ), GetHeightIU( aIUScale ) );
|
return VECTOR2D( GetWidthIU( aIUScale ), GetHeightIU( aIUScale ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the width of Custom page in mils for any custom page constructed or made via
|
* Set the width of Custom page in mils for any custom page constructed or made via
|
||||||
* SetType() after making this call.
|
* SetType() after making this call.
|
||||||
*/
|
*/
|
||||||
static void SetCustomWidthMils( int aWidthInMils );
|
static void SetCustomWidthMils( double aWidthInMils );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the height of Custom page in mils for any custom page constructed or made via
|
* Set the height of Custom page in mils for any custom page constructed or made via
|
||||||
* SetType() after making this call.
|
* SetType() after making this call.
|
||||||
*/
|
*/
|
||||||
static void SetCustomHeightMils( int aHeightInMils );
|
static void SetCustomHeightMils( double aHeightInMils );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return custom paper width in mils.
|
* @return custom paper width in mils.
|
||||||
*/
|
*/
|
||||||
static int GetCustomWidthMils() { return s_user_width; }
|
static double GetCustomWidthMils() { return s_user_width; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return custom paper height in mils.
|
* @return custom paper height in mils.
|
||||||
*/
|
*/
|
||||||
static int GetCustomHeightMils() { return s_user_height; }
|
static double GetCustomHeightMils() { return s_user_height; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Output the page class to \a aFormatter in s-expression form.
|
* Output the page class to \a aFormatter in s-expression form.
|
||||||
|
@ -197,7 +206,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// only the class implementation(s) may use this constructor
|
// only the class implementation(s) may use this constructor
|
||||||
PAGE_INFO( const VECTOR2I& aSizeMils, const wxString& aName, wxPaperSize aPaperId );
|
PAGE_INFO( const VECTOR2D& aSizeMils, const wxString& aName, wxPaperSize aPaperId );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// standard pre-defined sizes
|
// standard pre-defined sizes
|
||||||
|
@ -223,14 +232,14 @@ private:
|
||||||
// all dimensions here are in mils
|
// all dimensions here are in mils
|
||||||
|
|
||||||
wxString m_type; ///< paper type: A4, A3, etc.
|
wxString m_type; ///< paper type: A4, A3, etc.
|
||||||
VECTOR2I m_size; ///< mils
|
VECTOR2D m_size; ///< mils
|
||||||
|
|
||||||
bool m_portrait; ///< true if portrait, false if landscape
|
bool m_portrait; ///< true if portrait, false if landscape
|
||||||
|
|
||||||
wxPaperSize m_paper_id; ///< wx' style paper id.
|
wxPaperSize m_paper_id; ///< wx' style paper id.
|
||||||
|
|
||||||
static int s_user_height;
|
static double s_user_height;
|
||||||
static int s_user_width;
|
static double s_user_width;
|
||||||
|
|
||||||
void updatePortrait();
|
void updatePortrait();
|
||||||
|
|
||||||
|
|
|
@ -1283,23 +1283,21 @@ void PCB_PARSER::parsePAGE_INFO()
|
||||||
{
|
{
|
||||||
double width = parseDouble( "width" ); // width in mm
|
double width = parseDouble( "width" ); // width in mm
|
||||||
|
|
||||||
const double Mils2mm = 0.0254;
|
|
||||||
|
|
||||||
// Perform some controls to avoid crashes if the size is edited by hands
|
// Perform some controls to avoid crashes if the size is edited by hands
|
||||||
if( width < MIN_PAGE_SIZE_MILS*Mils2mm )
|
if( width < MIN_PAGE_SIZE_MM )
|
||||||
width = MIN_PAGE_SIZE_MILS*Mils2mm;
|
width = MIN_PAGE_SIZE_MM;
|
||||||
else if( width > MAX_PAGE_SIZE_PCBNEW_MILS*Mils2mm )
|
else if( width > MAX_PAGE_SIZE_PCBNEW_MM )
|
||||||
width = MAX_PAGE_SIZE_PCBNEW_MILS*Mils2mm;
|
width = MAX_PAGE_SIZE_PCBNEW_MM;
|
||||||
|
|
||||||
double height = parseDouble( "height" ); // height in mm
|
double height = parseDouble( "height" ); // height in mm
|
||||||
|
|
||||||
if( height < MIN_PAGE_SIZE_MILS*Mils2mm )
|
if( height < MIN_PAGE_SIZE_MM )
|
||||||
height = MIN_PAGE_SIZE_MILS*Mils2mm;
|
height = MIN_PAGE_SIZE_MM;
|
||||||
else if( height > MAX_PAGE_SIZE_PCBNEW_MILS*Mils2mm )
|
else if( height > MAX_PAGE_SIZE_PCBNEW_MM )
|
||||||
height = MAX_PAGE_SIZE_PCBNEW_MILS*Mils2mm;
|
height = MAX_PAGE_SIZE_PCBNEW_MM;
|
||||||
|
|
||||||
pageInfo.SetWidthMils( EDA_UNIT_UTILS::Mm2mils( width ) );
|
pageInfo.SetWidthMM( width );
|
||||||
pageInfo.SetHeightMils( EDA_UNIT_UTILS::Mm2mils( height ) );
|
pageInfo.SetHeightMM( height );
|
||||||
}
|
}
|
||||||
|
|
||||||
token = NextTok();
|
token = NextTok();
|
||||||
|
|
Loading…
Reference in New Issue