Thanks Luis,<br>
<br>
i studied this already, but it does not explain everything i need.
Moreover, implementing factory for templated class requires some extra
effort.<br>
<br>
Can you consider the solution suggested by Gaetan, please? It seems
really practical, while it does not affect existing code based on FFT
in any way.<br>
<br>
Regards,<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jakub<br>
<br><br><div><span class="gmail_quote">2006/10/26, Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><br>Hi Jakub,<br><br><br>If you are interested in overriding a factory with another one,<br>you may want to look at the following course material:<br><br><br><a href="http://www.na-mic.org/Wiki/index.php/Dissemination:EPFL_Workshop_2005">
http://www.na-mic.org/Wiki/index.php/Dissemination:EPFL_Workshop_2005</a><br><br><br>In particular to the presentation:<br><br><a href="http://www.na-mic.org/Wiki/images/2/24/Insight-DesignPatterns.ppt">http://www.na-mic.org/Wiki/images/2/24/Insight-DesignPatterns.ppt
</a><br><br><br>The discussion on Factories starts on slide 53.<br><br>The source code of examples for Factories can be found at<br><br><a href="http://www.na-mic.org:8000/svn/NAMICSandBox/trunk/ITKAdvancedCourse/">http://www.na-mic.org:8000/svn/NAMICSandBox/trunk/ITKAdvancedCourse/
</a><br><br><br>In Exercise 29:<br><a href="http://www.na-mic.org:8000/svn/NAMICSandBox/trunk/ITKAdvancedCourse/src/Exercises/exercise29/">http://www.na-mic.org:8000/svn/NAMICSandBox/trunk/ITKAdvancedCourse/src/Exercises/exercise29/
</a><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;Regards,<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luis<br><br><br>=---------------------------<br>Jakub Bican wrote:<br>&gt;<br>&gt; Hi Gaetan,<br>&gt;<br>&gt; as i more and more understand the problem of factories, it is clear to
<br>&gt; me, that this is the most elegant solution.<br>&gt;<br>&gt; Your suggestion have to be complicated only a little bit more by<br>&gt; determining, if the actual PixelType matches the type of FFTW library<br>&gt; linked: 
i.e. use FFTW only if FFTWF is defined and PixelType is float or<br>&gt; FFTWD is defined and pixeltype is double.<br>&gt;<br>&gt; There should be also check if there is some factory for the class, as it<br>&gt; is in itkNewMacro (in case someone will use dynamic library with new FFT
<br>&gt; implementation)<br>&gt;<br>&gt; Is it possible to make such change to ITK cvs version?<br>&gt;<br>&gt; I hope this will help to many people that are writing filters using FFT.<br>&gt;<br>&gt; Thanks,<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jakub
<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; Gaetan Lehmann napsal(a):<br>&gt;<br>&gt;&gt;<br>&gt;&gt; Hi Jakub,<br>&gt;&gt;<br>&gt;&gt; That's only my point of view, but don't you think that the factory is<br>&gt;&gt; quite complicated for that case ?
<br>&gt;&gt; IMHO opinion, a customized New() method in<br>&gt;&gt; RealToComplexConjugateImageFilter would do the job without problem.<br>&gt;&gt; Something like:<br>&gt;&gt;<br>&gt;&gt; static Pointer New()<br>&gt;&gt;&nbsp;&nbsp; {
<br>&gt;&gt; #if defined(USE_FFTWF)<br>&gt;&gt;&nbsp;&nbsp; return FFTWRealToComplexConjugateImageFilter&lt;PixelType,<br>&gt;&gt; ImageDimension&gt;::New().GetPointer();<br>&gt;&gt; #else<br>&gt;&gt;&nbsp;&nbsp; return VnlFFTRealToComplexConjugateImageFilter&lt;PixelType,
<br>&gt;&gt; ImageDimension&gt;::New().GetPointer();<br>&gt;&gt; #endif<br>&gt;&gt;&nbsp;&nbsp; }<br>&gt;&gt;<br>&gt;&gt; Regards,<br>&gt;&gt;<br>&gt;&gt; Gaetan<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; On Thu, 26 Oct 2006 11:51:13 +0200, Jakub Bican
<br>&gt;&gt; &lt;<a href="mailto:jakub.bican@matfyz.cz">jakub.bican@matfyz.cz</a>&gt; wrote:<br>&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Hi,<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; things seem more clear now: I have to make just one class
<br>&gt;&gt;&gt; (FFTFactory:ObjectFactoryBase) that calls RegisterOverride() in its<br>&gt;&gt;&gt; constructor to override creation of RealToComplexConjugateImageFilter<br>&gt;&gt;&gt; and ComplexConjugateToRealImageFilter by available implementation
<br>&gt;&gt;&gt; from VNL or FFTW.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; But the questions remains the same:<br>&gt;&gt;&gt; 1) how to register this factory as &quot;implicit default factory&quot; -<br>&gt;&gt;&gt; without need to register it manually in every filter or every program
<br>&gt;&gt;&gt; that uses FFT<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; 2) what happens if there will be new FFT implementation in dynamic<br>&gt;&gt;&gt; library, that will override in the same way - which factory will have<br>&gt;&gt;&gt; priority? (if the dynamic one overrides the default one, then it is
<br>&gt;&gt;&gt; ok - that is the intention, but does it really happen?)<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Regards,<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jakub<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;
<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; -------- Původní zpráva --------<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Hello,<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; i would like to implement a factory mechanism for FFT filters. The<br>&gt;&gt;&gt; point is that if the user selects &quot;USE_FFTW&quot; once during
<br>&gt;&gt;&gt; configuration, then the factory mechanism will provide him FFTW-based<br>&gt;&gt;&gt; classes instead of standard VNL implementation. And user can also<br>&gt;&gt;&gt; create his own dll with some fft implementation and attach it
<br>&gt;&gt;&gt; dynamically to his project.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; I studied the tutorial<br>&gt;&gt;&gt; (<a href="http://www.na-mic.org/Wiki/images/2/24/Insight-DesignPatterns.ppt">http://www.na-mic.org/Wiki/images/2/24/Insight-DesignPatterns.ppt
</a>)<br>&gt;&gt;&gt; including examples.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; I would like to ask someone if i understand well what i have to do:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; step A) create factories FFTWFFTFactory and VNLFFTFactory (derived
<br>&gt;&gt;&gt; from following class), that will override creation of<br>&gt;&gt;&gt; RealToComplexConjugateImageFilter and<br>&gt;&gt;&gt; ComplexConjugateToRealImageFilter types so that an instance from<br>&gt;&gt;&gt; appropriate implementation is created.
<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; step B) create class FFTFactoryBase (derived from ObjectFactoryBase)<br>&gt;&gt;&gt; that will be implemented similary to TransformFactoryBase and that<br>&gt;&gt;&gt; will register one of the above factories, depending on if the FFTW is
<br>&gt;&gt;&gt; used or not<br>&gt;&gt;&gt; (this is difference to TransformFactoryBase, which registers all<br>&gt;&gt;&gt; known factories, while the new class will register only one depending<br>&gt;&gt;&gt; on configuration)
<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; And i have some questions:<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; 1) what is the correct way of registering FFTFactoryBase<br>&gt;&gt;&gt; automatically, so that it registers appropriate factory &quot;at the
<br>&gt;&gt;&gt; beginning&quot;?<br>&gt;&gt;&gt; I don't want to register it explicitly at the beginning of every<br>&gt;&gt;&gt; program that will use FFT - i just want to call<br>&gt;&gt;&gt; RealToComplexConjugateImageFilter::New() and get FFTW implementation
<br>&gt;&gt;&gt; if i attached FFTW library to ITK or VNL implementation otherwise.<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; 2) what happens if someone loads dll into ITK_AUTOLOAD_PATH with a<br>&gt;&gt;&gt; new FFT implementation and corresponding factory? What will be
<br>&gt;&gt;&gt; overriden by what?<br>&gt;&gt;&gt;<br>&gt;&gt;&gt; Thanks in advance for guidance and answers,<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;Jakub<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;<br>&gt;&gt;&gt;
<br>&gt;&gt;&gt; _______________________________________________<br>&gt;&gt;&gt; Insight-users mailing list<br>&gt;&gt;&gt; <a href="mailto:Insight-users@itk.org">Insight-users@itk.org</a><br>&gt;&gt;&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users">
http://www.itk.org/mailman/listinfo/insight-users</a><br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; --Gaëtan Lehmann<br>&gt;&gt; Biologie du Développement et de la Reproduction<br>&gt;&gt; INRA de Jouy-en-Josas (France)
<br>&gt;&gt; tel: +33 1 34 65 29 66&nbsp;&nbsp;&nbsp;&nbsp;fax: 01 34 65 29 09<br>&gt;&gt; <a href="http://voxel.jouy.inra.fr">http://voxel.jouy.inra.fr</a><br>&gt;&gt;<br>&gt;&gt;<br>&gt; _______________________________________________<br>&gt; Insight-users mailing list
<br>&gt; <a href="mailto:Insight-users@itk.org">Insight-users@itk.org</a><br>&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</a><br>&gt;<br><br></blockquote>
</div><br>