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>
5#include <filesystem>
6
7BOOST_AUTO_TEST_SUITE( ExtrudedBodyLoadSave )
8
9BOOST_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;
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
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
57BOOST_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();
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
94BOOST_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
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:125
General utilities for PCB file IO for QA programs.
KIGFX::COLOR4D m_color
Definition footprint.h:110
VECTOR3D m_offset
Definition footprint.h:116
PCB_LAYER_ID m_layer
Definition footprint.h:109
VECTOR3D m_rotation
Definition footprint.h:115
VECTOR3D m_scale
Definition footprint.h:114
EXTRUSION_MATERIAL m_material
Definition footprint.h:111
EXTRUDED_3D_BODY & EnsureExtrudedBody()
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:105
double r
Red component.
Definition color4d.h:393
double g
Green component.
Definition color4d.h:394
double a
Alpha component.
Definition color4d.h:396
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:402
double b
Blue component.
Definition color4d.h:395
@ F_CrtYd
Definition layer_ids.h:116
@ UNDEFINED_LAYER
Definition layer_ids.h:61
std::unique_ptr< FOOTPRINT > ReadFootprintFromFileOrStream(const std::string &aFilename, std::istream &aFallback)
void DumpFootprintToFile(const FOOTPRINT &aFootprint, const std::string &aLibraryPath)
Same as DumpBoardToFile, but for footprints.
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_AUTO_TEST_CASE(FullRoundTrip)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL(result, "25.4")
VECTOR3< double > VECTOR3D
Definition vector3.h:230