From 9e25dfcb2c8ed4939d2a8855afe0b0c1c203706b Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Mon, 25 Aug 2008 10:49:53 +0000 Subject: [PATCH] Various doc improvements... including a owl in the API doc header. --- CMakeLists.txt | 2 +- doc/CMakeLists.txt | 14 ++ doc/Doxyfile.in | 8 +- doc/Eigen_Silly_Professor_64x64.png | Bin 0 -> 8355 bytes doc/QuickStartGuide.dox | 250 +++++++++++++++++----------- doc/eigendoxy.css | 223 +++++++++++++++---------- doc/eigendoxy_footer.html.in | 5 + doc/eigendoxy_header.html.in | 10 ++ doc/eigendoxy_tabs.css | 105 ++++++++++++ 9 files changed, 425 insertions(+), 192 deletions(-) create mode 100644 doc/Eigen_Silly_Professor_64x64.png create mode 100644 doc/eigendoxy_footer.html.in create mode 100644 doc/eigendoxy_header.html.in create mode 100644 doc/eigendoxy_tabs.css diff --git a/CMakeLists.txt b/CMakeLists.txt index 189562b20..cc78d5a46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ PROJECT(Eigen) - +SET(EIGEN_VERSION "2.0-alpha7 (svn)") CMAKE_MINIMUM_REQUIRED(VERSION 2.4) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 10d762a21..4a0ff6fa5 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -11,6 +11,16 @@ CONFIGURE_FILE( ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile ) +CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/eigendoxy_header.html.in + ${CMAKE_CURRENT_BINARY_DIR}/eigendoxy_header.html +) + +CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/eigendoxy_footer.html.in + ${CMAKE_CURRENT_BINARY_DIR}/eigendoxy_footer.html +) + SET(examples_targets "") SET(snippets_targets "") @@ -20,6 +30,10 @@ ADD_SUBDIRECTORY(snippets) ADD_CUSTOM_TARGET( run_doxygen ALL + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/eigendoxy_tabs.css + ${CMAKE_CURRENT_BINARY_DIR}/html/ + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/Eigen_Silly_Professor_64x64.png + ${CMAKE_CURRENT_BINARY_DIR}/html/ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/buildexamplelist.sh ${CMAKE_SOURCE_DIR} > ${CMAKE_CURRENT_BINARY_DIR}/ExampleList.dox COMMAND doxygen WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 10c170a32..2ffcce036 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -31,7 +31,8 @@ PROJECT_NAME = Eigen # This could be handy for archiving the generated documentation or # if some version control system is used. -PROJECT_NUMBER = 2.0-alpha7 +#EIGEN_VERSION is set in the root CMakeLists.txt +PROJECT_NUMBER = ${EIGEN_VERSION} # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. @@ -767,13 +768,14 @@ HTML_FILE_EXTENSION = .html # each generated HTML page. If it is left blank doxygen will generate a # standard header. -HTML_HEADER = +HTML_HEADER = ${CMAKE_BINARY_DIR}/doc/eigendoxy_header.html # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. -HTML_FOOTER = +# the footer has not been customized yet, so let's use the default one +#HTML_FOOTER = ${CMAKE_BINARY_DIR}/doc/eigendoxy_footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to diff --git a/doc/Eigen_Silly_Professor_64x64.png b/doc/Eigen_Silly_Professor_64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..079d45b1d2bb6a2fca3ef0253850d92f480d294c GIT binary patch literal 8355 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 tL_t&+3;BwpzW>i|3cpY)hF|Fi{=Yt

Quick start guide

\b Table \b of \b contents - - \ref SimpleExampleFixedSize - - \ref SimpleExampleDynamicSize - - \ref MatrixTypes - - \ref MatrixInitialization - - \ref BasicLinearAlgebra - - \ref Reductions - - \ref SubMatrix - - \ref MatrixTransformations - - \ref Geometry - - \ref Performance - - \ref AdvancedLinearAlgebra - - \ref LinearSolvers - - \ref LU - - \ref Cholesky - - \ref QR - - \ref EigenProblems + - Core features (Chapter I) + - \ref SimpleExampleFixedSize + - \ref SimpleExampleDynamicSize + - \ref MatrixTypes + - \ref MatrixInitialization + - \ref BasicLinearAlgebra + - \ref Reductions + - \ref SubMatrix + - \ref MatrixTransformations + - \ref TriangularMatrix + - \ref Performance + - \ref Geometry (Chapter II) + - \ref AdvancedLinearAlgebra (Chapter III) + - \ref LinearSolvers + - \ref LU + - \ref Cholesky + - \ref QR + - \ref EigenProblems

@@ -31,7 +32,7 @@ namespace Eigen { By fixed-size, we mean that the number of rows and columns are known at compile-time. In this case, Eigen avoids dynamic memory allocation and unroll loops. This is useful for very small sizes (typically up to 4x4). -
+
\include Tutorial_simple_example_fixed_size.cpp @@ -43,7 +44,7 @@ output: Dynamic-size means that the number of rows and columns are not known at compile-time. In this case, they are stored as runtime variables and the arrays are dynamically allocated. -
+
\include Tutorial_simple_example_dynamic_size.cpp @@ -58,7 +59,7 @@ output: top\section MatrixTypes Matrix and vector types -In Eigen, all kinds of dense matrices and vectors are represented by the template class Matrix. In most cases you can simply use one of the several convenient typedefs (\ref matrixtypedefs). +In Eigen, all kinds of dense matrices and vectors are represented by the template class Matrix. In most cases you can simply use one of the \ref matrixtypedefs "several convenient typedefs". The template class Matrix takes a number of template parameters, but for now it is enough to understand the 3 first ones (and the others can then be left unspecified): @@ -77,30 +78,8 @@ What if the matrix has dynamic-size i.e. the number of rows or cols isn't known top\section MatrixInitialization Matrix and vector creation and initialization -To get a matrix with all coefficients equals to a given value you can use the Matrix::Constant() function, e.g.: - -
-\code -int rows=2, cols=3; -cout << MatrixXf::Constant(rows, cols, sqrt(2)); -\endcode - -output: -\code -1.41 1.41 1.41 -1.41 1.41 1.41 -\endcode -
- -To set all the coefficients of a matrix you can also use the setConstant() variant: -\code -MatrixXf m(rows, cols); -m.setConstant(rows, cols, value); -\endcode - -Eigen also offers variants of these functions for vector types and fixed-size matrices or vectors, as well as similar functions to create matrices with all coefficients equal to zero or one, to create the identity matrix and matrices with random coefficients: - - +Eigen offers several methods to create or set matrices with coefficients equals to either a constant value, the identity matrix or even random values: +
@@ -113,14 +92,14 @@ Matrix3f x; x = Matrix3f::Zero(); x = Matrix3f::Ones(); -x = Matrix3f::Constant(6); +x = Matrix3f::Constant(value); x = Matrix3f::Identity(); x = Matrix3f::Random(); x.setZero(); x.setOnes(); x.setIdentity(); -x.setConstant(6); +x.setConstant(value); x.setRandom(); \endcode @@ -130,13 +109,13 @@ MatrixXf x; x = MatrixXf::Zero(rows, cols); x = MatrixXf::Ones(rows, cols); -x = MatrixXf::Constant(rows, cols, 6); +x = MatrixXf::Constant(rows, cols, value); x = MatrixXf::Identity(rows, cols); x = MatrixXf::Random(rows, cols); x.setZero(rows, cols); x.setOnes(rows, cols); -x.setConstant(rows, cols, 6); +x.setConstant(rows, cols, value); x.setIdentity(rows, cols); x.setRandom(rows, cols); \endcode @@ -147,13 +126,13 @@ VectorXf x; x = VectorXf::Zero(size); x = VectorXf::Ones(size); -x = VectorXf::Constant(size, 6); +x = VectorXf::Constant(size, value); x = VectorXf::Identity(size); x = VectorXf::Random(size); x.setZero(size); x.setOnes(size); -x.setConstant(size, 6); +x.setConstant(size, value); x.setIdentity(size); x.setRandom(size); \endcode @@ -161,8 +140,27 @@ x.setRandom(size);
Fixed-size matrix or vector Dynamic-size matrix
-Finally, all the coefficients of a matrix can be set to specific values using the comma initializer syntax: -
+Here is an usage example: + +
+\code +cout << MatrixXf::Constant(2, 3, sqrt(2)) << endl; +RowVector3i v; +v.setConstant(6); +cout << "v = " << v << endl; +\endcode + +output: +\code +1.41 1.41 1.41 +1.41 1.41 1.41 + +v = 6 6 6 +\endcode +
+ +Eigen also offer a comma initializer syntax which allows to set all the coefficients of a matrix to specific values: +
\include Tutorial_commainit_01.cpp @@ -170,8 +168,8 @@ output: \verbinclude Tutorial_commainit_01.out
-Eigen's comma initializer also allows you to set the matrix per block: -
+Feel the above example boring ? Look at the following example where the matrix is set per block: +
\include Tutorial_commainit_02.cpp @@ -179,9 +177,9 @@ output: \verbinclude Tutorial_commainit_02.out
-Here .finished() is used to get the actual matrix object once the comma initialization +

\b Side \b note: here .finished() is used to get the actual matrix object once the comma initialization of our temporary submatrix is done. Note that despite the appearant complexity of such an expression -Eigen's comma initializer usually yields to very optimized code without any overhead. +Eigen's comma initializer usually yields to very optimized code without any overhead.

@@ -197,7 +195,7 @@ mat4 -= mat1*1.5 + mat2 * mat3/4; which includes two matrix scalar products ("mat1*1.5" and "mat3/4"), a matrix-matrix product ("mat2 * mat3/4"), a matrix addition ("+") and substraction with assignment ("-="). - +
matrix/vector product\code col2 = mat1 * col1; @@ -233,9 +231,9 @@ In Eigen only mathematically well defined operators can be used right away, but don't worry, thanks to the \link Cwise .cwise() \endlink operator prefix, Eigen's matrices also provide a very powerful numerical container supporting most common coefficient wise operators: - - - +
+ +
+ @@ -262,7 +260,9 @@ mat3 = mat1.cwise() <= mat2; mat3 = mat1.cwise() > mat2; etc. \endcode - +
Coefficient wise product \code mat3 = mat1.cwise() * mat2; \endcode
+
Trigo:\n sin, cos, tan\code mat3 = mat1.cwise().sin(); @@ -270,7 +270,7 @@ etc. \endcode
-Power:\n pow, square, cube, sqrt, exp, log\code +Power:\n pow, square, cube,\n sqrt, exp, log\code mat3 = mat1.cwise().square(); mat3 = mat1.cwise().pow(5); mat3 = mat1.cwise().log(); @@ -285,46 +285,38 @@ mat3 = mat1.cwise().abs(mat2); mat3 = mat1.cwise().abs2(mat2); \endcode
+
- +

\b Side \b note: If you feel the \c .cwise() syntax is too verbose for your taste and don't bother to have non mathematical operator directly available feel free to extend MatrixBase as described \ref ExtendingMatrixBase "here".

top\section Reductions Reductions -Reductions can be done matrix-wise, +Eigen provides several several reduction methods such as: +\link Cwise::minCoeff() minCoeff() \endlink, \link Cwise::maxCoeff() maxCoeff() \endlink, +\link Cwise::sum() sum() \endlink, \link Cwise::trace() trace() \endlink, +\link Cwise::norm() norm() \endlink, \link Cwise::norm2() norm2() \endlink, +\link Cwise::all() all() \endlink,and \link Cwise::any() any() \endlink. +All reduction operations can be done matrix-wise, \link MatrixBase::colwise() column-wise \endlink or -\link MatrixBase::rowwise() row-wise \endlink, e.g.: - - - - - - - +\link MatrixBase::rowwise() row-wise \endlink. Usage example: +
\code mat \endcode -\code -5 3 1 -2 7 8 -9 4 6 -\endcode -
\code mat.minCoeff(); \endcode\code 1 \endcode\code mat.maxCoeff(); \endcode\code 9 \endcode
\code mat.colwise().minCoeff(); \endcode\code 2 3 1 \endcode\code mat.colwise().maxCoeff(); \endcode\code 9 7 8 \endcode
+ + -
\code + 5 3 1 +mat = 2 7 8 + 9 4 6 \endcode + \code mat.minCoeff(); \endcode\code 1 \endcode
\code mat.colwise().minCoeff(); \endcode\code 2 3 1 \endcode
\code mat.rowwise().minCoeff(); \endcode\code 1 2 4 -\endcode\code mat.rowwise().maxCoeff(); \endcode\code -5 -8 -9 \endcode
-Eigen provides several other reduction methods such as \link Cwise::sum() sum() \endlink, -\link Cwise::norm() norm() \endlink, \link Cwise::norm2() norm2() \endlink, -\link Cwise::all() all() \endlink, and \link Cwise::any() any() \endlink. -The all() and any() functions are especially useful in combinaison with coeff-wise comparison operators. +

\b Side \b note: The all() and any() functions are especially useful in combinaison with coeff-wise comparison operators (\ref CwiseAll "example").

@@ -339,8 +331,8 @@ mat1.row(i) = mat2.col(j); mat1.col(j1).swap(mat1.col(j2)); \endcode -Read-write access to sub-vector: - +Read-write access to sub-vectors: +
@@ -353,7 +345,7 @@ Read-write access to sub-vector:
Default versions Optimized versions when the size is known at compile time
Read-write access to sub-matrices: - +
@@ -378,6 +370,13 @@ Read-write access to sub-matrices: mat1.corner(BottomRight)\endcode \link MatrixBase::corner(CornerType) (more) \endlink + + +
Default versions Optimized versions when the size is known at compile time
the \c rows x \c cols sub-matrix \n taken in one of the four corners
\code + vec1 = mat1.diagonal(); + mat1.diagonal() = vec1; + \endcode + \link MatrixBase::diagonal() (more) \endlink
@@ -386,25 +385,74 @@ Read-write access to sub-matrices: top\section MatrixTransformations Matrix transformations -transpose, adjoint, etc... - - - - - -top\section Geometry Geometry features - -maybe a second tutorial for that - + + + + + +
+\link MatrixBase::transpose() transposition \endlink (read-write)\code +mat3 = mat1.transpose() * mat2; +mat3.transpose() = mat1 * mat2.transpose(); +\endcode +
+\link MatrixBase::adjoint() adjoint \endlink (read only)\n\code +mat3 = mat1.adjoint() * mat2; +mat3 = mat1.conjugate().transpose() * mat2; +\endcode +
+\link MatrixBase::asDiagonal() make a diagonal matrix \endlink from a vector \n +\b Note: this product is automatically optimized !\code +mat3 = mat1 * vec2.asDiagonal();\endcode +
+\link MatrixBase::minor() minor \endlink (read-write)\code +mat4x4.minor(i,j) = mat3x3; +mat3x3 = mat4x4.minor(i,j);\endcode +
+top\section TriangularMatrix Dealing with triangular matrices +todo top\section Performance Notes on performances + + + + + + + + + +
\code +m4 = m4 * m4;\endcode +auto-evaluates so no aliasing problem (performance penalty is low)
\code +Matrix4f other = (m4 * m4).lazy();\endcode +forces lazy evaluation
\code +m4 = m4 + m4;\endcode +here Eigen goes for lazy evaluation, as with most expressions
\code +m4 = -m4 + m4 + 5 * m4;\endcode +same here, Eigen chooses lazy evaluation for all that.
\code +m4 = m4 * (m4 + m4);\endcode +here Eigen chooses to first evaluate m4 + m4 into a temporary. +indeed, here it is an optimization to cache this intermediate result.
\code +m3 = m3 * m4.block<3,3>(1,1);\endcode +here Eigen chooses \b not to evaluate block() into a temporary +because accessing coefficients of that block expression is not more costly than accessing +coefficients of a plain matrix.
\code +m4 = m4 * m4.transpose();\endcode +same here, lazy evaluation of the transpose.
\code +m4 = m4 * m4.transpose().eval();\endcode +forces immediate evaluation of the transpose
+ +top\section Geometry Geometry features + +maybe a second chapter for that top\section AdvancedLinearAlgebra Advanced Linear Algebra - +Again, let's do another chapter for that \subsection LinearSolvers Solving linear problems \subsection LU LU \subsection Cholesky Cholesky diff --git a/doc/eigendoxy.css b/doc/eigendoxy.css index 6ae31dde7..825cc4fc1 100644 --- a/doc/eigendoxy.css +++ b/doc/eigendoxy.css @@ -1,22 +1,23 @@ BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 9.4pt; } BODY,TD { - font-size: 90%; + /*font-size: 90%;*/ } H1 { text-align: center; - font-size: 160%; + font-size: 15pt; } H2 { - font-size: 120%; - background-color : #d8d6af; margin-top : 2em; + font-size: 12pt; + background-color : #d8d6af; margin-top : 20pt; } H3 { font-size: 100%; } -CAPTION { - font-weight: bold +CAPTION { + font-weight: bold } DIV.qindex { width: 100%; @@ -45,7 +46,7 @@ DIV.navtab { padding: 2px; } TD.navtab { - font-size: 70%; + font-size: 100%; } A.qindex { text-decoration: none; @@ -73,42 +74,42 @@ A.qindexHL:hover { background-color: #6666cc; color: #ffffff; } -A.qindexHL:visited { - text-decoration: none; - background-color: #6666cc; - color: #ffffff +A.qindexHL:visited { + text-decoration: none; + background-color: #6666cc; + color: #ffffff } -A.el { - text-decoration: none; - font-weight: bold +A.el { + text-decoration: none; + font-weight: bold } -A.elRef { - font-weight: bold +A.elRef { + font-weight: bold } -A.code:link { - text-decoration: none; - font-weight: normal; +A.code:link { + text-decoration: none; + font-weight: normal; color: #0000FF } -A.code:visited { - text-decoration: none; - font-weight: normal; +A.code:visited { + text-decoration: none; + font-weight: normal; color: #0000FF } -A.codeRef:link { - font-weight: normal; +A.codeRef:link { + font-weight: normal; color: #0000FF } -A.codeRef:visited { - font-weight: normal; +A.codeRef:visited { + font-weight: normal; color: #0000FF } -A:hover { - text-decoration: none; - background-color: #f2f2ff +A:hover { + text-decoration: none; + background-color: #f2f2ff } -DL.el { - margin-left: -1cm +DL.el { + margin-left: -1cm } .fragment { font-family: monospace, fixed; @@ -126,12 +127,12 @@ PRE.fragment { padding-top: 4px; padding-bottom: 4px; } -DIV.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px +DIV.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px } DIV.groupHeader { @@ -140,10 +141,10 @@ DIV.groupHeader { margin-bottom: 6px; font-weight: bold; } -DIV.groupText { - margin-left: 16px; - font-style: italic; - font-size: 90% +DIV.groupText { + margin-left: 16px; + font-style: italic; + font-size: 95% } BODY { background: white; @@ -178,15 +179,15 @@ TD.indexvalue { border: 1px solid #CCCCCC; } TR.memlist { - background-color: #f0f0f0; + background-color: #f0f0f0; } -P.formulaDsp { - text-align: center; +P.formulaDsp { + text-align: center; } IMG.formulaDsp { } -IMG.formulaInl { - vertical-align: middle; +IMG.formulaInl { + vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } @@ -202,7 +203,7 @@ SPAN.vhdllogic { color: #ff0000 } .mdescLeft { padding: 0px 8px 4px 8px; - font-size: 80%; + font-size: 90%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; @@ -213,7 +214,7 @@ SPAN.vhdllogic { color: #ff0000 } } .mdescRight { padding: 0px 8px 4px 8px; - font-size: 80%; + font-size: 90%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; @@ -238,7 +239,7 @@ SPAN.vhdllogic { color: #ff0000 } border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; - font-size: 80%; + font-size: 90%; } .memItemRight { padding: 1px 8px 0px 8px; @@ -256,7 +257,7 @@ SPAN.vhdllogic { color: #ff0000 } border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; - font-size: 80%; + font-size: 90%; } .memTemplItemLeft { padding: 1px 0px 0px 8px; @@ -274,7 +275,7 @@ SPAN.vhdllogic { color: #ff0000 } border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; - font-size: 80%; + font-size: 90%; } .memTemplItemRight { padding: 1px 8px 0px 8px; @@ -292,7 +293,7 @@ SPAN.vhdllogic { color: #ff0000 } border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; - font-size: 80%; + font-size: 90%; } .memTemplParams { padding: 1px 0px 0px 8px; @@ -311,9 +312,9 @@ SPAN.vhdllogic { color: #ff0000 } border-left-style: none; color: #606060; background-color: #FAFAFA; - font-size: 80%; + font-size: 90%; } -.search { +.search { color: #003399; font-weight: bold; } @@ -321,14 +322,14 @@ FORM.search { margin-bottom: 0px; margin-top: 0px; } -INPUT.search { - font-size: 75%; +INPUT.search { + font-size: 90%; color: #000080; font-weight: normal; background-color: #e8eef2; } -TD.tiny { - font-size: 75%; +TD.tiny { + font-size: 85%; } a { color: #1A41A8; @@ -336,16 +337,16 @@ a { a:visited { color: #2A3798; } -.dirtab { +.dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } -TH.dirtab { +TH.dirtab { background: #e8eef2; font-weight: bold; } -HR { +HR { height: 1px; border: none; border-top: 1px solid black; @@ -353,12 +354,12 @@ HR { /* Style for detailed member documentation */ .memtemplate { - font-size: 80%; + font-size: 90%; color: #606060; font-weight: normal; margin-left: 3px; -} -.memnav { +} +.memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; @@ -408,44 +409,92 @@ HR { font-family: sans-serif; margin:0.5em; } -.directory { - font-size: 9pt; - font-weight: bold; +.directory { + font-size: 9pt; + font-weight: bold; } -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; +.directory h3 { + margin: 0px; + margin-top: 1em; + font-size: 11pt; } -.directory > h3 { - margin-top: 0; +.directory > h3 { + margin-top: 0; } -.directory p { - margin: 0px; - white-space: nowrap; +.directory p { + margin: 0px; + white-space: nowrap; } -.directory div { - display: none; - margin: 0px; +.directory div { + display: none; + margin: 0px; } -.directory img { - vertical-align: -30%; +.directory img { + vertical-align: -30%; } H2 A { - font-size: 130%;margin:10px 0 1em 1em;display:block; + font-size: 13pt;margin:10px 0 1em 1em;display:block; } H2 A:hover { background-color: #d8d6af } A.top { - font-size: 120%; + font-size: 11pt; display:block; color: #666666; position:absolute; - right:2em; - margin:17px 0 0 0; + right:20pt; + margin:12pt 0 0 0; + text-decoration : none; } -A.top:hover { - background-color: #d8d6af;font-weight : bolder; +A.top:hover, A.logo:hover { + background-color: transparent;font-weight : bolder; } +P.note { + font-size: 7pt; +} + +TABLE.noborder { + border-bottom-style : none; + border-left-style : none; + border-right-style : none; + border-top-style : none ; + border-spacing : 0px 0px; + margin: 4pt 0 0 0; + padding: 0 0 0 0; +} +TABLE.noborder TD { + border-bottom-style : none; + border-left-style : none; + border-right-style : none; + border-top-style : none; + border-spacing : 0px 0px; + margin: 0 0 0 0; + vertical-align: top; +} + +TABLE.tutorial_code { + border-bottom-style : none; + border-left-style : dashed; + border-right-style : dashed; + border-top-style : dashed ; + border-spacing : 0px 0px; + empty-cells : show; + margin: 4pt 0 0 0; + padding: 0 0 0 0; +} +TABLE.tutorial_code TD { + border-bottom-style : dashed; + border-left-style : none; + border-right-style : none; + border-top-style : none; + border-spacing : 0px 0px; + empty-cells : show; + margin: 0 0 0 0; + padding: 2pt 5pt 2pt 5pt; + vertical-align: middle; +} + + + diff --git a/doc/eigendoxy_footer.html.in b/doc/eigendoxy_footer.html.in new file mode 100644 index 000000000..7654e0f43 --- /dev/null +++ b/doc/eigendoxy_footer.html.in @@ -0,0 +1,5 @@ +
Generated on Sun Aug 24 23:40:21 2008 for Eigen by  + +doxygen 1.5.5
+ + \ No newline at end of file diff --git a/doc/eigendoxy_header.html.in b/doc/eigendoxy_header.html.in new file mode 100644 index 000000000..d676645b9 --- /dev/null +++ b/doc/eigendoxy_header.html.in @@ -0,0 +1,10 @@ + + +Eigen: AngleAxis Class Template Reference + + + + + \ No newline at end of file diff --git a/doc/eigendoxy_tabs.css b/doc/eigendoxy_tabs.css new file mode 100644 index 000000000..1423133bf --- /dev/null +++ b/doc/eigendoxy_tabs.css @@ -0,0 +1,105 @@ +/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */ + +DIV.tabs +{ + position: absolute; + right: 10pt; + left: 0px; + background : url("tab_b.gif") repeat-x bottom; + margin-bottom : 4px; + margin-left : 100px; + margin-top : -2em; +} + +DIV.tabs UL +{ + margin : 0px; + padding-left : 10px; + list-style : none; +} + +DIV.tabs LI, DIV.tabs FORM +{ + display : inline; + margin : 0px; + padding : 0px; +} + +DIV.tabs FORM +{ + float : right; +} + +DIV.tabs A +{ + float : left; + background : url("tab_r.gif") no-repeat right top; + border-bottom : 1px solid #84B0C7; + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + +DIV.tabs A:hover +{ + background-position: 100% -150px; +} + +DIV.tabs A:link, DIV.tabs A:visited, +DIV.tabs A:active, DIV.tabs A:hover +{ + color: #1A419D; +} + +DIV.tabs SPAN +{ + float : left; + display : block; + background : url("tab_l.gif") no-repeat left top; + padding : 5px 9px; + white-space : nowrap; +} + +DIV.tabs INPUT +{ + float : right; + display : inline; + font-size : 1em; +} + +DIV.tabs TD +{ + font-size : x-small; + font-weight : bold; + text-decoration : none; +} + + + +/* Commented Backslash Hack hides rule from IE5-Mac \*/ +DIV.tabs SPAN {float : none;} +/* End IE5-Mac hack */ + +DIV.tabs A:hover SPAN +{ + background-position: 0% -150px; +} + +DIV.tabs LI.current A +{ + background-position: 100% -150px; + border-width : 0px; +} + +DIV.tabs LI.current SPAN +{ + background-position: 0% -150px; + padding-bottom : 6px; +} + +DIV.navpath +{ + background : none; + border : none; + border-bottom : 1px solid #84B0C7; +}