<div dir="ltr">There are some cases in which methods are implemented via Macros.<div><br></div><div>This is done with the purpose of improving consistency and simplicity</div><div>in the code, but come at the price of sometimes not seeing directly</div>
<div>where the code is implemented.</div><div><br></div><div>The typical examples are the</div><div><br></div><div>          itkSetMacro(  variablename, type )</div><div>          itkGetMacro(  variablename, type )</div><div>
<br></div><div>That are used in most ITK classes to implement Get / Set methods.</div><div><br></div><div><br></div><div><br></div><div>For the particular case of the SetFileName method, </div><div>it helps to look at the Macro</div>
<div><br></div><div>     itkSetGetDecoratedInputMacro(FileName, std::string);<br></div><div><br></div><div><br></div><div>in the documentation at:</div><div><br></div><div><a href="http://www.itk.org/Insight/Doxygen/html/classitk_1_1ImageFileReader.html#a3d0bb0e7bd412a76f92f71acdb42bff2">http://www.itk.org/Insight/Doxygen/html/classitk_1_1ImageFileReader.html#a3d0bb0e7bd412a76f92f71acdb42bff2</a><br>
</div><div><br></div><div><br></div><div>You will find it used in line 130 of the itkImageFileReader.h file:</div><div><br></div><div><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/IO/ImageBase/include/itkImageFileReader.h#L130">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/IO/ImageBase/include/itkImageFileReader.h#L130</a><br>
</div><div><br></div><div><br></div><div>You will find this macro defined in turn in:</div><div><br></div><div>         ITK/Modules/Core/Common/include/itkMacro.h<br></div><div><br></div><div><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkMacro.h#L808">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkMacro.h#L808</a><br>
</div><div><br></div><div><div> 808 #define itkSetGetDecoratedInputMacro(name, type)  \</div><div> 809   itkSetDecoratedInputMacro(name, type)           \</div><div> 810   itkGetDecoratedInputMacro(name, type)</div></div>
<div><br></div><div><br></div><div>Then, if you follow the itkSetDecoratedInputMacro() in line 758</div><div><br></div><div><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkMacro.h#L758">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Core/Common/include/itkMacro.h#L758</a><br>
</div><div><br></div><div>where the macro defines (in this case) the functions:</div><div><br></div><div>         SetFileNameInput()<br></div><div><br></div><div>         SetFileName()</div><div><br></div><div><br></div><div>
by the lines</div><div><br></div><div><br></div><div>759:    virtual void Set##name##Input( ...<br></div><div><br></div><div>768:     virtual void Set##name( ....</div><div><br></div><div><br></div><div>where "name" is the argument of the macro, </div>
<div>and in this particular case it corresponds to "FileName".</div><div><br></div><div><br></div><div><br></div><div>In principle, we can adjust the configuration of the Doxygen</div><div>documentation to expand this macros in the HTML pages,</div>
<div>reflecting better what the compiler gets to see, after the</div><div>macros have been used to generate code.</div><div><br></div><div><br></div><div>This is done in the file:</div><div><br></div><div>ITK/Utilities/Doxygen/<a href="http://doxygen.config.in">doxygen.config.in</a><br>
</div><div><br></div><div><a href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Utilities/Doxygen/doxygen.config.in#L1961">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Utilities/Doxygen/doxygen.config.in#L1961</a><br>
</div><div><br></div><div><br></div><div><br></div><div><br></div><div>---------------------------------------</div><div><br></div><div><br></div><div>Hope this helps,</div><div><br></div><div><br></div><div>    Thanks</div>
<div><br></div><div>         Luis</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sat, May 10, 2014 at 6:15 AM, Michka Popoff <span dir="ltr"><<a href="mailto:michkapopoff@gmail.com" target="_blank">michkapopoff@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div>Hi</div><div><br></div><div>I merged your two questions in one topic, so I can answer the two at once.</div>
<div><br></div><div>In the class ImageFileReader, there is no SetFileName method. But the documentation states:</div><div><b>This source object is a general filter to read data from a variety of file formats. It works with a ImageIOBase subclass to actually do the reading of the data.</b></div>
<div><br></div><div>So if you go the ImageIOBase [1] class definition, you will find the SetFileName method. This can be confusing at the beginning, but when you don’t find a method somewhere (and this is often the case for most of projects you’ll find around, not only ITK), think to look at the parent class and the child/subclass. Often the methods are defined somewhere else.</div>
<div><br></div><div><br></div><div>For the Update() call, this is related to the ITK pipeline. Some detailed description can be found here [2]. There is also one article here [3] that is more readable, or there is a section (13.3) in the ITK software guide here [4].</div>
<div><br></div><div>Finally, we have a nice set of examples here [5] which show you how to use the ITK pipeline. This should help you getting started.</div><div><br></div><div><br></div><div>[1] <a href="http://www.itk.org/Insight/Doxygen/html/classitk_1_1ImageIOBase.html" target="_blank">http://www.itk.org/Insight/Doxygen/html/classitk_1_1ImageIOBase.html</a></div>
<div>[2] <a href="http://www.itk.org/Doxygen/html/classitk_1_1DataObject.html" target="_blank">http://www.itk.org/Doxygen/html/classitk_1_1DataObject.html</a></div><div>[3] <a href="http://www.kitware.com/media/html/IOStreamingInITK.html" target="_blank">http://www.kitware.com/media/html/IOStreamingInITK.html</a></div>
<div>[4] <a href="http://www.itk.org/ItkSoftwareGuide.pdf" target="_blank">http://www.itk.org/ItkSoftwareGuide.pdf</a></div><div>[5] <a href="http://itk.org/ITKExamples/" target="_blank">http://itk.org/ITKExamples/</a></div>
</div><div><br></div><br><div><div><div class="h5"><div>On 9 mai 2014, at 22:45, Simplicity Peace <<a href="mailto:simplicitypeacescm@gmail.com" target="_blank">simplicitypeacescm@gmail.com</a>> wrote:</div><br></div>
</div><blockquote type="cite"><div><div class="h5"><div dir="ltr"><div>Hello,<br><br></div>For instance, I tried to look for the functions of the class "ImageFileReader". In the ITK software guide, a function called "SetFileName" was used. I thought of looking for the functions that come under that class <a href="http://www.itk.org/Insight/Doxygen/html/classitk_1_1ImageFileReader.html#pub-methods" target="_blank">here</a>, but couldn't find that "SetFileName" function. Am I searching in the wrong place?<br>

<br>Thanks.<br></div></div></div>
_______________________________________________<br>Community mailing list<br><a href="mailto:Community@itk.org" target="_blank">Community@itk.org</a><br><a href="http://public.kitware.com/cgi-bin/mailman/listinfo/community" target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/community</a><br>
</blockquote></div><br><div><div><blockquote type="cite"><blockquote type="cite">Hello,<br><br>I'm new to `ITK`. I just want to ask, what does `Update()` mean? For example, I found that I had to use it with an `ImageFileReader`. Why is that?<br>
<br>Thanks.</blockquote></blockquote></div></div></div><br>_______________________________________________<br>
Community mailing list<br>
<a href="mailto:Community@itk.org">Community@itk.org</a><br>
<a href="http://public.kitware.com/cgi-bin/mailman/listinfo/community" target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/community</a><br>
<br></blockquote></div><br></div>