KiCad PCB EDA Suite
Loading...
Searching...
No Matches
test_extruded_body_load_save.cpp
Go to the documentation of this file.
1
#include <boost/test/unit_test.hpp>
2
#include <
footprint.h
>
3
#include <
pcbnew_utils/board_file_utils.h
>
4
#include <
settings/settings_manager.h
>
5
#include <filesystem>
6
7
BOOST_AUTO_TEST_SUITE
( ExtrudedBodyLoadSave )
8
9
BOOST_AUTO_TEST_CASE
( FullRoundTrip )
10
{
11
SETTINGS_MANAGER
settingsManager;
12
13
FOOTPRINT
footprint(
nullptr
);
14
EXTRUDED_3D_BODY
& body = footprint.
EnsureExtrudedBody
();
15
body.
m_height
=
pcbIUScale
.mmToIU( 2.5 );
16
body.
m_standoff
=
pcbIUScale
.mmToIU( 0.1 );
17
body.
m_layer
=
F_CrtYd
;
18
body.
m_material
=
EXTRUSION_MATERIAL::METAL
;
19
body.
m_color
=
KIGFX::COLOR4D
( 0.8, 0.4, 0.0, 0.9 );
20
body.
m_offset
=
VECTOR3D
( 1.0, -0.5, 0.2 );
21
body.
m_scale
=
VECTOR3D
( 1.5, 0.8, 2.0 );
22
body.
m_rotation
=
VECTOR3D
( 10.0, 20.0, 45.0 );
23
body.
m_show
=
false
;
24
25
const
auto
savePath = std::filesystem::temp_directory_path() /
"extruded_body_roundtrip.kicad_mod"
;
26
std::filesystem::remove( savePath );
27
KI_TEST::DumpFootprintToFile
( footprint, savePath.string() );
28
29
std::unique_ptr<FOOTPRINT> loaded =
KI_TEST::ReadFootprintFromFileOrStream
( savePath.string() );
30
BOOST_REQUIRE
( loaded !=
nullptr
);
31
32
BOOST_REQUIRE
( loaded->HasExtrudedBody() );
33
const
EXTRUDED_3D_BODY
* lb = loaded->GetExtrudedBody();
34
35
BOOST_CHECK_EQUAL
( lb->
m_height
, body.
m_height
);
36
BOOST_CHECK_EQUAL
( lb->
m_standoff
, body.
m_standoff
);
37
BOOST_CHECK_EQUAL
( lb->
m_layer
, body.
m_layer
);
38
BOOST_CHECK_EQUAL
(
static_cast<
int
>
( lb->
m_material
),
static_cast<
int
>
( body.
m_material
) );
39
BOOST_CHECK_CLOSE( lb->
m_color
.
r
, body.
m_color
.
r
, 0.01 );
40
BOOST_CHECK_CLOSE( lb->
m_color
.
g
, body.
m_color
.
g
, 0.01 );
41
BOOST_CHECK_CLOSE( lb->
m_color
.
b
, body.
m_color
.
b
, 0.01 );
42
BOOST_CHECK_CLOSE( lb->
m_color
.
a
, body.
m_color
.
a
, 0.01 );
43
44
BOOST_CHECK_CLOSE( lb->
m_offset
.
x
, body.
m_offset
.
x
, 0.01 );
45
BOOST_CHECK_CLOSE( lb->
m_offset
.
y
, body.
m_offset
.
y
, 0.01 );
46
BOOST_CHECK_CLOSE( lb->
m_offset
.
z
, body.
m_offset
.
z
, 0.01 );
47
BOOST_CHECK_CLOSE( lb->
m_scale
.
x
, body.
m_scale
.
x
, 0.01 );
48
BOOST_CHECK_CLOSE( lb->
m_scale
.
y
, body.
m_scale
.
y
, 0.01 );
49
BOOST_CHECK_CLOSE( lb->
m_scale
.
z
, body.
m_scale
.
z
, 0.01 );
50
BOOST_CHECK_CLOSE( lb->
m_rotation
.
x
, body.
m_rotation
.
x
, 0.01 );
51
BOOST_CHECK_CLOSE( lb->
m_rotation
.
y
, body.
m_rotation
.
y
, 0.01 );
52
BOOST_CHECK_CLOSE( lb->
m_rotation
.
z
, body.
m_rotation
.
z
, 0.01 );
53
54
BOOST_CHECK_EQUAL
( lb->
m_show
, body.
m_show
);
55
}
56
57
BOOST_AUTO_TEST_CASE
( DefaultsRoundTrip )
58
{
59
SETTINGS_MANAGER
settingsManager;
60
61
FOOTPRINT
footprint(
nullptr
);
62
EXTRUDED_3D_BODY
& body = footprint.
EnsureExtrudedBody
();
63
body.
m_height
=
pcbIUScale
.mmToIU( 5.0 );
64
// Leave everything else at defaults
65
66
const
auto
savePath = std::filesystem::temp_directory_path() /
"extruded_body_defaults_roundtrip.kicad_mod"
;
67
std::filesystem::remove( savePath );
68
KI_TEST::DumpFootprintToFile
( footprint, savePath.string() );
69
70
std::unique_ptr<FOOTPRINT> loaded =
KI_TEST::ReadFootprintFromFileOrStream
( savePath.string() );
71
BOOST_REQUIRE
( loaded !=
nullptr
);
72
BOOST_REQUIRE
( loaded->HasExtrudedBody() );
73
74
const
EXTRUDED_3D_BODY
* lb = loaded->GetExtrudedBody();
75
BOOST_CHECK_EQUAL
( lb->
m_height
, body.
m_height
);
76
BOOST_CHECK_EQUAL
( lb->
m_standoff
, 0 );
77
BOOST_CHECK_EQUAL
( lb->
m_layer
,
UNDEFINED_LAYER
);
78
BOOST_CHECK_EQUAL
(
static_cast<
int
>
( lb->
m_material
),
static_cast<
int
>
(
EXTRUSION_MATERIAL::PLASTIC
) );
79
BOOST_CHECK( lb->
m_color
==
KIGFX::COLOR4D::UNSPECIFIED
);
80
81
BOOST_CHECK_CLOSE( lb->
m_offset
.
x
, 0.0, 0.01 );
82
BOOST_CHECK_CLOSE( lb->
m_offset
.
y
, 0.0, 0.01 );
83
BOOST_CHECK_CLOSE( lb->
m_offset
.
z
, 0.0, 0.01 );
84
BOOST_CHECK_CLOSE( lb->
m_scale
.
x
, 1.0, 0.01 );
85
BOOST_CHECK_CLOSE( lb->
m_scale
.
y
, 1.0, 0.01 );
86
BOOST_CHECK_CLOSE( lb->
m_scale
.
z
, 1.0, 0.01 );
87
BOOST_CHECK_CLOSE( lb->
m_rotation
.
x
, 0.0, 0.01 );
88
BOOST_CHECK_CLOSE( lb->
m_rotation
.
y
, 0.0, 0.01 );
89
BOOST_CHECK_CLOSE( lb->
m_rotation
.
z
, 0.0, 0.01 );
90
91
BOOST_CHECK_EQUAL
( lb->
m_show
,
true
);
92
}
93
94
BOOST_AUTO_TEST_CASE
( NoExtrudedBodyRoundTrip )
95
{
96
SETTINGS_MANAGER
settingsManager;
97
98
FOOTPRINT
footprint(
nullptr
);
99
100
const
auto
savePath = std::filesystem::temp_directory_path() /
"extruded_body_none_roundtrip.kicad_mod"
;
101
std::filesystem::remove( savePath );
102
KI_TEST::DumpFootprintToFile
( footprint, savePath.string() );
103
104
std::unique_ptr<FOOTPRINT> loaded =
KI_TEST::ReadFootprintFromFileOrStream
( savePath.string() );
105
BOOST_REQUIRE
( loaded !=
nullptr
);
106
BOOST_CHECK( !loaded->HasExtrudedBody() );
107
}
108
109
BOOST_AUTO_TEST_SUITE_END
()
pcbIUScale
constexpr EDA_IU_SCALE pcbIUScale
Definition
base_units.h:125
board_file_utils.h
General utilities for PCB file IO for QA programs.
EXTRUDED_3D_BODY
Definition
footprint.h:103
EXTRUDED_3D_BODY::m_color
KIGFX::COLOR4D m_color
Definition
footprint.h:110
EXTRUDED_3D_BODY::m_offset
VECTOR3D m_offset
Definition
footprint.h:116
EXTRUDED_3D_BODY::m_layer
PCB_LAYER_ID m_layer
Definition
footprint.h:109
EXTRUDED_3D_BODY::m_standoff
int m_standoff
Definition
footprint.h:108
EXTRUDED_3D_BODY::m_rotation
VECTOR3D m_rotation
Definition
footprint.h:115
EXTRUDED_3D_BODY::m_scale
VECTOR3D m_scale
Definition
footprint.h:114
EXTRUDED_3D_BODY::m_height
int m_height
Definition
footprint.h:107
EXTRUDED_3D_BODY::m_material
EXTRUSION_MATERIAL m_material
Definition
footprint.h:111
EXTRUDED_3D_BODY::m_show
bool m_show
Definition
footprint.h:112
FOOTPRINT
Definition
footprint.h:290
FOOTPRINT::EnsureExtrudedBody
EXTRUDED_3D_BODY & EnsureExtrudedBody()
Definition
footprint.cpp:2541
KIGFX::COLOR4D
A color representation with 4 components: red, green, blue, alpha.
Definition
color4d.h:105
KIGFX::COLOR4D::r
double r
Red component.
Definition
color4d.h:393
KIGFX::COLOR4D::g
double g
Green component.
Definition
color4d.h:394
KIGFX::COLOR4D::a
double a
Alpha component.
Definition
color4d.h:396
KIGFX::COLOR4D::UNSPECIFIED
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition
color4d.h:402
KIGFX::COLOR4D::b
double b
Blue component.
Definition
color4d.h:395
SETTINGS_MANAGER
Definition
settings_manager.h:49
VECTOR3::y
T y
Definition
vector3.h:64
VECTOR3::z
T z
Definition
vector3.h:65
VECTOR3::x
T x
Definition
vector3.h:63
footprint.h
EXTRUSION_MATERIAL::METAL
@ METAL
Definition
footprint.h:98
EXTRUSION_MATERIAL::PLASTIC
@ PLASTIC
Definition
footprint.h:96
F_CrtYd
@ F_CrtYd
Definition
layer_ids.h:116
UNDEFINED_LAYER
@ UNDEFINED_LAYER
Definition
layer_ids.h:61
KI_TEST::ReadFootprintFromFileOrStream
std::unique_ptr< FOOTPRINT > ReadFootprintFromFileOrStream(const std::string &aFilename, std::istream &aFallback)
Definition
board_file_utils.cpp:121
KI_TEST::DumpFootprintToFile
void DumpFootprintToFile(const FOOTPRINT &aFootprint, const std::string &aLibraryPath)
Same as DumpBoardToFile, but for footprints.
Definition
board_file_utils.cpp:148
settings_manager.h
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
Definition
test_api_enums.cpp:71
BOOST_AUTO_TEST_SUITE
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_CASE
BOOST_AUTO_TEST_CASE(FullRoundTrip)
Definition
test_extruded_body_load_save.cpp:9
BOOST_REQUIRE
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL
BOOST_CHECK_EQUAL(result, "25.4")
VECTOR3D
VECTOR3< double > VECTOR3D
Definition
vector3.h:230
src
qa
tests
pcbnew
test_extruded_body_load_save.cpp
Generated on Sun Apr 26 2026 00:06:59 for KiCad PCB EDA Suite by
1.13.2