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 The 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, see <https://www.gnu.org/licenses/>.
20 */
21
22
23/*
24 * The WS_DATA_ITEM_* classes define the basic shapes of a drawing sheet (frame references
25 * and title block). The list of these items is stored in a DS_DATA_MODEL instance.
26 *
27 * These items cannot be drawn or plotted "as is". They must be converted to WS_DRAW_*
28 * types. When building the draw list:
29 * - the DS_DATA_MODEL is used to create a DS_DRAW_ITEM_LIST
30 * - coordinates are converted to draw/plot coordinates.
31 * - texts are expanded if they contain format symbols.
32 * - items with m_RepeatCount > 1 are created m_RepeatCount times.
33 *
34 * The DS_DATA_MODEL is created only once.
35 * The WS_DRAW_ITEM_*s are created and maintained by the PlEditor, but are created each time
36 * they're needed for drawing by the clients (Eeschema, Pcbnew, etc.)
37 *
38 * The DS_DATA_MODEL instance is created from a S expression which describes the drawing sheet
39 * (can be the default drawing sheet or a custom file). This format is also used for undo/redo
40 * storage (wrapped in a DS_PROXY_UNDO_ITEM).
41 */
42
43#include <kiface_base.h>
44#include <title_block.h>
45#include <common.h>
49
50
51// The layout shape used in the application
52// It is accessible by DS_DATA_MODEL::GetTheInstance()
54static DS_DATA_MODEL* wksAltInstance = nullptr;
55
57 m_WSunits2Iu( 1000.0 ),
58 m_DefaultLineWidth( 0.0 ),
61 m_EditMode( false )
62{
63 m_allowVoidList = false;
65 m_leftMargin = 10.0; // the left page margin in mm
66 m_rightMargin = 10.0; // the right page margin in mm
67 m_topMargin = 10.0; // the top page margin in mm
68 m_bottomMargin = 10.0; // the bottom page margin in mm
69}
70
71
79
80
82{
83 wksAltInstance = aLayout;
84}
85
86
87void DS_DATA_MODEL::SetupDrawEnvironment( const PAGE_INFO& aPageInfo, double aMilsToIU )
88{
89#define MILS_TO_MM ( 25.4 / 1000 )
90
91 m_WSunits2Iu = aMilsToIU / MILS_TO_MM;
92
93 // Left top corner position
94 VECTOR2D lt_corner;
95 lt_corner.x = GetLeftMargin();
96 lt_corner.y = GetTopMargin();
97 m_LT_Corner = lt_corner;
98
99 // Right bottom corner position
100 VECTOR2D rb_corner;
101 rb_corner.x = ( aPageInfo.GetSizeMils().x * MILS_TO_MM ) - GetRightMargin();
102 rb_corner.y = ( aPageInfo.GetSizeMils().y * MILS_TO_MM ) - GetBottomMargin();
103 m_RB_Corner = rb_corner;
104}
105
106
108{
109 for( DS_DATA_ITEM* item : m_list )
110 delete item;
111
112 m_list.clear();
113}
114
115
117{
118 m_list.push_back( aItem );
119}
120
121
123{
124 auto newEnd = std::remove( m_list.begin(), m_list.end(), aItem );
125 m_list.erase( newEnd, m_list.end() );
126}
127
128
130{
131 if( aIdx < m_list.size() )
132 return m_list[aIdx];
133 else
134 return nullptr;
135}
136
Drawing sheet structure type definitions.
Handle the graphic items list to draw/plot the frame and title block.
std::vector< DS_DATA_ITEM * > m_list
double GetRightMargin()
void SetupDrawEnvironment(const PAGE_INFO &aPageInfo, double aMilsToIU)
VECTOR2D m_DefaultTextSize
static DS_DATA_MODEL & GetTheInstance()
Return the instance of DS_DATA_MODEL used in the application.
double GetTopMargin()
double m_DefaultLineWidth
DS_DATA_ITEM * GetItem(unsigned aIdx) const
double GetBottomMargin()
double m_bottomMargin
double GetLeftMargin()
double m_DefaultTextThickness
VECTOR2D m_RB_Corner
void Append(DS_DATA_ITEM *aItem)
void ClearList()
Erase the list of items.
void Remove(DS_DATA_ITEM *aItem)
VECTOR2D m_LT_Corner
static void SetAltInstance(DS_DATA_MODEL *aLayout=nullptr)
Set an alternate instance of DS_DATA_MODEL.
int m_fileFormatVersionAtLoad
Describe the page size and margins of a paper page on which to eventually print or plot.
Definition page_info.h:75
const VECTOR2D & GetSizeMils() const
Definition page_info.h:146
The common library.
#define TB_DEFAULT_TEXTSIZE
#define MILS_TO_MM
static DS_DATA_MODEL * wksAltInstance
static DS_DATA_MODEL wksTheInstance
VECTOR2< double > VECTOR2D
Definition vector2d.h:682