]> Creatis software - bbtk.git/commitdiff
#3498 Export to Python code for 3DSlicer
authorEduardo DAVILA <davila@creatis.insa-lyon.fr>
Fri, 14 Apr 2023 14:42:01 +0000 (16:42 +0200)
committerEduardo DAVILA <davila@creatis.insa-lyon.fr>
Fri, 14 Apr 2023 14:42:01 +0000 (16:42 +0200)
kernel/appli/bbs2cpp/CMakeLists.txt
kernel/appli/bbs2cpp/bbs2.cxx [moved from kernel/appli/bbs2cpp/bbs2cpp.cxx with 60% similarity]
kernel/src/bbtkInterpreterPy.cxx [new file with mode: 0644]
kernel/src/bbtkInterpreterPy.h [new file with mode: 0644]
packages/std/src/bbstdConcatStrings.h
packages/std/src/bbstdDiv.xml
packages/vtk/src/bbvtkMarchingCubes.h
packages/vtk/src/bbvtkMetaImageReader.h
packages/vtk/src/bbvtkPolyDataToActor.h
packages/wx/src/bbwxSlider.h

index f778ba72f8a163348c67e5259af81f600ea89a3d..b919bd03aa62150f86883675e37d5fbda0a30210 100644 (file)
@@ -25,8 +25,8 @@
 
 
 
-SET(SOURCES bbs2cpp )
-SET(EXENAME bbs2cpp )
+SET(SOURCES bbs2 )
+SET(EXENAME bbs2 )
 
 #IF(BBTK_USE_WXWIDGETS AND WIN32)
 #  ADD_EXECUTABLE(${EXENAME} WIN32 ${SOURCES})
similarity index 60%
rename from kernel/appli/bbs2cpp/bbs2cpp.cxx
rename to kernel/appli/bbs2cpp/bbs2.cxx
index 501a461965be8ca128e1f4318d9cf010bafff702..c193d24bf6c8103749b99d678feef37da3e2fc3d 100644 (file)
 =========================================================================*/
 
 
+#include <stdio.h>
+
 #include "bbtkInterpreter.h"
+#include "bbtkInterpreterPy.h"
 #include "bbtkUtilities.h"
 
 int main(int argc, char* argv[])
 {  
-  if (argc<2) return 1;
-
-  std::string file,path;
-  file = bbtk::Utilities::ExtractScriptName(argv[1],path);
-  file += ".h";
-  bbtk::Interpreter::Pointer I = bbtk::Interpreter::New(file);
-
-  I->SetThrow(true);
-
-  try
+    if (argc<3)
     {
-      I->InterpretFile(argv[1]);
-    }
-  catch (bbtk::Exception e)
-    {
-      e.Print();
+        printf("bbs2 <filename.bbs> <cxx|py>\n");
+        return 1;
     }
+    std::string file,path;
+    std::string extention( argv[2] );
+    file = bbtk::Utilities::ExtractScriptName(argv[1],path);
+    file += std::string(".")+extention;
 
+    if ( extention.compare("cxx")==0)
+    {
+        printf("bbs -> cxx\n");
+        bbtk::Interpreter::Pointer I = bbtk::Interpreter::New(file);
+        I->SetThrow(true);
+        try
+        {
+            I->InterpretFile(argv[1]);
+        } catch (bbtk::Exception e) {
+            e.Print();
+        } // try
+    } // if cxx
+    
+    if ( extention.compare("py")==0)
+    {
+        printf("bbs -> py\n");
+         bbtk::InterpreterPy::Pointer I = bbtk::InterpreterPy::New();
+         I->SetThrow(true);
+         try
+         {
+             I->InterpretFile(argv[1]);
+             std::vector<std::string> pythonBBTK=  ((bbtk::InterpreterPy*)(I.get()))->pythonBBTK  ;
+             FILE *ff=fopen(file.c_str(),"w+");
+             fprintf(ff,"from bbtk.bbtkBlackBox import *\n" );
+             fprintf(ff,"class appliTest02:\n" );
+             fprintf(ff,"    def Run(self):\n" );
+             fprintf(ff,"        mCB  = ComplexBlackBox('appliTest02')\n");
+             int i,size=pythonBBTK.size();
+             for (i=0; i<size;i++)
+             {
+                 fprintf(ff,"        mCB.%s\n", pythonBBTK[i].c_str() );
+             }// for i
+             fprintf(ff,"        mCB.Execute()\n" );
+             fclose(ff);
+         } catch (bbtk::Exception e) {
+             e.Print();
+         } // try
+    } // py
+    
   return 0;
 }
 
diff --git a/kernel/src/bbtkInterpreterPy.cxx b/kernel/src/bbtkInterpreterPy.cxx
new file mode 100644 (file)
index 0000000..95900b4
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------
+ */
+
+/*=========================================================================
+Program:   bbtk
+Module:    $RCSfile$
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+=========================================================================*/
+
+
+/**
+ *  \file
+ *  \brief Class bbtk::BBPInterpreter
+ */
+
+
+#include "bbtkInterpreterPy.h"
+
+#include "bbtkExecuter.h"
+#include "bbtkMessageManager.h"
+#include "bbtkFactory.h"
+#include "bbtkUtilities.h"
+
+namespace bbtk
+{
+
+  //=========================================================================
+    InterpreterPy::Pointer InterpreterPy::New()
+    {
+        return MakePointer( new InterpreterPy() );
+    }
+  //=========================================================================
+
+
+
+  //=========================================================================
+    InterpreterPy::InterpreterPy()
+    {
+        bbtk::InterpreterVirtual::Init();
+    }
+  //=========================================================================
+
+  //=========================================================================
+    InterpreterPy::~InterpreterPy()
+    {
+    }
+  //=========================================================================
+
+
+  //=========================================================================
+  /// Creates a new black box in current complex box
+  void InterpreterPy::commandNew( const std::string& boxType, const std::string& boxName) // virtual
+  {
+      int pos = boxType.find( std::string(":") );
+      std::string boxTypeTmp=boxType;
+      boxTypeTmp.replace(pos,1,"_");
+      // ex:   mCB.New( bbtkBlackBox.std_ConcatString("Box10") )
+      std::string  code("New( "+boxTypeTmp+"('"+boxName+"') )");
+      this->pythonBBTK.push_back(code);
+  }
+  //=========================================================================
+
+
+  //=========================================================================
+  /// Connects the output boxOutput to the input boxInput
+  void InterpreterPy::commandConnection (const std::string &boxfrom,
+      const std::string &output,
+      const std::string &boxto,
+      const std::string &input)                        // virtual
+  {
+      //ex: mCB.Connection( "Box10" , "Out", "Box11", "In")
+      std::string  code("Connection('"+boxfrom+"','"+output+"','"+boxto+"','"+input+"')");
+      this->pythonBBTK.push_back(code);
+  }
+  //=========================================================================
+
+  //=========================================================================
+  void InterpreterPy::commandInput(const std::string &name,const std::string &box,const std::string &input,const std::string  &help)
+  {
+  }
+  //=========================================================================
+
+  //=========================================================================
+  void InterpreterPy::commandOutput(const std::string &name,const std::string &box,const std::string &output,const std::string  &help)
+  {
+  }
+  //=========================================================================
+
+
+  //=========================================================================
+  /// sets the input of the box with the value
+  void InterpreterPy::commandSet(const std::string &box,const std::string &input,const std::string &value) // virtual
+  {
+      //ex:     mCB.Set("Box10","In2","/hola.mhd")
+      std::string  code("Set('"+box+"','"+input+"','"+value+"')");
+      this->pythonBBTK.push_back(code);
+  }
+  //=========================================================================
+
+
+  //=========================================================================
+  void InterpreterPy::commandDefine(const std::string &name,const std::string &pack,const std::string &scriptfilename) // virtual
+  {
+  }
+  //=========================================================================
+
+
+  //=========================================================================
+  void InterpreterPy::commandEndDefine() // virtual
+  {
+  }
+  //=========================================================================
+
+
+  //=========================================================================
+  void InterpreterPy::commandExec(const std::string &word) // virtual
+  {
+      //Ex:     mCB.AddToExecutableLst("Box13")
+      std::string  code("AddToExecutableLst('"+word+"')");
+      this->pythonBBTK.push_back(code);
+  }
+  //=========================================================================
+
+
+  //=========================================================================
+  void InterpreterPy::commandAuthor(const std::string &author)  // virtual
+  {
+  }
+  //=========================================================================
+
+  //=========================================================================
+  void InterpreterPy::commandCategory(const std::string &categorytype)  // virtual
+  {
+  }
+  //=========================================================================
+
+  //=========================================================================
+  void InterpreterPy::commandDescription(const std::string &description)  // virtual
+  {
+  }
+  //=========================================================================
+
+}  // EO namespace bbtk
+
+// EOF
+
diff --git a/kernel/src/bbtkInterpreterPy.h b/kernel/src/bbtkInterpreterPy.h
new file mode 100644 (file)
index 0000000..a65ecf6
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+# ---------------------------------------------------------------------
+#
+# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+#                        pour la Santé)
+# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+#
+#  This software is governed by the CeCILL-B license under French law and
+#  abiding by the rules of distribution of free software. You can  use,
+#  modify and/ or redistribute the software under the terms of the CeCILL-B
+#  license as circulated by CEA, CNRS and INRIA at the following URL
+#  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+#  or in the file LICENSE.txt.
+#
+#  As a counterpart to the access to the source code and  rights to copy,
+#  modify and redistribute granted by the license, users are provided only
+#  with a limited warranty  and the software's author,  the holder of the
+#  economic rights,  and the successive licensors  have only  limited
+#  liability.
+#
+#  The fact that you are presently reading this means that you have had
+#  knowledge of the CeCILL-B license and that you accept its terms.
+# ------------------------------------------------------------------------
+*/
+
+/*=========================================================================
+Program:   bbtk
+Module:    $RCSfile$
+Language:  C++
+Date:      $Date$
+Version:   $Revision$
+=========================================================================*/
+
+
+#ifndef __bbtkBBPInterpreter_h__
+#define __bbtkBBPInterpreter_h__
+
+//Includes bbtk
+#include "bbtkInterpreterVirtual.h"
+
+//Includes std
+#include <iostream>
+#include <set>
+
+
+//#include "bbtkSystem.h"
+//#include "bbtkComplexBlackBox.h"
+
+namespace bbtk
+{
+  class BBTK_EXPORT InterpreterPy : public InterpreterVirtual
+  {
+  public:
+    static Pointer New();
+    InterpreterPy();
+    ~InterpreterPy();
+
+    //Public methods
+
+    virtual void commandNew( const std::string& boxType, const std::string& boxName);
+
+    virtual void commandConnection (const std::string &boxfrom,
+                       const std::string &output,
+                       const std::string &boxto,
+                       const std::string &input);
+    virtual void commandSet(const std::string &box,const std::string &input,const std::string &value);
+
+
+    virtual void commandDefine(const std::string &name,const std::string &pack,const std::string &scriptfilename);
+    virtual void commandEndDefine();
+
+    virtual void commandExec(const std::string &word);
+
+    virtual void commandAuthor(const std::string &author);
+    virtual void commandCategory(const std::string &categorytype);
+    virtual void commandDescription(const std::string &description);
+
+    virtual void commandInput(const std::string &name,const std::string &box,const std::string &input,const std::string  &help);
+    virtual void commandOutput(const std::string &name,const std::string &box,const std::string &output,const std::string  &help);
+
+    std::vector<std::string> pythonBBTK;
+
+  private:
+
+    //Private Attributes
+
+    //Private Methods
+
+  protected:
+
+    //Protected Attributes
+
+    //Protected methods
+
+  };
+}
+// namespace bbtk
+#endif
+
index f22f2f21356b4df8c51b0baa039a7f725c06b9df..625ac86d5144c0bb463770731bbddc81ab6adc57 100644 (file)
@@ -67,7 +67,7 @@ namespace bbstd
   BBTK_NAME("ConcatStrings");
   BBTK_AUTHOR("jean-pierre.roux@creatis.insa-lyon.fr");
   BBTK_CATEGORY("misc");
-  BBTK_DESCRIPTION("String concatenation");
+  BBTK_DESCRIPTION("String concatenation (C++,Python)");
   BBTK_INPUT(ConcatStrings,In1, "String 1", std::string,"");
   BBTK_INPUT(ConcatStrings,In2, "String 2", std::string,"");  
   BBTK_INPUT(ConcatStrings,In3, "String 3", std::string,"");  
index 09686ebb6bd647626d1952717ec2ac2d6f2e2d48..ab02f2ce53044ae13bb2dbb48d868c9cdf497e6a 100644 (file)
@@ -3,7 +3,7 @@
 <blackbox name="Div">
 
   <author>laurent.guigues@creatis.insa-lyon.fr</author>
-  <description>Divides its inputs</description>
+  <description>Divides its inputs (C++,Python)</description>
   <category>math</category>
 
   <input name="In1"  type="double" description="Numerator"/>
index 011834a126f547205c117424ecce0100db6b77a6..c94d76ff242f263e797cd11d5692d39bdf9caf5b 100644 (file)
@@ -111,7 +111,7 @@ namespace bbvtk
   BBTK_BEGIN_DESCRIBE_BLACK_BOX(MarchingCubes,bbtk::AtomicBlackBox);
   BBTK_NAME("MarchingCubes");
   BBTK_AUTHOR("laurent.guigues@creatis.insa-lyon.fr");
-  BBTK_DESCRIPTION("Extracts an iso-surface of an image using the marching cubes algorithm (bbfication of vtkMarchingCubes)");
+  BBTK_DESCRIPTION("Extracts an iso-surface of an image using the marching cubes algorithm (bbfication of vtkMarchingCubes) (C++,Python)");
   BBTK_CATEGORY("image;mesh");
 
   BBTK_INPUT(MarchingCubes,Active,"Active true/false (default true)",bool,"");
index e4e4de42ca9141653649bb0dbd26f75459716656..f00867c8aafce6bfbccba544097a3466b1ec52fb 100644 (file)
@@ -34,7 +34,7 @@ class bbvtk_EXPORT MetaImageReader
 BBTK_BEGIN_DESCRIBE_BLACK_BOX(MetaImageReader,bbtk::AtomicBlackBox);
   BBTK_NAME("MetaImageReader");
   BBTK_AUTHOR("Info-Dev");
-  BBTK_DESCRIPTION("No Description.");
+  BBTK_DESCRIPTION("No Description. (C++,Python)");
   BBTK_CATEGORY("empty");
 
   BBTK_INPUT(MetaImageReader,In,"File Name",std::string,"");
index 583f0f7a1937516bf3b4a0c69e73874e47f12786..a01dcdb60648a4965b856b085531d26f8db9397d 100644 (file)
@@ -77,7 +77,6 @@ namespace bbvtk
     vtkPolyDataMapper *polydatamapper;
     vtkActor          *vtkactor; 
     
-    
     BBTK_BLACK_BOX_INTERFACE(PolyDataToActor,bbtk::AtomicBlackBox);
     
     BBTK_DECLARE_INPUT(Active,bool);
@@ -104,7 +103,7 @@ namespace bbvtk
   BBTK_BEGIN_DESCRIBE_BLACK_BOX(PolyDataToActor,bbtk::AtomicBlackBox);
   BBTK_NAME("PolyDataToActor");
   BBTK_AUTHOR("eduardo.davila at creatis.insa-lyon.fr");
-  BBTK_DESCRIPTION("takes a vtkPolyData object to insert into a 3D scene (e.g. a Viewer3D)");
+  BBTK_DESCRIPTION("takes a vtkPolyData object to insert into a 3D scene (e.g. a Viewer3D) (C++,Python)");
   typedef std::vector<double> vectorcolour;
   BBTK_CATEGORY("3D object creator");
   BBTK_INPUT(PolyDataToActor,In,"Input image",vtkPolyData*,"");
index d75d02dc63582a96139e95dfae9f38f0cfbc4a3c..82fdeea1e17f14e2731463e42952b9bff38e9f2c 100644 (file)
@@ -99,7 +99,7 @@ namespace bbwx
   BBTK_NAME("Slider");
   BBTK_AUTHOR("eduardo.davila@creatis.insa-lyon.fr");
   // Already inserted for any WxBlackBox  BBTK_CATEGORY("widget");
-  BBTK_DESCRIPTION("Slider widget (wxSlider)");
+  BBTK_DESCRIPTION("Slider widget (wxSlider) (C++,Python)");
   BBTK_INPUT(Slider,In,               "Initial position of the slider (default 0)",                          int,         "");
   BBTK_INPUT(Slider,Min,              "Minimum value of the slider (default 0)",                             int,         "");
   BBTK_INPUT(Slider,Max,              "Maximum value of the slider (default 500)",                           int,         "");