diff --git a/etc/doxygen/HumanoidRobotAPI.Doxyfile.in b/etc/doxygen/HumanoidRobotAPI.Doxyfile.in deleted file mode 100644 index 75cafd574b624dca2c32693dd71a3911a5a82d19..0000000000000000000000000000000000000000 --- a/etc/doxygen/HumanoidRobotAPI.Doxyfile.in +++ /dev/null @@ -1,1374 +0,0 @@ -# Doxyfile 1.5.5 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "@PROJECT_NAME@" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = "@PROJECT_BINARY_DIR@" - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, -# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, -# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, -# and Ukrainian. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = YES - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = prop="- \b " -ALIASES += componentproperties="\xrefitem componentproperties \"Component properties\" \"Component properties\"" - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = YES - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command <command> <input-file>, where <command> is the value of -# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = "@PROJECT_SOURCE_DIR@/source" \ - "@PROJECT_DOCUMENTATION_DIR@/doxygen" \ - "@PROJECT_BINARY_DIR@/propertydocs.dox" - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = moc* \ - */.svn/* \ - */interface/* \ - */build/* \ - */templates/* \ - */scripts/* \ - */doc/html/* \ - */cmake/* \ - */config/* \ - */test/* \ - - - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = @PROJECT_DOCUMENTATION_SNIPPET_DIR_REL@ - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = @PROJECT_DOCUMENTATION_IMAGE_DIR_REL@ - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command <filter> <input-file>, where <filter> -# is the value of the INPUT_FILTER tag, and <input-file> is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentstion. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = NO - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = @PROJECT_DOCUMENTATION_HTML_OUTPUT_DIR_REL@ - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/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 = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/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 -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/Doxygen.css - -# Customized layout - -LAYOUT_FILE = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/DoxygenLayout.xml - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = "@PROJECT_DOCUMENTATION_HTML_OUTPUT_DIR@/@PROJECT_NAME@.tag" - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is enabled by default, which results in a transparent -# background. Warning: Depending on the platform used, enabling this option -# may lead to badly anti-aliased labels on the edges of a graph (i.e. they -# become hard to read). - -DOT_TRANSPARENT = YES - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff --git a/etc/doxygen/layout/Doxygen.css b/etc/doxygen/layout/Doxygen.css deleted file mode 100644 index c7f9d74596183c8592dfff56ed5fa082c1cfc42e..0000000000000000000000000000000000000000 --- a/etc/doxygen/layout/Doxygen.css +++ /dev/null @@ -1,950 +0,0 @@ -/* The standard CSS for doxygen */ - -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 12px; -} - -/* @group Heading Levels */ - -h1 { - font-size: 150%; -} - -.title { - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2 { - font-size: 120%; -} - -h2 ~ *:not(h2) { - margin-left: 10px; -} - -h3 { - font-size: 100%; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd, p.starttd { - margin-top: 2px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code { - color: #4665A2; -} - -a.codeRef { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -.fragment { - font-family: monospace, fixed; - font-size: 105%; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 8px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #C4CFE5; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; -} - -.memname { - white-space: nowrap; - font-weight: bold; - margin-left: 6px; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 8px; - -moz-border-radius-topleft: 8px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 8px; - -webkit-border-top-left-radius: 8px; - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 2px 5px; - background-color: #FBFCFD; - border-top-width: 0; - /* opera specific markup */ - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} - -.params, .retval, .exception, .tparams { - border-spacing: 6px 2px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - - - - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0px; -} - -/* these are for tree view when used as main index */ - -.directory { - font-size: 9pt; - font-weight: bold; - margin: 5px; -} - -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ - -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ - -.directory > h3 { - margin-top: 0; -} - -.directory p { - margin: 0px; - white-space: nowrap; -} - -.directory div { - display: none; - margin: 0px; -} - -.directory img { - vertical-align: -30%; -} - -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; -} - -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -.directory-alt > h3 { - margin-top: 0; -} - -.directory-alt p { - margin: 0px; - white-space: nowrap; -} - -.directory-alt div { - display: none; - margin: 0px; -} - -.directory-alt img { - vertical-align: -30%; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable { - border-collapse:collapse; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; -} - -table.fieldtable { - width: 100%; - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - width: 100%; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -div.ingroups -{ - margin-left: 5px; - font-size: 8pt; - padding-left: 5px; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 7px; -} - -dl -{ - padding: 0 0 0 10px; -} - -dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug -{ - border-left:4px solid; - padding: 0 0 0 6px; -} - -dl.note -{ - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - border-color: #00D000; -} - -dl.deprecated -{ - border-color: #505050; -} - -dl.todo -{ - border-color: #00C0E0; -} - -dl.test -{ - border-color: #3030E0; -} - -dl.bug -{ - border-color: #C08050; -} - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } - pre.fragment - { - overflow: visible; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - } -} - diff --git a/etc/doxygen/layout/Footer.html b/etc/doxygen/layout/Footer.html deleted file mode 100644 index 1219e7fbd50376eeb04eed7292bf406626995655..0000000000000000000000000000000000000000 --- a/etc/doxygen/layout/Footer.html +++ /dev/null @@ -1,9 +0,0 @@ -<!--BEGIN GENERATE_TREEVIEW--> - <li class="footer">$generatedby - <a href="http://www.doxygen.org/index.html"> - <img class="footer" src="doxygen.png" alt="doxygen"/></a> $doxygenversion </li> - </ul> - </div> -<!--END GENERATE_TREEVIEW--> -</body> -</html> diff --git a/etc/doxygen/layout/Header.html b/etc/doxygen/layout/Header.html deleted file mode 100644 index d8bd2e3b0e5e79b96cba175278b73bf6952c9ef3..0000000000000000000000000000000000000000 --- a/etc/doxygen/layout/Header.html +++ /dev/null @@ -1,48 +0,0 @@ -<!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"/> -<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> -<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> -<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/> -<link href="$relpath$Doxygen.css" rel="stylesheet" type="text/css" /> -<!--$treeview -$search -$mathjax--> -</head> -<body> -<div id="top"><!-- do not remove this div! --> - -<!--BEGIN TITLEAREA--> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <!--BEGIN PROJECT_LOGO> - <td id="projectlogo"><img alt="Logo" src="$relpath$$projectlogo"/></td> - <!--END PROJECT_LOGO> - <!--BEGIN PROJECT_NAME--> - <td style="padding-left: 0.5em;"> - <div id="projectname">$projectname - <!--BEGIN PROJECT_NUMBER--> <span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER--> - </div> - <!--BEGIN PROJECT_BRIEF><div id="projectbrief">$projectbrief</div><END PROJECT_BRIEF--> - </td> - <!--END PROJECT_NAME--> - <!--BEGIN !PROJECT_NAME--> - <!--BEGIN PROJECT_BRIEF> - <td style="padding-left: 0.5em;"> - <div id="projectbrief">$projectbrief</div> - </td> - <END PROJECT_BRIEF--> - <!--END !PROJECT_NAME--> - <!--BEGIN DISABLE_INDEX--> - <!--BEGIN SEARCHENGINE> - <td>$searchbox</td> - <END SEARCHENGINE--> - <!--END DISABLE_INDEX--> - </tr> - </tbody> -</table> -</div> -<!--END TITLEAREA--> diff --git a/etc/doxygen/pages/0.Overview.dox b/etc/doxygen/pages/0.Overview.dox new file mode 100644 index 0000000000000000000000000000000000000000..263e9a36cbb5fbc034d7f17753fbfe64cbe2b5b6 --- /dev/null +++ b/etc/doxygen/pages/0.Overview.dox @@ -0,0 +1,18 @@ +/** +\defgroup RobotAPI RobotAPI Overview + +The ArmarX project RobotAPI is based on the ArmarXCore Framework. + +\par Components +RobotAPI provides the following components +- armarx::ComponentX: ComponentX description + +Each component can provide several properties which are set on command line or via a configuration file. +See \ref componentproperties for an overview of properties. + +\par Applications +- armarx::ApplicationY: Description of ApplicationY + +\par interface Interface Documentation +Documentation of interfaces available in ArmarXCore is available on the \ref slicedocumentation "Slice Documentation" page. +*/ diff --git a/etc/doxygen/pages/1.Installation.dox b/etc/doxygen/pages/1.Installation.dox new file mode 100644 index 0000000000000000000000000000000000000000..dbd71ecac7b475ffb3c206c1b3ecb1a96c4481f3 --- /dev/null +++ b/etc/doxygen/pages/1.Installation.dox @@ -0,0 +1,8 @@ +/** +\addtogroup Installation 1. Installation + +\defgroup RobotAPI-Installation RobotAPI Installation +\ingroup RobotAPI Installation + +RobotAPI depends on ArmarXCore and ArmarXGui which must be installed. +*/ diff --git a/etc/doxygen/pages/2.Tutorials.dox b/etc/doxygen/pages/2.Tutorials.dox new file mode 100644 index 0000000000000000000000000000000000000000..b169a345b2fb3181b06e90c675ea70e3ae58639b --- /dev/null +++ b/etc/doxygen/pages/2.Tutorials.dox @@ -0,0 +1,8 @@ +/** +\addtogroup Tutorials 2. Tutorials + +\defgroup RobotAPI-Tutorials RobotAPI Tutorials +\ingroup RobotAPI Tutorials + +... +*/ diff --git a/etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox b/etc/doxygen/pages/3.HowTos.RemoteRobot.dox similarity index 92% rename from etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox rename to etc/doxygen/pages/3.HowTos.RemoteRobot.dox index bab878d25656793fefe58f80188f2632f802cd13..e803f42eea59b4f6e27a77c2b1845657a6d23f6d 100644 --- a/etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox +++ b/etc/doxygen/pages/3.HowTos.RemoteRobot.dox @@ -1,8 +1,8 @@ /** -\defgroup remoterobot Robot State and Remote Robot -\ingroup api-robotapi +\page RobotAPI-HowTos-RemoteRobot Robot State and Remote Robot +\ingroup RobotAPI-HowTos -\section remoterobot-start Starting a RobotStateComponent +\section RobotAPI-HowTos-RemoteRobot-Start Starting a RobotStateComponent The RobotState component serves as a central component for storing all robot related data. For now this data covers the current joint angles of the robot.<br> The RobotStateComponent implements a KinematicUnitListener, hence it reacts on all joint updates that are reported by a KinematicUnit component. An exemplary startup script could look like this @@ -17,7 +17,7 @@ $SCRIPT_PATH/startApplication.sh $CORE_BIN_PATH/RobotStateComponentRun --Ice.Con \endcode -With the correspondign configuration in ./config/Armar3Config.cfg: +With the corresponding configuration in ./config/Armar3Config.cfg: \code # setup for KinemticUnitSimulation @@ -32,7 +32,7 @@ ArmarX.RobotStateComponent.ObjectName = RobotStateComponent \endcode -\section remoterobot-access Accessing the RobotStateComponent +\section RobotAPI-HowTos-RemoteRobot-Access Accessing the RobotStateComponent The RobotStateComponent provides several methods for accessing the current configuration of the robot and for getting a snapshot of the current state which is compatible with models of the Simox/VirtualRobot framework. With these models the whole functionality of Simox (http://simox.sf.net) can be used, e.g. IK solving, collision detection or motion and grasp planning. diff --git a/etc/doxygen/pages/3.howto b/etc/doxygen/pages/3.HowTos.dox similarity index 73% rename from etc/doxygen/pages/3.howto rename to etc/doxygen/pages/3.HowTos.dox index 95622dcd89b67c212deb3ff84dd46782aced1d87..abb2dc4a0f95ad228aa0e763a8c3a1b641e53237 100644 --- a/etc/doxygen/pages/3.howto +++ b/etc/doxygen/pages/3.HowTos.dox @@ -1,9 +1,11 @@ /** -\page robotapi-howtos HowTos +\addtogroup HowTos 3. HowTos -\subpage robotapi-howtos-eigen-from-pose +\defgroup RobotAPI-HowTos RobotAPI HowTos +\ingroup RobotAPI HowTos -\page robotapi-howtos-eigen-from-pose How to convert a Variant pose into an Eigen Matrix +\page RobotAPI-HowTos-Eigen-From-Pose How to convert a Variant pose into an Eigen Matrix +\ingroup RobotAPI-HowTos \code #include <RobotAPI/libraries/robotstate/remote/ArmarPose.h> diff --git a/etc/doxygen/pages/4.FAQ.dox b/etc/doxygen/pages/4.FAQ.dox new file mode 100644 index 0000000000000000000000000000000000000000..63bf5e41091b54a70afba3e6aeca2dbdc69aae1b --- /dev/null +++ b/etc/doxygen/pages/4.FAQ.dox @@ -0,0 +1,8 @@ +/** +\addtogroup FAQ 4. FAQ + +\defgroup RobotAPI-FAQ RobotAPI FAQ +\ingroup RobotAPI FAQ + +... +*/ diff --git a/etc/doxygen/pages/5.Components.dox b/etc/doxygen/pages/5.Components.dox new file mode 100644 index 0000000000000000000000000000000000000000..d99251036c390793fd454fba30b767c26f801cf5 --- /dev/null +++ b/etc/doxygen/pages/5.Components.dox @@ -0,0 +1,8 @@ +/** +\addtogroup Components 5. Components + +\defgroup RobotAPI-Components RobotAPI Components +\ingroup RobotAPI Components + +... +*/ diff --git a/etc/doxygen/pages/API-RobotAPI.dox b/etc/doxygen/pages/API-RobotAPI.dox deleted file mode 100644 index d53a5dcaa2bfe2b98308903d75e65dfb9611d1f6..0000000000000000000000000000000000000000 --- a/etc/doxygen/pages/API-RobotAPI.dox +++ /dev/null @@ -1,5 +0,0 @@ -/** - - \defgroup api-robotapi RobotAPI - -*/ diff --git a/etc/doxygen/pages/motioncontrol.dox b/etc/doxygen/pages/MotionControl.dox similarity index 98% rename from etc/doxygen/pages/motioncontrol.dox rename to etc/doxygen/pages/MotionControl.dox index 981916a8e14dc0796a672386d2d48f0673d1af03..e5beee9a28c44f9f290fd726fc3da5d6256a69d6 100644 --- a/etc/doxygen/pages/motioncontrol.dox +++ b/etc/doxygen/pages/MotionControl.dox @@ -1,6 +1,6 @@ /** - \defgroup MotionControl ArmarX MotionControl - \ingroup robotapi-states + \defgroup RobotAPI-MotionControl RobotAPI MotionControl + \ingroup RobotAPI \section Overview Overview of the implemented functionality in MotionControl All functionality is implemented with State to provide a convenient interface diff --git a/etc/doxygen/pages/RobotAPI-API-1-overview.dox b/etc/doxygen/pages/RobotAPI-API-1-overview.dox deleted file mode 100644 index 117fdce24debf5c68ea96dd9748b1f2650492d18..0000000000000000000000000000000000000000 --- a/etc/doxygen/pages/RobotAPI-API-1-overview.dox +++ /dev/null @@ -1,19 +0,0 @@ - /*! - * \defgroup robotapi-overview Overview - * \ingroup api-robotapi - * - * The ArmarX project RobotAPI is based on the ArmarXCore Framework. - * - * \par Components - * RobotAPI provides the following components - * - armarx::ComponentX: ComponentX description - * - * Each component can provide several properties which are set on command line or via a configuration file. - * See \ref componentproperties for an overview of properties. - * - * \par Applications - * - armarx::ApplicationY: Description of ApplicationY - * - * \par interface Interface Documentation - * Documentation of interfaces available in ArmarXCore is available on the \ref slicedocumentation "Slice Documentation" page. - */ diff --git a/etc/doxygen/pages/RobotAPI-API-3-states.dox b/etc/doxygen/pages/RobotAPI-API-3-states.dox deleted file mode 100644 index 472220c5aede76504cdbfcb73fba892a7bc5f2c9..0000000000000000000000000000000000000000 --- a/etc/doxygen/pages/RobotAPI-API-3-states.dox +++ /dev/null @@ -1,6 +0,0 @@ -/** - - \defgroup robotapi-states States - \ingroup api-robotapi - -*/ diff --git a/etc/doxygen/pages/RobotAPI-API-2-units.dox b/etc/doxygen/pages/SensorActorUnits.dox similarity index 77% rename from etc/doxygen/pages/RobotAPI-API-2-units.dox rename to etc/doxygen/pages/SensorActorUnits.dox index d410231304b51af867fd039c7c1f45d19f01e88e..df7431ce017d6bdd24a1882877947e4cbadcbb91 100644 --- a/etc/doxygen/pages/RobotAPI-API-2-units.dox +++ b/etc/doxygen/pages/SensorActorUnits.dox @@ -1,6 +1,6 @@ /** - \defgroup SensorActorUnits Sensor-Actor Units - \ingroup api-robotapi + \defgroup RobotAPI-SensorActorUnits RobotAPI Sensor-Actor Units + \ingroup RobotAPI Sensor-Actor units diff --git a/etc/doxygen/pages/mainpage.dox b/etc/doxygen/pages/mainpage.dox index 9559ec2b9c25fa60e68225c9edf5fa6cdadeb010..ec316950eb1d7ce953f3fd4b439ef16cb1b252e0 100644 --- a/etc/doxygen/pages/mainpage.dox +++ b/etc/doxygen/pages/mainpage.dox @@ -1,6 +1,4 @@ -/*! \mainpage - -- \subpage robotapi-overview -- \subpage remoterobot - - */ +/** +\mainpage +\ref RobotAPI "RobotAPI Overview" +*/ diff --git a/etc/doxygen/pages/slicedocumentation.dox b/etc/doxygen/pages/slicedocumentation.dox deleted file mode 100644 index 25eaf8d746f002fb93764956066a49206dde79b5..0000000000000000000000000000000000000000 --- a/etc/doxygen/pages/slicedocumentation.dox +++ /dev/null @@ -1,5 +0,0 @@ -/** - \page robotapi-slicedocumentation Slice Documentation - \ingroup api-robotapi - <a href="slice/index.html"> Slice Documentation </a> -*/ diff --git a/etc/doxygen/snippets/.gitkeep b/etc/doxygen/snippets/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/scenarios/CMakeLists.txt b/scenarios/CMakeLists.txt index 3b942c24894a6fabe2d760ff167cf0bf34138b8c..6b4016fb238767681d7f3a951c6fafcd39c2feab 100644 --- a/scenarios/CMakeLists.txt +++ b/scenarios/CMakeLists.txt @@ -1,4 +1,4 @@ -add_subdirectory(WeissHapticSensorsUnitTest) -add_subdirectory(MotionControlTest) -add_subdirectory(statecharttestscenario) +add_subdirectory(tests) + + diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep b/scenarios/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/scenarios/MotionControlTest/CMakeLists.txt b/scenarios/deprecated/MotionControlTest/CMakeLists.txt similarity index 100% rename from scenarios/MotionControlTest/CMakeLists.txt rename to scenarios/deprecated/MotionControlTest/CMakeLists.txt diff --git a/scenarios/MotionControlTest/MotionControlTestGui.ini b/scenarios/deprecated/MotionControlTest/MotionControlTestGui.ini similarity index 100% rename from scenarios/MotionControlTest/MotionControlTestGui.ini rename to scenarios/deprecated/MotionControlTest/MotionControlTestGui.ini diff --git a/scenarios/MotionControlTest/MotionControlTestGuiDavid.ini b/scenarios/deprecated/MotionControlTest/MotionControlTestGuiDavid.ini similarity index 100% rename from scenarios/MotionControlTest/MotionControlTestGuiDavid.ini rename to scenarios/deprecated/MotionControlTest/MotionControlTestGuiDavid.ini diff --git a/scenarios/MotionControlTest/config/ArmarXGui.cfg b/scenarios/deprecated/MotionControlTest/config/ArmarXGui.cfg similarity index 100% rename from scenarios/MotionControlTest/config/ArmarXGui.cfg rename to scenarios/deprecated/MotionControlTest/config/ArmarXGui.cfg diff --git a/scenarios/MotionControlTest/config/ArmarXLogger.cfg b/scenarios/deprecated/MotionControlTest/config/ArmarXLogger.cfg similarity index 100% rename from scenarios/MotionControlTest/config/ArmarXLogger.cfg rename to scenarios/deprecated/MotionControlTest/config/ArmarXLogger.cfg diff --git a/scenarios/MotionControlTest/config/ConditionHandler.cfg b/scenarios/deprecated/MotionControlTest/config/ConditionHandler.cfg similarity index 100% rename from scenarios/MotionControlTest/config/ConditionHandler.cfg rename to scenarios/deprecated/MotionControlTest/config/ConditionHandler.cfg diff --git a/scenarios/MotionControlTest/config/DummyObjectRecognitionConfig.txt b/scenarios/deprecated/MotionControlTest/config/DummyObjectRecognitionConfig.txt similarity index 100% rename from scenarios/MotionControlTest/config/DummyObjectRecognitionConfig.txt rename to scenarios/deprecated/MotionControlTest/config/DummyObjectRecognitionConfig.txt diff --git a/scenarios/MotionControlTest/config/Global.cfg b/scenarios/deprecated/MotionControlTest/config/Global.cfg similarity index 100% rename from scenarios/MotionControlTest/config/Global.cfg rename to scenarios/deprecated/MotionControlTest/config/Global.cfg diff --git a/scenarios/MotionControlTest/config/GuiConfig.ini b/scenarios/deprecated/MotionControlTest/config/GuiConfig.ini similarity index 100% rename from scenarios/MotionControlTest/config/GuiConfig.ini rename to scenarios/deprecated/MotionControlTest/config/GuiConfig.ini diff --git a/scenarios/MotionControlTest/config/HeadUnit.cfg b/scenarios/deprecated/MotionControlTest/config/HeadUnit.cfg similarity index 100% rename from scenarios/MotionControlTest/config/HeadUnit.cfg rename to scenarios/deprecated/MotionControlTest/config/HeadUnit.cfg diff --git a/scenarios/MotionControlTest/config/HeadUnitObserver.cfg b/scenarios/deprecated/MotionControlTest/config/HeadUnitObserver.cfg similarity index 100% rename from scenarios/MotionControlTest/config/HeadUnitObserver.cfg rename to scenarios/deprecated/MotionControlTest/config/HeadUnitObserver.cfg diff --git a/scenarios/MotionControlTest/config/KinematicUnitObserver.cfg b/scenarios/deprecated/MotionControlTest/config/KinematicUnitObserver.cfg similarity index 100% rename from scenarios/MotionControlTest/config/KinematicUnitObserver.cfg rename to scenarios/deprecated/MotionControlTest/config/KinematicUnitObserver.cfg diff --git a/scenarios/MotionControlTest/config/KinematicUnitSimulation.cfg b/scenarios/deprecated/MotionControlTest/config/KinematicUnitSimulation.cfg similarity index 100% rename from scenarios/MotionControlTest/config/KinematicUnitSimulation.cfg rename to scenarios/deprecated/MotionControlTest/config/KinematicUnitSimulation.cfg diff --git a/scenarios/MotionControlTest/config/MotionControlTest.cfg b/scenarios/deprecated/MotionControlTest/config/MotionControlTest.cfg similarity index 100% rename from scenarios/MotionControlTest/config/MotionControlTest.cfg rename to scenarios/deprecated/MotionControlTest/config/MotionControlTest.cfg diff --git a/scenarios/MotionControlTest/config/ObjectDB.txt b/scenarios/deprecated/MotionControlTest/config/ObjectDB.txt similarity index 100% rename from scenarios/MotionControlTest/config/ObjectDB.txt rename to scenarios/deprecated/MotionControlTest/config/ObjectDB.txt diff --git a/scenarios/MotionControlTest/config/ObjectMemory.cfg b/scenarios/deprecated/MotionControlTest/config/ObjectMemory.cfg similarity index 100% rename from scenarios/MotionControlTest/config/ObjectMemory.cfg rename to scenarios/deprecated/MotionControlTest/config/ObjectMemory.cfg diff --git a/scenarios/MotionControlTest/config/ObjectMemoryObserver.cfg b/scenarios/deprecated/MotionControlTest/config/ObjectMemoryObserver.cfg similarity index 100% rename from scenarios/MotionControlTest/config/ObjectMemoryObserver.cfg rename to scenarios/deprecated/MotionControlTest/config/ObjectMemoryObserver.cfg diff --git a/scenarios/MotionControlTest/config/RobotControl.cfg b/scenarios/deprecated/MotionControlTest/config/RobotControl.cfg similarity index 100% rename from scenarios/MotionControlTest/config/RobotControl.cfg rename to scenarios/deprecated/MotionControlTest/config/RobotControl.cfg diff --git a/scenarios/MotionControlTest/config/RobotHandLocalization.cfg b/scenarios/deprecated/MotionControlTest/config/RobotHandLocalization.cfg similarity index 100% rename from scenarios/MotionControlTest/config/RobotHandLocalization.cfg rename to scenarios/deprecated/MotionControlTest/config/RobotHandLocalization.cfg diff --git a/scenarios/MotionControlTest/config/RobotStateComponent.cfg b/scenarios/deprecated/MotionControlTest/config/RobotStateComponent.cfg similarity index 100% rename from scenarios/MotionControlTest/config/RobotStateComponent.cfg rename to scenarios/deprecated/MotionControlTest/config/RobotStateComponent.cfg diff --git a/scenarios/MotionControlTest/config/SystemObserver.cfg b/scenarios/deprecated/MotionControlTest/config/SystemObserver.cfg similarity index 100% rename from scenarios/MotionControlTest/config/SystemObserver.cfg rename to scenarios/deprecated/MotionControlTest/config/SystemObserver.cfg diff --git a/scenarios/MotionControlTest/motioncontrol.armarxgui b/scenarios/deprecated/MotionControlTest/motioncontrol.armarxgui similarity index 100% rename from scenarios/MotionControlTest/motioncontrol.armarxgui rename to scenarios/deprecated/MotionControlTest/motioncontrol.armarxgui diff --git a/scenarios/MotionControlTest/startGui.sh b/scenarios/deprecated/MotionControlTest/startGui.sh similarity index 100% rename from scenarios/MotionControlTest/startGui.sh rename to scenarios/deprecated/MotionControlTest/startGui.sh diff --git a/scenarios/MotionControlTest/startLogger.sh b/scenarios/deprecated/MotionControlTest/startLogger.sh similarity index 100% rename from scenarios/MotionControlTest/startLogger.sh rename to scenarios/deprecated/MotionControlTest/startLogger.sh diff --git a/scenarios/MotionControlTest/stopGui.sh b/scenarios/deprecated/MotionControlTest/stopGui.sh similarity index 100% rename from scenarios/MotionControlTest/stopGui.sh rename to scenarios/deprecated/MotionControlTest/stopGui.sh diff --git a/scenarios/TCPMoverScenario/configs/ArmarXGui.cfg b/scenarios/deprecated/TCPMoverScenario/configs/ArmarXGui.cfg similarity index 100% rename from scenarios/TCPMoverScenario/configs/ArmarXGui.cfg rename to scenarios/deprecated/TCPMoverScenario/configs/ArmarXGui.cfg diff --git a/scenarios/TCPMoverScenario/configs/ConditionHandler.cfg b/scenarios/deprecated/TCPMoverScenario/configs/ConditionHandler.cfg similarity index 100% rename from scenarios/TCPMoverScenario/configs/ConditionHandler.cfg rename to scenarios/deprecated/TCPMoverScenario/configs/ConditionHandler.cfg diff --git a/scenarios/TCPMoverScenario/configs/Gui.armarxgui b/scenarios/deprecated/TCPMoverScenario/configs/Gui.armarxgui similarity index 100% rename from scenarios/TCPMoverScenario/configs/Gui.armarxgui rename to scenarios/deprecated/TCPMoverScenario/configs/Gui.armarxgui diff --git a/scenarios/TCPMoverScenario/configs/HeadUnit.cfg b/scenarios/deprecated/TCPMoverScenario/configs/HeadUnit.cfg similarity index 100% rename from scenarios/TCPMoverScenario/configs/HeadUnit.cfg rename to scenarios/deprecated/TCPMoverScenario/configs/HeadUnit.cfg diff --git a/scenarios/TCPMoverScenario/configs/RobotUnit.cfg b/scenarios/deprecated/TCPMoverScenario/configs/RobotUnit.cfg similarity index 100% rename from scenarios/TCPMoverScenario/configs/RobotUnit.cfg rename to scenarios/deprecated/TCPMoverScenario/configs/RobotUnit.cfg diff --git a/scenarios/TCPMoverScenario/configs/RobotUnitObserver.cfg b/scenarios/deprecated/TCPMoverScenario/configs/RobotUnitObserver.cfg similarity index 100% rename from scenarios/TCPMoverScenario/configs/RobotUnitObserver.cfg rename to scenarios/deprecated/TCPMoverScenario/configs/RobotUnitObserver.cfg diff --git a/scenarios/tests/CMakeLists.txt b/scenarios/tests/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..8aec5dbf1ec6f311c170e0720c834d0f0a145101 --- /dev/null +++ b/scenarios/tests/CMakeLists.txt @@ -0,0 +1,6 @@ + +add_subdirectory(statecharttestscenario) +add_subdirectory(WeissHapticSensorsUnitTest) + + + diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt similarity index 100% rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp similarity index 100% rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h similarity index 100% rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h similarity index 100% rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h diff --git a/etc/doxygen/images/.gitkeep b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep similarity index 100% rename from etc/doxygen/images/.gitkeep rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp similarity index 100% rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp diff --git a/scenarios/RemoteRobotTest/configs/ArmarXGui.cfg b/scenarios/tests/RemoteRobotTest/configs/ArmarXGui.cfg similarity index 100% rename from scenarios/RemoteRobotTest/configs/ArmarXGui.cfg rename to scenarios/tests/RemoteRobotTest/configs/ArmarXGui.cfg diff --git a/scenarios/RemoteRobotTest/configs/ConditionHandler.cfg b/scenarios/tests/RemoteRobotTest/configs/ConditionHandler.cfg similarity index 100% rename from scenarios/RemoteRobotTest/configs/ConditionHandler.cfg rename to scenarios/tests/RemoteRobotTest/configs/ConditionHandler.cfg diff --git a/scenarios/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt b/scenarios/tests/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt similarity index 100% rename from scenarios/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt rename to scenarios/tests/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt diff --git a/scenarios/RemoteRobotTest/configs/HeadUnit.cfg b/scenarios/tests/RemoteRobotTest/configs/HeadUnit.cfg similarity index 100% rename from scenarios/RemoteRobotTest/configs/HeadUnit.cfg rename to scenarios/tests/RemoteRobotTest/configs/HeadUnit.cfg diff --git a/scenarios/RemoteRobotTest/configs/HeadUnitObserver.cfg b/scenarios/tests/RemoteRobotTest/configs/HeadUnitObserver.cfg similarity index 100% rename from scenarios/RemoteRobotTest/configs/HeadUnitObserver.cfg rename to scenarios/tests/RemoteRobotTest/configs/HeadUnitObserver.cfg diff --git a/scenarios/RemoteRobotTest/configs/ObjectMemoryConfig.txt b/scenarios/tests/RemoteRobotTest/configs/ObjectMemoryConfig.txt similarity index 100% rename from scenarios/RemoteRobotTest/configs/ObjectMemoryConfig.txt rename to scenarios/tests/RemoteRobotTest/configs/ObjectMemoryConfig.txt diff --git a/scenarios/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt b/scenarios/tests/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt similarity index 100% rename from scenarios/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt rename to scenarios/tests/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt diff --git a/scenarios/RemoteRobotTest/configs/RobotStateComponent.cfg b/scenarios/tests/RemoteRobotTest/configs/RobotStateComponent.cfg similarity index 100% rename from scenarios/RemoteRobotTest/configs/RobotStateComponent.cfg rename to scenarios/tests/RemoteRobotTest/configs/RobotStateComponent.cfg diff --git a/scenarios/WeissHapticSensorsUnitTest/CMakeLists.txt b/scenarios/tests/WeissHapticSensorsUnitTest/CMakeLists.txt similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/CMakeLists.txt rename to scenarios/tests/WeissHapticSensorsUnitTest/CMakeLists.txt diff --git a/scenarios/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg b/scenarios/tests/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg rename to scenarios/tests/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg diff --git a/scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg b/scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg rename to scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg diff --git a/scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg b/scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg rename to scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg diff --git a/scenarios/WeissHapticSensorsUnitTest/jquery.min.js b/scenarios/tests/WeissHapticSensorsUnitTest/jquery.min.js similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/jquery.min.js rename to scenarios/tests/WeissHapticSensorsUnitTest/jquery.min.js diff --git a/scenarios/WeissHapticSensorsUnitTest/jquery.sparkline.js b/scenarios/tests/WeissHapticSensorsUnitTest/jquery.sparkline.js similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/jquery.sparkline.js rename to scenarios/tests/WeissHapticSensorsUnitTest/jquery.sparkline.js diff --git a/scenarios/WeissHapticSensorsUnitTest/startGui.sh b/scenarios/tests/WeissHapticSensorsUnitTest/startGui.sh similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/startGui.sh rename to scenarios/tests/WeissHapticSensorsUnitTest/startGui.sh diff --git a/scenarios/WeissHapticSensorsUnitTest/tactile.html b/scenarios/tests/WeissHapticSensorsUnitTest/tactile.html similarity index 100% rename from scenarios/WeissHapticSensorsUnitTest/tactile.html rename to scenarios/tests/WeissHapticSensorsUnitTest/tactile.html diff --git a/scenarios/statecharttestscenario/CMakeLists.txt b/scenarios/tests/statecharttestscenario/CMakeLists.txt similarity index 100% rename from scenarios/statecharttestscenario/CMakeLists.txt rename to scenarios/tests/statecharttestscenario/CMakeLists.txt diff --git a/scenarios/statecharttestscenario/config/ConditionHandler.cfg b/scenarios/tests/statecharttestscenario/config/ConditionHandler.cfg similarity index 100% rename from scenarios/statecharttestscenario/config/ConditionHandler.cfg rename to scenarios/tests/statecharttestscenario/config/ConditionHandler.cfg diff --git a/scenarios/statecharttestscenario/config/RobotControl.cfg b/scenarios/tests/statecharttestscenario/config/RobotControl.cfg similarity index 100% rename from scenarios/statecharttestscenario/config/RobotControl.cfg rename to scenarios/tests/statecharttestscenario/config/RobotControl.cfg diff --git a/scenarios/statecharttestscenario/config/SystemObserver.cfg b/scenarios/tests/statecharttestscenario/config/SystemObserver.cfg similarity index 100% rename from scenarios/statecharttestscenario/config/SystemObserver.cfg rename to scenarios/tests/statecharttestscenario/config/SystemObserver.cfg diff --git a/source/RobotAPI/applications/CMakeLists.txt b/source/RobotAPI/applications/CMakeLists.txt index ae2814a3e2a54a15950fb74373d170de49230489..7f12f2afebcbebfa09fb433328bc5b6d1260c7d0 100644 --- a/source/RobotAPI/applications/CMakeLists.txt +++ b/source/RobotAPI/applications/CMakeLists.txt @@ -21,3 +21,5 @@ add_subdirectory(HandUnitObserver) add_subdirectory(HandUnitSimulation) add_subdirectory(ForceTorqueUnitSimulation) + +add_subdirectory(MMMPlayer) diff --git a/source/RobotAPI/applications/MMMPlayer/CMakeLists.txt b/source/RobotAPI/applications/MMMPlayer/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..1aa2b39a4c3f68a824af971907286c0716c0eef0 --- /dev/null +++ b/source/RobotAPI/applications/MMMPlayer/CMakeLists.txt @@ -0,0 +1,23 @@ +armarx_component_set_name("MMMPlayerApp") + +find_package(MMMCore QUIET) +armarx_build_if(MMMCore_FOUND "MMMCORE not available") +if(MMMCore_FOUND) + include_directories(${MMMCORE_INCLUDE_DIRS}) +endif() + +find_package(Eigen3 QUIET) + + +armarx_build_if(Eigen3_FOUND "Eigen3 not available") + + +if (Eigen3_FOUND) + include_directories(${Eigen3_INCLUDE_DIR}) +endif() + +set(COMPONENT_LIBS MMMPlayer ArmarXInterfaces ArmarXCore ${MMMCORE_LIBRARIES}) + +set(EXE_SOURCE MMMPlayerApp.h main.cpp) + +armarx_add_component_executable("${EXE_SOURCE}") diff --git a/source/RobotAPI/applications/MMMPlayer/MMMPlayerApp.h b/source/RobotAPI/applications/MMMPlayer/MMMPlayerApp.h new file mode 100644 index 0000000000000000000000000000000000000000..809e37f4b7e6a2082fc2c7ed2225ba580fe8053b --- /dev/null +++ b/source/RobotAPI/applications/MMMPlayer/MMMPlayerApp.h @@ -0,0 +1,56 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::application::MMMPlayer + * @author Mirko Waechter ( mirko dot waechter at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#ifndef _ARMARX_APPLICATION_RobotAPI_MMMPlayer_H +#define _ARMARX_APPLICATION_RobotAPI_MMMPlayer_H + + +#include <RobotAPI/components/MMMPlayer/MMMPlayer.h> + +#include <Core/core/application/Application.h> +#include <Core/core/Component.h> + + +namespace armarx +{ + /** + * @class MMMPlayerApp + * @brief A brief description + * + * Detailed Description + */ + class MMMPlayerApp : + virtual public armarx::Application + { + /** + * @see armarx::Application::setup() + */ + void setup(const ManagedIceObjectRegistryInterfacePtr& registry, + Ice::PropertiesPtr properties) + { + registry->addObject( Component::create<MMMPlayer>(properties) ); + } + }; +} + +#endif diff --git a/source/RobotAPI/applications/MMMPlayer/main.cpp b/source/RobotAPI/applications/MMMPlayer/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..32f1a335c2cb18dc3d88afb9730c784cbb7fe4f2 --- /dev/null +++ b/source/RobotAPI/applications/MMMPlayer/main.cpp @@ -0,0 +1,33 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::application::MMMPlayer + * @author Mirko Waechter ( mirko dot waechter at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#include "MMMPlayerApp.h" +#include <Core/core/logging/Logging.h> + +int main(int argc, char* argv[]) +{ + armarx::ApplicationPtr app = armarx::Application::createInstance < armarx::MMMPlayerApp > (); + app->setName("MMMPlayer"); + + return app->main(argc, argv); +} diff --git a/source/RobotAPI/components/CMakeLists.txt b/source/RobotAPI/components/CMakeLists.txt index fc7fbec75fddbc0fe6d7fff4f94613fe28b035d9..409b27488c2e48a25cd570c670175b5f22b33e91 100644 --- a/source/RobotAPI/components/CMakeLists.txt +++ b/source/RobotAPI/components/CMakeLists.txt @@ -1,3 +1,5 @@ add_subdirectory(units) -add_subdirectory(WeissHapticSensorListener) \ No newline at end of file +add_subdirectory(WeissHapticSensorListener) +add_subdirectory(DebugDrawer) +add_subdirectory(MMMPlayer) diff --git a/source/RobotAPI/components/DebugDrawer/CMakeLists.txt b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..a7c6e10dc4b49d0c47b10e3cfa4e54a9d329fcb5 --- /dev/null +++ b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt @@ -0,0 +1,28 @@ +armarx_component_set_name("DebugDrawer") + +find_package(Eigen3 QUIET) +find_package(Simox QUIET) + +armarx_build_if(Eigen3_FOUND "Eigen3 not available") +armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available") + +if (Eigen3_FOUND AND Simox_FOUND) + + include_directories( + ${Eigen3_INCLUDE_DIR} + ${Simox_INCLUDE_DIRS} + ${Simox_EXTERNAL_INCLUDE_DIRS}) + message ("Simox_EXTERNAL_INCLUDE_DIRS:${Simox_EXTERNAL_INCLUDE_DIRS}") + message ("Simox_EXTERNAL_LIBRARY_FLAGS:${Simox_EXTERNAL_LIBRARY_FLAGS}") + + add_definitions(${Simox_EXTERNAL_LIBRARY_FLAGS}) + +endif() + +set(COMPONENT_LIBS ArmarXCore RobotAPIInterfaces RobotAPIRemoteRobot ${Simox_LIBRARIES}) + +set(SOURCES DebugDrawerComponent.cpp) +set(HEADERS DebugDrawerComponent.h) + +armarx_add_component("${SOURCES}" "${HEADERS}") + diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp new file mode 100644 index 0000000000000000000000000000000000000000..93126363d9bd55d0f6f4b6fbec3da171fb19d83c --- /dev/null +++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp @@ -0,0 +1,382 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::DebugDrawerComponent + * @author Nikolaus Vahrenkamp ( vahrenkamp at kit dot edu ) + * @author Peter Kaiser ( peter dot kaiser at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#include "DebugDrawerComponent.h" + +#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h> +#include <Inventor/nodes/SoUnits.h> +#include <Inventor/nodes/SoCube.h> +#include <Inventor/nodes/SoMaterial.h> +#include <Inventor/nodes/SoAnnotation.h> +#include <Inventor/nodes/SoTransform.h> +#include <Inventor/nodes/SoFont.h> +#include <Inventor/nodes/SoText2.h> + +using namespace VirtualRobot; + +namespace armarx{ + + +DebugDrawerComponent::DebugDrawerComponent() +{ + if (!mutex) + mutex.reset(new boost::recursive_mutex()); + + coinVisu = new SoSeparator; + coinVisu->ref(); + + SoUnits *u = new SoUnits(); + u->units = SoUnits::MILLIMETERS; + coinVisu->addChild(u); + + debugVisu = new SoSeparator; + debugVisu->ref(); +} + +void DebugDrawerComponent::onInitComponent() +{ + usingTopic(getProperty<std::string>("DebugDrawerTopic").getValue()); + + enable = getProperty<bool>("ShowDebugDrawing").getValue(); + if (enable) + coinVisu->addChild(debugVisu); +} + +void DebugDrawerComponent::onConnectComponent() +{ +} + +void DebugDrawerComponent::onExitComponent() +{ + ARMARX_DEBUG << "onExitComponent"; + clearDebugLayer(); + coinVisu->unref(); + debugVisu->unref(); +} + +void DebugDrawerComponent::enableVisu(bool e) +{ + ScopedRecursiveLockPtr lock = getScopedLock(); + if (e) + { + if (coinVisu->findChild(debugVisu)<0) + coinVisu->addChild(debugVisu); + } else + { + if (coinVisu->findChild(debugVisu)>=0) + coinVisu->removeChild(debugVisu); + } +} + + + +void DebugDrawerComponent::drawCoordSystem(const std::string &name, Eigen::Matrix4f &globalPose, float scale) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + ARMARX_DEBUG << "drawing coord system"; + + if (scale<=0) + { + if (addedCoordVisualizations.find(name) == addedCoordVisualizations.end()) + { + return; + } + debugVisu->removeChild(addedCoordVisualizations[name]); + addedCoordVisualizations.erase(name); + return; + } + + if (addedCoordVisualizations.find(name) == addedCoordVisualizations.end()) + { + SoSeparator *newS = new SoSeparator; + SoMatrixTransform* newM = new SoMatrixTransform; + newS->addChild(newM); + std::string n = name; + newS->addChild(CoinVisualizationFactory::CreateCoordSystemVisualization(scale,&n)); + addedCoordVisualizations[name] = newS; + debugVisu->addChild(newS); + } + SoSeparator *s = addedCoordVisualizations[name]; + SoMatrixTransform* m = (SoMatrixTransform*)(s->getChild(0)); + SbMatrix mNew = CoinVisualizationFactory::getMatrixTransform(globalPose)->matrix.getValue(); + m->matrix.setValue(mNew); + + ARMARX_DEBUG << "end"; +} + + + +void DebugDrawerComponent::drawLine(const std::string &name, Eigen::Vector3f &p1, Eigen::Vector3f &p2, float scale, VirtualRobot::VisualizationFactory::Color &color) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + ARMARX_DEBUG << "drawLine" << flush; + + removeLine(name); + + SoSeparator *newS = new SoSeparator; + Eigen::Matrix4f lp1 = Eigen::Matrix4f::Identity(); + lp1(0,3) = p1.x(); lp1(1,3) = p1.y(); lp1(2,3) = p1.z(); + Eigen::Matrix4f lp2 = Eigen::Matrix4f::Identity(); + lp2(0,3) = p2.x(); lp2(1,3) = p2.y(); lp2(2,3) = p2.z(); + newS->addChild(CoinVisualizationFactory::createCoinLine(lp1, lp2, scale, color.r, color.g, color.b)); + addedLineVisualizations[name] = newS; + debugVisu->addChild(newS); +} + +void DebugDrawerComponent::drawBox(const std::string &name, Eigen::Matrix4f &globalPose, float width, float height, float depth, VisualizationFactory::Color &color) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + ARMARX_DEBUG << "drawBox"; + + removeBox(name); + + SoSeparator *newS = new SoSeparator; + newS->addChild(CoinVisualizationFactory::getMatrixTransform(globalPose)); + + SoMaterial *material = new SoMaterial; + material->ambientColor.setValue(color.r, color.g, color.b); + material->diffuseColor.setValue(color.r, color.g, color.b); + material->transparency.setValue(color.transparency); + newS->addChild(material); + + SoCube *cube = new SoCube; + cube->width = width; + cube->height = height; + cube->depth = depth; + newS->addChild(cube); + + addedBoxVisualizations[name] = newS; + debugVisu->addChild(newS); +} + +void DebugDrawerComponent::drawText(const std::string &name, const std::string &text, const Eigen::Vector3f &position, const VisualizationFactory::Color &color, int size) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + ARMARX_DEBUG << "drawText"; + + removeText(name); + + SoSeparator *sep = new SoSeparator; + + SoAnnotation *ann = new SoAnnotation; + sep->addChild(ann); + + SoMaterial *mat = new SoMaterial; + mat->ambientColor.setValue(color.r, color.g, color.b); + mat->diffuseColor.setValue(color.r, color.g, color.b); + mat->transparency.setValue(color.transparency); + ann->addChild(mat); + + SoTransform *tr = new SoTransform; + tr->translation.setValue(position.x(), position.y(), position.z()); + ann->addChild(tr); + + SoFont *font = new SoFont; + font->name.setValue("TGS_Triplex_Roman"); + font->size = size; + ann->addChild(font); + + SoText2 *te = new SoText2; + te->string = text.c_str(); + te->justification = SoText2::CENTER; + ann->addChild(te); + + addedTextVisualizations[name] = sep; + debugVisu->addChild(sep); +} + + + +void DebugDrawerComponent::removeLine(const std::string &name) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + if (addedLineVisualizations.find(name) == addedLineVisualizations.end()) + { + return; + } + debugVisu->removeChild(addedLineVisualizations[name]); + addedLineVisualizations.erase(name); +} + +void DebugDrawerComponent::removeBox(const std::string &name) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + if(addedBoxVisualizations.find(name) == addedBoxVisualizations.end()) + { + return; + } + + debugVisu->removeChild(addedBoxVisualizations[name]); + addedBoxVisualizations.erase(name); +} + +void DebugDrawerComponent::removeText(const std::string &name) +{ + ScopedRecursiveLockPtr l = getScopedLock(); + if(addedTextVisualizations.find(name) == addedTextVisualizations.end()) + { + return; + } + + debugVisu->removeChild(addedTextVisualizations[name]); + addedTextVisualizations.erase(name); +} + + +void DebugDrawerComponent::setPoseVisu(const std::string &layerName, const std::string &poseName, const PoseBasePtr &globalPose, const Ice::Current &) +{ + ARMARX_DEBUG << VAROUT(layerName) << VAROUT(poseName); + Eigen::Matrix4f gp = PosePtr::dynamicCast(globalPose)->toEigen(); + drawCoordSystem(poseName,gp,1.0f); +} + +void DebugDrawerComponent::setPoseDebugLayerVisu(const std::string &poseName, const PoseBasePtr &globalPose, const Ice::Current &) +{ + std::string d("debug"); + setPoseVisu(d,poseName,globalPose); +} + +void DebugDrawerComponent::removePoseVisu(const std::string &layerName, const std::string &poseName, const Ice::Current &) +{ + Eigen::Matrix4f gp = Eigen::Matrix4f::Identity(); + drawCoordSystem(poseName,gp,0); +} + +void DebugDrawerComponent::removePoseDebugLayerVisu(const std::string &poseName, const Ice::Current &) +{ + std::string d("debug"); + removePoseVisu(d,poseName); +} + +void DebugDrawerComponent::setLineVisu(const std::string &layerName, const std::string &lineName, const Vector3BasePtr &globalPosition1, const Vector3BasePtr &globalPosition2, float lineWidth, const DrawColor &color, const Ice::Current &) +{ + Eigen::Vector3f p1 = Vector3Ptr::dynamicCast(globalPosition1)->toEigen(); + Eigen::Vector3f p2 = Vector3Ptr::dynamicCast(globalPosition2)->toEigen(); + VirtualRobot::VisualizationFactory::Color c(color.r,color.g,color.b, 1 - color.a); + drawLine(lineName,p1,p2,lineWidth,c); +} + +void DebugDrawerComponent::setLineDebugLayerVisu(const std::string &lineName, const Vector3BasePtr &globalPosition1, const Vector3BasePtr &globalPosition2, float lineWidth, const DrawColor &color, const Ice::Current &) +{ + setLineVisu("debug",lineName,globalPosition1,globalPosition2, lineWidth, color); +} + +void DebugDrawerComponent::removeLineVisu(const std::string &layerName, const std::string &lineName, const Ice::Current &) +{ + removeLine(lineName); +} + +void DebugDrawerComponent::removeLineDebugLayerVisu(const std::string &lineName, const Ice::Current &) +{ + removeLineVisu("debug",lineName); +} + +void DebugDrawerComponent::setBoxVisu(const std::string &layerName, const std::string &boxName, const PoseBasePtr &globalPose, const Vector3BasePtr &dimensions, const DrawColor &color, const Ice::Current &) +{ + ARMARX_DEBUG << VAROUT(layerName) << VAROUT(boxName); + + Eigen::Matrix4f gp = PosePtr::dynamicCast(globalPose)->toEigen(); + VirtualRobot::VisualizationFactory::Color c(color.r,color.g,color.b, 1 - color.a); + + drawBox(boxName, gp, dimensions->x, dimensions->y, dimensions->z, c); +} + +void DebugDrawerComponent::setBoxDebugLayerVisu(const std::string &boxName, const PoseBasePtr &globalPose, const Vector3BasePtr &dimensions, const DrawColor &color, const Ice::Current &) +{ + setBoxVisu("debug", boxName, globalPose, dimensions, color); +} + +void DebugDrawerComponent::removeBoxVisu(const std::string &layerName, const std::string &boxName, const Ice::Current &) +{ + removeBox(boxName); +} + +void DebugDrawerComponent::removeBoxDebugLayerVisu(const std::string &boxName, const Ice::Current &) +{ + removeBoxVisu("debug", boxName); +} + +void DebugDrawerComponent::setTextVisu(const std::string &layerName, const std::string &textName, const std::string &text, const Vector3BasePtr &globalPosition, const DrawColor &color, int size, const Ice::Current &) +{ + ARMARX_DEBUG << VAROUT(layerName) << VAROUT(textName); + + drawText(textName, text, Vector3Ptr::dynamicCast(globalPosition)->toEigen(), VirtualRobot::VisualizationFactory::Color(color.r, color.g, color.b, 1 - color.a), size); +} + +void DebugDrawerComponent::setTextDebugLayerVisu(const std::string &textName, const std::string &text, const Vector3BasePtr &globalPosition, const DrawColor &color, int size, const Ice::Current &) +{ + setTextVisu("debug", textName, text, globalPosition, color, size); +} + +void DebugDrawerComponent::removeTextVisu(const std::string &layerName, const std::string &textName, const Ice::Current &) +{ + removeText(textName); +} + +void DebugDrawerComponent::removeTextDebugLayerVisu(const std::string &textName, const Ice::Current &) +{ + removeTextVisu("debug", textName); +} + +void DebugDrawerComponent::clear(const std::string &layerName, const Ice::Current &) +{ + ARMARX_VERBOSE << "Clearing layer " << layerName; + + ScopedRecursiveLockPtr l = getScopedLock(); + addedCoordVisualizations.clear(); + addedLineVisualizations.clear(); + addedBoxVisualizations.clear(); + addedTextVisualizations.clear(); + debugVisu->removeAllChildren(); +} + +void DebugDrawerComponent::clearDebugLayer(const Ice::Current &) +{ + ARMARX_VERBOSE << "Clearing debug layer..."; + + clear("debug"); +} + +void DebugDrawerComponent::setMutex(boost::shared_ptr<boost::recursive_mutex> m) +{ + mutex = m; +} + +ScopedRecursiveLockPtr DebugDrawerComponent::getScopedLock() +{ + ScopedRecursiveLockPtr l; + if (mutex) + l.reset(new ScopedRecursiveLock(*mutex)); + return l; +} + + +SoSeparator* DebugDrawerComponent::getVisualization() +{ + return coinVisu; +} + +} + + diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h new file mode 100644 index 0000000000000000000000000000000000000000..a9a4fddf23dcc0ed273dbb6cbbb86b4e910e0a17 --- /dev/null +++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h @@ -0,0 +1,161 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::DebugDrawerComponent + * @author Nikolaus Vahrenkamp ( vahrenkamp at kit dot edu ) + * @author Peter Kaiser ( peter dot kaiser at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#ifndef __ARMARX_DEBUGDRAWERCOMPONENT_H__ +#define __ARMARX_DEBUGDRAWERCOMPONENT_H__ + + +// Coin3D & SoQt +#include <Inventor/nodes/SoNode.h> +#include <Inventor/nodes/SoSeparator.h> + +// ArmarX +#include <Core/core/Component.h> +#include <Core/core/logging/Logging.h> +#include <Core/core/services/tasks/RunningTask.h> +#include <RobotAPI/interface/visualization/DebugDrawerInterface.h> +#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h> +#include <RobotAPI/interface/robotstate/RobotState.h> + +#include <VirtualRobot/VirtualRobotCommon.h> + +namespace armarx{ + +/** + * @class ArmarXPhysicsWorldPropertyDefinitions + * @brief + */ +class DebugDrawerPropertyDefinitions: + public ComponentPropertyDefinitions +{ +public: + DebugDrawerPropertyDefinitions(std::string prefix): + ComponentPropertyDefinitions(prefix) + { + defineOptionalProperty<bool>("ShowDebugDrawing", true, "The simulator implements the DebugDrawerInterface. The debug visualizations (e.g. coordinate systems) can enabled/disbaled with this flag."); + defineOptionalProperty<std::string>("DebugDrawerTopic", "DebugDrawerUpdates", "Name of the DebugDrawerTopic"); + } +}; + + +class DebugDrawerComponent : + virtual public armarx::DebugDrawerInterface, + virtual public Component +{ +public: + + DebugDrawerComponent(); + + // inherited from Component + virtual std::string getDefaultName() const { return "DebugDrawer"; } + virtual void onInitComponent(); + virtual void onConnectComponent(); + virtual void onExitComponent(); + + + + /** + * @see PropertyUser::createPropertyDefinitions() + */ + virtual PropertyDefinitionsPtr createPropertyDefinitions() + { + return PropertyDefinitionsPtr(new DebugDrawerPropertyDefinitions( + getConfigIdentifier())); + } + + /*! + * \brief Enable or disable debug layer visu + * \param e + */ + void enableVisu(bool e); + + /* Inherited from DebugDrawerInterface. */ + virtual void setPoseVisu(const std::string& layerName, const std::string& poseName, const ::armarx::PoseBasePtr& globalPose, const ::Ice::Current& = ::Ice::Current()); + virtual void setPoseDebugLayerVisu(const std::string& poseName, const ::armarx::PoseBasePtr& globalPose, const ::Ice::Current& = ::Ice::Current()); + virtual void removePoseVisu(const std::string& layerName, const std::string& poseName, const ::Ice::Current& = ::Ice::Current()); + virtual void removePoseDebugLayerVisu(const std::string& poseName, const ::Ice::Current& = ::Ice::Current()); + + virtual void setLineVisu(const std::string& layerName, const std::string& lineName, const ::armarx::Vector3BasePtr& globalPosition1, const ::armarx::Vector3BasePtr& globalPosition2, float lineWidth, const ::armarx::DrawColor &color, const ::Ice::Current& = ::Ice::Current()); + virtual void setLineDebugLayerVisu(const std::string& lineName, const ::armarx::Vector3BasePtr& globalPosition1, const ::armarx::Vector3BasePtr& globalPosition2, float lineWidth, const ::armarx::DrawColor &color, const ::Ice::Current& = ::Ice::Current()); + virtual void removeLineVisu(const std::string& layerName, const std::string& lineName, const ::Ice::Current& = ::Ice::Current()); + virtual void removeLineDebugLayerVisu(const std::string& lineName, const ::Ice::Current& = ::Ice::Current()); + + virtual void setBoxVisu(const std::string &layerName, const std::string &boxName, const ::armarx::PoseBasePtr &globalPose, const ::armarx::Vector3BasePtr &dimensions, const DrawColor &color, const ::Ice::Current& = ::Ice::Current()); + virtual void setBoxDebugLayerVisu(const std::string &boxName, const ::armarx::PoseBasePtr &globalPose, const ::armarx::Vector3BasePtr &dimensions, const DrawColor &color, const ::Ice::Current& = ::Ice::Current()); + virtual void removeBoxVisu(const std::string &layerName, const std::string &boxName, const ::Ice::Current& = ::Ice::Current()); + virtual void removeBoxDebugLayerVisu(const std::string& boxName, const ::Ice::Current& = ::Ice::Current()); + + virtual void setTextVisu(const std::string &layerName, const std::string &textName, const std::string &text, const ::armarx::Vector3BasePtr &globalPosition, const DrawColor &color, int size, const ::Ice::Current& = ::Ice::Current()); + virtual void setTextDebugLayerVisu(const std::string &textName, const std::string &text, const ::armarx::Vector3BasePtr &globalPosition, const DrawColor &color, int size, const ::Ice::Current& = ::Ice::Current()); + virtual void removeTextVisu(const std::string &layerName, const std::string &textName, const ::Ice::Current& = ::Ice::Current()); + virtual void removeTextDebugLayerVisu(const std::string& textName, const ::Ice::Current& = ::Ice::Current()); + + + + virtual void clear(const std::string& layerName, const ::Ice::Current& = ::Ice::Current()); + virtual void clearDebugLayer(const ::Ice::Current& = ::Ice::Current()); + + /*! + * \brief getScopedLock If using the coin visualization it must be ensured that all rendering calls are protected with this mutex + * \return The lock that is automatically destructed when leaving the current scope. + */ + ScopedRecursiveLockPtr getScopedLock(); + + /*! + * \brief getVisualization Ensure that all access to this node is protected with the scoped lock mutex. + * \return The visualization + */ + SoSeparator* getVisualization(); + + void setMutex(boost::shared_ptr<boost::recursive_mutex> m); + +protected: + + void drawCoordSystem(const std::string &name, Eigen::Matrix4f &globalPose, float scale); + void drawLine(const std::string &name, Eigen::Vector3f &p1, Eigen::Vector3f &p2, float scale, VirtualRobot::VisualizationFactory::Color &color); + void drawBox(const std::string &name, Eigen::Matrix4f &globalPose, float width, float height, float depth, VirtualRobot::VisualizationFactory::Color &color); + void drawText(const std::string &name, const std::string &text, const Eigen::Vector3f &position, const VirtualRobot::VisualizationFactory::Color &color, int size); + + void removeLine(const std::string &name); + void removeBox(const std::string &name); + void removeText(const std::string &name); + + SoSeparator* coinVisu; + SoSeparator* debugVisu; + + bool enable; + + std::map<std::string, SoSeparator*> addedCoordVisualizations; + std::map<std::string, SoSeparator*> addedLineVisualizations; + std::map<std::string, SoSeparator*> addedBoxVisualizations; + std::map<std::string, SoSeparator*> addedTextVisualizations; + + boost::shared_ptr<boost::recursive_mutex> mutex; +}; + +typedef IceInternal::Handle<DebugDrawerComponent> DebugDrawerComponentPtr; + +} + +#endif diff --git a/source/RobotAPI/components/MMMPlayer/CMakeLists.txt b/source/RobotAPI/components/MMMPlayer/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..874be9722114757ae9e6f6e85d305a0dc6849a5e --- /dev/null +++ b/source/RobotAPI/components/MMMPlayer/CMakeLists.txt @@ -0,0 +1,35 @@ +armarx_component_set_name("MMMPlayer") + +find_package(MMMCore QUIET) +armarx_build_if(MMMCore_FOUND "MMMCORE not available") +if(MMMCore_FOUND) + include_directories(${MMMCORE_INCLUDE_DIRS}) +endif() + +find_package(Eigen3 QUIET) +find_package(Simox QUIET) + +armarx_build_if(Eigen3_FOUND "Eigen3 not available") +armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available") + +if (Eigen3_FOUND AND Simox_FOUND) + include_directories( + ${Eigen3_INCLUDE_DIR} + ${Simox_INCLUDE_DIRS}) +endif() + +set(COMPONENT_LIBS RobotAPIInterfaces ArmarXInterfaces ArmarXCore ${MMMCORE_LIBRARIES}) + +set(SOURCES +./MMMPlayer.cpp +#@TEMPLATE_LINE@@COMPONENT_PATH@/@COMPONENT_NAME@.cpp +) +set(HEADERS +./MMMPlayer.h +#@TEMPLATE_LINE@@COMPONENT_PATH@/@COMPONENT_NAME@.h +) + +armarx_add_component("${SOURCES}" "${HEADERS}") + +# add unit tests +add_subdirectory(test) diff --git a/source/RobotAPI/components/MMMPlayer/MMMPlayer.cpp b/source/RobotAPI/components/MMMPlayer/MMMPlayer.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e2fec8f83e395b725704c6def3d4cdad6c0b33de --- /dev/null +++ b/source/RobotAPI/components/MMMPlayer/MMMPlayer.cpp @@ -0,0 +1,122 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::MMMPlayer + * @author Mirko Waechter ( mirko dot waechter at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#include "MMMPlayer.h" +#include <MMM/Motion/MotionReaderXML.h> + +#include <Core/core/exceptions/local/ExpressionException.h> + +#include <Core/core/system/ArmarXDataPath.h> + + +using namespace armarx; +using namespace MMM; + + +void MMMPlayer::onInitComponent() +{ + usingProxy(getProperty<std::string>("KinematicUnitName").getValue()); + motionFPS = 1; + desiredFPS = 1; + +} + + +void MMMPlayer::onConnectComponent() +{ + { + ScopedLock lock(playerMutex); + currentFrame = 0; + MotionReaderXML reader; + auto motionPath = getProperty<std::string>("MMMFile").getValue(); + ArmarXDataPath::getAbsolutePath(motionPath, motionPath); + motion = reader.loadMotion(motionPath); + if(!motion) + { + terminate(); + return; + } + jointNames = motion->getJointNames(); + if(motion->getNumFrames() > 1) + { + float frameDuration = motion->getMotionFrame(1)->timestep - motion->getMotionFrame(0)->timestep; + ARMARX_CHECK_EXPRESSION(frameDuration != 0); + ARMARX_CHECK_EXPRESSION(frameDuration > 0) + motionFPS = 1.0f/frameDuration; + ARMARX_VERBOSE << VAROUT(motionFPS); + } + } + kin = getProxy<KinematicUnitInterfacePrx>(getProperty<std::string>("KinematicUnitName").getValue()); + desiredFPS = getProperty<float>("FPS").getValue(); + task = new PeriodicTask<MMMPlayer>(this, &MMMPlayer::run, 1000.0f/desiredFPS, true, "MMMPlayerTask"); + task->start(); + +} + + +void MMMPlayer::run() +{ + ScopedLock lock(playerMutex); + if(currentFrame >= motion->getNumFrames()) + { + currentFrame = 0; + } + auto frame = motion->getMotionFrame(currentFrame); + NameValueMap targetValues; + NameValueMap targetVelocities; + NameControlModeMap modes; + ARMARX_CHECK_EXPRESSION((int)jointNames.size() == frame->joint.rows()); + for (size_t i = 0; i < jointNames.size(); ++i) { + const auto& jointName = jointNames.at(i); + targetValues[jointName] = frame->joint[i]; + auto vel = frame->joint_vel[i]; + if(vel != 0.0f) + { + targetVelocities[jointName] = vel * desiredFPS/motionFPS; + } + modes[jointName] = ePositionControl; + } + kin->switchControlMode(modes); + kin->setJointAngles(targetValues); + ARMARX_VERBOSE << deactivateSpam(3) << "Playing frame " << currentFrame; + currentFrame++; +} + +void MMMPlayer::onDisconnectComponent() +{ + if(task) + task->stop(); +} + + +void MMMPlayer::onExitComponent() +{ + +} + +PropertyDefinitionsPtr MMMPlayer::createPropertyDefinitions() +{ + return PropertyDefinitionsPtr(new MMMPlayerPropertyDefinitions( + getConfigIdentifier())); +} + diff --git a/source/RobotAPI/components/MMMPlayer/MMMPlayer.h b/source/RobotAPI/components/MMMPlayer/MMMPlayer.h new file mode 100644 index 0000000000000000000000000000000000000000..425e8c58fc6207df7f158eda33195bf342413eaa --- /dev/null +++ b/source/RobotAPI/components/MMMPlayer/MMMPlayer.h @@ -0,0 +1,113 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::MMMPlayer + * @author Mirko Waechter ( mirko dot waechter at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#ifndef _ARMARX_COMPONENT_RobotAPI_MMMPlayer_H +#define _ARMARX_COMPONENT_RobotAPI_MMMPlayer_H + +#include <MMM/Motion/Motion.h> + + + +#include <Core/core/Component.h> + +#include <RobotAPI/interface/units/KinematicUnitInterface.h> + +#include <Core/core/services/tasks/PeriodicTask.h> + +namespace armarx +{ + /** + * @class MMMPlayerPropertyDefinitions + * @brief + * @ingroup Components + */ + class MMMPlayerPropertyDefinitions: + public ComponentPropertyDefinitions + { + public: + MMMPlayerPropertyDefinitions(std::string prefix): + ComponentPropertyDefinitions(prefix) + { + defineRequiredProperty<std::string>("MMMFile", "Path to MMM XML File"); + defineRequiredProperty<std::string>("KinematicUnitName", "Name of the KinematicUnit to which the joint values should be sent"); + defineOptionalProperty<float>("FPS", 100.0f, "FPS with which the recording should be executed. Velocities will be adapted."); + } + }; + + /** + * @class MMMPlayer + * @brief A brief description + * + * Detailed Description + */ + class MMMPlayer : + virtual public armarx::Component + { + public: + /** + * @see armarx::ManagedIceObject::getDefaultName() + */ + virtual std::string getDefaultName() const + { + return "MMMPlayer"; + } + + protected: + /** + * @see armarx::ManagedIceObject::onInitComponent() + */ + virtual void onInitComponent(); + + /** + * @see armarx::ManagedIceObject::onConnectComponent() + */ + virtual void onConnectComponent(); + + /** + * @see armarx::ManagedIceObject::onDisconnectComponent() + */ + virtual void onDisconnectComponent(); + + /** + * @see armarx::ManagedIceObject::onExitComponent() + */ + virtual void onExitComponent(); + + /** + * @see PropertyUser::createPropertyDefinitions() + */ + virtual PropertyDefinitionsPtr createPropertyDefinitions(); + + void run(); + Mutex playerMutex; + MMM::MotionPtr motion; + KinematicUnitInterfacePrx kin; + PeriodicTask<MMMPlayer>::pointer_type task; + StringList jointNames; + size_t currentFrame; + float motionFPS; + float desiredFPS; + }; +} + +#endif diff --git a/source/RobotAPI/components/MMMPlayer/test/CMakeLists.txt b/source/RobotAPI/components/MMMPlayer/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..16a4cf72988867edbe64273efc0970b571548e5f --- /dev/null +++ b/source/RobotAPI/components/MMMPlayer/test/CMakeLists.txt @@ -0,0 +1,5 @@ + +# Libs required for the tests +SET(LIBS ${LIBS} ArmarXCore MMMPlayer) + +armarx_add_test(MMMPlayerTest MMMPlayerTest.cpp "${LIBS}") \ No newline at end of file diff --git a/source/RobotAPI/components/MMMPlayer/test/MMMPlayerTest.cpp b/source/RobotAPI/components/MMMPlayer/test/MMMPlayerTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..326edd5156a723b5b205d7a29ec561e2d2f18e6d --- /dev/null +++ b/source/RobotAPI/components/MMMPlayer/test/MMMPlayerTest.cpp @@ -0,0 +1,38 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::MMMPlayer + * @author Mirko Waechter ( mirko dot waechter at kit dot edu ) + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#define BOOST_TEST_MODULE RobotAPI::ArmarXObjects::MMMPlayer + +#define ARMARX_BOOST_TEST + +#include <RobotAPI/Test.h> +#include <RobotAPI/components/MMMPlayer/MMMPlayer.h> + +#include <iostream> + +BOOST_AUTO_TEST_CASE(testExample) +{ + armarx::MMMPlayer instance; + + BOOST_CHECK_EQUAL(true, true); +} diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp index f7c0eabf15bf6c11dac0c6ce09bbc6625023e5f3..7f801b90c0f892a04fb24a72d24da865c6f2620a 100644 --- a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp +++ b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp @@ -209,7 +209,7 @@ void KinematicUnitSimulation::setJointAngles(const NameValueMap& targetJointAngl actualJointAngles[targetJointName] = iterJoints->second.angle; } else - ARMARX_WARNING << "Joint not found!"; + ARMARX_WARNING << deactivateSpam(1) << "Joint '" << targetJointName << "' not found!"; } if (aValueChanged) listenerPrx->reportJointAngles(actualJointAngles, aValueChanged); diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt index 067b093164b490d8ccd4541cd371375030848b7a..9f431bf614218a146dfeea5210fce6df9723dd35 100644 --- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt +++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt @@ -15,13 +15,14 @@ include(${QT_USE_FILE}) include(${ArmarXGui_CMAKE_DIR}/ArmarXGui.cmake) file(GLOB SOURCES PlatformUnitGuiPlugin.cpp - PlatformUnitConfigDialog.cpp) + PlatformUnitConfigDialog.cpp JoystickControlWidget.cpp) file(GLOB HEADERS PlatformUnitGuiPlugin.h - PlatformUnitConfigDialog.h) + PlatformUnitConfigDialog.h JoystickControlWidget.h) set(GUI_MOC_HDRS PlatformUnitGuiPlugin.h PlatformUnitConfigDialog.h + JoystickControlWidget.h ) set(GUI_UIS diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.cpp b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.cpp new file mode 100644 index 0000000000000000000000000000000000000000..012939ed961b879745755dfc816bb3e137cb42b7 --- /dev/null +++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.cpp @@ -0,0 +1,212 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * + * @package ArmarX::RobotAPI + * @author Raphael Grimm <ufdrv at student dot kit dot edu> + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#include "JoystickControlWidget.h" + +//qt +#include <QVBoxLayout> +#include <QPen> +#include <QBrush> +#include <QColor> +#include <QSizePolicy> + +//std +#include <memory> +#include <cmath> + +#include <iostream> + +namespace armarx +{ + + JoystickControlWidgetQGraphicsView::JoystickControlWidgetQGraphicsView(QGraphicsScene* scene, QWidget* parent): + QGraphicsView{scene, parent} + { + } + + JoystickControlWidgetQGraphicsView::~JoystickControlWidgetQGraphicsView() + { + } + + void JoystickControlWidgetQGraphicsView::mousePressEvent(QMouseEvent* event) + { + emit positionChanged(mapToScene(event->pos())); + } + + void JoystickControlWidgetQGraphicsView::mouseMoveEvent(QMouseEvent* event) + { + emit positionChanged(mapToScene(event->pos())); + } + void JoystickControlWidgetQGraphicsView::mouseReleaseEvent(QMouseEvent*) + { + emit positionChanged({0,0}); + } + + JoystickControlWidget::JoystickControlWidget(bool useQuadrant3and4, QWidget *parent) : + QWidget{parent}, + onlyQuadrant2and1{!useQuadrant3and4}, + nibble{}, + steps{0} + { + //build scene + use explicit pens (on some platforms the default ones dont have the desired default values) + std::unique_ptr<QGraphicsScene> scene{new QGraphicsScene{}}; + QPen pen{Qt::black,0}; + //bounding circle + scene->addEllipse(-1,-1,2,2,pen); + //inner circle + scene->addEllipse(-0.13,-0.13,0.26,0.26,pen); + //cross + scene->addLine(0,-1,0,1,pen); + scene->addLine(-1,0,1,0,pen); + //nibble + QPen penRed{Qt::darkRed}; + penRed.setCosmetic(true); + nibble = scene->addEllipse(-0.1,-0.1,0.2,0.2, penRed, QBrush{Qt::darkRed}); + + //build view + std::unique_ptr<JoystickControlWidgetQGraphicsView> + viewPtr{new JoystickControlWidgetQGraphicsView{scene.release()}}; + view = viewPtr.get(); + + view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + view->setSceneRect(-1,-1,2, (onlyQuadrant2and1?1:2)); + + //connect + connect(viewPtr.get(), SIGNAL(positionChanged(QPointF)), this, SLOT(setNibble(QPointF))); + + //set gui + std::unique_ptr<QVBoxLayout> layout{new QVBoxLayout{}}; + layout->setSpacing(0); + layout->setContentsMargins(0,0,0,0); + layout->addWidget(viewPtr.release()); + setLayout(layout.release()); + + } + + QPointF JoystickControlWidget::getPosition() const + { + return nibble->pos(); + } + + double JoystickControlWidget::getRotation() const + { + //if the nibble is in the middle return the angle 0. + //otherwise use polar coordinates (up is 0, down pi, Quadrant I & IV are positive) + auto pos = getPosition(); + auto length= std::hypot(pos.x(), pos.y()); + auto normalized= pos/length; + + if(length==0) + { + return 0; + } + else + { + if(normalized.x()<0) + { + return -std::acos(-normalized.y()); + } + else + { + return std::acos(-normalized.y()); + } + } + } + + void JoystickControlWidget::setNibble(QPointF pos) + { + if(onlyQuadrant2and1 && (pos.y()>0)) + { + //project position to quadrant II & I + pos.setY(0); + } + + auto length= std::hypot(pos.x(), pos.y()); + auto normalized= pos/length; + + if(length!=0) + { + + if(steps==0) + { + //dont snap + pos = (length>1)?normalized : pos; + } + else + { + //snapp to step + double stepSize = 1.0/steps; + //length/(1.0/steps) => length*steps + // +0.3*stepSize => if the border of the step is more forgiving + double newLength = static_cast<unsigned int>(length*steps+0.3*stepSize)*stepSize; + pos=std::fmin(1, newLength)*normalized; + } + } + + //set position + nibble->setPos( pos); + + //flip y (from downwards to upwards) + pos.setY(-pos.y()); + + //emit signals + emit positionChanged(pos); + + emit rotationChanged(getRotation()); + } + + void JoystickControlWidget::resizeEvent(QResizeEvent*) + { + int width; + int height; + //calculate size + if(onlyQuadrant2and1) + { + height= std::min(contentsRect().width()/2,contentsRect().height()); + width=height*2; + } + else + { + width= std::min(contentsRect().width(),contentsRect().height()); + height=width; + } + //if minsz=maxsz you block resizing + view->setMinimumSize(0.9*width,0.9*height); + view->setMaximumSize(width,height); + auto viewScaleFactor = 0.49*width; + view->setTransform(QTransform::fromScale(viewScaleFactor,viewScaleFactor)); + } + + + void JoystickControlWidget::setSteps(int stepCount) + { + steps= (stepCount<0)?0:stepCount; + } + + int JoystickControlWidget::getSteps() + { + return steps; + } +}// namespace armarx diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.h b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.h new file mode 100644 index 0000000000000000000000000000000000000000..b11fb1732b9cffb365c9bccf116b985164ef9cc5 --- /dev/null +++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.h @@ -0,0 +1,164 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * + * @package ArmarX::RobotAPI + * @author Raphael Grimm <ufdrv at student dot kit dot edu> + * @date 2014 + * @copyright http://www.gnu.org/licenses/gpl.txt + * GNU General Public License + */ + +#ifndef _ARMARXGUI_PLUGINS_JOYSTICKCONTROLWIDGET_H +#define _ARMARXGUI_PLUGINS_JOYSTICKCONTROLWIDGET_H + +//boost +#include <boost/shared_ptr.hpp> + +//qt +#include <QWidget> +#include <QGraphicsView> +#include <QGraphicsScene> +#include <QMouseEvent> +#include <QResizeEvent> + +#include <QPointF> +#include <QPointer> +#include <QGraphicsEllipseItem> + +namespace armarx +{ + /** + * @brief Provides the coordinates of mouse events through signals. + * Used in JoystickControlWidget. + */ + class JoystickControlWidgetQGraphicsView:public QGraphicsView + { + Q_OBJECT + public: + JoystickControlWidgetQGraphicsView(QGraphicsScene* scene, QWidget* parent = nullptr); + virtual ~JoystickControlWidgetQGraphicsView(); + + public: + /** + * @brief Passes the mapped mouse coordinates of the event through the signal positionChanged. + * @param event Contains the coordinates + */ + virtual void mousePressEvent(QMouseEvent* event); + + /** + * @brief Passes the mapped mouse coordinates of the event through the signal positionChanged. + * @param event Contains the coordinates + */ + virtual void mouseMoveEvent(QMouseEvent* event); + + /** + * @brief Passes (0;0) through the signal positionChanged. + */ + virtual void mouseReleaseEvent(QMouseEvent*); + signals: + /** + * @brief Sends the mouse position on press or move in the scene coordinates. + * On mouse release (0;0) is send. + */ + void positionChanged(QPointF); + };//JoystickControlWidgetQGraphicsView + + /** + * @brief Provides a simple joystick control. + */ + class JoystickControlWidget : public QWidget + { + Q_OBJECT + public: + explicit JoystickControlWidget(bool useQuadrant3and4 = true, QWidget *parent = 0); + + /** + * @brief Returns the angle of the control in polar coordinates (-pi,pi]. + * The top position is 0. The bottom position is pi. The Quadrants 1 and 4 have positive value. + * @return The angle of the control in polar coordinates (-pi,pi]. + */ + double getRotation() const; + + /** + * @brief Returns the position of the nibble. + * The position is in a circle with the radius 1 around (0;0) + * @return The position of the nibble. + */ + QPointF getPosition() const; + + public slots: + /** + * @brief Sets the steps of the control. (0=> unlimited steps) + * @param stepCount The new step count. (values <0 will be used as 0) + */ + void setSteps(int stepCount); + + /** + * @brief Returns the steps of the control. (0=> unlimited steps) + * @return The steps of the control. (0=> unlimited steps) + */ + int getSteps(); + + signals: + /** + * @brief Passes the position of the control. + * The position is in a circle with the radius 1 around (0;0) + */ + void positionChanged(QPointF); + + /** + * @brief Passes the angle of the control in polar coordinates (-pi,pi]. + * The top position is 0. The bottom position is pi. The Quadrants 1 and 4 have positive value. + */ + void rotationChanged(double); + + protected: + virtual void resizeEvent(QResizeEvent * event); + + private slots: + /** + * @brief Sets the nibble to pos. (pos will be transformed to be a valid position) + * @param pos The new position. + */ + void setNibble(QPointF pos); + + private: + /** + * @brief The view containing the scene. + */ + QPointer<JoystickControlWidgetQGraphicsView> view; + /** + * @brief Whether only quadrant 1 and 2 are in use + */ + bool onlyQuadrant2and1; + + //QGraphicsEllipseItem is no QObject so it cant be stored in a QPointer. + /** + * @brief The control item of this widget. (the red dot) + */ + QGraphicsEllipseItem* nibble; + + /** + * @brief The steps of the control. (0=> unlimited steps) + */ + int steps; + };// class JoystickControlWidget + + typedef boost::shared_ptr<JoystickControlWidget> JoystickControlWidgetPtr; + +}// namespace armarx +#endif diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp index fc01d3ee6e312e004b09d424c8745715b80aeda0..8961ea4c2f0f64fdbffb38193b5ef8add7262a19 100644 --- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp +++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp @@ -9,6 +9,10 @@ #include <QPushButton> #include <QLabel> #include <QLineEdit> +#include <QHBoxLayout> + +//std +#include <memory> using namespace armarx; @@ -18,13 +22,32 @@ PlatformUnitGuiPlugin::PlatformUnitGuiPlugin() addWidget<PlatformUnitWidget>(); } - PlatformUnitWidget::PlatformUnitWidget() : platformUnitProxyName("PlatformUnitDynamicSimulation"), - platformName("Platform") + platformName("Platform"), + speedCtrl{nullptr}, + rotaCtrl{nullptr}, + ctrlEvaluationTimer{}, + platformRotation{0} { // init gui ui.setupUi(getWidget()); + //init joystick controls + std::unique_ptr<JoystickControlWidget> speed{new JoystickControlWidget{}}; + speedCtrl = speed.get(); + speedCtrl->setSteps(2); + //use upper semicircle for rotation + std::unique_ptr<JoystickControlWidget> rotat{new JoystickControlWidget{false}}; + rotaCtrl = rotat.get(); + rotaCtrl->setSteps(1); + //add joystick controls + ui.verticalLayoutRotation->addWidget(new QLabel{"Rotation"}); + ui.verticalLayoutRotation->addWidget(rotat.release()); + ui.verticalLayoutSpeed->addWidget(new QLabel{"Direction"}); + ui.verticalLayoutSpeed->addWidget(speed.release()); + //set up the timer + ctrlEvaluationTimer.setSingleShot(false); + ctrlEvaluationTimer.start(CONTROL_TICK_RATE);//tickrate in ms } @@ -79,6 +102,7 @@ void PlatformUnitWidget::saveSettings(QSettings *settings) void PlatformUnitWidget::connectSlots() { connect(ui.buttonMoveToPosition, SIGNAL(clicked()), this, SLOT(moveTo())); + connect(&ctrlEvaluationTimer, SIGNAL(timeout()), this, SLOT(controlTimerTick())); } void PlatformUnitWidget::moveTo() @@ -97,6 +121,7 @@ void PlatformUnitWidget::reportPlatformPose(::Ice::Float currentPlatformPosition ui.labelCurrentPositionX->setText(QString::number(currentPlatformPositionX)); ui.labelCurrentPositionY->setText(QString::number(currentPlatformPositionY)); ui.labelCurrentRotation->setText(QString::number(currentPlatformRotation)); + platformRotation =currentPlatformRotation; } void PlatformUnitWidget::reportNewTargetPose(::Ice::Float newPlatformPositionX, ::Ice::Float newPlatformPositionY, ::Ice::Float newPlatformRotation, const Ice::Current& c) @@ -111,5 +136,49 @@ void PlatformUnitWidget::reportPlatformVelocity(::Ice::Float currentPlatformVelo } +void PlatformUnitWidget::controlTimerTick() +{ + //speed control cant be tested in the simulator: + //platformUnitProxy->move(targetPlatformVelocityX, targetPlatformVelocityY, targetPlatformVelocityRotation); + //[20496][12:09:21.196][PlatformUnitDynamicSimulation][PlatformUnitDynamicSimulation]: NYI + // + // the manual transformation in the platform system using the rotation has problems: + // - more floating point operations => bigger errors + // - the platform moves => the rotation changes a small bit => the platforms starts to turn + // + // the problems maybe will be solved by setting velocities (but this is nyi in the simulator) + + ::Ice::Float posAcc = 10.0f; + ::Ice::Float rotAcc = 0.1f; + + //normalize to [-1,1] + auto rot = -rotaCtrl->getRotation()/static_cast<float>(M_PI); + ::Ice::Float rotInc = rot; + + auto pos = speedCtrl->getPosition()*60; + //flip y + pos.setY(-pos.y()); + auto len = std::hypot(pos.x(),pos.y()); + + ::Ice::Float posXInc = 0; + ::Ice::Float posYInc = 0; + + if(std::abs(len)>0.01) + { + // rotation=0 => lookDirection = (0,1) + // + //rotate the vector + // cos alpha -sin alpha * x + // sin alpha cos alpha y + posXInc =pos.x()*std::cos(platformRotation) - pos.y()*std::sin(platformRotation); + posYInc =pos.x()*std::sin(platformRotation) + pos.y()*std::cos(platformRotation); + } + //only update positions if required + if(rotInc!=0 || posXInc !=0 || posYInc!=0) + { + platformUnitProxy->moveRelative(posXInc,posYInc,rotInc, posAcc, rotAcc); + } +} + Q_EXPORT_PLUGIN2(armar3_gui_PlatformUnitGuiPlugin, PlatformUnitGuiPlugin) diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h index f791b42d1a9f28c07ec1e48250afd5cbfcca8908..16839d5913835f471c31ab2c99fb4b3dee5bc999 100644 --- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h +++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h @@ -27,6 +27,7 @@ /* ArmarX headers */ #include "ui_PlatformUnitGuiPlugin.h" +#include "JoystickControlWidget.h" #include <Core/core/Component.h> #include <Gui/ArmarXGuiLib/ArmarXGuiPlugin.h> #include <Gui/ArmarXGuiLib/ArmarXComponentWidgetController.h> @@ -35,6 +36,7 @@ /* Qt headers */ #include <QtGui/QMainWindow> +#include <QTimer> #include <string> @@ -108,6 +110,9 @@ namespace armarx Ui::PlatformUnitGuiPlugin ui; + private slots: + void controlTimerTick(); + private: std::string platformUnitProxyName; std::string platformName; @@ -116,6 +121,33 @@ namespace armarx QPointer<QWidget> __widget; QPointer<PlatformUnitConfigDialog> dialog; + + /** + * @brief A Joystick control for the platform speed. + * (currently the velocity control is nyi is the simulator so this is emulated by + * adding a delta to the target positions) + */ + QPointer<JoystickControlWidget> speedCtrl; + + /** + * @brief A Joystick control for the platform rotation. + */ + QPointer<JoystickControlWidget> rotaCtrl; + + /** + * @brief A timer to evaluate the speedCtrl and rotaCtrl + */ + QTimer ctrlEvaluationTimer; + + /** + * @brief Holds the last reported platform rotation. (required to emulate the speed control) + */ + ::Ice::Float platformRotation; + + /** + * @brief The tick rate (in ms) for the ctrlEvaluationTimer. + */ + static const int CONTROL_TICK_RATE = 250; }; typedef boost::shared_ptr<PlatformUnitWidget> PlatformUnitGuiPluginPtr; } diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui index 5a21e34a0317a54e21ab7e2dd81b895b04b59a0b..77ce3ca22a6da1634b0f1f85882447c5f1f3deff 100644 --- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui +++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>360</width> - <height>190</height> + <height>350</height> </rect> </property> <property name="sizePolicy"> @@ -25,29 +25,48 @@ <x>9</x> <y>9</y> <width>341</width> - <height>171</height> + <height>331</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="1"> <widget class="QLabel" name="labelCurrent"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="text"> <string>Current Position</string> </property> </widget> </item> - <item row="2" column="2"> - <widget class="QLineEdit" name="editTargetPositionY"/> + <item row="0" column="2"> + <widget class="QLabel" name="labelTarget"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>Target Position</string> + </property> + </widget> </item> - <item row="1" column="0"> - <widget class="QLabel" name="labelPositionX"> + <item row="4" column="2"> + <widget class="QPushButton" name="buttonMoveToPosition"> <property name="text"> - <string>X Position</string> + <string>Move To Position</string> </property> </widget> </item> - <item row="3" column="2"> - <widget class="QLineEdit" name="editTargetRotation"/> + <item row="1" column="2"> + <widget class="QLineEdit" name="editTargetPositionX"/> + </item> + <item row="2" column="2"> + <widget class="QLineEdit" name="editTargetPositionY"/> </item> <item row="2" column="0"> <widget class="QLabel" name="labelPositionY"> @@ -56,23 +75,16 @@ </property> </widget> </item> - <item row="3" column="0"> - <widget class="QLabel" name="labelRotation"> - <property name="text"> - <string>Rotation</string> - </property> - </widget> + <item row="3" column="2"> + <widget class="QLineEdit" name="editTargetRotation"/> </item> - <item row="0" column="2"> - <widget class="QLabel" name="labelTarget"> + <item row="1" column="1"> + <widget class="QLabel" name="labelCurrentPositionX"> <property name="text"> - <string>Target Position</string> + <string>0</string> </property> </widget> </item> - <item row="1" column="2"> - <widget class="QLineEdit" name="editTargetPositionX"/> - </item> <item row="2" column="1"> <widget class="QLabel" name="labelCurrentPositionY"> <property name="text"> @@ -80,27 +92,37 @@ </property> </widget> </item> - <item row="1" column="1"> - <widget class="QLabel" name="labelCurrentPositionX"> + <item row="3" column="0"> + <widget class="QLabel" name="labelRotation"> <property name="text"> - <string>0</string> + <string>Rotation</string> </property> </widget> </item> - <item row="3" column="1"> - <widget class="QLabel" name="labelCurrentRotation"> + <item row="1" column="0"> + <widget class="QLabel" name="labelPositionX"> <property name="text"> - <string>0</string> + <string>X Position</string> </property> </widget> </item> - <item row="4" column="2"> - <widget class="QPushButton" name="buttonMoveToPosition"> + <item row="3" column="1"> + <widget class="QLabel" name="labelCurrentRotation"> <property name="text"> - <string>Move To Position</string> + <string>0</string> </property> </widget> </item> + <item row="5" column="0" colspan="3"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <layout class="QVBoxLayout" name="verticalLayoutSpeed"/> + </item> + <item> + <layout class="QVBoxLayout" name="verticalLayoutRotation"/> + </item> + </layout> + </item> </layout> </widget> </widget> diff --git a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice index 97863966089d30d2e83433c59852d443cd32b1cc..9666317ad1a4e617afdcd1251619bd72c8c1d7c4 100644 --- a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice +++ b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice @@ -40,6 +40,7 @@ module armarx float r; float g; float b; + float a; }; @@ -58,8 +59,9 @@ module armarx * \param globalPose The pose in global coordinate syetem. */ void setPoseVisu(string layerName, string poseName, PoseBase globalPose); - void setLineVisu(string layerName, string lineName, Vector3Base globalPosition1, Vector3Base globalPosition2, float lineWidth, DrawColor color); + void setBoxVisu(string layerName, string boxName, PoseBase globalPose, Vector3Base dimensions, DrawColor color); + void setTextVisu(string layerName, string textName, string text, Vector3Base globalPosition, DrawColor color, int size); /*! * \brief setPoseVisu draws on the "debug" layer @@ -68,6 +70,8 @@ module armarx */ void setPoseDebugLayerVisu(string poseName, PoseBase globalPose); void setLineDebugLayerVisu(string lineName, Vector3Base globalPosition1, Vector3Base globalPosition2, float lineWidth, DrawColor color); + void setBoxDebugLayerVisu(string boxName, PoseBase globalPose, Vector3Base dimensions, DrawColor color); + void setTextDebugLayerVisu(string textName, string text, Vector3Base globalPosition, DrawColor color, int size); /*! * \brief Remove visualization of coordinate system. @@ -76,12 +80,26 @@ module armarx */ void removePoseVisu(string layerName, string poseName); void removeLineVisu(string layerName, string lineName); + void removeBoxVisu(string layerName, string boxName); + void removeTextVisu(string layerName, string textName); /*! * \brief Removes pose from the "debug" layer. */ void removePoseDebugLayerVisu(string poseName); void removeLineDebugLayerVisu(string lineName); + void removeBoxDebugLayerVisu(string boxName); + void removeTextDebugLayerVisu(string textName); + + /*! + * \brief clear removes all visualizations for the given layer + * \param layerName The name identifies the layer. + */ + void clear(string layerName); + /*! + * \brief clearDebugLayer calls <code>clear("debug");</code> + */ + void clearDebugLayer(); };