From e5f0f20dd8f77d57d3c39899a2721a3f33ec96f6 Mon Sep 17 00:00:00 2001
From: qu1ck <anlutsenko@gmail.com>
Date: Fri, 31 Aug 2018 02:31:54 -0700
Subject: [PATCH] pcbnew: add 3d models properties to swig

Fixes: lp:1758858
---
 common/swig/kicad.i                  |  1 +
 pcbnew/swig/footprint.i              |  5 ++++-
 qa/testcases/test_002_board_class.py | 15 +++++++++++++++
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/common/swig/kicad.i b/common/swig/kicad.i
index be76cec..4fd75f2 100644
--- a/common/swig/kicad.i
+++ b/common/swig/kicad.i
@@ -28,6 +28,7 @@
  */
 
 %include <std_vector.i>
+%include <std_list.i>
 %include <std_basic_string.i>
 %include <std_string.i>
 %include <std_map.i>
diff --git a/pcbnew/swig/footprint.i b/pcbnew/swig/footprint.i
index 844ea31..5d13d8a 100644
--- a/pcbnew/swig/footprint.i
+++ b/pcbnew/swig/footprint.i
@@ -29,14 +29,17 @@
  */
 
 
-
+%rename(MODULE_3D_SETTINGS_VECTOR3D) MODULE_3D_SETTINGS::VECTOR3D;
+%feature("flatnested");
 %include class_module.h
+%feature("flatnested", "");
 
 %rename(Get) operator   MODULE*;
 %template(MODULE_List)  DLIST<MODULE>;
 %{
 #include <class_module.h>
 %}
+%template(MODULE_3D_SETTINGS_List) std::list<MODULE_3D_SETTINGS>;
 
 
 // BOARD_ITEM_CONTAINER's interface functions will be implemented by SWIG
diff --git a/qa/testcases/test_002_board_class.py b/qa/testcases/test_002_board_class.py
index 26062fc..eaab7cd 100644
--- a/qa/testcases/test_002_board_class.py
+++ b/qa/testcases/test_002_board_class.py
@@ -128,6 +128,21 @@ class TestBoardClass(unittest.TestCase):
         # ensure we can get to the ID via the STD name too
         self.assertEqual(pcb.GetLayerID(B_CU), b_cu_id)
 
+    def test_module_3d_settings(self):
+        pcb = BOARD()
+        module = MODULE(pcb)
+        pcb.Add(module)
+        model = MODULE_3D_SETTINGS()
+        model.m_Filename = 'some-model.step'
+        model.m_Scale = MODULE_3D_SETTINGS_VECTOR3D()
+        model.m_Scale.x = 3
+        model.m_Scale.y = 4
+        module.Add3DModel(model)
+
+        self.assertEqual(module.Models()[0].m_Filename, 'some-model.step')
+        self.assertEqual(module.Models()[0].m_Scale.x, 3)
+        self.assertEqual(module.Models()[0].m_Scale.y, 4)
+
     #def test_interactive(self):
     # 	code.interact(local=locals())
 
-- 
2.7.4

