Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
7acc3e67
Commit
7acc3e67
authored
Oct 18, 2013
by
jean-pierre charras
Browse files
Options
Browse Files
Download
Plain Diff
page layout editor: now one can add a bitmap to the page layout
parents
612ba67c
7622d6c9
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1 addition
and
859 deletions
+1
-859
3d_canvas.cpp
3d-viewer/3d_canvas.cpp
+1
-1
page_layout_default_description.cpp
common/page_layout_default_description.cpp
+0
-198
page_layout_reader.cpp
common/page_layout_reader.cpp
+0
-623
page_layout_reader.keywords
common/page_layout_reader.keywords
+0
-37
No files found.
3d-viewer/3d_canvas.cpp
View file @
7acc3e67
...
@@ -492,7 +492,7 @@ void EDA_3D_CANVAS::InitGL()
...
@@ -492,7 +492,7 @@ void EDA_3D_CANVAS::InitGL()
glEnable
(
GL_DEPTH_TEST
);
// Enable z-buferring
glEnable
(
GL_DEPTH_TEST
);
// Enable z-buferring
glEnable
(
GL_ALPHA_TEST
);
glEnable
(
GL_ALPHA_TEST
);
glEnable
(
GL_LINE_SMOOTH
);
glEnable
(
GL_LINE_SMOOTH
);
glEnable
(
GL_POLYGON_SMOOTH
);
// glEnable(GL_POLYGON_SMOOTH); // creates issues with some graphic cards
glShadeModel
(
GL_SMOOTH
);
glShadeModel
(
GL_SMOOTH
);
glEnable
(
GL_COLOR_MATERIAL
);
glEnable
(
GL_COLOR_MATERIAL
);
glColorMaterial
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
);
glColorMaterial
(
GL_FRONT_AND_BACK
,
GL_AMBIENT_AND_DIFFUSE
);
...
...
common/page_layout_default_description.cpp
deleted
100644 → 0
View file @
612ba67c
/**
* @file common/page_layout_default_description.cpp
*/
/*
* 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 KiCad Developers, see change_log.txt for contributors.
*
*
* 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 Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
/* keyword used in page layout description are (see page_layout_reader.keywords)
* page_layout
* setup
* linewidth
* textlinewidth
* textsize
* comment
* line
* rect
* polygon
* tbtext
* ltcorner
* lbcorner
* rbcorner
* rtcorner
* name
* pos
* start
* end
* pts
* xy
* maxlen
* maxheight
* font
* bold
* italic
* size
* justify
* left
* center
* right
* top
* bottom
* rotate
* repeat
* incrx
* incry
* incrlabel
*/
/*
* Items use coordinates.
* A coordinate is defined relative to a page corner
* A coordinate is the X pos, the Y pos, and the corner which is the coordinate origin
* the default is the bottom right corner
* example: (start 10 0 ltcorner) or (start 20 10)
* The direction depends on the corner: a positive coordinate define a point
* from the corner origin, to the opposite corner.
*
* Items are defined by a name, coordinates in mm and some attributes,
* and can be repeated.
* for instance (repeat 2) (incrx 2) (incry 2) repeat the item 2 times,
* and coordinates are incremented by 2 on X direction, and 2 on Y direction
* Comments are allowed. they are inside (), and start by the keyword comment
* example:
* (comment rect around the title block)
*
* Lines and rect are defined by 2 coordinates start and end, and attributes.
* Attributes are linewidth and repeat parameters.
* example:
* (line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )
* (rect (comment rect around the title block) (linewidth 0.15) (start 110 34) (end 2 2) )
*
* Texts are defined by the text (between quotes), the position, and attributes
* example
* "(tbtext \"1\" (pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )"
* the text can be rotated by (rotation <value>) with value = rot angle in degrees
* (font (size 1.3 1.3) bold italic) defines a specific size,
* with bold and italic options
* (justify <justif keyword>) controls the text justification (the default is left)
* justif keyword is center, left, right, top and bottom
* (justify center top) is a text centered on X axis and top aligned on vertical axis
* The text size can be constrained:
* (maxlen <value>) and (maxheight <value>) force the actual text x and/or y size to be
* reduced to limit the text height to the maxheight value,
* and the full text x size to the maxlen value.
* If the actual text size is smaller than limits, its size is not modified.
*
* Texts can include a format symbol, a la printf.
* At run time these format symbols will be replaced by their actual value.
*
* format symbols are:
*
* %% = replaced by %
* %K = Kicad version
* %Z = paper format name (A4, USLetter ...)
* %Y = company name
* %D = date
* %R = revision
* %S = sheet number
* %N = number of sheets
* %Cx = comment (x = 0 to 9 to identify the comment)
* %F = filename
* %P = sheet path (sheet full name)
* %T = title
*
* example:
* (tbtext \"Size: %Z\" ...) displays "Size A4" or Size USLetter"
*
* Poly Polygons
* Set of filled polygons are supported.
*
* The main purpose is to allow logos, or complex shapes
* They support the repeat and rotation options
* They are defined by
* (polygon (position ..) <rotation> <linewidth>
* the parameter linewidth defines the pen size used to draw/plot
* the polygon outlines (default = 0)
* example:
* (polygon (pos 134 18 rbcorner) (rotate 20) (linewidth 0.00254)
*
* and a list of corners like
* (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932)
* .... )
*
* each sequence like
* (pts (xy 20.574 8.382) (xy 19.9009 8.382) (xy 19.9009 6.26364) (xy 19.7485 5.98932)
* .... )
* defines a polygon.
* Each coordinate is relative to the polygon position.
* Therefore a "polygon" is in fact a set of polygons, of a poly polygon
*
*/
#include <worksheet.h> // defaultPageLayout
// height of the band reference grid 2.0 mm
// worksheet frame reference text size 1.3 mm
// default text size 1.5 mm
// default line width 0.15 mm
// frame ref pitch 50 mm
// export defaultPageLayout:
extern
const
char
defaultPageLayout
[];
// Default page layout (sizes are in mm)
const
char
defaultPageLayout
[]
=
"( page_layout
\n
"
"(setup (textsize 1.5 1.5) (linewidth 0.15) (textlinewidth 0.15) )"
"(rect (comment
\"
rect around the title block
\"
) (linewidth 0.15) (start 110 34) (end 2 2) )
\n
"
"(rect (start 0 0 ltcorner) (end 0 0 rbcorner) (repeat 2) (incrx 2) (incry 2) )
\n
"
"(line (start 50 2 ltcorner) (end 50 0 ltcorner) (repeat 30) (incrx 50) )
\n
"
"(tbtext
\"
1
\"
(pos 25 1 ltcorner) (font (size 1.3 1.3))(repeat 100) (incrx 50) )
\n
"
"(line (start 50 2 lbcorner) (end 50 0 lbcorner) (repeat 30) (incrx 50) )
\n
"
"(tbtext
\"
1
\"
(pos 25 1 lbcorner) (font (size 1.3 1.3)) (repeat 100) (incrx 50) )
\n
"
"(line (start 0 50 ltcorner) (end 2 50 ltcorner) (repeat 30) (incry 50) )
\n
"
"(tbtext
\"
A
\"
(pos 1 25 ltcorner) (font (size 1.3 1.3)) (justify center)(repeat 100) (incry 50) )
\n
"
"(line (start 0 50 rtcorner) (end 2 50 rtcorner) (repeat 30) (incry 50) )
\n
"
"(tbtext
\"
A
\"
(pos 1 25 rtcorner) (font (size 1.3 1.3)) (justify center) (repeat 100) (incry 50) )
\n
"
"(tbtext
\"
Date: %D
\"
(pos 87 6.9) )
\n
"
"(line (start 110 5.5) end 2 5.5) )
\n
"
"(tbtext
\"
%K
\"
(pos 109 4.1) (comment
\"
Kicad version
\"
) )
\n
"
"(line (start 110 8.5) end 2 8.5) )
\n
"
"(tbtext
\"
Rev: %R
\"
(pos 24 6.9)(font bold)(justify left) )
\n
"
"(tbtext
\"
Size: %Z
\"
(comment
\"
Paper format name
\"
)(pos 109 6.9) )
\n
"
"(tbtext
\"
Id: %S/%N
\"
(comment
\"
Sheet id
\"
)(pos 24 4.1) )
\n
"
"(line (start 110 12.5) end 2 12.5) )
\n
"
"(tbtext
\"
Title: %T
\"
(pos 109 10.7)(font bold italic (size 2 2)) )
\n
"
"(tbtext
\"
File: %F
\"
(pos 109 14.3) )
\n
"
"(line (start 110 18.5) end 2 18.5) )
\n
"
"(tbtext
\"
Sheet: %P
\"
(pos 109 17) )
\n
"
"(tbtext
\"
%Y
\"
(comment
\"
Company name
\"
) (pos 109 20)(font bold) )
\n
"
"(tbtext
\"
%C0
\"
(comment
\"
Comment 0
\"
) (pos 109 23) )
\n
"
"(tbtext
\"
%C1
\"
(comment
\"
Comment 1
\"
) (pos 109 26) )
\n
"
"(tbtext
\"
%C2
\"
(comment
\"
Comment 2
\"
) (pos 109 29) )
\n
"
"(tbtext
\"
%C3
\"
(comment
\"
Comment 3
\"
) (pos 109 32) )
\n
"
"(line (start 90 8.5) end 90 5.5) )
\n
"
"(line (start 26 8.5) end 26 2) )
\n
"
")
\n
"
;
common/page_layout_reader.cpp
deleted
100644 → 0
View file @
612ba67c
/**
* @file common/page_layout_reader.cpp
* @brief read an S expression of description of graphic items and texts
* to build a title block and page layout
*/
/*
* 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 KiCad Developers, see change_log.txt for contributors.
*
*
* 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 Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, you may find one here:
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
* or you may search the http://www.gnu.org website for the version 2 license,
* or you may write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <fctsys.h>
#include <base_struct.h>
#include <worksheet.h>
#include <worksheet_shape_builder.h>
#include <vector2d.h>
#include <page_layout_reader_lexer.h>
using
namespace
TB_READER_T
;
/**
* Class PAGE_LAYOUT_READER_PARSER
* holds data and functions pertinent to parsing a S-expression file
* for a WORKSHEET_LAYOUT.
*/
class
PAGE_LAYOUT_READER_PARSER
:
public
PAGE_LAYOUT_READER_LEXER
{
DSIZE
m_defaultTextSize
;
// Default text size, when not defined inside a tbtext
double
m_defaultLineWidth
;
double
m_defaulTextLineWidth
;
public
:
PAGE_LAYOUT_READER_PARSER
(
const
char
*
aLine
,
const
wxString
&
aSource
);
void
Parse
(
WORKSHEET_LAYOUT
*
aLayout
)
throw
(
PARSE_ERROR
,
IO_ERROR
);
private
:
/**
* Function parseInt
* parses an integer and constrains it between two values.
* @param aMin is the smallest return value.
* @param aMax is the largest return value.
* @return int - the parsed integer.
*/
int
parseInt
(
int
aMin
,
int
aMax
);
/**
* Function parseDouble
* parses a double
* @return double - the parsed double.
*/
double
parseDouble
();
void
parseSetup
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parseGraphic
(
WORKSHEET_DATAITEM
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parseText
(
WORKSHEET_DATAITEM_TEXT
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parsePolygon
(
WORKSHEET_DATAITEM_POLYPOLYGON
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parsePolyOutline
(
WORKSHEET_DATAITEM_POLYPOLYGON
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parseCoordinate
(
POINT_COORD
&
aCoord
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
};
// PCB_PLOT_PARAMS_PARSER
PAGE_LAYOUT_READER_PARSER
::
PAGE_LAYOUT_READER_PARSER
(
const
char
*
aLine
,
const
wxString
&
aSource
)
:
PAGE_LAYOUT_READER_LEXER
(
aLine
,
aSource
)
{
m_defaultTextSize
.
x
=
m_defaultTextSize
.
y
=
TB_DEFAULT_TEXTSIZE
;
m_defaultLineWidth
=
0.0
;
m_defaulTextLineWidth
=
0.0
;
}
void
PAGE_LAYOUT_READER_PARSER
::
Parse
(
WORKSHEET_LAYOUT
*
aLayout
)
throw
(
PARSE_ERROR
,
IO_ERROR
)
{
T
token
;
WORKSHEET_DATAITEM
*
item
;
LOCALE_IO
toggle
;
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
if
(
token
==
T_LEFT
)
token
=
NextTok
();
if
(
token
==
T_page_layout
)
continue
;
switch
(
token
)
{
case
T_setup
:
// Defines default values for graphic items
parseSetup
();
break
;
case
T_line
:
item
=
new
WORKSHEET_DATAITEM
(
WORKSHEET_DATAITEM
::
WS_SEGMENT
);
parseGraphic
(
item
);
aLayout
->
Append
(
item
);
break
;
case
T_rect
:
item
=
new
WORKSHEET_DATAITEM
(
WORKSHEET_DATAITEM
::
WS_RECT
);
parseGraphic
(
item
);
aLayout
->
Append
(
item
);
break
;
case
T_polygon
:
item
=
new
WORKSHEET_DATAITEM_POLYPOLYGON
();
parsePolygon
(
(
WORKSHEET_DATAITEM_POLYPOLYGON
*
)
item
);
aLayout
->
Append
(
item
);
break
;
case
T_tbtext
:
NeedSYMBOLorNUMBER
();
item
=
new
WORKSHEET_DATAITEM_TEXT
(
FromUTF8
()
);
parseText
(
(
WORKSHEET_DATAITEM_TEXT
*
)
item
);
aLayout
->
Append
(
item
);
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
}
void
PAGE_LAYOUT_READER_PARSER
::
parseSetup
()
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
T
token
;
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
switch
(
token
)
{
case
T_LEFT
:
break
;
case
T_linewidth
:
m_defaultLineWidth
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_textsize
:
m_defaultTextSize
.
x
=
parseDouble
();
m_defaultTextSize
.
y
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_textlinewidth
:
m_defaulTextLineWidth
=
parseDouble
();
NeedRIGHT
();
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
}
void
PAGE_LAYOUT_READER_PARSER
::
parsePolygon
(
WORKSHEET_DATAITEM_POLYPOLYGON
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
aItem
->
m_LineWidth
=
0
;
T
token
;
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
if
(
token
==
T_LEFT
)
token
=
NextTok
();
switch
(
token
)
{
case
T_comment
:
// Comment, search the closing ')'
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
&&
token
!=
T_EOF
);
break
;
case
T_pos
:
parseCoordinate
(
aItem
->
m_Pos
);
break
;
case
T_pts
:
parsePolyOutline
(
aItem
);
aItem
->
CloseContour
();
break
;
case
T_rotate
:
aItem
->
m_Orient
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_repeat
:
aItem
->
m_RepeatCount
=
parseInt
(
-
1
,
100
);
NeedRIGHT
();
break
;
case
T_incrx
:
aItem
->
m_IncrementVector
.
x
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_incry
:
aItem
->
m_IncrementVector
.
y
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_linewidth
:
aItem
->
m_LineWidth
=
parseDouble
();
NeedRIGHT
();
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
aItem
->
SetBoundingBox
();
}
void
PAGE_LAYOUT_READER_PARSER
::
parsePolyOutline
(
WORKSHEET_DATAITEM_POLYPOLYGON
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
DPOINT
corner
;
T
token
;
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
if
(
token
==
T_LEFT
)
token
=
NextTok
();
switch
(
token
)
{
case
T_xy
:
corner
.
x
=
parseDouble
();
corner
.
y
=
parseDouble
();
aItem
->
AppendCorner
(
corner
);
NeedRIGHT
();
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
}
void
PAGE_LAYOUT_READER_PARSER
::
parseGraphic
(
WORKSHEET_DATAITEM
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
T
token
;
aItem
->
m_LineWidth
=
m_defaultLineWidth
;
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
if
(
token
==
T_LEFT
)
token
=
NextTok
();
switch
(
token
)
{
case
T_comment
:
// Comment, search the closing ')'
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
&&
token
!=
T_EOF
);
break
;
case
T_start
:
parseCoordinate
(
aItem
->
m_Pos
);
break
;
case
T_end
:
parseCoordinate
(
aItem
->
m_End
);
break
;
case
T_repeat
:
aItem
->
m_RepeatCount
=
parseInt
(
-
1
,
100
);
NeedRIGHT
();
break
;
case
T_incrx
:
aItem
->
m_IncrementVector
.
x
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_incry
:
aItem
->
m_IncrementVector
.
y
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_linewidth
:
aItem
->
m_LineWidth
=
parseDouble
();
NeedRIGHT
();
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
}
void
PAGE_LAYOUT_READER_PARSER
::
parseText
(
WORKSHEET_DATAITEM_TEXT
*
aItem
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
T
token
;
aItem
->
m_TextSize
=
m_defaultTextSize
;
aItem
->
m_LineWidth
=
m_defaulTextLineWidth
;
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
if
(
token
==
T_LEFT
)
token
=
NextTok
();
switch
(
token
)
{
case
T_comment
:
// Comment, search the closing ')'
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
&&
token
!=
T_EOF
);
break
;
case
T_pos
:
parseCoordinate
(
aItem
->
m_Pos
);
break
;
case
T_repeat
:
aItem
->
m_RepeatCount
=
parseInt
(
-
1
,
100
);
NeedRIGHT
();
break
;
case
T_incrx
:
aItem
->
m_IncrementVector
.
x
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_incry
:
aItem
->
m_IncrementVector
.
y
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_incrlabel
:
aItem
->
m_IncrementLabel
=
parseInt
(
INT_MIN
,
INT_MAX
);
NeedRIGHT
();
break
;
case
T_maxlen
:
aItem
->
m_BoundingBoxSize
.
x
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_maxheight
:
aItem
->
m_BoundingBoxSize
.
y
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_font
:
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
switch
(
token
)
{
case
T_LEFT
:
break
;
case
T_bold
:
aItem
->
m_Flags
|=
USE_BOLD
;
break
;
case
T_italic
:
aItem
->
m_Flags
|=
USE_ITALIC
;
break
;
case
T_size
:
aItem
->
m_TextSize
.
x
=
parseDouble
();
aItem
->
m_TextSize
.
y
=
parseDouble
();
NeedRIGHT
();
break
;
case
T_linewidth
:
aItem
->
m_LineWidth
=
parseDouble
();
NeedRIGHT
();
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
break
;
case
T_justify
:
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
token
==
T_EOF
)
break
;
switch
(
token
)
{
case
T_center
:
aItem
->
m_Hjustify
=
GR_TEXT_HJUSTIFY_CENTER
;
aItem
->
m_Vjustify
=
GR_TEXT_VJUSTIFY_CENTER
;
break
;
case
T_left
:
aItem
->
m_Hjustify
=
GR_TEXT_HJUSTIFY_LEFT
;
break
;
case
T_right
:
aItem
->
m_Hjustify
=
GR_TEXT_HJUSTIFY_RIGHT
;
break
;
case
T_top
:
aItem
->
m_Vjustify
=
GR_TEXT_VJUSTIFY_TOP
;
break
;
case
T_bottom
:
aItem
->
m_Vjustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
break
;
case
T_rotate
:
aItem
->
m_Orient
=
parseDouble
();
NeedRIGHT
();
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
}
// parse an expression like " 25 1 ltcorner)"
void
PAGE_LAYOUT_READER_PARSER
::
parseCoordinate
(
POINT_COORD
&
aCoord
)
throw
(
IO_ERROR
,
PARSE_ERROR
)
{
T
token
;
aCoord
.
m_Pos
.
x
=
parseDouble
();
aCoord
.
m_Pos
.
y
=
parseDouble
();
while
(
(
token
=
NextTok
()
)
!=
T_RIGHT
)
{
switch
(
token
)
{
case
T_ltcorner
:
aCoord
.
m_Anchor
=
LT_CORNER
;
// left top corner
break
;
case
T_lbcorner
:
aCoord
.
m_Anchor
=
LB_CORNER
;
// left bottom corner
break
;
case
T_rbcorner
:
aCoord
.
m_Anchor
=
RB_CORNER
;
// right bottom corner
break
;
case
T_rtcorner
:
aCoord
.
m_Anchor
=
RT_CORNER
;
// right top corner
break
;
default
:
Unexpected
(
CurText
()
);
break
;
}
}
}
int
PAGE_LAYOUT_READER_PARSER
::
parseInt
(
int
aMin
,
int
aMax
)
{
T
token
=
NextTok
();
if
(
token
!=
T_NUMBER
)
Expecting
(
T_NUMBER
);
int
val
=
atoi
(
CurText
()
);
if
(
val
<
aMin
)
val
=
aMin
;
else
if
(
val
>
aMax
)
val
=
aMax
;
return
val
;
}
double
PAGE_LAYOUT_READER_PARSER
::
parseDouble
()
{
T
token
=
NextTok
();
if
(
token
!=
T_NUMBER
)
Expecting
(
T_NUMBER
);
double
val
=
strtod
(
CurText
(),
NULL
);
return
val
;
}
// defaultPageLayout is the default page layout description
// using the S expr.
// see page_layout_default_shape.cpp
extern
const
char
defaultPageLayout
[];
void
WORKSHEET_LAYOUT
::
SetDefaultLayout
()
{
ClearList
();
PAGE_LAYOUT_READER_PARSER
lp_parser
(
defaultPageLayout
,
wxT
(
"default page"
)
);
try
{
lp_parser
.
Parse
(
this
);
}
catch
(
IO_ERROR
ioe
)
{
wxLogMessage
(
ioe
.
errorText
);
}
}
#include <wx/file.h>
// SetLayout() try to load a custom layout file,
// currently defined by the environment variable KICAD_WKSFILE
// (a *.kicad_wks file).
// if does not exists, loads the default page layout.
void
WORKSHEET_LAYOUT
::
SetLayout
()
{
wxString
fullFileName
;
wxGetEnv
(
wxT
(
"KICAD_WKSFILE"
),
&
fullFileName
);
if
(
fullFileName
.
IsEmpty
()
||
!
wxFileExists
(
fullFileName
)
)
{
#if 0
if( !fullFileName.IsEmpty() )
{
wxLogMessage( wxT("Page layout file <%s> not found"),
fullFileName.GetData() );
}
#endif
SetDefaultLayout
();
return
;
}
wxFile
wksFile
(
fullFileName
);
if
(
!
wksFile
.
IsOpened
()
)
{
SetDefaultLayout
();
return
;
}
int
filelen
=
wksFile
.
Length
();
char
*
buffer
=
new
char
[
filelen
+
10
];
if
(
wksFile
.
Read
(
buffer
,
filelen
)
!=
filelen
)
wxLogMessage
(
_
(
"The file <%s> was not fully read"
),
fullFileName
.
GetData
()
);
else
{
buffer
[
filelen
]
=
0
;
ClearList
();
PAGE_LAYOUT_READER_PARSER
lp_parser
(
buffer
,
fullFileName
);
try
{
lp_parser
.
Parse
(
this
);
}
catch
(
IO_ERROR
ioe
)
{
wxLogMessage
(
ioe
.
errorText
);
}
}
delete
[]
buffer
;
}
common/page_layout_reader.keywords
deleted
100644 → 0
View file @
612ba67c
page_layout
setup
linewidth
textlinewidth
textsize
comment
line
rect
polygon
tbtext
ltcorner
lbcorner
rbcorner
rtcorner
name
pos
start
end
pts
xy
maxlen
maxheight
font
bold
italic
size
justify
left
center
right
top
bottom
rotate
repeat
incrx
incry
incrlabel
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment