KiCad PCB EDA Suite
Loading...
Searching...
No Matches
ds_data_model.cpp
Go to the documentation of this file.
1
/*
2
* This program source code file is part of KiCad, a free EDA CAD application.
3
*
4
* Copyright (C) 1992-2018 Jean-Pierre Charras <jp.charras at wanadoo.fr>.
5
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
6
*
7
*
8
* This program is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU General Public License
10
* as published by the Free Software Foundation; either version 2
11
* of the License, or (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, you may find one here:
20
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21
* or you may search the http://www.gnu.org website for the version 2 license,
22
* or you may write to the Free Software Foundation, Inc.,
23
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24
*/
25
26
27
/*
28
* The WS_DATA_ITEM_* classes define the basic shapes of a drawing sheet (frame references
29
* and title block). The list of these items is stored in a DS_DATA_MODEL instance.
30
*
31
* These items cannot be drawn or plotted "as is". They must be converted to WS_DRAW_*
32
* types. When building the draw list:
33
* - the DS_DATA_MODEL is used to create a DS_DRAW_ITEM_LIST
34
* - coordinates are converted to draw/plot coordinates.
35
* - texts are expanded if they contain format symbols.
36
* - items with m_RepeatCount > 1 are created m_RepeatCount times.
37
*
38
* The DS_DATA_MODEL is created only once.
39
* The WS_DRAW_ITEM_*s are created and maintained by the PlEditor, but are created each time
40
* they're needed for drawing by the clients (Eeschema, Pcbnew, etc.)
41
*
42
* The DS_DATA_MODEL instance is created from a S expression which describes the drawing sheet
43
* (can be the default drawing sheet or a custom file). This format is also used for undo/redo
44
* storage (wrapped in a DS_PROXY_UNDO_ITEM).
45
*/
46
47
#include <
kiface_base.h
>
48
#include <
title_block.h
>
49
#include <
common.h
>
50
#include <
drawing_sheet/ds_data_item.h
>
51
#include <
drawing_sheet/ds_data_model.h
>
52
#include <
drawing_sheet/ds_painter.h
>
53
54
55
// The layout shape used in the application
56
// It is accessible by DS_DATA_MODEL::GetTheInstance()
57
static
DS_DATA_MODEL
wksTheInstance
;
58
static
DS_DATA_MODEL
*
wksAltInstance
=
nullptr
;
59
60
DS_DATA_MODEL::DS_DATA_MODEL
() :
61
m_WSunits2Iu( 1000.0 ),
62
m_DefaultLineWidth( 0.0 ),
63
m_DefaultTextSize(
TB_DEFAULT_TEXTSIZE
,
TB_DEFAULT_TEXTSIZE
),
64
m_DefaultTextThickness( 0.0 ),
65
m_EditMode( false )
66
{
67
m_allowVoidList
=
false
;
68
m_fileFormatVersionAtLoad
= 0;
69
m_leftMargin
= 10.0;
// the left page margin in mm
70
m_rightMargin
= 10.0;
// the right page margin in mm
71
m_topMargin
= 10.0;
// the top page margin in mm
72
m_bottomMargin
= 10.0;
// the bottom page margin in mm
73
}
74
75
/*
76
* static function: returns the instance of DS_DATA_MODEL used in the application
77
*/
78
DS_DATA_MODEL
&
DS_DATA_MODEL::GetTheInstance
()
79
{
80
if
(
wksAltInstance
)
81
return
*
wksAltInstance
;
82
else
83
return
wksTheInstance
;
84
}
85
92
void
DS_DATA_MODEL::SetAltInstance
(
DS_DATA_MODEL
* aLayout )
93
{
94
wksAltInstance
= aLayout;
95
}
96
97
98
void
DS_DATA_MODEL::SetupDrawEnvironment
(
const
PAGE_INFO
& aPageInfo,
double
aMilsToIU )
99
{
100
#define MILS_TO_MM (25.4/1000)
101
102
m_WSunits2Iu
= aMilsToIU /
MILS_TO_MM
;
103
104
// Left top corner position
105
VECTOR2D
lt_corner;
106
lt_corner.
x
=
GetLeftMargin
();
107
lt_corner.
y
=
GetTopMargin
();
108
m_LT_Corner
= lt_corner;
109
110
// Right bottom corner position
111
VECTOR2D
rb_corner;
112
rb_corner.
x
= ( aPageInfo.
GetSizeMils
().
x
*
MILS_TO_MM
) -
GetRightMargin
();
113
rb_corner.
y
= ( aPageInfo.
GetSizeMils
().
y
*
MILS_TO_MM
) -
GetBottomMargin
();
114
m_RB_Corner
= rb_corner;
115
}
116
117
118
void
DS_DATA_MODEL::ClearList
()
119
{
120
for
(
DS_DATA_ITEM
* item :
m_list
)
121
delete
item;
122
123
m_list
.clear();
124
}
125
126
127
void
DS_DATA_MODEL::Append
(
DS_DATA_ITEM
* aItem )
128
{
129
m_list
.push_back( aItem );
130
}
131
132
133
void
DS_DATA_MODEL::Remove
(
DS_DATA_ITEM
* aItem )
134
{
135
auto
newEnd = std::remove(
m_list
.begin(),
m_list
.end(), aItem );
136
m_list
.erase( newEnd,
m_list
.end() );
137
}
138
139
140
DS_DATA_ITEM
*
DS_DATA_MODEL::GetItem
(
unsigned
aIdx )
const
141
{
142
if
( aIdx <
m_list
.size() )
143
return
m_list
[aIdx];
144
else
145
return
nullptr
;
146
}
147
DS_DATA_ITEM
Drawing sheet structure type definitions.
Definition:
ds_data_item.h:96
DS_DATA_MODEL
Handle the graphic items list to draw/plot the frame and title block.
Definition:
ds_data_model.h:39
DS_DATA_MODEL::m_list
std::vector< DS_DATA_ITEM * > m_list
Definition:
ds_data_model.h:187
DS_DATA_MODEL::GetRightMargin
double GetRightMargin()
Definition:
ds_data_model.h:66
DS_DATA_MODEL::SetupDrawEnvironment
void SetupDrawEnvironment(const PAGE_INFO &aPageInfo, double aMilsToIU)
Definition:
ds_data_model.cpp:98
DS_DATA_MODEL::GetTheInstance
static DS_DATA_MODEL & GetTheInstance()
static function: returns the instance of DS_DATA_MODEL used in the application
Definition:
ds_data_model.cpp:78
DS_DATA_MODEL::GetTopMargin
double GetTopMargin()
Definition:
ds_data_model.h:69
DS_DATA_MODEL::m_rightMargin
double m_rightMargin
Definition:
ds_data_model.h:193
DS_DATA_MODEL::GetItem
DS_DATA_ITEM * GetItem(unsigned aIdx) const
Definition:
ds_data_model.cpp:140
DS_DATA_MODEL::GetBottomMargin
double GetBottomMargin()
Definition:
ds_data_model.h:72
DS_DATA_MODEL::DS_DATA_MODEL
DS_DATA_MODEL()
Definition:
ds_data_model.cpp:60
DS_DATA_MODEL::m_bottomMargin
double m_bottomMargin
Definition:
ds_data_model.h:195
DS_DATA_MODEL::GetLeftMargin
double GetLeftMargin()
Definition:
ds_data_model.h:63
DS_DATA_MODEL::m_RB_Corner
VECTOR2D m_RB_Corner
Definition:
ds_data_model.h:175
DS_DATA_MODEL::m_WSunits2Iu
double m_WSunits2Iu
Definition:
ds_data_model.h:173
DS_DATA_MODEL::Append
void Append(DS_DATA_ITEM *aItem)
Definition:
ds_data_model.cpp:127
DS_DATA_MODEL::m_allowVoidList
bool m_allowVoidList
Definition:
ds_data_model.h:188
DS_DATA_MODEL::ClearList
void ClearList()
Erase the list of items.
Definition:
ds_data_model.cpp:118
DS_DATA_MODEL::Remove
void Remove(DS_DATA_ITEM *aItem)
Definition:
ds_data_model.cpp:133
DS_DATA_MODEL::m_LT_Corner
VECTOR2D m_LT_Corner
Definition:
ds_data_model.h:176
DS_DATA_MODEL::m_leftMargin
double m_leftMargin
Definition:
ds_data_model.h:192
DS_DATA_MODEL::m_topMargin
double m_topMargin
Definition:
ds_data_model.h:194
DS_DATA_MODEL::SetAltInstance
static void SetAltInstance(DS_DATA_MODEL *aLayout=nullptr)
Set an alternate instance of DS_DATA_MODEL.
Definition:
ds_data_model.cpp:92
DS_DATA_MODEL::m_fileFormatVersionAtLoad
int m_fileFormatVersionAtLoad
Definition:
ds_data_model.h:191
PAGE_INFO
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition:
page_info.h:59
PAGE_INFO::GetSizeMils
const VECTOR2D & GetSizeMils() const
Definition:
page_info.h:144
VECTOR2< double >
VECTOR2::x
T x
Definition:
vector2d.h:79
VECTOR2::y
T y
Definition:
vector2d.h:79
common.h
The common library.
ds_data_item.h
TB_DEFAULT_TEXTSIZE
#define TB_DEFAULT_TEXTSIZE
Definition:
ds_data_item.h:35
MILS_TO_MM
#define MILS_TO_MM
wksAltInstance
static DS_DATA_MODEL * wksAltInstance
Definition:
ds_data_model.cpp:58
wksTheInstance
static DS_DATA_MODEL wksTheInstance
Definition:
ds_data_model.cpp:57
ds_data_model.h
ds_painter.h
kiface_base.h
title_block.h
src
common
drawing_sheet
ds_data_model.cpp
Generated on Wed Oct 30 2024 00:04:45 for KiCad PCB EDA Suite by
1.9.6