#! /usr/bin/env python
# Software License Agreement (BSD License)
#
# Copyright (c) 2014, Kei Okada.
# 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 Kei Okada 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.


PACKAGE='edge_detection'

from dynamic_reconfigure.parameter_generator_catkin import *

gen = ParameterGenerator()
gen.add("use_camera_info", bool_t, 0, "Indicates that the camera_info topic should be subscribed to to get the default input_frame_id. Otherwise the frame from the image message will be used.", False)

edge_type = gen.enum([ gen.const("Sobel",   int_t,  0, "Sobel Derivatives"),
                       gen.const("Laplace", int_t,  1, "Laplace Operator"),
                       gen.const("Canny",   int_t,  2, "Canny Edge Detector")], "An enum for Edge Detection Mehtods")
gen.add("edge_type", int_t, 0, "Edge Detection Methods", 0, 0, 2, edit_method=edge_type)

gen.add("canny_threshold1", int_t, 0, "First threshold for the hysteresis procedure.", 100, 0, 500)
gen.add("canny_threshold2", int_t, 0, "Second threshold for the hysteresis procedure.", 200, 0, 500)

gen.add("apertureSize", int_t,    0, "Aperture size for the Sobel() operator.", 3, 1, 10)

gen.add("apply_blur_pre",   bool_t,   0, "Flag, applying Blur() to input image", True)

gen.add("postBlurSize", int_t,    0, "Aperture size for the Blur() operator.", 13, 3, 31)
gen.add("postBlurSigma", double_t,    0, "Sigma for the GaussianBlur() operator.", 3.2, 0.0, 10.0)
gen.add("apply_blur_post", bool_t,   0, "Flag, applying GaussianBlur() to output(edge) image", False)

gen.add("L2gradient",   bool_t,   0, "Flag, indicating whether a more accurate  L_2 norm should be used to calculate the image gradient magnitude ( L2gradient=true ), or whether the default  L_1 norm is enough ( L2gradient=false ).", False)

exit(gen.generate(PACKAGE, "edge_detection", "EdgeDetection"))
