X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fappli%2Fbbfy%2Fbbfy.cpp;h=43f89023c53ed59c3d9f223eed78d26fe0347a03;hb=49cb3ed3b5b7e58ab54dd3b6eb4ad8adee824ef2;hp=7ec9442d94765335c5097b4f2964d049d8fe2f79;hpb=68616a252957b8585f4dfe97b71ae269e3bc5f54;p=bbtk.git diff --git a/kernel/appli/bbfy/bbfy.cpp b/kernel/appli/bbfy/bbfy.cpp index 7ec9442..43f8902 100644 --- a/kernel/appli/bbfy/bbfy.cpp +++ b/kernel/appli/bbfy/bbfy.cpp @@ -1,3 +1,29 @@ +/* +# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la SantÈ) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# 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. +# ------------------------------------------------------------------------ */ + #ifdef WIN32 #define _CRT_SECURE_NO_DEPRECATE #endif @@ -20,8 +46,8 @@ public: //========================================================================== const std::string itkImageToImageFilterString = "ITK_ImageToImageFilter"; -const std::string vtkImageAlgorithmString = "VTK_ImageAlgorithm"; -const std::string vtkPolyDataAlgorithmString = "VTK_PolyDataAlgorithm"; +const std::string vtkImageAlgorithmString = "VTK_ImageAlgorithm"; +const std::string vtkPolyDataAlgorithmString = "VTK_PolyDataAlgorithm"; //========================================================================== class bbfy @@ -63,7 +89,7 @@ private: bool mIsWidget; std::string mParentBlackBox; std::string mItkParent; - std::string mVtkParent; + std::string mVtkObject; bool mGeneric; std::string mAuthor; std::string mDescription; @@ -77,15 +103,17 @@ private: std::string mTemplateImplementation; std::vector mInclude; + std::vector mTypedef; - std::string mUserConstructor; - std::string mUserCopyConstructor; - std::string mUserDestructor; + std::string mUserSetDefaultValues; + std::string mUserInitializeProcessing; + std::string mUserFinalizeProcessing; typedef struct { std::string name; std::string type; + std::string nature; std::string descr; std::string special; std::string generic_type; @@ -103,6 +131,8 @@ private: std::string mHName; std::string mCxxName; + void AlertString(); + }; //========================================================================== @@ -138,11 +168,22 @@ void bbfy::CreateBlackBox() } //========================================================================== - +void bbfy::AlertString() +{ + + mFile << "//===== \n"; + mFile << "// Before editing this file, make sure it's a file of your own "; + mFile << "(i.e.: it wasn't generated from xml description; if so : your modifications will be lost)\n"; + mFile << "//===== \n"; + +} //========================================================================== void bbfy::ParseXML() { + + + XMLResults* res = new XMLResults; XMLNode BB = XMLNode::parseFile(mFilename.c_str(),"blackbox",res); @@ -194,27 +235,27 @@ void bbfy::ParseXML() else if (bbtype == vtkImageAlgorithmString) { mType = vtkImageAlgorithm; - // Looks for tag - if (!BB.nChildNode("vtkparent")) + // Looks for tag + if (!BB.nChildNode("vtkobject")) { throw bbfyException("Error : blackbox type '" +vtkImageAlgorithmString - +"' but no tag found (mandatory)"); + +"' but no tag found (mandatory)"); } - bbtk::GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent); + bbtk::GetTextOrClear(BB.getChildNode("vtkobject"),mVtkObject); // } else if (bbtype == vtkPolyDataAlgorithmString ) { mType = vtkPolyDataAlgorithm; - // Looks for tag - if (!BB.nChildNode("vtkparent")) + // Looks for tag + if (!BB.nChildNode("vtkobject")) { throw bbfyException("Error : blackbox type '" +vtkPolyDataAlgorithmString - +"' but no tag found (mandatory)"); + +"' but no tag found (mandatory)"); } - bbtk::GetTextOrClear(BB.getChildNode("vtkparent"),mVtkParent); + bbtk::GetTextOrClear(BB.getChildNode("vtkobject"),mVtkObject); // } else @@ -274,23 +315,30 @@ void bbfy::ParseXML() bbtk::GetTextOrClear(BB.getChildNode("namespace"),mNamespace); } - // UserConstructor body - if (BB.nChildNode("constructor")) + // UserSetDefaultValues body + if (BB.nChildNode("defaultValues")) { - bbtk::GetTextOrClear(BB.getChildNode("constructor"),mUserConstructor); + bbtk::GetTextOrClear(BB.getChildNode("defaultValues"), + mUserSetDefaultValues); } - // UserCopyConstructor body - if (BB.nChildNode("copyconstructor")) + + // UserInitializeProcessing body + if (BB.nChildNode("initializeProcessing")) { - bbtk::GetTextOrClear(BB.getChildNode("copyconstructor"),mUserCopyConstructor); + bbtk::GetTextOrClear(BB.getChildNode("initializeProcessing"), + mUserInitializeProcessing); } - // UserDestructor body - if (BB.nChildNode("destructor")) + + // UserFinalizeProcessing body + if (BB.nChildNode("finalizeProcessing")) { - bbtk::GetTextOrClear(BB.getChildNode("destructor"),mUserDestructor); + bbtk::GetTextOrClear(BB.getChildNode("finalizeProcessing"), + mUserFinalizeProcessing); } - - // Template parameters + + + + // Template parameters // mNbTemplateParam = BB.nChildNode("template"); if ( BB.nChildNode("template") > 0) @@ -326,6 +374,13 @@ void bbfy::ParseXML() bbtk::GetTextOrClear(BB.getChildNode("include",&j),val); mInclude.push_back(val); } + // Typedef + for (i=0,j=0; i is obsolete !!"< is obsolete !!"< is obsolete !!"<::iterator i; for (i=mInclude.begin(); i!=mInclude.end(); ++i) { @@ -473,6 +565,15 @@ void bbfy::CreateHeader() if (mGeneric) mFile << "#include \"bbitkImage.h\"\n"; mFile << "\n"; + if (mType == itkImageToImageFilter ) + { + mFile << "#include \"bbtkItkBlackBoxMacros.h\"\n"; + } + else if ( (mType == vtkImageAlgorithm) || + (mType == vtkPolyDataAlgorithm) ) + { + mFile << "#include \"bbtkVtkBlackBoxMacros.h\"\n"; + } // Namespace BeginNamespace(); @@ -485,9 +586,8 @@ void bbfy::CreateHeader() } // Class declaration and parents - mFile << "class /*BBTK_EXPORT*/ "<::iterator ioi; @@ -568,7 +667,6 @@ void bbfy::CreateHeader() else if (ioi->special=="itk input") { mFile << " BBTK_DECLARE_ITK_INPUT(" - << "itkParent," << ioi->name << "," << ioi->type @@ -578,7 +676,6 @@ void bbfy::CreateHeader() { if (mType == vtkImageAlgorithm) { mFile << " BBTK_DECLARE_VTK_IMAGE_ALGORITHM_INPUT(" - << "vtkParent," << ioi->name << "," << ioi->type @@ -586,7 +683,6 @@ void bbfy::CreateHeader() } else if (mType == vtkPolyDataAlgorithm) { mFile << " BBTK_DECLARE_POLY_DATA_ALGORITHM_INPUT(" - << "vtkParent," << ioi->name << "," << ioi->type @@ -596,7 +692,6 @@ void bbfy::CreateHeader() else if (ioi->special=="itk parameter") { mFile << " BBTK_DECLARE_ITK_PARAM(" - << "itkParent," << ioi->name << "," << ioi->type @@ -605,7 +700,6 @@ void bbfy::CreateHeader() else if (ioi->special=="vtk parameter") { mFile << " BBTK_DECLARE_VTK_PARAM(" - << "vtkParent," << ioi->name << "," << ioi->type @@ -621,6 +715,7 @@ void bbfy::CreateHeader() throw bbfyException(mess); } } + // Outputs for (ioi=mOutput.begin(); ioi!=mOutput.end(); ++ioi) @@ -636,7 +731,6 @@ void bbfy::CreateHeader() else if (ioi->special=="itk output") { mFile << " BBTK_DECLARE_ITK_OUTPUT(" - << "itkParent," << ioi->name << "," << ioi->type @@ -645,7 +739,6 @@ void bbfy::CreateHeader() else if (ioi->special=="vtk output") { mFile << " BBTK_DECLARE_VTK_OUTPUT(" - << "vtkParent," << ioi->name << "," << ioi->type @@ -662,37 +755,35 @@ void bbfy::CreateHeader() } } - // Process if ((mType == STD)||(mProcess.size())) { - mFile << " BBTK_PROCESS(DoProcess);\n" ; - mFile << " void DoProcess();\n"; + mFile << " BBTK_PROCESS(Process);\n" ; + mFile << " void Process();\n"; } else if (mType == itkImageToImageFilter) { - mFile << " BBTK_PROCESS(itkParent::Update);\n" ; + mFile << " BBTK_ITK_PROCESS();\n" ; } else if ((mType == vtkImageAlgorithm) || (mType == vtkPolyDataAlgorithm) ) { - mFile << " BBTK_PROCESS(vtkParent::Update);\n" ; + mFile << " BBTK_VTK_PROCESS();\n" ; } // CreateWidget if (mIsWidget) { - mFile << " BBTK_CREATE_WIDGET(DoCreateWidget);\n" ; - mFile << " void DoCreateWidget();\n"; + mFile << " BBTK_CREATE_WIDGET(CreateWidget);\n" ; + mFile << " void CreateWidget(wxWindow*);\n"; } + AlertString(); // EO black box declaration mFile << "};\n\n"; - - // BO black box description if (mTemplateParam.size()==0) { @@ -716,7 +807,8 @@ void bbfy::CreateHeader() { throw bbfyException("template bb with more than 1 templ param not impl"); } - + + // Author mFile << "BBTK_AUTHOR(\""<name << ",\"" - << ioi->descr << "\"," << ioi->type <<");\n"; + << ioi->descr << "\"," << ioi->type << ",\"" + << ioi->nature<<"\");\n"; } // Outputs @@ -753,7 +851,8 @@ void bbfy::CreateHeader() mFile << "BBTK_OUTPUT("; } mFile << mName << "," << ioi->name << ",\"" - << ioi->descr << "\"," << ioi->type <<");\n"; + << ioi->descr << "\"," << ioi->type << ",\"" + << ioi->nature<<"\");\n"; } // EO black box description @@ -781,6 +880,7 @@ void bbfy::CreateHeader() WriteGenericITKFilterHeader(); } + AlertString(); // EO namespace EndNamespace(); @@ -816,7 +916,7 @@ void bbfy::WriteGenericITKFilterHeader() mFile << "{\n"; // Interface - mFile << " BBTK_USER_BLACK_BOX_INTERFACE(" + mFile << " BBTK_BLACK_BOX_INTERFACE(" << mName << "Generic,bbtk::AtomicBlackBox);\n"; // Inputs @@ -945,7 +1045,10 @@ void bbfy::CreateCode() mess += "\""; throw bbfyException(mess); } - + + AlertString(); + + // Includes // Header of the class mFile << "#include \"" << mHName << "\"\n"; @@ -961,14 +1064,14 @@ void bbfy::CreateCode() if (mTemplateParam.size()>0) { // Implementation - mFile << "BBTK_USER_BLACK_BOX_TEMPLATE_IMPLEMENTATION(" + mFile << "BBTK_BLACK_BOX_TEMPLATE_IMPLEMENTATION(" << mName << "," << mParentBlackBox << ");\n"; if (mGeneric) { // Implementation - mFile << "BBTK_USER_BLACK_BOX_IMPLEMENTATION(" + mFile << "BBTK_BLACK_BOX_IMPLEMENTATION(" << mName << "Generic,bbtk::AtomicBlackBox);\n"; // Package mFile << "BBTK_ADD_BLACK_BOX_TO_PACKAGE(" @@ -985,43 +1088,60 @@ void bbfy::CreateCode() << mName << ")\n"; // Implementation - mFile << "BBTK_USER_BLACK_BOX_IMPLEMENTATION(" + mFile << "BBTK_BLACK_BOX_IMPLEMENTATION(" << mName << "," << mParentBlackBox << ");\n"; } // Process if ((mType == STD)||(mProcess.size())) { - mFile << "void "<