From 134a74e818c37e9775f33fcd8dd24e527d634b0f Mon Sep 17 00:00:00 2001
From: jay <jlaura@usgs.gov>
Date: Wed, 8 Aug 2018 14:39:25 -0700
Subject: [PATCH] Adds dynamic casting to RasterGM

---
 csmapi.i                 |  3 ++-
 geometricmodel.i         |  7 +++++++
 plugin.i                 | 23 ++++++++++++++++++++---
 rastergm.i               |  4 +++-
 tests/test_functional.py |  6 +++---
 version.i                |  4 ++++
 6 files changed, 39 insertions(+), 8 deletions(-)
 create mode 100644 geometricmodel.i

diff --git a/csmapi.i b/csmapi.i
index 1cec5ae..40812d3 100644
--- a/csmapi.i
+++ b/csmapi.i
@@ -4,6 +4,7 @@
 %include "ellipsoid.i"
 %include "warning.i"
 %include "isd.i"
+%include "model.i"
+%include "geometricmodel.i"
 %include "rastergm.i"
 %include "plugin.i"
-%include "model.i"
\ No newline at end of file
diff --git a/geometricmodel.i b/geometricmodel.i
new file mode 100644
index 0000000..37f4e3f
--- /dev/null
+++ b/geometricmodel.i
@@ -0,0 +1,7 @@
+%module(package="csmapi") geometricmodel
+%{
+    #include "GeometricModel.h"
+%}
+
+%import model.i
+%include GeometricModel.h
diff --git a/plugin.i b/plugin.i
index 590fe17..c429c2e 100644
--- a/plugin.i
+++ b/plugin.i
@@ -1,16 +1,17 @@
 %module(package="csmapi") plugin
 %{
     #include "Plugin.h"
+
 %}
 
 %include <std_string.i>
 %include <std_list.i>
-%include typemaps.i
-%include Plugin.h
-
+%include Model.h
 
 
+%apply SWIGTYPE *DYNAMIC { csm::Model * };
 
+%include Plugin.h
 %template(PluginList) std::list<const csm::Plugin*>;
 
 %{
@@ -27,3 +28,19 @@
 %}
 
 
+// A general purpose function for dynamic casting of a Model *
+%{
+static swig_type_info *
+Model_dynamic(void **ptr) {
+   csm::RasterGM *b;
+   b = dynamic_cast<csm::RasterGM *>((csm::Model *) *ptr);
+   if (b) {
+      *ptr = (void *) b;
+      return SWIGTYPE_p_csm__RasterGM;
+   }
+   return 0;
+}
+%}
+
+// Register the above casting function
+DYNAMIC_CAST(SWIGTYPE_p_csm__Model, Model_dynamic);
diff --git a/rastergm.i b/rastergm.i
index 64b658f..bb121a5 100644
--- a/rastergm.i
+++ b/rastergm.i
@@ -5,4 +5,6 @@
 
 %ignore CSM_RASTER_FAMILY;
 
-%include RasterGM.h
\ No newline at end of file
+%import model.i
+%import geometricmodel.i
+%include RasterGM.h
diff --git a/tests/test_functional.py b/tests/test_functional.py
index 0746b1f..e294b7f 100644
--- a/tests/test_functional.py
+++ b/tests/test_functional.py
@@ -43,6 +43,6 @@ def test_isd_to_model_to_ground(isd, plugin):
     
     model = plugin.constructModelFromISD(isd, model_name)
     assert model.getVersion().version() == '0.1.0'
-    print(dir(model))
-    assert False
-    
\ No newline at end of file
+    image_coord = csmapi.ImageCoord(1,1)
+    assert hasattr(model, 'imageToGround')
+    
diff --git a/version.i b/version.i
index e775da1..f4cc5b1 100644
--- a/version.i
+++ b/version.i
@@ -4,4 +4,8 @@
 %}
 
 %include <std_string.i>
+
+%rename ("$ignore", fullname=1) csm::Version::print;
 %include "Version.h"
+
+
-- 
GitLab