<br>thank you, that works indeed.<br><br>cheers, Michael<br><br><br><div class="gmail_quote">On Tue, Mar 30, 2010 at 3:31 PM, Luis Ibanez <span dir="ltr">&lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi Michiel,<br>
<br>
You don&#39;t need to get that direction matrix as a reference.<br>
<br>
If you get it as a copy, things should go smoothly and<br>
the compiler should be happy.<br>
<br>
<br>
Instead of:<br>
<div class="im"><br>
   const ImageType::DirectionType &amp; direction = image-&gt;GetDirection();<br>
<br>
</div>you need to do:<br>
<div class="im"><br>
   ImageType::DirectionType   direction = image-&gt;GetDirection();<br>
<br>
</div>then you modify &quot;direction&quot;, to apply your rotation,<br>
and when you are done,<br>
you set it back to the image by calling:<br>
<br>
             image-&gt;SetDirection(   direction  );<br>
<br>
<br>
<br>
    Regards,<br>
<br>
<br>
         Luis<br>
<br>
-------------------------------------------------------------------------------<br>
On Tue, Mar 30, 2010 at 6:14 AM, michiel mentink<br>
<div><div></div><div class="h5">&lt;<a href="mailto:michael.mentink@st-hughs.ox.ac.uk">michael.mentink@st-hughs.ox.ac.uk</a>&gt; wrote:<br>
&gt; Dear Luis,<br>
&gt;<br>
&gt; thank you for your reply, now I understand what is meant!<br>
&gt;<br>
&gt; Direction is from an image:<br>
&gt;<br>
&gt;   const ImageType::DirectionType &amp; direction = image-&gt;GetDirection();<br>
&gt;<br>
&gt; I&#39;m trying to rotate the image by just changing the direction matrix of the<br>
&gt; image.<br>
&gt;<br>
&gt; Unfortunately, when I just leave out &#39;const&#39; from that line, the compiler<br>
&gt; complains<br>
&gt; that it&#39;s not the same type as expected.<br>
&gt;<br>
&gt; Maybe I should just create a new matrix, copy the value of<br>
&gt; image-&gt;GetDirection()<br>
&gt; into it, apply the rotation, and use image-&gt;SetDirection()?<br>
&gt;<br>
&gt; cheers, Michael<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Mar 29, 2010 at 11:04 PM, Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com">luis.ibanez@kitware.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Michiel,<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; It is excellent that you are diving into the code<br>
&gt;&gt; looking for deeper understanding !<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; The message that you get indicates that you are<br>
&gt;&gt; attempting to change the value of a variable that<br>
&gt;&gt; has been declared &quot;const&quot; previously.<br>
&gt;&gt;<br>
&gt;&gt; The &quot;const&quot; declaration is a promise made to the<br>
&gt;&gt; compiler, stating that you will not change the value<br>
&gt;&gt; of that variable.<br>
&gt;&gt;<br>
&gt;&gt; When the compiler catch you breaking that promise,<br>
&gt;&gt; it get angry at you and gives you the error message:<br>
&gt;&gt;<br>
&gt;&gt; &quot;error: passing ‘const   X to  Z discards qualifiers&quot;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Where the &quot;qualifier&quot; refers to the &quot;const&quot; property<br>
&gt;&gt; of that variable.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; The error message indicates that you are calling<br>
&gt;&gt; the operator=() method on a const matrix (as left<br>
&gt;&gt; argument of the = ).<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; You did so, with an expression such as:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;  const MatrixType  myConstMatrixThatWillNeverChange;<br>
&gt;&gt;<br>
&gt;&gt;  myConstMatrixThatWillNeverChange = anotherMatrix;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; This may also happens implicitly if the matrix<br>
&gt;&gt; happens to be a member variable of a class,<br>
&gt;&gt; and you attempt to do such assignment inside<br>
&gt;&gt; a &quot;const&quot; method of the class.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; If you share with use the exact declaration of your<br>
&gt;&gt; &quot;direction&quot; matrix we could tell you more about how<br>
&gt;&gt; to get around the problem.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;       Regards,<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;             Luis<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --------------------------------------------------------------------------<br>
&gt;&gt; On Mon, Mar 29, 2010 at 12:01 PM, michiel mentink<br>
&gt;&gt; &lt;<a href="mailto:michael.mentink@st-hughs.ox.ac.uk">michael.mentink@st-hughs.ox.ac.uk</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; In an autodidactic effort, I&#39;m trying to rotate an image by &#39;hand&#39;, by<br>
&gt;&gt; &gt; multiplying the &#39;direction&#39; matrix of an image by a rotation matrix.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; To do that, I&#39;m copying bits out of itkEuler3DTransform.txx<br>
&gt;&gt; &gt; In that file, a RotationX matrix is defined:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Matrix&lt;TScalarType,3,3&gt; RotationX<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; However, when I try doing that, I&#39;m getting the following error:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; error: passing ‘const itk::Matrix&lt;double, 3u, 3u&gt;’ as ‘this’ argument of<br>
&gt;&gt; &gt; ‘const itk::Matrix&lt;T, NRows, NColumns&gt;&amp; itk::Matrix&lt;T, NRows,<br>
&gt;&gt; &gt; NColumns&gt;::operator=(const itk::Matrix&lt;T, NRows, NColumns&gt;&amp;) [with T =<br>
&gt;&gt; &gt; double, unsigned int NRows = 3u, unsigned int NColumns = 3u]’ discards<br>
&gt;&gt; &gt; qualifiers<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 1) What does this mean?<br>
&gt;&gt; &gt; 2) How do I get my beloved Matrix?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; #include &lt;itkMatrix.h&gt;<br>
&gt;&gt; &gt; #include &lt;vnl/vnl_matrix.h&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;   typedef itk::Matrix&lt;double,3,3&gt; Matrix;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;   Matrix RotationX;<br>
&gt;&gt; &gt;  // ImageType::DirectionType RotationX;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; //  vnl_matrix_fixed&lt;double,3,3&gt; RotationX;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;   RotationX[0][0] = 1; RotationX[0][1] =   0; RotationX[0][2] = 0;<br>
&gt;&gt; &gt;   RotationX[1][0] = 0; RotationX[1][1] =  cx; RotationX[1][2] = sx;<br>
&gt;&gt; &gt;   RotationX[2][0] = 0; RotationX[2][1] = -sx; RotationX[2][2] = cx;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;   direction = direction*RotationX;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; cheers,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Michael<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _____________________________________<br>
&gt;&gt; &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Visit other Kitware open-source projects at<br>
&gt;&gt; &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt;&gt; &gt; <a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt;&gt; &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Follow this link to subscribe/unsubscribe:<br>
&gt;&gt; &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>