From e8d1275f460d4818f01699a204661e71e6d5ef44 Mon Sep 17 00:00:00 2001 From: Martin Genet <martin@mortis.local> Date: Fri, 14 Sep 2018 10:27:41 +0200 Subject: [PATCH] Generated image expression now contains the dolfin mesh. --- generated_image_expressions_cpp.py | 39 ++++++++++++++++++------------ 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/generated_image_expressions_cpp.py b/generated_image_expressions_cpp.py index 6c8b6f5..0ed3fa4 100644 --- a/generated_image_expressions_cpp.py +++ b/generated_image_expressions_cpp.py @@ -20,7 +20,6 @@ def get_ExprGenIm_cpp( #include <string.h> #include <vtkSmartPointer.h> -#include <vtkStructuredPointsReader.h> #include <vtkXMLImageDataReader.h> #include <vtkImageData.h> #include <vtkImageInterpolator.h> @@ -41,13 +40,16 @@ namespace dolfin class MyExpr : public Expression { - vtkSmartPointer<vtkImageInterpolator> interpolator; - double static_scaling; - public: + vtkSmartPointer<vtkImageData> image; // MG20180913: pointer would be instantiated at class object construction, but would point toward nothing; object would not be instantiated + vtkSmartPointer<vtkImageInterpolator> interpolator; // MG20180913: pointer would be instantiated at class object construction, but would point toward nothing; object would not be instantiated + double static_scaling; + std::shared_ptr<dolfin::Mesh> mesh; + MyExpr(): - Expression() + Expression(), + interpolator(vtkSmartPointer<vtkImageInterpolator>::New()) // MG20180913: object is instantiated together with pointer { } @@ -58,25 +60,32 @@ public: reader->SetFileName(filename); reader->Update(); - static_scaling = getStaticScalingFactor(reader->GetOutput()->GetScalarTypeAsString()); + image = reader->GetOutput(); + // image = vtkSmartPointer<vtkImageData>::New(); // MG20180913: another way to instantiate object + + static_scaling = getStaticScalingFactor(image->GetScalarTypeAsString()); - interpolator = vtkSmartPointer<vtkImageInterpolator>::New(); + // interpolator = vtkSmartPointer<vtkImageInterpolator>::New(); // MG20180913: another way to instantiate object interpolator->SetInterpolationModeToLinear(); interpolator->SetOutValue(0.); - interpolator->Initialize(reader->GetOutput()); + interpolator->Initialize(image); interpolator->Update(); } + void init_mesh( + const dolfin::Mesh* mesh) + { + mesh = mesh; + + std::cout << mesh->num_vertices() << std::endl; + std::cout << mesh->num_cells() << std::endl; + } + void eval(Array<double>& expr, const Array<double>& X) const {'''+(''' - std::cout << "X = " << X.str(1) << std::endl;''')*(verbose)+(''' - - X3D[0] = X[0]; - X3D[1] = X[1];'''+(''' - std::cout << "X3D = " << X3D.str(1) << std::endl;''')*(verbose)+''' - interpolator->Interpolate(X3D.data(), expr.data());''')*(im_dim==2)+(''' + std::cout << "X = " << X.str(1) << std::endl;''')*(verbose)+''' - interpolator->Interpolate(X.data(), expr.data());''')*(im_dim==3)+(''' + interpolator->Interpolate(X.data(), expr.data());'''+(''' std::cout << "expr = " << expr.str(1) << std::endl;''')*(verbose)+''' -- GitLab