/* * Software License Agreement (BSD License) * * Copyright (c) 2010, Willow Garage, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * Neither the name of the copyright holder(s) nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * $Id$ * */ #pragma once #include #include #include // Use e.g. like this: // PCL_INFO_STREAM("Info: this is a point: " << pcl::PointXYZ(1.0, 2.0, 3.0) << std::endl); // PCL_ERROR_STREAM("Error: an Eigen vector: " << std::endl << Eigen::Vector3f(1.0, 2.0, 3.0) << std::endl); #define PCL_LOG_STREAM(LEVEL, STREAM, CSTR, ATTR, FG, ARGS) if(pcl::console::isVerbosityLevelEnabled(pcl::console::LEVEL)) { fflush(stdout); pcl::console::change_text_color(CSTR, pcl::console::ATTR, pcl::console::FG); STREAM << ARGS; pcl::console::reset_text_color(CSTR); } #define PCL_ALWAYS_STREAM(ARGS) PCL_LOG_STREAM(L_ALWAYS, std::cout, stdout, TT_RESET, TT_WHITE, ARGS) #define PCL_ERROR_STREAM(ARGS) PCL_LOG_STREAM(L_ERROR, std::cerr, stderr, TT_BRIGHT, TT_RED, ARGS) #define PCL_WARN_STREAM(ARGS) PCL_LOG_STREAM(L_WARN, std::cerr, stderr, TT_BRIGHT, TT_YELLOW, ARGS) #define PCL_INFO_STREAM(ARGS) PCL_LOG_STREAM(L_INFO, std::cout, stdout, TT_RESET, TT_WHITE, ARGS) #define PCL_DEBUG_STREAM(ARGS) PCL_LOG_STREAM(L_DEBUG, std::cout, stdout, TT_RESET, TT_GREEN, ARGS) #define PCL_VERBOSE_STREAM(ARGS) PCL_LOG_STREAM(L_VERBOSE, std::cout, stdout, TT_RESET, TT_WHITE, ARGS) #define PCL_ALWAYS(...) pcl::console::print (pcl::console::L_ALWAYS, __VA_ARGS__) #define PCL_ERROR(...) pcl::console::print (pcl::console::L_ERROR, __VA_ARGS__) #define PCL_WARN(...) pcl::console::print (pcl::console::L_WARN, __VA_ARGS__) #define PCL_INFO(...) pcl::console::print (pcl::console::L_INFO, __VA_ARGS__) #define PCL_DEBUG(...) pcl::console::print (pcl::console::L_DEBUG, __VA_ARGS__) #define PCL_VERBOSE(...) pcl::console::print (pcl::console::L_VERBOSE, __VA_ARGS__) #define PCL_ASSERT_ERROR_PRINT_CHECK(pred, msg) \ do \ { \ if (!(pred)) \ { \ PCL_ERROR(msg); \ PCL_ERROR("In File %s, in line %d\n" __FILE__, __LINE__); \ } \ } while (0) #define PCL_ASSERT_ERROR_PRINT_RETURN(pred, msg, err) \ do \ { \ PCL_ASSERT_ERROR_PRINT_CHECK(pred, msg); \ if (!(pred)) return err; \ } while (0) namespace pcl { namespace console { enum TT_ATTIBUTES { TT_RESET = 0, TT_BRIGHT = 1, TT_DIM = 2, TT_UNDERLINE = 3, TT_BLINK = 4, TT_REVERSE = 7, TT_HIDDEN = 8 }; enum TT_COLORS { TT_BLACK, TT_RED, TT_GREEN, TT_YELLOW, TT_BLUE, TT_MAGENTA, TT_CYAN, TT_WHITE }; enum VERBOSITY_LEVEL { L_ALWAYS, L_ERROR, L_WARN, L_INFO, L_DEBUG, L_VERBOSE }; /** set the verbosity level */ PCL_EXPORTS void setVerbosityLevel (VERBOSITY_LEVEL level); /** get the verbosity level. */ PCL_EXPORTS VERBOSITY_LEVEL getVerbosityLevel (); /** initialize verbosity level. */ PCL_EXPORTS bool initVerbosityLevel (); /** is verbosity level enabled? */ PCL_EXPORTS bool isVerbosityLevelEnabled (VERBOSITY_LEVEL severity); /** \brief Enable or disable colored text output, overriding the default behavior. * * By default, colored output is enabled for interactive terminals or when the environment * variable PCL_CLICOLOR_FORCE is set. * * \param stream the output stream (stdout, stderr, etc) * \param enable whether to emit color codes when calling any of the color related methods */ PCL_EXPORTS void enableColoredOutput (FILE *stream, bool enable); /** \brief Change the text color (on either stdout or stderr) with an attr:fg:bg * \param stream the output stream (stdout, stderr, etc) * \param attribute the text attribute * \param fg the foreground color * \param bg the background color */ PCL_EXPORTS void change_text_color (FILE *stream, int attribute, int fg, int bg); /** \brief Change the text color (on either stdout or stderr) with an attr:fg * \param stream the output stream (stdout, stderr, etc) * \param attribute the text attribute * \param fg the foreground color */ PCL_EXPORTS void change_text_color (FILE *stream, int attribute, int fg); /** \brief Reset the text color (on either stdout or stderr) to its original state * \param stream the output stream (stdout, stderr, etc) */ PCL_EXPORTS void reset_text_color (FILE *stream); /** \brief Print a message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param attr the text attribute * \param fg the foreground color * \param format the message */ PCL_EXPORTS void print_color (FILE *stream, int attr, int fg, const char *format, ...); /** \brief Print an info message on stream with colors * \param format the message */ PCL_EXPORTS void print_info (const char *format, ...); /** \brief Print an info message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print_info (FILE *stream, const char *format, ...); /** \brief Print a highlighted info message on stream with colors * \param format the message */ PCL_EXPORTS void print_highlight (const char *format, ...); /** \brief Print a highlighted info message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print_highlight (FILE *stream, const char *format, ...); /** \brief Print an error message on stream with colors * \param format the message */ PCL_EXPORTS void print_error (const char *format, ...); /** \brief Print an error message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print_error (FILE *stream, const char *format, ...); /** \brief Print a warning message on stream with colors * \param format the message */ PCL_EXPORTS void print_warn (const char *format, ...); /** \brief Print a warning message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print_warn (FILE *stream, const char *format, ...); /** \brief Print a debug message on stream with colors * \param format the message */ PCL_EXPORTS void print_debug (const char *format, ...); /** \brief Print a debug message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print_debug (FILE *stream, const char *format, ...); /** \brief Print a value message on stream with colors * \param format the message */ PCL_EXPORTS void print_value (const char *format, ...); /** \brief Print a value message on stream with colors * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print_value (FILE *stream, const char *format, ...); /** \brief Print a message on stream * \param level the verbosity level * \param stream the output stream (stdout, stderr, etc) * \param format the message */ PCL_EXPORTS void print (VERBOSITY_LEVEL level, FILE *stream, const char *format, ...); /** \brief Print a message * \param level the verbosity level * \param format the message */ PCL_EXPORTS void print (VERBOSITY_LEVEL level, const char *format, ...); } }