<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.5"/> <title>Eigen: Transform.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="navtree.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="resize.js"></script> <script type="text/javascript" src="navtree.js"></script> <script type="text/javascript"> $(document).ready(initResizable); $(window).load(resizeHeight); </script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> <link href="eigendoxy.css" rel="stylesheet" type="text/css"> <!-- --> <script type="text/javascript" src="eigen_navtree_hacks.js"></script> <!-- <script type="text/javascript"> --> <!-- </script> --> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <!-- <a name="top"></a> --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td id="projectlogo"><img alt="Logo" src="Eigen_Silly_Professor_64x64.png"/></td> <td style="padding-left: 0.5em;"> <div id="projectname"><a href="http://eigen.tuxfamily.org">Eigen</a>  <span id="projectnumber">3.2.0</span> </div> </td> <td> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> <img id="MSearchSelect" src="search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Search" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> </span><span class="right"> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.5 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> </div><!-- top --> <div id="side-nav" class="ui-resizable side-nav-resizable"> <div id="nav-tree"> <div id="nav-tree-contents"> <div id="nav-sync" class="sync"></div> </div> </div> <div id="splitbar" style="-moz-user-select:none;" class="ui-resizable-handle"> </div> </div> <script type="text/javascript"> $(document).ready(function(){initNavTree('Transform_8h_source.html','');}); </script> <div id="doc-content"> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Pages</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div class="header"> <div class="headertitle"> <div class="title">Transform.h</div> </div> </div><!--header--> <div class="contents"> <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// This file is part of Eigen, a lightweight C++ template library</span></div> <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// for linear algebra.</span></div> <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">//</span></div> <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr></span></div> <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com></span></div> <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// Copyright (C) 2010 Hauke Heibel <hauke.heibel@gmail.com></span></div> <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">//</span></div> <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This Source Code Form is subject to the terms of the Mozilla</span></div> <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// Public License v. 2.0. If a copy of the MPL was not distributed</span></div> <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.</span></div> <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div> <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#ifndef EIGEN_TRANSFORM_H</span></div> <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor"></span><span class="preprocessor">#define EIGEN_TRANSFORM_H</span></div> <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="keyword">namespace </span>Eigen { </div> <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div> <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">namespace </span>internal {</div> <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div> <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">template</span><<span class="keyword">typename</span> Transform></div> <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="keyword">struct </span>transform_traits</div> <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div> <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="keyword">enum</span></div> <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  {</div> <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  Dim = Transform::Dim,</div> <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  HDim = Transform::HDim,</div> <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  Mode = Transform::Mode,</div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  IsProjective = (int(Mode)==int(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>))</div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  };</div> <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> };</div> <div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="keyword">template</span>< <span class="keyword">typename</span> TransformType,</div> <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <span class="keyword">typename</span> MatrixType,</div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <span class="keywordtype">int</span> Case = transform_traits<TransformType>::IsProjective ? 0</div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  : int(MatrixType::RowsAtCompileTime) == int(transform_traits<TransformType>::HDim) ? 1</div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  : 2></div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">struct </span>transform_right_product_impl;</div> <div class="line"><a name="l00037"></a><span class="lineno"> 37</span> </div> <div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">template</span>< <span class="keyword">typename</span> Other,</div> <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordtype">int</span> Mode,</div> <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <span class="keywordtype">int</span> Options,</div> <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordtype">int</span> Dim,</div> <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordtype">int</span> HDim,</div> <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordtype">int</span> OtherRows=Other::RowsAtCompileTime,</div> <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordtype">int</span> OtherCols=Other::ColsAtCompileTime></div> <div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">struct </span>transform_left_product_impl;</div> <div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div> <div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">template</span>< <span class="keyword">typename</span> Lhs,</div> <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="keyword">typename</span> Rhs,</div> <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keywordtype">bool</span> AnyProjective = </div> <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  transform_traits<Lhs>::IsProjective ||</div> <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  transform_traits<Rhs>::IsProjective></div> <div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">struct </span>transform_transform_product_impl;</div> <div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div> <div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">template</span>< <span class="keyword">typename</span> Other,</div> <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordtype">int</span> Mode,</div> <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordtype">int</span> Options,</div> <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordtype">int</span> Dim,</div> <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordtype">int</span> HDim,</div> <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="keywordtype">int</span> OtherRows=Other::RowsAtCompileTime,</div> <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordtype">int</span> OtherCols=Other::ColsAtCompileTime></div> <div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">struct </span>transform_construct_from_matrix;</div> <div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div> <div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">template</span><<span class="keyword">typename</span> TransformType> <span class="keyword">struct </span>transform_take_affine_part;</div> <div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div> <div class="line"><a name="l00065"></a><span class="lineno"> 65</span> } <span class="comment">// end namespace internal</span></div> <div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div> <div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keyword">template</span><<span class="keyword">typename</span> _Scalar, <span class="keywordtype">int</span> _Dim, <span class="keywordtype">int</span> _Mode, <span class="keywordtype">int</span> _Options></div> <div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keyword">class </span>Transform</div> <div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div> <div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00179"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a08fcfa17a274862a36b5908d2b261e0d"> 179</a></span>  <a class="code" href="classEigen_1_1Transform.html#a08fcfa17a274862a36b5908d2b261e0d">EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE</a>(_Scalar,_Dim==<a class="code" href="namespaceEigen.html#adc9da5be31bdce40c25a92c27999c0e3">Dynamic</a> ? <a class="code" href="namespaceEigen.html#adc9da5be31bdce40c25a92c27999c0e3">Dynamic</a> : (_Dim+1)*(_Dim+1))</div> <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  enum {</div> <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  Mode = _Mode,</div> <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  Options = _Options,</div> <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  Dim = _Dim, </div> <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  HDim = _Dim+1, </div> <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  Rows = int(Mode)==(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>) ? Dim : HDim</div> <div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aea29b63b6c32046ae9a471d82c5cf869"> 186</a></span>  };</div> <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">typedef</span> _Scalar <a class="code" href="classEigen_1_1Transform.html#aea29b63b6c32046ae9a471d82c5cf869">Scalar</a>;</div> <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">typedef</span> DenseIndex Index;</div> <div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a5a1112983fef15f856661bc7a70821c2"> 191</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classEigen_1_1Matrix.html">internal::make_proper_matrix_type<Scalar,Rows,HDim,Options>::type</a> <a class="code" href="classEigen_1_1Transform.html#a5a1112983fef15f856661bc7a70821c2">MatrixType</a>;</div> <div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ac02f5facfe284620ba0141a95ec9a8fa"> 193</a></span>  <span class="keyword">typedef</span> <span class="keyword">const</span> MatrixType <a class="code" href="classEigen_1_1Transform.html#ac02f5facfe284620ba0141a95ec9a8fa">ConstMatrixType</a>;</div> <div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ade2ee06371d257b0eff58531d95a6474"> 195</a></span>  <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Matrix.html">Matrix<Scalar,Dim,Dim,Options></a> <a class="code" href="classEigen_1_1Transform.html#ade2ee06371d257b0eff58531d95a6474">LinearMatrixType</a>;</div> <div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ace20e267fb08cb804ed64fd1dad1d17c"> 197</a></span>  <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Block.html">Block<MatrixType,Dim,Dim,int(Mode)==(AffineCompact)></a> <a class="code" href="classEigen_1_1Transform.html#ace20e267fb08cb804ed64fd1dad1d17c">LinearPart</a>;</div> <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a8dcfbc5a318cc1f7d10073ffa959051c"> 199</a></span>  <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classEigen_1_1Block.html">Block<ConstMatrixType,Dim,Dim,int(Mode)==(AffineCompact)></a> <a class="code" href="classEigen_1_1Transform.html#a8dcfbc5a318cc1f7d10073ffa959051c">ConstLinearPart</a>;</div> <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::conditional<int(Mode)==int(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>),</div> <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  MatrixType&,</div> <div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aa15d55b76aa1df369db63ff8c000d71a"> 203</a></span>  <a class="code" href="classEigen_1_1Block.html">Block<MatrixType,Dim,HDim></a> >::type <a class="code" href="classEigen_1_1Transform.html#aa15d55b76aa1df369db63ff8c000d71a">AffinePart</a>;</div> <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> internal::conditional<int(Mode)==int(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>),</div> <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="keyword">const</span> MatrixType&,</div> <div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a76d43dc15b6966af98842e5219152cf2"> 207</a></span>  <span class="keyword">const</span> <a class="code" href="classEigen_1_1Block.html">Block<const MatrixType,Dim,HDim></a> >::type <a class="code" href="classEigen_1_1Transform.html#a76d43dc15b6966af98842e5219152cf2">ConstAffinePart</a>;</div> <div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a0c16671587fa0dc76fafeb486d6461c3"> 209</a></span>  <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Matrix.html">Matrix<Scalar,Dim,1></a> <a class="code" href="classEigen_1_1Transform.html#a0c16671587fa0dc76fafeb486d6461c3">VectorType</a>;</div> <div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aa94dac47195ab409fd1535c152405505"> 211</a></span>  <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Block.html">Block<MatrixType,Dim,1,int(Mode)==(AffineCompact)></a> <a class="code" href="classEigen_1_1Transform.html#aa94dac47195ab409fd1535c152405505">TranslationPart</a>;</div> <div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4b5352e0747f0354c659edf2eff9f35b"> 213</a></span>  <span class="keyword">typedef</span> <span class="keyword">const</span> <a class="code" href="classEigen_1_1Block.html">Block<ConstMatrixType,Dim,1,int(Mode)==(AffineCompact)></a> <a class="code" href="classEigen_1_1Transform.html#a4b5352e0747f0354c659edf2eff9f35b">ConstTranslationPart</a>;</div> <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ac54aa49e111f1afc14c11a3a671993ca"> 215</a></span>  <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Translation.html">Translation<Scalar,Dim></a> <a class="code" href="classEigen_1_1Transform.html#ac54aa49e111f1afc14c11a3a671993ca">TranslationType</a>;</div> <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  </div> <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="comment">// this intermediate enum is needed to avoid an ICE with gcc 3.4 and 4.0</span></div> <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keyword">enum</span> { TransformTimeDiagonalMode = ((Mode==int(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>))?<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a>:<span class="keywordtype">int</span>(Mode)) };</div> <div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#adb187d1758687a8de4dd9ea275f2a0a7"> 220</a></span>  <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,TransformTimeDiagonalMode></a> <a class="code" href="classEigen_1_1Transform.html#adb187d1758687a8de4dd9ea275f2a0a7">TransformTimeDiagonalReturnType</a>;</div> <div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div> <div class="line"><a name="l00222"></a><span class="lineno"> 222</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div> <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  MatrixType m_matrix;</div> <div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div> <div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div> <div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a9de68ec1c9b7809129814a3233ae4655"> 230</a></span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html#a9de68ec1c9b7809129814a3233ae4655">Transform</a>()</div> <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div> <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  check_template_params();</div> <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">if</span> (<span class="keywordtype">int</span>(Mode)==<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a>)</div> <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  makeAffine();</div> <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div> <div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div> <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& other)</div> <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  {</div> <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  check_template_params();</div> <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  m_matrix = other.m_matrix;</div> <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  }</div> <div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div> <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">inline</span> <span class="keyword">explicit</span> Transform(<span class="keyword">const</span> TranslationType& t)</div> <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  {</div> <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  check_template_params();</div> <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  *<span class="keyword">this</span> = t;</div> <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div> <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">inline</span> <span class="keyword">explicit</span> Transform(<span class="keyword">const</span> UniformScaling<Scalar>& s)</div> <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div> <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  check_template_params();</div> <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  *<span class="keyword">this</span> = s;</div> <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  }</div> <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Derived></div> <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="keyword">inline</span> <span class="keyword">explicit</span> Transform(<span class="keyword">const</span> RotationBase<Derived, Dim>& r)</div> <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div> <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  check_template_params();</div> <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  *<span class="keyword">this</span> = r;</div> <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div> <div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div> <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keyword">inline</span> Transform& operator=(<span class="keyword">const</span> Transform& other)</div> <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  { m_matrix = other.m_matrix; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div> <div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div> <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keyword">typedef</span> internal::transform_take_affine_part<Transform> take_affine_part;</div> <div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div> <div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ae80ecf3abb4b22d409c5adbd19850aa8"> 267</a></span>  <span class="keyword">inline</span> <span class="keyword">explicit</span> <a class="code" href="classEigen_1_1Transform.html#ae80ecf3abb4b22d409c5adbd19850aa8">Transform</a>(<span class="keyword">const</span> <a class="code" href="structEigen_1_1EigenBase.html">EigenBase<OtherDerived></a>& other)</div> <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  {</div> <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  EIGEN_STATIC_ASSERT((internal::is_same<Scalar,typename OtherDerived::Scalar>::value),</div> <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY);</div> <div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div> <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  check_template_params();</div> <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  internal::transform_construct_from_matrix<OtherDerived,Mode,Options,Dim,HDim>::run(<span class="keyword">this</span>, other.<a class="code" href="structEigen_1_1EigenBase.html#aa84222add803ad7c9db07dd4dd91d5d9">derived</a>());</div> <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  }</div> <div class="line"><a name="l00275"></a><span class="lineno"> 275</span> </div> <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a746fdf41f0377f203f231a1705cf6012"> 278</a></span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& <a class="code" href="classEigen_1_1Transform.html#a746fdf41f0377f203f231a1705cf6012">operator=</a>(<span class="keyword">const</span> <a class="code" href="structEigen_1_1EigenBase.html">EigenBase<OtherDerived></a>& other)</div> <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  {</div> <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  EIGEN_STATIC_ASSERT((internal::is_same<Scalar,typename OtherDerived::Scalar>::value),</div> <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY);</div> <div class="line"><a name="l00282"></a><span class="lineno"> 282</span> </div> <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  internal::transform_construct_from_matrix<OtherDerived,Mode,Options,Dim,HDim>::run(<span class="keyword">this</span>, other.<a class="code" href="structEigen_1_1EigenBase.html#aa84222add803ad7c9db07dd4dd91d5d9">derived</a>());</div> <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  }</div> <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  </div> <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> OtherOptions></div> <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,OtherOptions></a>& other)</div> <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div> <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  check_template_params();</div> <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="comment">// only the options change, we can directly copy the matrices</span></div> <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  m_matrix = other.matrix();</div> <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div> <div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div> <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> OtherMode,<span class="keywordtype">int</span> OtherOptions></div> <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">inline</span> Transform(<span class="keyword">const</span> Transform<Scalar,Dim,OtherMode,OtherOptions>& other)</div> <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div> <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  check_template_params();</div> <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="comment">// prevent conversions as:</span></div> <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// Affine | AffineCompact | Isometry = Projective</span></div> <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(OtherMode==<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>), Mode==<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>)),</div> <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)</div> <div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div> <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="comment">// prevent conversions as:</span></div> <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">// Isometry = Affine | AffineCompact</span></div> <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(OtherMode==<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a>)||OtherMode==<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>), Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>)),</div> <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  YOU_PERFORMED_AN_INVALID_TRANSFORMATION_CONVERSION)</div> <div class="line"><a name="l00308"></a><span class="lineno"> 308</span> </div> <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  enum { ModeIsAffineCompact = Mode == int(AffineCompact),</div> <div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  OtherModeIsAffineCompact = OtherMode == int(AffineCompact)</div> <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  };</div> <div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div> <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">if</span>(ModeIsAffineCompact == OtherModeIsAffineCompact)</div> <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  {</div> <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="comment">// We need the block expression because the code is compiled for all</span></div> <div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  <span class="comment">// combinations of transformations and will trigger a compile time error</span></div> <div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// if one tries to assign the matrices directly</span></div> <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  m_matrix.template block<Dim,Dim+1>(0,0) = other.matrix().template block<Dim,Dim+1>(0,0);</div> <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  makeAffine();</div> <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  }</div> <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(OtherModeIsAffineCompact)</div> <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div> <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> Transform<Scalar,Dim,OtherMode,OtherOptions>::MatrixType OtherMatrixType;</div> <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  internal::transform_construct_from_matrix<OtherMatrixType,Mode,Options,Dim,HDim>::run(<span class="keyword">this</span>, other.matrix());</div> <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  }</div> <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <span class="keywordflow">else</span></div> <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  {</div> <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="comment">// here we know that Mode == AffineCompact and OtherMode != AffineCompact.</span></div> <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="comment">// if OtherMode were Projective, the static assert above would already have caught it.</span></div> <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="comment">// So the only possibility is that OtherMode == Affine</span></div> <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  linear() = other.linear();</div> <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  translation() = other.translation();</div> <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div> <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div> <div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div> <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  Transform(<span class="keyword">const</span> ReturnByValue<OtherDerived>& other)</div> <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div> <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  check_template_params();</div> <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  other.evalTo(*<span class="keyword">this</span>);</div> <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div> <div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div> <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  Transform& operator=(<span class="keyword">const</span> ReturnByValue<OtherDerived>& other)</div> <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  {</div> <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  other.evalTo(*<span class="keyword">this</span>);</div> <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  }</div> <div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div> <div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor"> #ifdef EIGEN_QT_SUPPORT</span></div> <div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="preprocessor"></span> <span class="keyword">inline</span> Transform(<span class="keyword">const</span> QMatrix& other);</div> <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keyword">inline</span> Transform& operator=(<span class="keyword">const</span> QMatrix& other);</div> <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keyword">inline</span> QMatrix toQMatrix(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keyword">inline</span> Transform(<span class="keyword">const</span> QTransform& other);</div> <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">inline</span> Transform& operator=(<span class="keyword">const</span> QTransform& other);</div> <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">inline</span> QTransform toQTransform(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> #endif</span></div> <div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a84a0005514199136b5d20d8e626d47ff"> 361</a></span>  <span class="keyword">inline</span> Scalar operator() (Index row, Index col)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_matrix(row,col); }</div> <div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ac40b13c3b1b753f4f6aa8c6885eec706"> 364</a></span>  <span class="keyword">inline</span> Scalar& operator() (Index row, Index col) { <span class="keywordflow">return</span> m_matrix(row,col); }</div> <div class="line"><a name="l00365"></a><span class="lineno"> 365</span> </div> <div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#abc21b93260324521746a4ca2efacba90"> 367</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> MatrixType& <a class="code" href="classEigen_1_1Transform.html#abc21b93260324521746a4ca2efacba90">matrix</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_matrix; }</div> <div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ad7355bb89f8429007277363642c90bfd"> 369</a></span>  <span class="keyword">inline</span> MatrixType& <a class="code" href="classEigen_1_1Transform.html#ad7355bb89f8429007277363642c90bfd">matrix</a>() { <span class="keywordflow">return</span> m_matrix; }</div> <div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div> <div class="line"><a name="l00372"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#abbee559820c5cdfe7653a646396b0a8f"> 372</a></span>  <span class="keyword">inline</span> ConstLinearPart <a class="code" href="classEigen_1_1Transform.html#abbee559820c5cdfe7653a646396b0a8f">linear</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ConstLinearPart(m_matrix,0,0); }</div> <div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a66704eaad42c9dd8f3723746e264fcb2"> 374</a></span>  <span class="keyword">inline</span> LinearPart <a class="code" href="classEigen_1_1Transform.html#a66704eaad42c9dd8f3723746e264fcb2">linear</a>() { <span class="keywordflow">return</span> LinearPart(m_matrix,0,0); }</div> <div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div> <div class="line"><a name="l00377"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4edf00461b9e1ce0abb791cee8a12ca5"> 377</a></span>  <span class="keyword">inline</span> ConstAffinePart <a class="code" href="classEigen_1_1Transform.html#a4edf00461b9e1ce0abb791cee8a12ca5">affine</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> take_affine_part::run(m_matrix); }</div> <div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aa8e36298662286f4619b2cedf09e31e7"> 379</a></span>  <span class="keyword">inline</span> AffinePart <a class="code" href="classEigen_1_1Transform.html#aa8e36298662286f4619b2cedf09e31e7">affine</a>() { <span class="keywordflow">return</span> take_affine_part::run(m_matrix); }</div> <div class="line"><a name="l00380"></a><span class="lineno"> 380</span> </div> <div class="line"><a name="l00382"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4619e6e4e0659443ad2bdb24c80af281"> 382</a></span>  <span class="keyword">inline</span> ConstTranslationPart <a class="code" href="classEigen_1_1Transform.html#a4619e6e4e0659443ad2bdb24c80af281">translation</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> ConstTranslationPart(m_matrix,0,Dim); }</div> <div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a79881f97c02305c0eb4820d7df00bc09"> 384</a></span>  <span class="keyword">inline</span> TranslationPart <a class="code" href="classEigen_1_1Transform.html#a79881f97c02305c0eb4820d7df00bc09">translation</a>() { <span class="keywordflow">return</span> TranslationPart(m_matrix,0,Dim); }</div> <div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div> <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="comment">// note: this function is defined here because some compilers cannot find the respective declaration</span></div> <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  EIGEN_STRONG_INLINE <span class="keyword">const</span> <span class="keyword">typename</span> internal::transform_right_product_impl<Transform, OtherDerived>::ResultType</div> <div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a3846f7a4b892ed530881f52a5460ddf6"> 400</a></span>  <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> <a class="code" href="structEigen_1_1EigenBase.html">EigenBase<OtherDerived></a> &other)<span class="keyword"> const</span></div> <div class="line"><a name="l00401"></a><span class="lineno"> 401</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> internal::transform_right_product_impl<Transform, OtherDerived>::run(*<span class="keyword">this</span>,other.<a class="code" href="structEigen_1_1EigenBase.html#aa84222add803ad7c9db07dd4dd91d5d9">derived</a>()); }</div> <div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div> <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived> <span class="keyword">friend</span></div> <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keyword">typename</span> internal::transform_left_product_impl<OtherDerived,Mode,Options,_Dim,_Dim+1>::ResultType</div> <div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a213c219b6aa33d8348eaee56bc40bd7d"> 412</a></span>  <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> <a class="code" href="structEigen_1_1EigenBase.html">EigenBase<OtherDerived></a> &a, <span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a> &b)</div> <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  { <span class="keywordflow">return</span> internal::transform_left_product_impl<OtherDerived,Mode,Options,Dim,HDim>::run(a.<a class="code" href="structEigen_1_1EigenBase.html#aa84222add803ad7c9db07dd4dd91d5d9">derived</a>(),b); }</div> <div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div> <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keyword">template</span><<span class="keyword">typename</span> DiagonalDerived></div> <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keyword">inline</span> <span class="keyword">const</span> TransformTimeDiagonalReturnType</div> <div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4c475d88c97a844134130c603b4c6fe6"> 423</a></span>  <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> DiagonalBase<DiagonalDerived> &b)<span class="keyword"> const</span></div> <div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keyword"> </span>{</div> <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  TransformTimeDiagonalReturnType res(*<span class="keyword">this</span>);</div> <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  res.<a class="code" href="classEigen_1_1Transform.html#abbee559820c5cdfe7653a646396b0a8f">linear</a>() *= b;</div> <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  }</div> <div class="line"><a name="l00429"></a><span class="lineno"> 429</span> </div> <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keyword">template</span><<span class="keyword">typename</span> DiagonalDerived></div> <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keyword">friend</span> <span class="keyword">inline</span> TransformTimeDiagonalReturnType</div> <div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a8941cc25b120ff7ee7b435150ba699b3"> 438</a></span>  <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> DiagonalBase<DiagonalDerived> &a, <span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a> &b)</div> <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  {</div> <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  TransformTimeDiagonalReturnType res;</div> <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  res.<a class="code" href="classEigen_1_1Transform.html#abbee559820c5cdfe7653a646396b0a8f">linear</a>().noalias() = a*b.linear();</div> <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  res.<a class="code" href="classEigen_1_1Transform.html#a4619e6e4e0659443ad2bdb24c80af281">translation</a>().noalias() = a*b.translation();</div> <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="keywordflow">if</span> (Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>))</div> <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  res.<a class="code" href="classEigen_1_1Transform.html#abc21b93260324521746a4ca2efacba90">matrix</a>().<a class="code" href="classEigen_1_1DenseBase.html#aa8716d44f51321072ee5c88665c28813">row</a>(Dim) = b.matrix().row(Dim);</div> <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</div> <div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div> <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& operator*=(<span class="keyword">const</span> <a class="code" href="structEigen_1_1EigenBase.html">EigenBase<OtherDerived></a>& other) { <span class="keywordflow">return</span> *<span class="keyword">this</span> = *<span class="keyword">this</span> * other; }</div> <div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div> <div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a3001cf5afd95d96a4a229e0c5f817364"> 452</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a> <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& other)<span class="keyword"> const</span></div> <div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword"> </span>{</div> <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> internal::transform_transform_product_impl<Transform,Transform>::run(*<span class="keyword">this</span>,other);</div> <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div> <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  </div> <div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor"> #ifdef __INTEL_COMPILER</span></div> <div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="preprocessor"></span><span class="keyword">private</span>:</div> <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="comment">// this intermediate structure permits to workaround a bug in ICC 11:</span></div> <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="comment">// error: template instantiation resulted in unexpected function type of "Eigen::Transform<double, 3, 32, 0></span></div> <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="comment">// (const Eigen::Transform<double, 3, 2, 0> &) const"</span></div> <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="comment">// (the meaning of a name may have changed since the template declaration -- the type of the template is:</span></div> <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="comment">// "Eigen::internal::transform_transform_product_impl<Eigen::Transform<double, 3, 32, 0>,</span></div> <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="comment">// Eigen::Transform<double, 3, Mode, Options>, <expression>>::ResultType (const Eigen::Transform<double, 3, Mode, Options> &) const")</span></div> <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="comment">// </span></div> <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> OtherMode,<span class="keywordtype">int</span> OtherOptions> <span class="keyword">struct </span>icc_11_workaround</div> <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  {</div> <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keyword">typedef</span> internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> > ProductType;</div> <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> ProductType::ResultType ResultType;</div> <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  };</div> <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  </div> <div class="line"><a name="l00472"></a><span class="lineno"> 472</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> OtherMode,<span class="keywordtype">int</span> OtherOptions></div> <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keyword">inline</span> <span class="keyword">typename</span> icc_11_workaround<OtherMode,OtherOptions>::ResultType</div> <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> Transform<Scalar,Dim,OtherMode,OtherOptions>& other)<span class="keyword"> const</span></div> <div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="keyword"> </span>{</div> <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> icc_11_workaround<OtherMode,OtherOptions>::ProductType ProductType;</div> <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">return</span> ProductType::run(*<span class="keyword">this</span>,other);</div> <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div> <div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="preprocessor"> #else</span></div> <div class="line"><a name="l00482"></a><span class="lineno"> 482</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">template</span><<span class="keywordtype">int</span> OtherMode,<span class="keywordtype">int</span> OtherOptions></div> <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">inline</span> <span class="keyword">typename</span> internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> >::ResultType</div> <div class="line"><a name="l00485"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a75c357d299b0aa35926bc4602e9ee11e"> 485</a></span>  <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator * </a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,OtherMode,OtherOptions></a>& other)<span class="keyword"> const</span></div> <div class="line"><a name="l00486"></a><span class="lineno"> 486</span> <span class="keyword"> </span>{</div> <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">return</span> internal::transform_transform_product_impl<Transform,Transform<Scalar,Dim,OtherMode,OtherOptions> >::run(*<span class="keyword">this</span>,other);</div> <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  }</div> <div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> #endif</span></div> <div class="line"><a name="l00490"></a><span class="lineno"> 490</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a382e6ad7e6721b121e510959e1011be3"> 492</a></span>  <span class="keywordtype">void</span> <a class="code" href="classEigen_1_1Transform.html#a382e6ad7e6721b121e510959e1011be3">setIdentity</a>() { m_matrix.<a class="code" href="classEigen_1_1MatrixBase.html#af1b15ae4c6f69b7324dd8ef70089dfc3">setIdentity</a>(); }</div> <div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div> <div class="line"><a name="l00498"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a70ece05618a24131d9bf29162a700c58"> 498</a></span>  <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a> <a class="code" href="classEigen_1_1Transform.html#a70ece05618a24131d9bf29162a700c58">Identity</a>()</div> <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  {</div> <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>(MatrixType::Identity());</div> <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  }</div> <div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div> <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& scale(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other);</div> <div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div> <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& prescale(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other);</div> <div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div> <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& scale(<span class="keyword">const</span> Scalar& s);</div> <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& prescale(<span class="keyword">const</span> Scalar& s);</div> <div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div> <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& translate(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other);</div> <div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div> <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& pretranslate(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other);</div> <div class="line"><a name="l00517"></a><span class="lineno"> 517</span> </div> <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">template</span><<span class="keyword">typename</span> RotationType></div> <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& rotate(<span class="keyword">const</span> RotationType& rotation);</div> <div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div> <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">template</span><<span class="keyword">typename</span> RotationType></div> <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& prerotate(<span class="keyword">const</span> RotationType& rotation);</div> <div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div> <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="classEigen_1_1Transform.html">Transform</a>& shear(<span class="keyword">const</span> Scalar& sx, <span class="keyword">const</span> Scalar& sy);</div> <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <a class="code" href="classEigen_1_1Transform.html">Transform</a>& preshear(<span class="keyword">const</span> Scalar& sx, <span class="keyword">const</span> Scalar& sy);</div> <div class="line"><a name="l00526"></a><span class="lineno"> 526</span> </div> <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& operator=(<span class="keyword">const</span> TranslationType& t);</div> <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& operator*=(<span class="keyword">const</span> TranslationType& t) { <span class="keywordflow">return</span> translate(t.vector()); }</div> <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keyword">inline</span> Transform <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator*</a>(<span class="keyword">const</span> TranslationType& t) <span class="keyword">const</span>;</div> <div class="line"><a name="l00530"></a><span class="lineno"> 530</span> </div> <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keyword">inline</span> Transform& operator=(<span class="keyword">const</span> UniformScaling<Scalar>& t);</div> <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keyword">inline</span> Transform& operator*=(<span class="keyword">const</span> UniformScaling<Scalar>& s) { <span class="keywordflow">return</span> scale(s.factor()); }</div> <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keyword">inline</span> Transform<Scalar,Dim,(int(Mode)==int(Isometry)?Affine:Isometry)> <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator*</a>(<span class="keyword">const</span> UniformScaling<Scalar>& s)<span class="keyword"> const</span></div> <div class="line"><a name="l00534"></a><span class="lineno"> 534</span> <span class="keyword"> </span>{</div> <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  Transform<Scalar,Dim,(int(Mode)==int(Isometry)?Affine:Isometry),Options> res = *<span class="keyword">this</span>;</div> <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  res.scale(s.factor());</div> <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div> <div class="line"><a name="l00539"></a><span class="lineno"> 539</span> </div> <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">inline</span> Transform& operator*=(<span class="keyword">const</span> DiagonalMatrix<Scalar,Dim>& s) { linear() *= s; <span class="keywordflow">return</span> *<span class="keyword">this</span>; }</div> <div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div> <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Derived></div> <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <span class="keyword">inline</span> Transform& operator=(<span class="keyword">const</span> RotationBase<Derived,Dim>& r);</div> <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Derived></div> <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">inline</span> Transform& operator*=(<span class="keyword">const</span> RotationBase<Derived,Dim>& r) { <span class="keywordflow">return</span> rotate(r.toRotationMatrix()); }</div> <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keyword">template</span><<span class="keyword">typename</span> Derived></div> <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keyword">inline</span> Transform <a class="code" href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">operator*</a>(<span class="keyword">const</span> RotationBase<Derived,Dim>& r) <span class="keyword">const</span>;</div> <div class="line"><a name="l00548"></a><span class="lineno"> 548</span> </div> <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keyword">const</span> LinearMatrixType rotation() <span class="keyword">const</span>;</div> <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keyword">template</span><<span class="keyword">typename</span> RotationMatrixType, <span class="keyword">typename</span> ScalingMatrixType></div> <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordtype">void</span> computeRotationScaling(RotationMatrixType *rotation, ScalingMatrixType *scaling) <span class="keyword">const</span>;</div> <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">template</span><<span class="keyword">typename</span> ScalingMatrixType, <span class="keyword">typename</span> RotationMatrixType></div> <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordtype">void</span> computeScalingRotation(ScalingMatrixType *scaling, RotationMatrixType *rotation) <span class="keyword">const</span>;</div> <div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div> <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keyword">template</span><<span class="keyword">typename</span> PositionDerived, <span class="keyword">typename</span> OrientationType, <span class="keyword">typename</span> ScaleDerived></div> <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  Transform& fromPositionOrientationScale(<span class="keyword">const</span> MatrixBase<PositionDerived> &position,</div> <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keyword">const</span> OrientationType& orientation, <span class="keyword">const</span> MatrixBase<ScaleDerived> &scale);</div> <div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div> <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keyword">inline</span> Transform inverse(<a class="code" href="group__enums.html#ga302a826315506a7217d4b477ea78425f">TransformTraits</a> traits = (<a class="code" href="group__enums.html#ga302a826315506a7217d4b477ea78425f">TransformTraits</a>)Mode) <span class="keyword">const</span>;</div> <div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div> <div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a40dcc334db75411e168691d9bce08c3a"> 562</a></span>  <span class="keyword">const</span> Scalar* <a class="code" href="classEigen_1_1Transform.html#a40dcc334db75411e168691d9bce08c3a">data</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_matrix.<a class="code" href="classEigen_1_1PlainObjectBase.html#a40dcc334db75411e168691d9bce08c3a">data</a>(); }</div> <div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4663159a1450fa89214b1ab71f7ef5bf"> 564</a></span>  Scalar* <a class="code" href="classEigen_1_1Transform.html#a4663159a1450fa89214b1ab71f7ef5bf">data</a>() { <span class="keywordflow">return</span> m_matrix.<a class="code" href="classEigen_1_1PlainObjectBase.html#a40dcc334db75411e168691d9bce08c3a">data</a>(); }</div> <div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div> <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keyword">template</span><<span class="keyword">typename</span> NewScalarType></div> <div class="line"><a name="l00572"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a5d8d5b5101ca4b34cb88fd4f71cec08e"> 572</a></span>  <span class="keyword">inline</span> <span class="keyword">typename</span> internal::cast_return_type<Transform,Transform<NewScalarType,Dim,Mode,Options> >::type <a class="code" href="classEigen_1_1Transform.html#a5d8d5b5101ca4b34cb88fd4f71cec08e">cast</a>()<span class="keyword"> const</span></div> <div class="line"><a name="l00573"></a><span class="lineno"> 573</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> <span class="keyword">typename</span> internal::cast_return_type<Transform,Transform<NewScalarType,Dim,Mode,Options> >::type(*<span class="keyword">this</span>); }</div> <div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div> <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keyword">template</span><<span class="keyword">typename</span> OtherScalarType></div> <div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4a1ecdb7e8eb963f3e167fa99faa5e95"> 577</a></span>  <span class="keyword">inline</span> <span class="keyword">explicit</span> <a class="code" href="classEigen_1_1Transform.html#a4a1ecdb7e8eb963f3e167fa99faa5e95">Transform</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform<OtherScalarType,Dim,Mode,Options></a>& other)</div> <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  {</div> <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  check_template_params();</div> <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  m_matrix = other.matrix().template cast<Scalar>();</div> <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  }</div> <div class="line"><a name="l00582"></a><span class="lineno"> 582</span> </div> <div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a970e36d17bd859badeacfbe73bc7364b"> 587</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classEigen_1_1Transform.html#a970e36d17bd859badeacfbe73bc7364b">isApprox</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1Transform.html">Transform</a>& other, <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="structEigen_1_1NumTraits.html">NumTraits<Scalar>::Real</a>& prec = <a class="code" href="structEigen_1_1NumTraits.html">NumTraits<Scalar>::dummy_precision</a>())<span class="keyword"> const</span></div> <div class="line"><a name="l00588"></a><span class="lineno"> 588</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> m_matrix.<a class="code" href="classEigen_1_1DenseBase.html#a158c2184951e6e415c2e9b98db8e8966">isApprox</a>(other.m_matrix, prec); }</div> <div class="line"><a name="l00589"></a><span class="lineno"> 589</span> </div> <div class="line"><a name="l00592"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a3de2b78841914f0f4e2a523c88b8530e"> 592</a></span>  <span class="keywordtype">void</span> <a class="code" href="classEigen_1_1Transform.html#a3de2b78841914f0f4e2a523c88b8530e">makeAffine</a>()</div> <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  {</div> <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordflow">if</span>(<span class="keywordtype">int</span>(Mode)!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>))</div> <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  {</div> <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  matrix().template block<1,Dim>(Dim,0).setZero();</div> <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  matrix().coeffRef(Dim,Dim) = Scalar(1);</div> <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  }</div> <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  }</div> <div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div> <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Block.html">Block<MatrixType,int(Mode)==int(Projective)?HDim:Dim,Dim></a> linearExt()</div> <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  { <span class="keywordflow">return</span> m_matrix.template block<int(Mode)==int(Projective)?HDim:Dim,Dim>(0,0); }</div> <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keyword">inline</span> <span class="keyword">const</span> Block<MatrixType,int(Mode)==int(Projective)?HDim:Dim,Dim> linearExt()<span class="keyword"> const</span></div> <div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> m_matrix.template block<int(Mode)==int(Projective)?HDim:Dim,Dim>(0,0); }</div> <div class="line"><a name="l00613"></a><span class="lineno"> 613</span> </div> <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">inline</span> Block<MatrixType,int(Mode)==int(Projective)?HDim:Dim,1> translationExt()</div> <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  { <span class="keywordflow">return</span> m_matrix.template block<int(Mode)==int(Projective)?HDim:Dim,1>(0,Dim); }</div> <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keyword">inline</span> <span class="keyword">const</span> Block<MatrixType,int(Mode)==int(Projective)?HDim:Dim,1> translationExt()<span class="keyword"> const</span></div> <div class="line"><a name="l00625"></a><span class="lineno"> 625</span> <span class="keyword"> </span>{ <span class="keywordflow">return</span> m_matrix.template block<int(Mode)==int(Projective)?HDim:Dim,1>(0,Dim); }</div> <div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div> <div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div> <div class="line"><a name="l00628"></a><span class="lineno"> 628</span> <span class="preprocessor"> #ifdef EIGEN_TRANSFORM_PLUGIN</span></div> <div class="line"><a name="l00629"></a><span class="lineno"> 629</span> <span class="preprocessor"></span><span class="preprocessor"> #include EIGEN_TRANSFORM_PLUGIN</span></div> <div class="line"><a name="l00630"></a><span class="lineno"> 630</span> <span class="preprocessor"></span><span class="preprocessor"> #endif</span></div> <div class="line"><a name="l00631"></a><span class="lineno"> 631</span> <span class="preprocessor"></span> </div> <div class="line"><a name="l00632"></a><span class="lineno"> 632</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l00633"></a><span class="lineno"> 633</span> <span class="preprocessor"> #ifndef EIGEN_PARSED_BY_DOXYGEN</span></div> <div class="line"><a name="l00634"></a><span class="lineno"> 634</span> <span class="preprocessor"></span> <span class="keyword">static</span> EIGEN_STRONG_INLINE <span class="keywordtype">void</span> check_template_params()</div> <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  {</div> <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  EIGEN_STATIC_ASSERT((Options & (<a class="code" href="group__enums.html#gga0c5bde183ecefe103f70b49ad9740bcda761c0504a518c7450ed6dfe9eaeab8a6">DontAlign</a>|<a class="code" href="group__enums.html#gga0c5bde183ecefe103f70b49ad9740bcda1e16fa1b92ed7a058cd4ce7a9a0db044">RowMajor</a>)) == Options, INVALID_MATRIX_TEMPLATE_PARAMETERS)</div> <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  }</div> <div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="preprocessor"> #endif</span></div> <div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00640"></a><span class="lineno"> 640</span> };</div> <div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div> <div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga4ee356e527fdc5aa9b048542ff6d4278"> 643</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,2,Isometry></a> <a class="code" href="group__Geometry__Module.html#ga4ee356e527fdc5aa9b048542ff6d4278">Isometry2f</a>;</div> <div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaaab0779d16c81454c038cee3324585f2"> 645</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,3,Isometry></a> <a class="code" href="group__Geometry__Module.html#gaaab0779d16c81454c038cee3324585f2">Isometry3f</a>;</div> <div class="line"><a name="l00647"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga3802603a0c0017d3bc38e1c2483bc0c8"> 647</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,2,Isometry></a> <a class="code" href="group__Geometry__Module.html#ga3802603a0c0017d3bc38e1c2483bc0c8">Isometry2d</a>;</div> <div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaf6a2d462b1cb12f96cb6baedc132a3f2"> 649</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,3,Isometry></a> <a class="code" href="group__Geometry__Module.html#gaf6a2d462b1cb12f96cb6baedc132a3f2">Isometry3d</a>;</div> <div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div> <div class="line"><a name="l00652"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaaacee014168e2286115b9acd93de9c77"> 652</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,2,Affine></a> <a class="code" href="group__Geometry__Module.html#gaaacee014168e2286115b9acd93de9c77">Affine2f</a>;</div> <div class="line"><a name="l00654"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaca1e57a15de08fe20c934c5600f19314"> 654</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,3,Affine></a> <a class="code" href="group__Geometry__Module.html#gaca1e57a15de08fe20c934c5600f19314">Affine3f</a>;</div> <div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaac62cb423a4af85793c656a9848282a0"> 656</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,2,Affine></a> <a class="code" href="group__Geometry__Module.html#gaac62cb423a4af85793c656a9848282a0">Affine2d</a>;</div> <div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga1cee3e45cad60050d3c94cf603e2ff45"> 658</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,3,Affine></a> <a class="code" href="group__Geometry__Module.html#ga1cee3e45cad60050d3c94cf603e2ff45">Affine3d</a>;</div> <div class="line"><a name="l00659"></a><span class="lineno"> 659</span> </div> <div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga2ffd4a2121dd59a3955735299e5e6364"> 661</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,2,AffineCompact></a> <a class="code" href="group__Geometry__Module.html#ga2ffd4a2121dd59a3955735299e5e6364">AffineCompact2f</a>;</div> <div class="line"><a name="l00663"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga1c999eef555fe940f147f3e8d18be6de"> 663</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,3,AffineCompact></a> <a class="code" href="group__Geometry__Module.html#ga1c999eef555fe940f147f3e8d18be6de">AffineCompact3f</a>;</div> <div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaa44476c8fb0e300b47e21111db7f8224"> 665</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,2,AffineCompact></a> <a class="code" href="group__Geometry__Module.html#gaa44476c8fb0e300b47e21111db7f8224">AffineCompact2d</a>;</div> <div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga40d0ecae258b06c9633323da78162515"> 667</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,3,AffineCompact></a> <a class="code" href="group__Geometry__Module.html#ga40d0ecae258b06c9633323da78162515">AffineCompact3d</a>;</div> <div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div> <div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#ga0af228e7443e5447de55bc7ba10b4d8e"> 670</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,2,Projective></a> <a class="code" href="group__Geometry__Module.html#ga0af228e7443e5447de55bc7ba10b4d8e">Projective2f</a>;</div> <div class="line"><a name="l00672"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gaaf2985f9f12b96ba19c07a5ecd47056b"> 672</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<float,3,Projective></a> <a class="code" href="group__Geometry__Module.html#gaaf2985f9f12b96ba19c07a5ecd47056b">Projective3f</a>;</div> <div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gab2b63f5ecf343e58bee2eb482592bc49"> 674</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,2,Projective></a> <a class="code" href="group__Geometry__Module.html#gab2b63f5ecf343e58bee2eb482592bc49">Projective2d</a>;</div> <div class="line"><a name="l00676"></a><span class="lineno"><a class="line" href="group__Geometry__Module.html#gad835f3f4d1783ee8b7ff85af90b9d13e"> 676</a></span> <span class="keyword">typedef</span> <a class="code" href="classEigen_1_1Transform.html">Transform<double,3,Projective></a> <a class="code" href="group__Geometry__Module.html#gad835f3f4d1783ee8b7ff85af90b9d13e">Projective3d</a>;</div> <div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div> <div class="line"><a name="l00678"></a><span class="lineno"> 678</span> <span class="comment">/**************************</span></div> <div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="comment">*** Optional QT support ***</span></div> <div class="line"><a name="l00680"></a><span class="lineno"> 680</span> <span class="comment">**************************/</span></div> <div class="line"><a name="l00681"></a><span class="lineno"> 681</span> </div> <div class="line"><a name="l00682"></a><span class="lineno"> 682</span> <span class="preprocessor">#ifdef EIGEN_QT_SUPPORT</span></div> <div class="line"><a name="l00683"></a><span class="lineno"> 683</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00687"></a><span class="lineno"> 687</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode,<span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00688"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aa5e266f2a7d9007d41655186de5b66be"> 688</a></span> <a class="code" href="classEigen_1_1Transform.html#a9de68ec1c9b7809129814a3233ae4655">Transform<Scalar,Dim,Mode,Options>::Transform</a>(<span class="keyword">const</span> QMatrix& other)</div> <div class="line"><a name="l00689"></a><span class="lineno"> 689</span> {</div> <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  check_template_params();</div> <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  *<span class="keyword">this</span> = other;</div> <div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div> <div class="line"><a name="l00693"></a><span class="lineno"> 693</span> </div> <div class="line"><a name="l00698"></a><span class="lineno"> 698</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode,<span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00699"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aa9e304d555b96b73ac4e8ca5a7f90d65"> 699</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>& <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::operator=</a>(<span class="keyword">const</span> QMatrix& other)</div> <div class="line"><a name="l00700"></a><span class="lineno"> 700</span> {</div> <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)</div> <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  m_matrix << other.m11(), other.m21(), other.dx(),</div> <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  other.m12(), other.m22(), other.dy(),</div> <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  0, 0, 1;</div> <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00706"></a><span class="lineno"> 706</span> }</div> <div class="line"><a name="l00707"></a><span class="lineno"> 707</span> </div> <div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00715"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a4721b3c0d0dc5c79fcd5dac8a352bc5c"> 715</a></span> QMatrix <a class="code" href="classEigen_1_1Transform.html#a4721b3c0d0dc5c79fcd5dac8a352bc5c">Transform<Scalar,Dim,Mode,Options>::toQMatrix</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div> <div class="line"><a name="l00716"></a><span class="lineno"> 716</span> <span class="keyword"></span>{</div> <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  check_template_params();</div> <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)</div> <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  <span class="keywordflow">return</span> QMatrix(m_matrix.coeff(0,0), m_matrix.coeff(1,0),</div> <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  m_matrix.coeff(0,1), m_matrix.coeff(1,1),</div> <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  m_matrix.coeff(0,2), m_matrix.coeff(1,2));</div> <div class="line"><a name="l00722"></a><span class="lineno"> 722</span> }</div> <div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div> <div class="line"><a name="l00728"></a><span class="lineno"> 728</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode,<span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00729"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a57dc9afa8645010c63677a60457071b2"> 729</a></span> <a class="code" href="classEigen_1_1Transform.html#a9de68ec1c9b7809129814a3233ae4655">Transform<Scalar,Dim,Mode,Options>::Transform</a>(<span class="keyword">const</span> QTransform& other)</div> <div class="line"><a name="l00730"></a><span class="lineno"> 730</span> {</div> <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  check_template_params();</div> <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  *<span class="keyword">this</span> = other;</div> <div class="line"><a name="l00733"></a><span class="lineno"> 733</span> }</div> <div class="line"><a name="l00734"></a><span class="lineno"> 734</span> </div> <div class="line"><a name="l00739"></a><span class="lineno"> 739</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#aa5c4642624c7a29a23032328556cf7e7"> 740</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>& <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::operator=</a>(<span class="keyword">const</span> QTransform& other)</div> <div class="line"><a name="l00741"></a><span class="lineno"> 741</span> {</div> <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>  check_template_params();</div> <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)</div> <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  <span class="keywordflow">if</span> (Mode == <span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>))</div> <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  m_matrix << other.m11(), other.m21(), other.dx(),</div> <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  other.m12(), other.m22(), other.dy();</div> <div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keywordflow">else</span></div> <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  m_matrix << other.m11(), other.m21(), other.dx(),</div> <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  other.m12(), other.m22(), other.dy(),</div> <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  other.m13(), other.m23(), other.m33();</div> <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00752"></a><span class="lineno"> 752</span> }</div> <div class="line"><a name="l00753"></a><span class="lineno"> 753</span> </div> <div class="line"><a name="l00758"></a><span class="lineno"> 758</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a58efdb505853955c01927ab52d1ea88f"> 759</a></span> QTransform <a class="code" href="classEigen_1_1Transform.html#a58efdb505853955c01927ab52d1ea88f">Transform<Scalar,Dim,Mode,Options>::toQTransform</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div> <div class="line"><a name="l00760"></a><span class="lineno"> 760</span> <span class="keyword"></span>{</div> <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  EIGEN_STATIC_ASSERT(Dim==2, YOU_MADE_A_PROGRAMMING_MISTAKE)</div> <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">if</span> (Mode == <span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>))</div> <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">return</span> QTransform(m_matrix.coeff(0,0), m_matrix.coeff(1,0),</div> <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  m_matrix.coeff(0,1), m_matrix.coeff(1,1),</div> <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  m_matrix.coeff(0,2), m_matrix.coeff(1,2));</div> <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">else</span></div> <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keywordflow">return</span> QTransform(m_matrix.coeff(0,0), m_matrix.coeff(1,0), m_matrix.coeff(2,0),</div> <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  m_matrix.coeff(0,1), m_matrix.coeff(1,1), m_matrix.coeff(2,1),</div> <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  m_matrix.coeff(0,2), m_matrix.coeff(1,2), m_matrix.coeff(2,2));</div> <div class="line"><a name="l00770"></a><span class="lineno"> 770</span> }</div> <div class="line"><a name="l00771"></a><span class="lineno"> 771</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00772"></a><span class="lineno"> 772</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00773"></a><span class="lineno"> 773</span> <span class="comment">/*********************</span></div> <div class="line"><a name="l00774"></a><span class="lineno"> 774</span> <span class="comment">*** Procedural API ***</span></div> <div class="line"><a name="l00775"></a><span class="lineno"> 775</span> <span class="comment">*********************/</span></div> <div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div> <div class="line"><a name="l00781"></a><span class="lineno"> 781</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00782"></a><span class="lineno"> 782</span> <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00783"></a><span class="lineno"> 783</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00784"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a5984c8ce095784e40ef2d526fa98656b"> 784</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::scale</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other)</div> <div class="line"><a name="l00785"></a><span class="lineno"> 785</span> {</div> <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,<span class="keywordtype">int</span>(Dim))</div> <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  EIGEN_STATIC_ASSERT(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)</div> <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  linearExt().noalias() = (linearExt() * other.<a class="code" href="classEigen_1_1MatrixBase.html#adaf22d3a2069ec2c0df912cb87329e9c">asDiagonal</a>());</div> <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00790"></a><span class="lineno"> 790</span> }</div> <div class="line"><a name="l00791"></a><span class="lineno"> 791</span> </div> <div class="line"><a name="l00796"></a><span class="lineno"> 796</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a8dfff7973fce3c259e1a2b128015abac"> 797</a></span> <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>& <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::scale</a>(<span class="keyword">const</span> Scalar& s)</div> <div class="line"><a name="l00798"></a><span class="lineno"> 798</span> {</div> <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  EIGEN_STATIC_ASSERT(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)</div> <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  linearExt() *= s;</div> <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00802"></a><span class="lineno"> 802</span> }</div> <div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div> <div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00810"></a><span class="lineno"> 810</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a5c73e5a2756162e5fd57d9ec1edb7ee2"> 811</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::prescale</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other)</div> <div class="line"><a name="l00812"></a><span class="lineno"> 812</span> {</div> <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,<span class="keywordtype">int</span>(Dim))</div> <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  EIGEN_STATIC_ASSERT(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)</div> <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  m_matrix.template block<Dim,HDim>(0,0).noalias() = (other.<a class="code" href="classEigen_1_1MatrixBase.html#adaf22d3a2069ec2c0df912cb87329e9c">asDiagonal</a>() * m_matrix.template block<Dim,HDim>(0,0));</div> <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00817"></a><span class="lineno"> 817</span> }</div> <div class="line"><a name="l00818"></a><span class="lineno"> 818</span> </div> <div class="line"><a name="l00823"></a><span class="lineno"> 823</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00824"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a9310182d5c7b018efc022fec6601100d"> 824</a></span> <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>& <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::prescale</a>(<span class="keyword">const</span> Scalar& s)</div> <div class="line"><a name="l00825"></a><span class="lineno"> 825</span> {</div> <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  EIGEN_STATIC_ASSERT(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)</div> <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  m_matrix.template topRows<Dim>() *= s;</div> <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00829"></a><span class="lineno"> 829</span> }</div> <div class="line"><a name="l00830"></a><span class="lineno"> 830</span> </div> <div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00837"></a><span class="lineno"> 837</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00838"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a8fee784230fc83408b39716dc3fa9ab3"> 838</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::translate</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other)</div> <div class="line"><a name="l00839"></a><span class="lineno"> 839</span> {</div> <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,<span class="keywordtype">int</span>(Dim))</div> <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  translationExt() += linearExt() * other;</div> <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00843"></a><span class="lineno"> 843</span> }</div> <div class="line"><a name="l00844"></a><span class="lineno"> 844</span> </div> <div class="line"><a name="l00849"></a><span class="lineno"> 849</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00850"></a><span class="lineno"> 850</span> <span class="keyword">template</span><<span class="keyword">typename</span> OtherDerived></div> <div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00852"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a2f4920998698b8aadde6f71151ece99c"> 852</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::pretranslate</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<OtherDerived></a> &other)</div> <div class="line"><a name="l00853"></a><span class="lineno"> 853</span> {</div> <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(OtherDerived,<span class="keywordtype">int</span>(Dim))</div> <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">if</span>(<span class="keywordtype">int</span>(Mode)==<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>))</div> <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  affine() += other * m_matrix.<a class="code" href="classEigen_1_1DenseBase.html#aa8716d44f51321072ee5c88665c28813">row</a>(Dim);</div> <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">else</span></div> <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  translation() += other;</div> <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00860"></a><span class="lineno"> 860</span> }</div> <div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div> <div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="keyword">template</span><<span class="keyword">typename</span> RotationType></div> <div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a2ed345ee2437ea5bfa0683bf2e82a3b0"> 882</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::rotate</a>(<span class="keyword">const</span> RotationType& rotation)</div> <div class="line"><a name="l00883"></a><span class="lineno"> 883</span> {</div> <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  linearExt() *= internal::toRotationMatrix<Scalar,Dim>(rotation);</div> <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00886"></a><span class="lineno"> 886</span> }</div> <div class="line"><a name="l00887"></a><span class="lineno"> 887</span> </div> <div class="line"><a name="l00895"></a><span class="lineno"> 895</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00896"></a><span class="lineno"> 896</span> <span class="keyword">template</span><<span class="keyword">typename</span> RotationType></div> <div class="line"><a name="l00897"></a><span class="lineno"> 897</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00898"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a1366696061a2531e17153eff012ede5e"> 898</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::prerotate</a>(<span class="keyword">const</span> RotationType& rotation)</div> <div class="line"><a name="l00899"></a><span class="lineno"> 899</span> {</div> <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  m_matrix.template block<Dim,HDim>(0,0) = internal::toRotationMatrix<Scalar,Dim>(rotation)</div> <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  * m_matrix.template block<Dim,HDim>(0,0);</div> <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00903"></a><span class="lineno"> 903</span> }</div> <div class="line"><a name="l00904"></a><span class="lineno"> 904</span> </div> <div class="line"><a name="l00910"></a><span class="lineno"> 910</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00912"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a44ffe4dae84e42589daf1b9047320ce6"> 912</a></span> <a class="code" href="classEigen_1_1Transform.html#a44ffe4dae84e42589daf1b9047320ce6">Transform<Scalar,Dim,Mode,Options>::shear</a>(<span class="keyword">const</span> Scalar& sx, <span class="keyword">const</span> Scalar& sy)</div> <div class="line"><a name="l00913"></a><span class="lineno"> 913</span> {</div> <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  EIGEN_STATIC_ASSERT(<span class="keywordtype">int</span>(Dim)==2, YOU_MADE_A_PROGRAMMING_MISTAKE)</div> <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  EIGEN_STATIC_ASSERT(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)</div> <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  VectorType tmp = linear().col(0)*sy + linear().col(1);</div> <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  linear() << linear().col(0) + linear().col(1)*sx, tmp;</div> <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00919"></a><span class="lineno"> 919</span> }</div> <div class="line"><a name="l00920"></a><span class="lineno"> 920</span> </div> <div class="line"><a name="l00926"></a><span class="lineno"> 926</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l00928"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a5448d7cb18b99426d18dfc3a18c0f4a7"> 928</a></span> <a class="code" href="classEigen_1_1Transform.html#a5448d7cb18b99426d18dfc3a18c0f4a7">Transform<Scalar,Dim,Mode,Options>::preshear</a>(<span class="keyword">const</span> Scalar& sx, <span class="keyword">const</span> Scalar& sy)</div> <div class="line"><a name="l00929"></a><span class="lineno"> 929</span> {</div> <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  EIGEN_STATIC_ASSERT(<span class="keywordtype">int</span>(Dim)==2, YOU_MADE_A_PROGRAMMING_MISTAKE)</div> <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  EIGEN_STATIC_ASSERT(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>), THIS_METHOD_IS_ONLY_FOR_SPECIFIC_TRANSFORMATIONS)</div> <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  m_matrix.template block<Dim,HDim>(0,0) = LinearMatrixType(1, sx, sy, 1) * m_matrix.template block<Dim,HDim>(0,0);</div> <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00934"></a><span class="lineno"> 934</span> }</div> <div class="line"><a name="l00935"></a><span class="lineno"> 935</span> </div> <div class="line"><a name="l00936"></a><span class="lineno"> 936</span> <span class="comment">/******************************************************</span></div> <div class="line"><a name="l00937"></a><span class="lineno"> 937</span> <span class="comment">*** Scaling, Translation and Rotation compatibility ***</span></div> <div class="line"><a name="l00938"></a><span class="lineno"> 938</span> <span class="comment">******************************************************/</span></div> <div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div> <div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keyword">inline</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>& <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::operator=</a>(<span class="keyword">const</span> TranslationType& t)</div> <div class="line"><a name="l00942"></a><span class="lineno"> 942</span> {</div> <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  linear().<a class="code" href="classEigen_1_1Transform.html#a382e6ad7e6721b121e510959e1011be3">setIdentity</a>();</div> <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  translation() = t.vector();</div> <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  makeAffine();</div> <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00947"></a><span class="lineno"> 947</span> }</div> <div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div> <div class="line"><a name="l00949"></a><span class="lineno"> 949</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00950"></a><span class="lineno"> 950</span> <span class="keyword">inline</span> Transform<Scalar,Dim,Mode,Options> <a class="code" href="classEigen_1_1Transform.html#a3846f7a4b892ed530881f52a5460ddf6">Transform<Scalar,Dim,Mode,Options>::operator*</a>(<span class="keyword">const</span> TranslationType& t)<span class="keyword"> const</span></div> <div class="line"><a name="l00951"></a><span class="lineno"> 951</span> <span class="keyword"></span>{</div> <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  Transform res = *<span class="keyword">this</span>;</div> <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  res.translate(t.vector());</div> <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l00955"></a><span class="lineno"> 955</span> }</div> <div class="line"><a name="l00956"></a><span class="lineno"> 956</span> </div> <div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keyword">inline</span> Transform<Scalar,Dim,Mode,Options>& Transform<Scalar,Dim,Mode,Options>::operator=(<span class="keyword">const</span> UniformScaling<Scalar>& s)</div> <div class="line"><a name="l00959"></a><span class="lineno"> 959</span> {</div> <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>  m_matrix.<a class="code" href="classEigen_1_1PlainObjectBase.html#a04abe84a9a894de335a232681d9a0722">setZero</a>();</div> <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  linear().diagonal().fill(s.factor());</div> <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  makeAffine();</div> <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00964"></a><span class="lineno"> 964</span> }</div> <div class="line"><a name="l00965"></a><span class="lineno"> 965</span> </div> <div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00967"></a><span class="lineno"> 967</span> <span class="keyword">template</span><<span class="keyword">typename</span> Derived></div> <div class="line"><a name="l00968"></a><span class="lineno"> 968</span> <span class="keyword">inline</span> Transform<Scalar,Dim,Mode,Options>& Transform<Scalar,Dim,Mode,Options>::operator=(<span class="keyword">const</span> RotationBase<Derived,Dim>& r)</div> <div class="line"><a name="l00969"></a><span class="lineno"> 969</span> {</div> <div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  linear() = internal::toRotationMatrix<Scalar,Dim>(r);</div> <div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  translation().setZero();</div> <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  makeAffine();</div> <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l00974"></a><span class="lineno"> 974</span> }</div> <div class="line"><a name="l00975"></a><span class="lineno"> 975</span> </div> <div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00977"></a><span class="lineno"> 977</span> <span class="keyword">template</span><<span class="keyword">typename</span> Derived></div> <div class="line"><a name="l00978"></a><span class="lineno"> 978</span> <span class="keyword">inline</span> Transform<Scalar,Dim,Mode,Options> <a class="code" href="classEigen_1_1Transform.html#a3846f7a4b892ed530881f52a5460ddf6">Transform<Scalar,Dim,Mode,Options>::operator*</a>(<span class="keyword">const</span> RotationBase<Derived,Dim>& r)<span class="keyword"> const</span></div> <div class="line"><a name="l00979"></a><span class="lineno"> 979</span> <span class="keyword"></span>{</div> <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  Transform res = *<span class="keyword">this</span>;</div> <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  res.rotate(r.derived());</div> <div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l00983"></a><span class="lineno"> 983</span> }</div> <div class="line"><a name="l00984"></a><span class="lineno"> 984</span> </div> <div class="line"><a name="l00985"></a><span class="lineno"> 985</span> <span class="comment">/************************</span></div> <div class="line"><a name="l00986"></a><span class="lineno"> 986</span> <span class="comment">*** Special functions ***</span></div> <div class="line"><a name="l00987"></a><span class="lineno"> 987</span> <span class="comment">************************/</span></div> <div class="line"><a name="l00988"></a><span class="lineno"> 988</span> </div> <div class="line"><a name="l00996"></a><span class="lineno"> 996</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l00997"></a><span class="lineno"> 997</span> <span class="keyword">const</span> <span class="keyword">typename</span> Transform<Scalar,Dim,Mode,Options>::LinearMatrixType</div> <div class="line"><a name="l00998"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a0c792f75e5e52207a6c011d8104367ac"> 998</a></span> <a class="code" href="classEigen_1_1Transform.html#a0c792f75e5e52207a6c011d8104367ac">Transform<Scalar,Dim,Mode,Options>::rotation</a>()<span class="keyword"> const</span></div> <div class="line"><a name="l00999"></a><span class="lineno"> 999</span> <span class="keyword"></span>{</div> <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  LinearMatrixType result;</div> <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  computeRotationScaling(&result, (LinearMatrixType*)0);</div> <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">return</span> result;</div> <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span> }</div> <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span> </div> <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span> </div> <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span> <span class="keyword">template</span><<span class="keyword">typename</span> RotationMatrixType, <span class="keyword">typename</span> ScalingMatrixType></div> <div class="line"><a name="l01019"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ad84ac89e9b8499975bad62a9db9f8b4c"> 1019</a></span> <span class="keywordtype">void</span> <a class="code" href="classEigen_1_1Transform.html#ad84ac89e9b8499975bad62a9db9f8b4c">Transform<Scalar,Dim,Mode,Options>::computeRotationScaling</a>(RotationMatrixType *rotation, ScalingMatrixType *scaling)<span class="keyword"> const</span></div> <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span> <span class="keyword"></span>{</div> <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <a class="code" href="classEigen_1_1JacobiSVD.html">JacobiSVD<LinearMatrixType></a> svd(linear(), <a class="code" href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52a75953ad8f5837a79d6fbd3c116e7d462">ComputeFullU</a> | <a class="code" href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52a1785ac1174dab733556ac572448984c7">ComputeFullV</a>);</div> <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span> </div> <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  Scalar x = (svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">matrixU</a>() * svd.<a class="code" href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">matrixV</a>().adjoint()).determinant(); <span class="comment">// so x has absolute value 1</span></div> <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  VectorType sv(svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a48d4068b97dfbb83d62599e56e26797a">singularValues</a>());</div> <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  sv.coeffRef(0) *= x;</div> <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">if</span>(scaling) scaling->lazyAssign(svd.<a class="code" href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">matrixV</a>() * sv.asDiagonal() * svd.<a class="code" href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">matrixV</a>().adjoint());</div> <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keywordflow">if</span>(rotation)</div> <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  {</div> <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  LinearMatrixType m(svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">matrixU</a>());</div> <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  m.col(0) /= x;</div> <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  rotation->lazyAssign(m * svd.<a class="code" href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">matrixV</a>().adjoint());</div> <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  }</div> <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span> }</div> <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span> </div> <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> <span class="keyword">template</span><<span class="keyword">typename</span> ScalingMatrixType, <span class="keyword">typename</span> RotationMatrixType></div> <div class="line"><a name="l01048"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#ac85861889115ef75aaecec5eb7582f12"> 1048</a></span> <span class="keywordtype">void</span> <a class="code" href="classEigen_1_1Transform.html#ac85861889115ef75aaecec5eb7582f12">Transform<Scalar,Dim,Mode,Options>::computeScalingRotation</a>(ScalingMatrixType *scaling, RotationMatrixType *rotation)<span class="keyword"> const</span></div> <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> <span class="keyword"></span>{</div> <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <a class="code" href="classEigen_1_1JacobiSVD.html">JacobiSVD<LinearMatrixType></a> svd(linear(), <a class="code" href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52a75953ad8f5837a79d6fbd3c116e7d462">ComputeFullU</a> | <a class="code" href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52a1785ac1174dab733556ac572448984c7">ComputeFullV</a>);</div> <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span> </div> <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  Scalar x = (svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">matrixU</a>() * svd.<a class="code" href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">matrixV</a>().adjoint()).determinant(); <span class="comment">// so x has absolute value 1</span></div> <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  VectorType sv(svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a48d4068b97dfbb83d62599e56e26797a">singularValues</a>());</div> <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  sv.coeffRef(0) *= x;</div> <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">if</span>(scaling) scaling->lazyAssign(svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">matrixU</a>() * sv.asDiagonal() * svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">matrixU</a>().adjoint());</div> <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="keywordflow">if</span>(rotation)</div> <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  {</div> <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  LinearMatrixType m(svd.<a class="code" href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">matrixU</a>());</div> <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  m.col(0) /= x;</div> <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  rotation->lazyAssign(m * svd.<a class="code" href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">matrixV</a>().adjoint());</div> <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div> <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> }</div> <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> </div> <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span> <span class="keyword">template</span><<span class="keyword">typename</span> PositionDerived, <span class="keyword">typename</span> OrientationType, <span class="keyword">typename</span> ScaleDerived></div> <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options></a>&</div> <div class="line"><a name="l01070"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a54be6540d2888404226ab0a4505f7485"> 1070</a></span> <a class="code" href="classEigen_1_1Transform.html">Transform<Scalar,Dim,Mode,Options>::fromPositionOrientationScale</a>(<span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<PositionDerived></a> &position,</div> <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="keyword">const</span> OrientationType& orientation, <span class="keyword">const</span> <a class="code" href="classEigen_1_1MatrixBase.html">MatrixBase<ScaleDerived></a> &scale)</div> <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> {</div> <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  linear() = internal::toRotationMatrix<Scalar,Dim>(orientation);</div> <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  linear() *= scale.<a class="code" href="classEigen_1_1MatrixBase.html#adaf22d3a2069ec2c0df912cb87329e9c">asDiagonal</a>();</div> <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  translation() = position;</div> <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  makeAffine();</div> <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div> <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> }</div> <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> </div> <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> <span class="keyword">namespace </span>internal {</div> <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span> </div> <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="comment">// selector needed to avoid taking the inverse of a 3x4 matrix</span></div> <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span> <span class="keyword">template</span><<span class="keyword">typename</span> TransformType, <span class="keywordtype">int</span> Mode=TransformType::Mode></div> <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> <span class="keyword">struct </span>projective_transform_inverse</div> <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> {</div> <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> run(<span class="keyword">const</span> TransformType&, TransformType&)</div> <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  {}</div> <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span> };</div> <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> </div> <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> <span class="keyword">template</span><<span class="keyword">typename</span> TransformType></div> <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span> <span class="keyword">struct </span>projective_transform_inverse<TransformType, <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>></div> <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span> {</div> <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> run(<span class="keyword">const</span> TransformType& m, TransformType& res)</div> <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  {</div> <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  res.matrix() = m.matrix().inverse();</div> <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  }</div> <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span> };</div> <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> </div> <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> } <span class="comment">// end namespace internal</span></div> <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span> </div> <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span> </div> <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span> Transform<Scalar,Dim,Mode,Options></div> <div class="line"><a name="l01124"></a><span class="lineno"><a class="line" href="classEigen_1_1Transform.html#a29b71eedfb78a436577878e2e5560946"> 1124</a></span> <a class="code" href="classEigen_1_1Transform.html#a29b71eedfb78a436577878e2e5560946">Transform<Scalar,Dim,Mode,Options>::inverse</a>(<a class="code" href="group__enums.html#ga302a826315506a7217d4b477ea78425f">TransformTraits</a> hint)<span class="keyword"> const</span></div> <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span> <span class="keyword"></span>{</div> <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  <a class="code" href="classEigen_1_1Transform.html">Transform</a> res;</div> <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  <span class="keywordflow">if</span> (hint == <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>)</div> <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  {</div> <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  internal::projective_transform_inverse<Transform>::run(*<span class="keyword">this</span>, res);</div> <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  }</div> <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  <span class="keywordflow">else</span></div> <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  {</div> <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">if</span> (hint == <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a>)</div> <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  {</div> <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  res.matrix().template topLeftCorner<Dim,Dim>() = linear().transpose();</div> <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  }</div> <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(hint&<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a>)</div> <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  {</div> <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  res.matrix().template topLeftCorner<Dim,Dim>() = linear().inverse();</div> <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div> <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">else</span></div> <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div> <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  eigen_assert(<span class="keyword">false</span> && <span class="stringliteral">"Invalid transform traits in Transform::Inverse"</span>);</div> <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  }</div> <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="comment">// translation and remaining parts</span></div> <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  res.matrix().template topRightCorner<Dim,1>()</div> <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  = - res.matrix().template topLeftCorner<Dim,Dim>() * translation();</div> <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  res.makeAffine(); <span class="comment">// we do need this, because in the beginning res is uninitialized</span></div> <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  }</div> <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> }</div> <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> </div> <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="keyword">namespace </span>internal {</div> <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> </div> <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="comment">/*****************************************************</span></div> <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="comment">*** Specializations of take affine part ***</span></div> <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <span class="comment">*****************************************************/</span></div> <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> </div> <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keyword">template</span><<span class="keyword">typename</span> TransformType> <span class="keyword">struct </span>transform_take_affine_part {</div> <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::MatrixType MatrixType;</div> <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::AffinePart AffinePart;</div> <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::ConstAffinePart ConstAffinePart;</div> <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  <span class="keyword">static</span> <span class="keyword">inline</span> AffinePart run(MatrixType& m)</div> <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  { <span class="keywordflow">return</span> m.template block<TransformType::Dim,TransformType::HDim>(0,0); }</div> <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <span class="keyword">static</span> <span class="keyword">inline</span> ConstAffinePart run(<span class="keyword">const</span> MatrixType& m)</div> <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  { <span class="keywordflow">return</span> m.template block<TransformType::Dim,TransformType::HDim>(0,0); }</div> <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> };</div> <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> </div> <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> Options></div> <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> <span class="keyword">struct </span>transform_take_affine_part<Transform<Scalar,Dim,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>, Options> > {</div> <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> Transform<Scalar,Dim,AffineCompact,Options>::MatrixType MatrixType;</div> <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  <span class="keyword">static</span> <span class="keyword">inline</span> MatrixType& run(MatrixType& m) { <span class="keywordflow">return</span> m; }</div> <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> MatrixType& run(<span class="keyword">const</span> MatrixType& m) { <span class="keywordflow">return</span> m; }</div> <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> };</div> <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> </div> <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> <span class="comment">/*****************************************************</span></div> <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="comment">*** Specializations of construct from matrix ***</span></div> <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="comment">*****************************************************/</span></div> <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> </div> <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span> <span class="keyword">struct </span>transform_construct_from_matrix<Other, Mode,Options,Dim,HDim, Dim,Dim></div> <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span> {</div> <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> run(Transform<typename Other::Scalar,Dim,Mode,Options> *transform, <span class="keyword">const</span> Other& other)</div> <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  {</div> <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  transform->linear() = other;</div> <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  transform->translation().setZero();</div> <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  transform->makeAffine();</div> <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div> <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> };</div> <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> </div> <div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> <span class="keyword">struct </span>transform_construct_from_matrix<Other, Mode,Options,Dim,HDim, Dim,HDim></div> <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span> {</div> <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> run(Transform<typename Other::Scalar,Dim,Mode,Options> *transform, <span class="keyword">const</span> Other& other)</div> <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  {</div> <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  transform->affine() = other;</div> <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  transform->makeAffine();</div> <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  }</div> <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span> };</div> <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span> </div> <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other, <span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span> <span class="keyword">struct </span>transform_construct_from_matrix<Other, Mode,Options,Dim,HDim, HDim,HDim></div> <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span> {</div> <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> run(Transform<typename Other::Scalar,Dim,Mode,Options> *transform, <span class="keyword">const</span> Other& other)</div> <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  { transform->matrix() = other; }</div> <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span> };</div> <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span> </div> <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span> <span class="keyword">struct </span>transform_construct_from_matrix<Other, <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>,Options,Dim,HDim, HDim,HDim></div> <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span> {</div> <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> run(Transform<typename Other::Scalar,Dim,AffineCompact,Options> *transform, <span class="keyword">const</span> Other& other)</div> <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  { transform->matrix() = other.template block<Dim,HDim>(0,0); }</div> <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span> };</div> <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span> </div> <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span> <span class="comment">/**********************************************************</span></div> <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span> <span class="comment">*** Specializations of operator* with rhs EigenBase ***</span></div> <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span> <span class="comment">**********************************************************/</span></div> <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span> </div> <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span> <span class="keyword">template</span><<span class="keywordtype">int</span> LhsMode,<span class="keywordtype">int</span> RhsMode></div> <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span> <span class="keyword">struct </span>transform_product_result</div> <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span> {</div> <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  <span class="keyword">enum</span> </div> <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  { </div> <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  Mode =</div> <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  (LhsMode == (int)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a> || RhsMode == (<span class="keywordtype">int</span>)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a> ) ? <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a> :</div> <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>  (LhsMode == (<span class="keywordtype">int</span>)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a> || RhsMode == (int)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a> ) ? <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Affine</a> :</div> <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>  (LhsMode == (int)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a> || RhsMode == (<span class="keywordtype">int</span>)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a> ) ? <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a> :</div> <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  (LhsMode == (<span class="keywordtype">int</span>)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a> || RhsMode == (int)<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a> ) ? <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Isometry</a> : <a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a></div> <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  };</div> <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span> };</div> <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div> <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span> <span class="keyword">template</span>< <span class="keyword">typename</span> TransformType, <span class="keyword">typename</span> MatrixType ></div> <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span> <span class="keyword">struct </span>transform_right_product_impl< TransformType, MatrixType, 0 ></div> <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span> {</div> <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> MatrixType::PlainObject ResultType;</div> <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span> </div> <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  <span class="keyword">static</span> EIGEN_STRONG_INLINE ResultType run(<span class="keyword">const</span> TransformType& T, <span class="keyword">const</span> MatrixType& other)</div> <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  {</div> <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">return</span> T.matrix() * other;</div> <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  }</div> <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span> };</div> <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span> </div> <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span> <span class="keyword">template</span>< <span class="keyword">typename</span> TransformType, <span class="keyword">typename</span> MatrixType ></div> <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> <span class="keyword">struct </span>transform_right_product_impl< TransformType, MatrixType, 1 ></div> <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span> {</div> <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  <span class="keyword">enum</span> { </div> <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  Dim = TransformType::Dim, </div> <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  HDim = TransformType::HDim,</div> <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  OtherRows = MatrixType::RowsAtCompileTime,</div> <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  OtherCols = MatrixType::ColsAtCompileTime</div> <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  };</div> <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span> </div> <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> MatrixType::PlainObject ResultType;</div> <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span> </div> <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keyword">static</span> EIGEN_STRONG_INLINE ResultType run(<span class="keyword">const</span> TransformType& T, <span class="keyword">const</span> MatrixType& other)</div> <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  {</div> <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  EIGEN_STATIC_ASSERT(OtherRows==HDim, YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES);</div> <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span> </div> <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <span class="keyword">typedef</span> Block<ResultType, Dim, OtherCols, int(MatrixType::RowsAtCompileTime)==Dim> TopLeftLhs;</div> <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span> </div> <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  ResultType res(other.rows(),other.cols());</div> <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  TopLeftLhs(res, 0, 0, Dim, other.cols()).noalias() = T.affine() * other;</div> <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  res.row(OtherRows-1) = other.row(OtherRows-1);</div> <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  </div> <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  }</div> <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span> };</div> <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span> </div> <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span> <span class="keyword">template</span>< <span class="keyword">typename</span> TransformType, <span class="keyword">typename</span> MatrixType ></div> <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span> <span class="keyword">struct </span>transform_right_product_impl< TransformType, MatrixType, 2 ></div> <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span> {</div> <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  <span class="keyword">enum</span> { </div> <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  Dim = TransformType::Dim, </div> <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  HDim = TransformType::HDim,</div> <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  OtherRows = MatrixType::RowsAtCompileTime,</div> <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  OtherCols = MatrixType::ColsAtCompileTime</div> <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  };</div> <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span> </div> <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> MatrixType::PlainObject ResultType;</div> <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span> </div> <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keyword">static</span> EIGEN_STRONG_INLINE ResultType run(<span class="keyword">const</span> TransformType& T, <span class="keyword">const</span> MatrixType& other)</div> <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  {</div> <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  EIGEN_STATIC_ASSERT(OtherRows==Dim, YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES);</div> <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span> </div> <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keyword">typedef</span> Block<ResultType, Dim, OtherCols, true> TopLeftLhs;</div> <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  ResultType res(Replicate<typename TransformType::ConstTranslationPart, 1, OtherCols>(T.translation(),1,other.cols()));</div> <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  TopLeftLhs(res, 0, 0, Dim, other.cols()).noalias() += T.linear() * other;</div> <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span> </div> <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  }</div> <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> };</div> <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span> </div> <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">/**********************************************************</span></div> <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span> <span class="comment">*** Specializations of operator* with lhs EigenBase ***</span></div> <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span> <span class="comment">**********************************************************/</span></div> <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span> </div> <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">// generic HDim x HDim matrix * T => Projective</span></div> <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other,<span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span> <span class="keyword">struct </span>transform_left_product_impl<Other,Mode,Options,Dim,HDim, HDim,HDim></div> <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span> {</div> <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,Mode,Options> TransformType;</div> <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::MatrixType MatrixType;</div> <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,Projective,Options> ResultType;</div> <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Other& other,<span class="keyword">const</span> TransformType& tr)</div> <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  { <span class="keywordflow">return</span> ResultType(other * tr.matrix()); }</div> <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span> };</div> <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div> <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> <span class="comment">// generic HDim x HDim matrix * AffineCompact => Projective</span></div> <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span> <span class="keyword">struct </span>transform_left_product_impl<Other,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>,Options,Dim,HDim, HDim,HDim></div> <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span> {</div> <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,AffineCompact,Options> TransformType;</div> <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::MatrixType MatrixType;</div> <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,Projective,Options> ResultType;</div> <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Other& other,<span class="keyword">const</span> TransformType& tr)</div> <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  {</div> <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  ResultType res;</div> <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  res.matrix().noalias() = other.template block<HDim,Dim>(0,0) * tr.matrix();</div> <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  res.matrix().col(Dim) += other.col(Dim);</div> <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  }</div> <div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> };</div> <div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> </div> <div class="line"><a name="l01324"></a><span class="lineno"> 1324</span> <span class="comment">// affine matrix * T</span></div> <div class="line"><a name="l01325"></a><span class="lineno"> 1325</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other,<span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01326"></a><span class="lineno"> 1326</span> <span class="keyword">struct </span>transform_left_product_impl<Other,Mode,Options,Dim,HDim, Dim,HDim></div> <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span> {</div> <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,Mode,Options> TransformType;</div> <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::MatrixType MatrixType;</div> <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  <span class="keyword">typedef</span> TransformType ResultType;</div> <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Other& other,<span class="keyword">const</span> TransformType& tr)</div> <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  {</div> <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  ResultType res;</div> <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  res.affine().noalias() = other * tr.matrix();</div> <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  res.matrix().row(Dim) = tr.matrix().row(Dim);</div> <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  }</div> <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span> };</div> <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span> </div> <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span> <span class="comment">// affine matrix * AffineCompact</span></div> <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> <span class="keyword">struct </span>transform_left_product_impl<Other,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>,Options,Dim,HDim, Dim,HDim></div> <div class="line"><a name="l01343"></a><span class="lineno"> 1343</span> {</div> <div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,AffineCompact,Options> TransformType;</div> <div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::MatrixType MatrixType;</div> <div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <span class="keyword">typedef</span> TransformType ResultType;</div> <div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Other& other,<span class="keyword">const</span> TransformType& tr)</div> <div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  {</div> <div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  ResultType res;</div> <div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  res.matrix().noalias() = other.template block<Dim,Dim>(0,0) * tr.matrix();</div> <div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  res.translation() += other.col(Dim);</div> <div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  }</div> <div class="line"><a name="l01354"></a><span class="lineno"> 1354</span> };</div> <div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div> <div class="line"><a name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">// linear matrix * T</span></div> <div class="line"><a name="l01357"></a><span class="lineno"> 1357</span> <span class="keyword">template</span><<span class="keyword">typename</span> Other,<span class="keywordtype">int</span> Mode, <span class="keywordtype">int</span> Options, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> HDim></div> <div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> <span class="keyword">struct </span>transform_left_product_impl<Other,Mode,Options,Dim,HDim, Dim,Dim></div> <div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> {</div> <div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>  <span class="keyword">typedef</span> Transform<typename Other::Scalar,Dim,Mode,Options> TransformType;</div> <div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> TransformType::MatrixType MatrixType;</div> <div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>  <span class="keyword">typedef</span> TransformType ResultType;</div> <div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Other& other, <span class="keyword">const</span> TransformType& tr)</div> <div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>  {</div> <div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  TransformType res;</div> <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>  <span class="keywordflow">if</span>(Mode!=<span class="keywordtype">int</span>(<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>))</div> <div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>  res.matrix().row(Dim) = tr.matrix().row(Dim);</div> <div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>  res.matrix().template topRows<Dim>().noalias()</div> <div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>  = other * tr.matrix().template topRows<Dim>();</div> <div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>  }</div> <div class="line"><a name="l01372"></a><span class="lineno"> 1372</span> };</div> <div class="line"><a name="l01373"></a><span class="lineno"> 1373</span> </div> <div class="line"><a name="l01374"></a><span class="lineno"> 1374</span> <span class="comment">/**********************************************************</span></div> <div class="line"><a name="l01375"></a><span class="lineno"> 1375</span> <span class="comment">*** Specializations of operator* with another Transform ***</span></div> <div class="line"><a name="l01376"></a><span class="lineno"> 1376</span> <span class="comment">**********************************************************/</span></div> <div class="line"><a name="l01377"></a><span class="lineno"> 1377</span> </div> <div class="line"><a name="l01378"></a><span class="lineno"> 1378</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> LhsMode, <span class="keywordtype">int</span> LhsOptions, <span class="keywordtype">int</span> RhsMode, <span class="keywordtype">int</span> RhsOptions></div> <div class="line"><a name="l01379"></a><span class="lineno"> 1379</span> <span class="keyword">struct </span>transform_transform_product_impl<Transform<Scalar,Dim,LhsMode,LhsOptions>,Transform<Scalar,Dim,RhsMode,RhsOptions>,false ></div> <div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> {</div> <div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>  <span class="keyword">enum</span> { ResultMode = transform_product_result<LhsMode,RhsMode>::Mode };</div> <div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,LhsMode,LhsOptions> Lhs;</div> <div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,RhsMode,RhsOptions> Rhs;</div> <div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,ResultMode,LhsOptions> ResultType;</div> <div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Lhs& lhs, <span class="keyword">const</span> Rhs& rhs)</div> <div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>  {</div> <div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>  ResultType res;</div> <div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>  res.linear() = lhs.linear() * rhs.linear();</div> <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  res.translation() = lhs.linear() * rhs.translation() + lhs.translation();</div> <div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>  res.makeAffine();</div> <div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>  }</div> <div class="line"><a name="l01393"></a><span class="lineno"> 1393</span> };</div> <div class="line"><a name="l01394"></a><span class="lineno"> 1394</span> </div> <div class="line"><a name="l01395"></a><span class="lineno"> 1395</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> LhsMode, <span class="keywordtype">int</span> LhsOptions, <span class="keywordtype">int</span> RhsMode, <span class="keywordtype">int</span> RhsOptions></div> <div class="line"><a name="l01396"></a><span class="lineno"> 1396</span> <span class="keyword">struct </span>transform_transform_product_impl<Transform<Scalar,Dim,LhsMode,LhsOptions>,Transform<Scalar,Dim,RhsMode,RhsOptions>,true ></div> <div class="line"><a name="l01397"></a><span class="lineno"> 1397</span> {</div> <div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,LhsMode,LhsOptions> Lhs;</div> <div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,RhsMode,RhsOptions> Rhs;</div> <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,Projective> ResultType;</div> <div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Lhs& lhs, <span class="keyword">const</span> Rhs& rhs)</div> <div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>  {</div> <div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>  <span class="keywordflow">return</span> ResultType( lhs.matrix() * rhs.matrix() );</div> <div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>  }</div> <div class="line"><a name="l01405"></a><span class="lineno"> 1405</span> };</div> <div class="line"><a name="l01406"></a><span class="lineno"> 1406</span> </div> <div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> LhsOptions, <span class="keywordtype">int</span> RhsOptions></div> <div class="line"><a name="l01408"></a><span class="lineno"> 1408</span> <span class="keyword">struct </span>transform_transform_product_impl<Transform<Scalar,Dim,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>,LhsOptions>,Transform<Scalar,Dim,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>,RhsOptions>,true ></div> <div class="line"><a name="l01409"></a><span class="lineno"> 1409</span> {</div> <div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,AffineCompact,LhsOptions> Lhs;</div> <div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,Projective,RhsOptions> Rhs;</div> <div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,Projective> ResultType;</div> <div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Lhs& lhs, <span class="keyword">const</span> Rhs& rhs)</div> <div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>  {</div> <div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>  ResultType res;</div> <div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>  res.matrix().template topRows<Dim>() = lhs.matrix() * rhs.matrix();</div> <div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>  res.matrix().row(Dim) = rhs.matrix().row(Dim);</div> <div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>  }</div> <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span> };</div> <div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div> <div class="line"><a name="l01422"></a><span class="lineno"> 1422</span> <span class="keyword">template</span><<span class="keyword">typename</span> Scalar, <span class="keywordtype">int</span> Dim, <span class="keywordtype">int</span> LhsOptions, <span class="keywordtype">int</span> RhsOptions></div> <div class="line"><a name="l01423"></a><span class="lineno"> 1423</span> <span class="keyword">struct </span>transform_transform_product_impl<Transform<Scalar,Dim,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Projective</a>,LhsOptions>,Transform<Scalar,Dim,<a class="code" href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">AffineCompact</a>,RhsOptions>,true ></div> <div class="line"><a name="l01424"></a><span class="lineno"> 1424</span> {</div> <div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,Projective,LhsOptions> Lhs;</div> <div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,AffineCompact,RhsOptions> Rhs;</div> <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>  <span class="keyword">typedef</span> Transform<Scalar,Dim,Projective> ResultType;</div> <div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keyword">static</span> ResultType run(<span class="keyword">const</span> Lhs& lhs, <span class="keyword">const</span> Rhs& rhs)</div> <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>  {</div> <div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>  ResultType res(lhs.matrix().template leftCols<Dim>() * rhs.matrix());</div> <div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>  res.matrix().col(Dim) += lhs.matrix().col(Dim);</div> <div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>  <span class="keywordflow">return</span> res;</div> <div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>  }</div> <div class="line"><a name="l01434"></a><span class="lineno"> 1434</span> };</div> <div class="line"><a name="l01435"></a><span class="lineno"> 1435</span> </div> <div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> } <span class="comment">// end namespace internal</span></div> <div class="line"><a name="l01437"></a><span class="lineno"> 1437</span> </div> <div class="line"><a name="l01438"></a><span class="lineno"> 1438</span> } <span class="comment">// end namespace Eigen</span></div> <div class="line"><a name="l01439"></a><span class="lineno"> 1439</span> </div> <div class="line"><a name="l01440"></a><span class="lineno"> 1440</span> <span class="preprocessor">#endif // EIGEN_TRANSFORM_H</span></div> <div class="ttc" id="classEigen_1_1Transform_html_a4721b3c0d0dc5c79fcd5dac8a352bc5c"><div class="ttname"><a href="classEigen_1_1Transform.html#a4721b3c0d0dc5c79fcd5dac8a352bc5c">Eigen::Transform::toQMatrix</a></div><div class="ttdeci">QMatrix toQMatrix(void) const </div><div class="ttdef"><b>Definition:</b> Transform.h:715</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a58efdb505853955c01927ab52d1ea88f"><div class="ttname"><a href="classEigen_1_1Transform.html#a58efdb505853955c01927ab52d1ea88f">Eigen::Transform::toQTransform</a></div><div class="ttdeci">QTransform toQTransform(void) const </div><div class="ttdef"><b>Definition:</b> Transform.h:759</div></div> <div class="ttc" id="group__enums_html_gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672"><div class="ttname"><a href="group__enums.html#gga302a826315506a7217d4b477ea78425fa732168807730e0e931f3c5792b99b672">Eigen::Projective</a></div><div class="ttdef"><b>Definition:</b> Constants.h:398</div></div> <div class="ttc" id="classEigen_1_1Transform_html_abbee559820c5cdfe7653a646396b0a8f"><div class="ttname"><a href="classEigen_1_1Transform.html#abbee559820c5cdfe7653a646396b0a8f">Eigen::Transform::linear</a></div><div class="ttdeci">ConstLinearPart linear() const </div><div class="ttdef"><b>Definition:</b> Transform.h:372</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ac02f5facfe284620ba0141a95ec9a8fa"><div class="ttname"><a href="classEigen_1_1Transform.html#ac02f5facfe284620ba0141a95ec9a8fa">Eigen::Transform::ConstMatrixType</a></div><div class="ttdeci">const MatrixType ConstMatrixType</div><div class="ttdef"><b>Definition:</b> Transform.h:193</div></div> <div class="ttc" id="classEigen_1_1DenseBase_html_aa8716d44f51321072ee5c88665c28813"><div class="ttname"><a href="classEigen_1_1DenseBase.html#aa8716d44f51321072ee5c88665c28813">Eigen::DenseBase::row</a></div><div class="ttdeci">RowXpr row(Index i)</div><div class="ttdef"><b>Definition:</b> DenseBase.h:726</div></div> <div class="ttc" id="classEigen_1_1PlainObjectBase_html_a40dcc334db75411e168691d9bce08c3a"><div class="ttname"><a href="classEigen_1_1PlainObjectBase.html#a40dcc334db75411e168691d9bce08c3a">Eigen::PlainObjectBase::data</a></div><div class="ttdeci">const Scalar * data() const </div><div class="ttdef"><b>Definition:</b> PlainObjectBase.h:209</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a9de68ec1c9b7809129814a3233ae4655"><div class="ttname"><a href="classEigen_1_1Transform.html#a9de68ec1c9b7809129814a3233ae4655">Eigen::Transform::Transform</a></div><div class="ttdeci">Transform()</div><div class="ttdef"><b>Definition:</b> Transform.h:230</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a44ffe4dae84e42589daf1b9047320ce6"><div class="ttname"><a href="classEigen_1_1Transform.html#a44ffe4dae84e42589daf1b9047320ce6">Eigen::Transform::shear</a></div><div class="ttdeci">Transform & shear(const Scalar &sx, const Scalar &sy)</div><div class="ttdef"><b>Definition:</b> Transform.h:912</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a0c16671587fa0dc76fafeb486d6461c3"><div class="ttname"><a href="classEigen_1_1Transform.html#a0c16671587fa0dc76fafeb486d6461c3">Eigen::Transform::VectorType</a></div><div class="ttdeci">Matrix< Scalar, Dim, 1 > VectorType</div><div class="ttdef"><b>Definition:</b> Transform.h:209</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a382e6ad7e6721b121e510959e1011be3"><div class="ttname"><a href="classEigen_1_1Transform.html#a382e6ad7e6721b121e510959e1011be3">Eigen::Transform::setIdentity</a></div><div class="ttdeci">void setIdentity()</div><div class="ttdef"><b>Definition:</b> Transform.h:492</div></div> <div class="ttc" id="classEigen_1_1DenseBase_html_a158c2184951e6e415c2e9b98db8e8966"><div class="ttname"><a href="classEigen_1_1DenseBase.html#a158c2184951e6e415c2e9b98db8e8966">Eigen::DenseBase::isApprox</a></div><div class="ttdeci">bool isApprox(const DenseBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const </div><div class="ttdef"><b>Definition:</b> Fuzzy.h:98</div></div> <div class="ttc" id="group__enums_html_gga0c5bde183ecefe103f70b49ad9740bcda1e16fa1b92ed7a058cd4ce7a9a0db044"><div class="ttname"><a href="group__enums.html#gga0c5bde183ecefe103f70b49ad9740bcda1e16fa1b92ed7a058cd4ce7a9a0db044">Eigen::RowMajor</a></div><div class="ttdef"><b>Definition:</b> Constants.h:266</div></div> <div class="ttc" id="group__Geometry__Module_html_ga0af228e7443e5447de55bc7ba10b4d8e"><div class="ttname"><a href="group__Geometry__Module.html#ga0af228e7443e5447de55bc7ba10b4d8e">Eigen::Projective2f</a></div><div class="ttdeci">Transform< float, 2, Projective > Projective2f</div><div class="ttdef"><b>Definition:</b> Transform.h:670</div></div> <div class="ttc" id="group__Geometry__Module_html_ga4ee356e527fdc5aa9b048542ff6d4278"><div class="ttname"><a href="group__Geometry__Module.html#ga4ee356e527fdc5aa9b048542ff6d4278">Eigen::Isometry2f</a></div><div class="ttdeci">Transform< float, 2, Isometry > Isometry2f</div><div class="ttdef"><b>Definition:</b> Transform.h:643</div></div> <div class="ttc" id="group__Geometry__Module_html_ga2ffd4a2121dd59a3955735299e5e6364"><div class="ttname"><a href="group__Geometry__Module.html#ga2ffd4a2121dd59a3955735299e5e6364">Eigen::AffineCompact2f</a></div><div class="ttdeci">Transform< float, 2, AffineCompact > AffineCompact2f</div><div class="ttdef"><b>Definition:</b> Transform.h:661</div></div> <div class="ttc" id="classEigen_1_1Transform_html_adb187d1758687a8de4dd9ea275f2a0a7"><div class="ttname"><a href="classEigen_1_1Transform.html#adb187d1758687a8de4dd9ea275f2a0a7">Eigen::Transform::TransformTimeDiagonalReturnType</a></div><div class="ttdeci">Transform< Scalar, Dim, TransformTimeDiagonalMode > TransformTimeDiagonalReturnType</div><div class="ttdef"><b>Definition:</b> Transform.h:220</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a0c792f75e5e52207a6c011d8104367ac"><div class="ttname"><a href="classEigen_1_1Transform.html#a0c792f75e5e52207a6c011d8104367ac">Eigen::Transform::rotation</a></div><div class="ttdeci">const LinearMatrixType rotation() const </div><div class="ttdef"><b>Definition:</b> Transform.h:998</div></div> <div class="ttc" id="group__enums_html_gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925"><div class="ttname"><a href="group__enums.html#gga302a826315506a7217d4b477ea78425fac0984f0c0fc7cdcea1c0bde170f9c925">Eigen::Affine</a></div><div class="ttdef"><b>Definition:</b> Constants.h:394</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a76d43dc15b6966af98842e5219152cf2"><div class="ttname"><a href="classEigen_1_1Transform.html#a76d43dc15b6966af98842e5219152cf2">Eigen::Transform::ConstAffinePart</a></div><div class="ttdeci">internal::conditional< int(Mode)==int(AffineCompact), const MatrixType &, const Block< const MatrixType, Dim, HDim > >::type ConstAffinePart</div><div class="ttdef"><b>Definition:</b> Transform.h:207</div></div> <div class="ttc" id="classEigen_1_1Transform_html_aa94dac47195ab409fd1535c152405505"><div class="ttname"><a href="classEigen_1_1Transform.html#aa94dac47195ab409fd1535c152405505">Eigen::Transform::TranslationPart</a></div><div class="ttdeci">Block< MatrixType, Dim, 1, int(Mode)==(AffineCompact)> TranslationPart</div><div class="ttdef"><b>Definition:</b> Transform.h:211</div></div> <div class="ttc" id="structEigen_1_1NumTraits_html"><div class="ttname"><a href="structEigen_1_1NumTraits.html">Eigen::NumTraits</a></div><div class="ttdoc">Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...</div><div class="ttdef"><b>Definition:</b> NumTraits.h:88</div></div> <div class="ttc" id="namespaceEigen_html_a81fb70d0dc1c6deb42e9816647607247"><div class="ttname"><a href="namespaceEigen.html#a81fb70d0dc1c6deb42e9816647607247">Eigen::operator*</a></div><div class="ttdeci">const internal::permut_matrix_product_retval< PermutationDerived, Derived, OnTheRight > operator*(const MatrixBase< Derived > &matrix, const PermutationBase< PermutationDerived > &permutation)</div><div class="ttdef"><b>Definition:</b> PermutationMatrix.h:510</div></div> <div class="ttc" id="namespaceEigen_html_adc9da5be31bdce40c25a92c27999c0e3"><div class="ttname"><a href="namespaceEigen.html#adc9da5be31bdce40c25a92c27999c0e3">Eigen::Dynamic</a></div><div class="ttdeci">const int Dynamic</div><div class="ttdef"><b>Definition:</b> Constants.h:21</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a4663159a1450fa89214b1ab71f7ef5bf"><div class="ttname"><a href="classEigen_1_1Transform.html#a4663159a1450fa89214b1ab71f7ef5bf">Eigen::Transform::data</a></div><div class="ttdeci">Scalar * data()</div><div class="ttdef"><b>Definition:</b> Transform.h:564</div></div> <div class="ttc" id="group__enums_html_gga2d78499b99ddc29b9494f7ea33864d52a1785ac1174dab733556ac572448984c7"><div class="ttname"><a href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52a1785ac1174dab733556ac572448984c7">Eigen::ComputeFullV</a></div><div class="ttdef"><b>Definition:</b> Constants.h:331</div></div> <div class="ttc" id="group__Geometry__Module_html_gaac62cb423a4af85793c656a9848282a0"><div class="ttname"><a href="group__Geometry__Module.html#gaac62cb423a4af85793c656a9848282a0">Eigen::Affine2d</a></div><div class="ttdeci">Transform< double, 2, Affine > Affine2d</div><div class="ttdef"><b>Definition:</b> Transform.h:656</div></div> <div class="ttc" id="classEigen_1_1JacobiSVD_html_a48d4068b97dfbb83d62599e56e26797a"><div class="ttname"><a href="classEigen_1_1JacobiSVD.html#a48d4068b97dfbb83d62599e56e26797a">Eigen::JacobiSVD::singularValues</a></div><div class="ttdeci">const SingularValuesType & singularValues() const </div><div class="ttdef"><b>Definition:</b> JacobiSVD.h:630</div></div> <div class="ttc" id="classEigen_1_1Transform_html_aea29b63b6c32046ae9a471d82c5cf869"><div class="ttname"><a href="classEigen_1_1Transform.html#aea29b63b6c32046ae9a471d82c5cf869">Eigen::Transform::Scalar</a></div><div class="ttdeci">_Scalar Scalar</div><div class="ttdef"><b>Definition:</b> Transform.h:186</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a5d8d5b5101ca4b34cb88fd4f71cec08e"><div class="ttname"><a href="classEigen_1_1Transform.html#a5d8d5b5101ca4b34cb88fd4f71cec08e">Eigen::Transform::cast</a></div><div class="ttdeci">internal::cast_return_type< Transform, Transform< NewScalarType, Dim, Mode, Options > >::type cast() const </div><div class="ttdef"><b>Definition:</b> Transform.h:572</div></div> <div class="ttc" id="group__enums_html_gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17"><div class="ttname"><a href="group__enums.html#gga302a826315506a7217d4b477ea78425fac6ccc3814bb6d2a8bf7f75d7131c6b17">Eigen::Isometry</a></div><div class="ttdef"><b>Definition:</b> Constants.h:391</div></div> <div class="ttc" id="group__Geometry__Module_html_ga40d0ecae258b06c9633323da78162515"><div class="ttname"><a href="group__Geometry__Module.html#ga40d0ecae258b06c9633323da78162515">Eigen::AffineCompact3d</a></div><div class="ttdeci">Transform< double, 3, AffineCompact > AffineCompact3d</div><div class="ttdef"><b>Definition:</b> Transform.h:667</div></div> <div class="ttc" id="structEigen_1_1EigenBase_html"><div class="ttname"><a href="structEigen_1_1EigenBase.html">Eigen::EigenBase</a></div><div class="ttdef"><b>Definition:</b> EigenBase.h:26</div></div> <div class="ttc" id="classEigen_1_1Translation_html"><div class="ttname"><a href="classEigen_1_1Translation.html">Eigen::Translation</a></div><div class="ttdoc">Represents a translation transformation. </div><div class="ttdef"><b>Definition:</b> ForwardDeclarations.h:236</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a970e36d17bd859badeacfbe73bc7364b"><div class="ttname"><a href="classEigen_1_1Transform.html#a970e36d17bd859badeacfbe73bc7364b">Eigen::Transform::isApprox</a></div><div class="ttdeci">bool isApprox(const Transform &other, const typename NumTraits< Scalar >::Real &prec=NumTraits< Scalar >::dummy_precision()) const </div><div class="ttdef"><b>Definition:</b> Transform.h:587</div></div> <div class="ttc" id="group__Geometry__Module_html_ga1cee3e45cad60050d3c94cf603e2ff45"><div class="ttname"><a href="group__Geometry__Module.html#ga1cee3e45cad60050d3c94cf603e2ff45">Eigen::Affine3d</a></div><div class="ttdeci">Transform< double, 3, Affine > Affine3d</div><div class="ttdef"><b>Definition:</b> Transform.h:658</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a3de2b78841914f0f4e2a523c88b8530e"><div class="ttname"><a href="classEigen_1_1Transform.html#a3de2b78841914f0f4e2a523c88b8530e">Eigen::Transform::makeAffine</a></div><div class="ttdeci">void makeAffine()</div><div class="ttdef"><b>Definition:</b> Transform.h:592</div></div> <div class="ttc" id="group__enums_html_ga302a826315506a7217d4b477ea78425f"><div class="ttname"><a href="group__enums.html#ga302a826315506a7217d4b477ea78425f">Eigen::TransformTraits</a></div><div class="ttdeci">TransformTraits</div><div class="ttdef"><b>Definition:</b> Constants.h:389</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ac85861889115ef75aaecec5eb7582f12"><div class="ttname"><a href="classEigen_1_1Transform.html#ac85861889115ef75aaecec5eb7582f12">Eigen::Transform::computeScalingRotation</a></div><div class="ttdeci">void computeScalingRotation(ScalingMatrixType *scaling, RotationMatrixType *rotation) const </div><div class="ttdef"><b>Definition:</b> Transform.h:1048</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ac54aa49e111f1afc14c11a3a671993ca"><div class="ttname"><a href="classEigen_1_1Transform.html#ac54aa49e111f1afc14c11a3a671993ca">Eigen::Transform::TranslationType</a></div><div class="ttdeci">Translation< Scalar, Dim > TranslationType</div><div class="ttdef"><b>Definition:</b> Transform.h:215</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a3846f7a4b892ed530881f52a5460ddf6"><div class="ttname"><a href="classEigen_1_1Transform.html#a3846f7a4b892ed530881f52a5460ddf6">Eigen::Transform::operator*</a></div><div class="ttdeci">const internal::transform_right_product_impl< Transform, OtherDerived >::ResultType operator*(const EigenBase< OtherDerived > &other) const </div><div class="ttdef"><b>Definition:</b> Transform.h:400</div></div> <div class="ttc" id="group__Geometry__Module_html_gaca1e57a15de08fe20c934c5600f19314"><div class="ttname"><a href="group__Geometry__Module.html#gaca1e57a15de08fe20c934c5600f19314">Eigen::Affine3f</a></div><div class="ttdeci">Transform< float, 3, Affine > Affine3f</div><div class="ttdef"><b>Definition:</b> Transform.h:654</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a4edf00461b9e1ce0abb791cee8a12ca5"><div class="ttname"><a href="classEigen_1_1Transform.html#a4edf00461b9e1ce0abb791cee8a12ca5">Eigen::Transform::affine</a></div><div class="ttdeci">ConstAffinePart affine() const </div><div class="ttdef"><b>Definition:</b> Transform.h:377</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ace20e267fb08cb804ed64fd1dad1d17c"><div class="ttname"><a href="classEigen_1_1Transform.html#ace20e267fb08cb804ed64fd1dad1d17c">Eigen::Transform::LinearPart</a></div><div class="ttdeci">Block< MatrixType, Dim, Dim, int(Mode)==(AffineCompact)> LinearPart</div><div class="ttdef"><b>Definition:</b> Transform.h:197</div></div> <div class="ttc" id="group__Geometry__Module_html_gaaf2985f9f12b96ba19c07a5ecd47056b"><div class="ttname"><a href="group__Geometry__Module.html#gaaf2985f9f12b96ba19c07a5ecd47056b">Eigen::Projective3f</a></div><div class="ttdeci">Transform< float, 3, Projective > Projective3f</div><div class="ttdef"><b>Definition:</b> Transform.h:672</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a66704eaad42c9dd8f3723746e264fcb2"><div class="ttname"><a href="classEigen_1_1Transform.html#a66704eaad42c9dd8f3723746e264fcb2">Eigen::Transform::linear</a></div><div class="ttdeci">LinearPart linear()</div><div class="ttdef"><b>Definition:</b> Transform.h:374</div></div> <div class="ttc" id="structEigen_1_1EigenBase_html_aa84222add803ad7c9db07dd4dd91d5d9"><div class="ttname"><a href="structEigen_1_1EigenBase.html#aa84222add803ad7c9db07dd4dd91d5d9">Eigen::EigenBase::derived</a></div><div class="ttdeci">Derived & derived()</div><div class="ttdef"><b>Definition:</b> EigenBase.h:34</div></div> <div class="ttc" id="group__enums_html_gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e"><div class="ttname"><a href="group__enums.html#gga302a826315506a7217d4b477ea78425faff9f02205c7dca9999837f996df1d06e">Eigen::AffineCompact</a></div><div class="ttdef"><b>Definition:</b> Constants.h:396</div></div> <div class="ttc" id="classEigen_1_1JacobiSVD_html_a49e16a4adf4fe58a2d65a5e5a31e7654"><div class="ttname"><a href="classEigen_1_1JacobiSVD.html#a49e16a4adf4fe58a2d65a5e5a31e7654">Eigen::JacobiSVD::matrixU</a></div><div class="ttdeci">const MatrixUType & matrixU() const </div><div class="ttdef"><b>Definition:</b> JacobiSVD.h:602</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a70ece05618a24131d9bf29162a700c58"><div class="ttname"><a href="classEigen_1_1Transform.html#a70ece05618a24131d9bf29162a700c58">Eigen::Transform::Identity</a></div><div class="ttdeci">static const Transform Identity()</div><div class="ttdoc">Returns an identity transformation. </div><div class="ttdef"><b>Definition:</b> Transform.h:498</div></div> <div class="ttc" id="classEigen_1_1Transform_html_abc21b93260324521746a4ca2efacba90"><div class="ttname"><a href="classEigen_1_1Transform.html#abc21b93260324521746a4ca2efacba90">Eigen::Transform::matrix</a></div><div class="ttdeci">const MatrixType & matrix() const </div><div class="ttdef"><b>Definition:</b> Transform.h:367</div></div> <div class="ttc" id="group__Geometry__Module_html_ga3802603a0c0017d3bc38e1c2483bc0c8"><div class="ttname"><a href="group__Geometry__Module.html#ga3802603a0c0017d3bc38e1c2483bc0c8">Eigen::Isometry2d</a></div><div class="ttdeci">Transform< double, 2, Isometry > Isometry2d</div><div class="ttdef"><b>Definition:</b> Transform.h:647</div></div> <div class="ttc" id="classEigen_1_1Transform_html_aa8e36298662286f4619b2cedf09e31e7"><div class="ttname"><a href="classEigen_1_1Transform.html#aa8e36298662286f4619b2cedf09e31e7">Eigen::Transform::affine</a></div><div class="ttdeci">AffinePart affine()</div><div class="ttdef"><b>Definition:</b> Transform.h:379</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ae80ecf3abb4b22d409c5adbd19850aa8"><div class="ttname"><a href="classEigen_1_1Transform.html#ae80ecf3abb4b22d409c5adbd19850aa8">Eigen::Transform::Transform</a></div><div class="ttdeci">Transform(const EigenBase< OtherDerived > &other)</div><div class="ttdef"><b>Definition:</b> Transform.h:267</div></div> <div class="ttc" id="group__enums_html_gga0c5bde183ecefe103f70b49ad9740bcda761c0504a518c7450ed6dfe9eaeab8a6"><div class="ttname"><a href="group__enums.html#gga0c5bde183ecefe103f70b49ad9740bcda761c0504a518c7450ed6dfe9eaeab8a6">Eigen::DontAlign</a></div><div class="ttdef"><b>Definition:</b> Constants.h:270</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a29b71eedfb78a436577878e2e5560946"><div class="ttname"><a href="classEigen_1_1Transform.html#a29b71eedfb78a436577878e2e5560946">Eigen::Transform::inverse</a></div><div class="ttdeci">Transform inverse(TransformTraits traits=(TransformTraits) Mode) const </div><div class="ttdef"><b>Definition:</b> Transform.h:1124</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a5a1112983fef15f856661bc7a70821c2"><div class="ttname"><a href="classEigen_1_1Transform.html#a5a1112983fef15f856661bc7a70821c2">Eigen::Transform::MatrixType</a></div><div class="ttdeci">internal::make_proper_matrix_type< Scalar, Rows, HDim, Options >::type MatrixType</div><div class="ttdef"><b>Definition:</b> Transform.h:191</div></div> <div class="ttc" id="group__Geometry__Module_html_gad835f3f4d1783ee8b7ff85af90b9d13e"><div class="ttname"><a href="group__Geometry__Module.html#gad835f3f4d1783ee8b7ff85af90b9d13e">Eigen::Projective3d</a></div><div class="ttdeci">Transform< double, 3, Projective > Projective3d</div><div class="ttdef"><b>Definition:</b> Transform.h:676</div></div> <div class="ttc" id="group__Geometry__Module_html_ga1c999eef555fe940f147f3e8d18be6de"><div class="ttname"><a href="group__Geometry__Module.html#ga1c999eef555fe940f147f3e8d18be6de">Eigen::AffineCompact3f</a></div><div class="ttdeci">Transform< float, 3, AffineCompact > AffineCompact3f</div><div class="ttdef"><b>Definition:</b> Transform.h:663</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a4a1ecdb7e8eb963f3e167fa99faa5e95"><div class="ttname"><a href="classEigen_1_1Transform.html#a4a1ecdb7e8eb963f3e167fa99faa5e95">Eigen::Transform::Transform</a></div><div class="ttdeci">Transform(const Transform< OtherScalarType, Dim, Mode, Options > &other)</div><div class="ttdef"><b>Definition:</b> Transform.h:577</div></div> <div class="ttc" id="group__Geometry__Module_html_gaa44476c8fb0e300b47e21111db7f8224"><div class="ttname"><a href="group__Geometry__Module.html#gaa44476c8fb0e300b47e21111db7f8224">Eigen::AffineCompact2d</a></div><div class="ttdeci">Transform< double, 2, AffineCompact > AffineCompact2d</div><div class="ttdef"><b>Definition:</b> Transform.h:665</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a40dcc334db75411e168691d9bce08c3a"><div class="ttname"><a href="classEigen_1_1Transform.html#a40dcc334db75411e168691d9bce08c3a">Eigen::Transform::data</a></div><div class="ttdeci">const Scalar * data() const </div><div class="ttdef"><b>Definition:</b> Transform.h:562</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a8dcfbc5a318cc1f7d10073ffa959051c"><div class="ttname"><a href="classEigen_1_1Transform.html#a8dcfbc5a318cc1f7d10073ffa959051c">Eigen::Transform::ConstLinearPart</a></div><div class="ttdeci">const Block< ConstMatrixType, Dim, Dim, int(Mode)==(AffineCompact)> ConstLinearPart</div><div class="ttdef"><b>Definition:</b> Transform.h:199</div></div> <div class="ttc" id="classEigen_1_1JacobiSVD_html_ae5158ab7ca44a705c2a3b56ec926b42a"><div class="ttname"><a href="classEigen_1_1JacobiSVD.html#ae5158ab7ca44a705c2a3b56ec926b42a">Eigen::JacobiSVD::matrixV</a></div><div class="ttdeci">const MatrixVType & matrixV() const </div><div class="ttdef"><b>Definition:</b> JacobiSVD.h:618</div></div> <div class="ttc" id="classEigen_1_1Block_html"><div class="ttname"><a href="classEigen_1_1Block.html">Eigen::Block</a></div><div class="ttdoc">Expression of a fixed-size or dynamic-size block. </div><div class="ttdef"><b>Definition:</b> Block.h:102</div></div> <div class="ttc" id="classEigen_1_1Transform_html_aa15d55b76aa1df369db63ff8c000d71a"><div class="ttname"><a href="classEigen_1_1Transform.html#aa15d55b76aa1df369db63ff8c000d71a">Eigen::Transform::AffinePart</a></div><div class="ttdeci">internal::conditional< int(Mode)==int(AffineCompact), MatrixType &, Block< MatrixType, Dim, HDim > >::type AffinePart</div><div class="ttdef"><b>Definition:</b> Transform.h:203</div></div> <div class="ttc" id="group__Geometry__Module_html_gaaab0779d16c81454c038cee3324585f2"><div class="ttname"><a href="group__Geometry__Module.html#gaaab0779d16c81454c038cee3324585f2">Eigen::Isometry3f</a></div><div class="ttdeci">Transform< float, 3, Isometry > Isometry3f</div><div class="ttdef"><b>Definition:</b> Transform.h:645</div></div> <div class="ttc" id="group__Geometry__Module_html_gaaacee014168e2286115b9acd93de9c77"><div class="ttname"><a href="group__Geometry__Module.html#gaaacee014168e2286115b9acd93de9c77">Eigen::Affine2f</a></div><div class="ttdeci">Transform< float, 2, Affine > Affine2f</div><div class="ttdef"><b>Definition:</b> Transform.h:652</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a746fdf41f0377f203f231a1705cf6012"><div class="ttname"><a href="classEigen_1_1Transform.html#a746fdf41f0377f203f231a1705cf6012">Eigen::Transform::operator=</a></div><div class="ttdeci">Transform & operator=(const EigenBase< OtherDerived > &other)</div><div class="ttdef"><b>Definition:</b> Transform.h:278</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a4b5352e0747f0354c659edf2eff9f35b"><div class="ttname"><a href="classEigen_1_1Transform.html#a4b5352e0747f0354c659edf2eff9f35b">Eigen::Transform::ConstTranslationPart</a></div><div class="ttdeci">const Block< ConstMatrixType, Dim, 1, int(Mode)==(AffineCompact)> ConstTranslationPart</div><div class="ttdef"><b>Definition:</b> Transform.h:213</div></div> <div class="ttc" id="classEigen_1_1JacobiSVD_html"><div class="ttname"><a href="classEigen_1_1JacobiSVD.html">Eigen::JacobiSVD</a></div><div class="ttdoc">Two-sided Jacobi SVD decomposition of a rectangular matrix. </div><div class="ttdef"><b>Definition:</b> ForwardDeclarations.h:224</div></div> <div class="ttc" id="classEigen_1_1MatrixBase_html_af1b15ae4c6f69b7324dd8ef70089dfc3"><div class="ttname"><a href="classEigen_1_1MatrixBase.html#af1b15ae4c6f69b7324dd8ef70089dfc3">Eigen::MatrixBase::setIdentity</a></div><div class="ttdeci">Derived & setIdentity()</div><div class="ttdef"><b>Definition:</b> CwiseNullaryOp.h:772</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ad7355bb89f8429007277363642c90bfd"><div class="ttname"><a href="classEigen_1_1Transform.html#ad7355bb89f8429007277363642c90bfd">Eigen::Transform::matrix</a></div><div class="ttdeci">MatrixType & matrix()</div><div class="ttdef"><b>Definition:</b> Transform.h:369</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a5448d7cb18b99426d18dfc3a18c0f4a7"><div class="ttname"><a href="classEigen_1_1Transform.html#a5448d7cb18b99426d18dfc3a18c0f4a7">Eigen::Transform::preshear</a></div><div class="ttdeci">Transform & preshear(const Scalar &sx, const Scalar &sy)</div><div class="ttdef"><b>Definition:</b> Transform.h:928</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a79881f97c02305c0eb4820d7df00bc09"><div class="ttname"><a href="classEigen_1_1Transform.html#a79881f97c02305c0eb4820d7df00bc09">Eigen::Transform::translation</a></div><div class="ttdeci">TranslationPart translation()</div><div class="ttdef"><b>Definition:</b> Transform.h:384</div></div> <div class="ttc" id="group__Geometry__Module_html_gab2b63f5ecf343e58bee2eb482592bc49"><div class="ttname"><a href="group__Geometry__Module.html#gab2b63f5ecf343e58bee2eb482592bc49">Eigen::Projective2d</a></div><div class="ttdeci">Transform< double, 2, Projective > Projective2d</div><div class="ttdef"><b>Definition:</b> Transform.h:674</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ad84ac89e9b8499975bad62a9db9f8b4c"><div class="ttname"><a href="classEigen_1_1Transform.html#ad84ac89e9b8499975bad62a9db9f8b4c">Eigen::Transform::computeRotationScaling</a></div><div class="ttdeci">void computeRotationScaling(RotationMatrixType *rotation, ScalingMatrixType *scaling) const </div><div class="ttdef"><b>Definition:</b> Transform.h:1019</div></div> <div class="ttc" id="classEigen_1_1Matrix_html"><div class="ttname"><a href="classEigen_1_1Matrix.html">Eigen::Matrix</a></div><div class="ttdoc">The matrix class, also used for vectors and row-vectors. </div><div class="ttdef"><b>Definition:</b> Matrix.h:127</div></div> <div class="ttc" id="group__enums_html_gga2d78499b99ddc29b9494f7ea33864d52a75953ad8f5837a79d6fbd3c116e7d462"><div class="ttname"><a href="group__enums.html#gga2d78499b99ddc29b9494f7ea33864d52a75953ad8f5837a79d6fbd3c116e7d462">Eigen::ComputeFullU</a></div><div class="ttdef"><b>Definition:</b> Constants.h:327</div></div> <div class="ttc" id="classEigen_1_1MatrixBase_html_adaf22d3a2069ec2c0df912cb87329e9c"><div class="ttname"><a href="classEigen_1_1MatrixBase.html#adaf22d3a2069ec2c0df912cb87329e9c">Eigen::MatrixBase::asDiagonal</a></div><div class="ttdeci">const DiagonalWrapper< const Derived > asDiagonal() const </div><div class="ttdef"><b>Definition:</b> DiagonalMatrix.h:278</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a4619e6e4e0659443ad2bdb24c80af281"><div class="ttname"><a href="classEigen_1_1Transform.html#a4619e6e4e0659443ad2bdb24c80af281">Eigen::Transform::translation</a></div><div class="ttdeci">ConstTranslationPart translation() const </div><div class="ttdef"><b>Definition:</b> Transform.h:382</div></div> <div class="ttc" id="classEigen_1_1MatrixBase_html"><div class="ttname"><a href="classEigen_1_1MatrixBase.html">Eigen::MatrixBase</a></div><div class="ttdoc">Base class for all dense matrices, vectors, and expressions. </div><div class="ttdef"><b>Definition:</b> MatrixBase.h:48</div></div> <div class="ttc" id="classEigen_1_1Transform_html_a08fcfa17a274862a36b5908d2b261e0d"><div class="ttname"><a href="classEigen_1_1Transform.html#a08fcfa17a274862a36b5908d2b261e0d">Eigen::Transform::EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE</a></div><div class="ttdeci">EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF_VECTORIZABLE_FIXED_SIZE(_Scalar, _Dim==Dynamic?Dynamic:(_Dim+1)*(_Dim+1)) enum</div><div class="ttdef"><b>Definition:</b> Transform.h:179</div></div> <div class="ttc" id="classEigen_1_1Transform_html"><div class="ttname"><a href="classEigen_1_1Transform.html">Eigen::Transform</a></div><div class="ttdoc">Represents an homogeneous transformation in a N dimensional space. </div><div class="ttdef"><b>Definition:</b> ForwardDeclarations.h:261</div></div> <div class="ttc" id="group__Geometry__Module_html_gaf6a2d462b1cb12f96cb6baedc132a3f2"><div class="ttname"><a href="group__Geometry__Module.html#gaf6a2d462b1cb12f96cb6baedc132a3f2">Eigen::Isometry3d</a></div><div class="ttdeci">Transform< double, 3, Isometry > Isometry3d</div><div class="ttdef"><b>Definition:</b> Transform.h:649</div></div> <div class="ttc" id="classEigen_1_1Transform_html_ade2ee06371d257b0eff58531d95a6474"><div class="ttname"><a href="classEigen_1_1Transform.html#ade2ee06371d257b0eff58531d95a6474">Eigen::Transform::LinearMatrixType</a></div><div class="ttdeci">Matrix< Scalar, Dim, Dim, Options > LinearMatrixType</div><div class="ttdef"><b>Definition:</b> Transform.h:195</div></div> <div class="ttc" id="classEigen_1_1PlainObjectBase_html_a04abe84a9a894de335a232681d9a0722"><div class="ttname"><a href="classEigen_1_1PlainObjectBase.html#a04abe84a9a894de335a232681d9a0722">Eigen::PlainObjectBase::setZero</a></div><div class="ttdeci">Derived & setZero(Index size)</div><div class="ttdef"><b>Definition:</b> CwiseNullaryOp.h:515</div></div> </div><!-- fragment --></div><!-- contents --> </div><!-- doc-content --> <!-- start footer part --> <div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> <ul> <li class="navelem"><a class="el" href="dir_e49d68e3078f12dfcf157021597ad168.html">Eigen</a></li><li class="navelem"><a class="el" href="dir_64b228556dc7f9fe757d43bb57fbfc24.html">src</a></li><li class="navelem"><a class="el" href="dir_d3830aef5e02ff83b0a743a58bf9d99e.html">Geometry</a></li><li class="navelem"><b>Transform.h</b></li> <li class="footer">Generated on Mon Oct 28 2013 11:04:26 for Eigen by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li> </ul> </div> <!-- Piwik --> <!-- <script type="text/javascript"> var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.sylphide-consulting.com/piwik/" : "http://stats.sylphide-consulting.com/piwik/"); document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E")); </script><script type="text/javascript"> try { var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 20); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} </script><noscript><p><img src="http://stats.sylphide-consulting.com/piwik/piwik.php?idsite=20" style="border:0" alt="" /></p></noscript> --> <!-- End Piwik Tracking Code --> </body> </html>