Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FormerLurker/ArcWelderLib.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'ArcWelderInverseProcessor/ArcWelderInverseProcessor.cpp')
-rw-r--r--ArcWelderInverseProcessor/ArcWelderInverseProcessor.cpp214
1 files changed, 158 insertions, 56 deletions
diff --git a/ArcWelderInverseProcessor/ArcWelderInverseProcessor.cpp b/ArcWelderInverseProcessor/ArcWelderInverseProcessor.cpp
index d48beda..f3d35c3 100644
--- a/ArcWelderInverseProcessor/ArcWelderInverseProcessor.cpp
+++ b/ArcWelderInverseProcessor/ArcWelderInverseProcessor.cpp
@@ -87,8 +87,9 @@ int run_arc_straightener(int argc, char* argv[])
try {
// Define the command line object
TCLAP::CmdLine cmd(info, '=', GIT_TAGGED_VERSION);
+ // Define a special command line object for various help requests
+ TCLAP::CmdLine help_cmd(info, '=', GIT_TAGGED_VERSION, false);
- // Define Arguments
// <SOURCE>
TCLAP::UnlabeledValueArg<std::string> source_arg("source", "The source gcode file to convert.", true, "", "path to source gcode file");
@@ -120,6 +121,12 @@ int run_arc_straightener(int argc, char* argv[])
arg_description_stream << "\tDefault Value: " << DEFAULT_FIRMWARE_VERSION_NAME;
TCLAP::ValueArg<std::string> firmware_version_arg("v", "firmware-version", arg_description_stream.str(), false, DEFAULT_FIRMWARE_VERSION_NAME, "string");
+ // -p --print-firmware-defaults
+ arg_description_stream.clear();
+ arg_description_stream.str("");
+ arg_description_stream << "Prints all available settings and defaults for the provided firmware type and version. If provided, all other parameters will be ignored except for " << firmware_type_arg.getName() << " and " << firmware_version_arg.getName() << ".";
+ TCLAP::SwitchArg print_firmware_defaults_arg("p", "print-firmware-defaults", arg_description_stream.str());
+
// -g --g90-influences-extruder
std::string g90_g91_influences_extruder_default_value = "DEFAULT";
std::vector<std::string> g90_g91_influences_extruder_vector;
@@ -139,7 +146,7 @@ int run_arc_straightener(int argc, char* argv[])
TCLAP::ValueArg<double> mm_per_arc_segment_arg("m", "mm-per-arc-segment", arg_description_stream.str(), false, DEFAULT_MM_PER_ARC_SEGMENT, "float");
// max_arc_segment_mm_arg
- // -d --mm-per-arc-segment
+ // -d --max-arc-segment-mm
arg_description_stream.clear();
arg_description_stream.str("");
arg_description_stream << "The maximum length of an arc segment. Default Value: " << DEFAULT_MM_PER_ARC_SEGMENT;
@@ -169,7 +176,7 @@ int run_arc_straightener(int argc, char* argv[])
arg_description_stream.clear();
arg_description_stream.str("");
arg_description_stream << "The minimum number of segments within a circle of the same radius as the arc. Can be used to increase detail on small arcs. The smallest segment generated will be no larger than min_mm_per_arc_segment. A value less than or equal to 0 will disable this feature. Default Value: " << DEFAULT_MIN_ARC_SEGMENTS;
- TCLAP::ValueArg<int> min_circle_segments_arg("a", "min-circle-segments", arg_description_stream.str(), false, DEFAULT_MIN_ARC_SEGMENTS, "int");
+ TCLAP::ValueArg<int> min_circle_segments_arg("a", "min-circle-segments", arg_description_stream.str(), false, DEFAULT_MIN_CIRCLE_SEGMENTS, "int");
// -c --n-arc-correction
arg_description_stream.clear();
@@ -189,12 +196,6 @@ int run_arc_straightener(int argc, char* argv[])
arg_description_stream << "This currently is only used in Smoothieware. The maximum error for line segments that divide arcs. Set to 0 to disable. Default Value: " << DEFAULT_MM_MAX_ARC_ERROR;
TCLAP::ValueArg<double> mm_max_arc_error_arg("e", "mm-max-arc-error", arg_description_stream.str(), false, DEFAULT_MM_MAX_ARC_ERROR, "float");
- // -p --print-firmware-defaults
- arg_description_stream.clear();
- arg_description_stream.str("");
- arg_description_stream << "Prints all available settings and defaults for the provided firmware type and version. All other parameters will be ignored.";
- TCLAP::SwitchArg print_firmware_defaults_arg("p", "print-firmware-defaults", arg_description_stream.str());
-
// -l --log-level
std::vector<std::string> log_levels_vector;
log_levels_vector.push_back("NOSET");
@@ -228,55 +229,49 @@ int run_arc_straightener(int argc, char* argv[])
cmd.add(max_arc_segment_mm_arg);
cmd.add(print_firmware_defaults_arg);
- // Parse the argv array.
+ // First, we need to see if the user wants to print firmware defaults
+ help_cmd.add(firmware_type_arg);
+ help_cmd.add(firmware_version_arg);
+ help_cmd.add(print_firmware_defaults_arg);
+ help_cmd.setExceptionHandling(false);
+ // parse the help requests
+ try {
+ help_cmd.parse(argc, argv);
+
+ if (print_firmware_defaults_arg.isSet())
+ {
+ std::string firmware_type_string = firmware_type_arg.getValue();
+ std::string firmware_version_string = firmware_version_arg.getValue();
+ print_firmware_defaults(firmware_type_string, firmware_version_string, firmware_version_arg.getName());
+ return 0;
+ }
+ }
+ catch (TCLAP::ArgException& exc)
+ {
+ if (exc.argId() == "Argument: " + firmware_type_arg.toString()
+ || exc.argId() == "Argument: " + firmware_version_arg.toString())
+ {
+ // This will raise an exit exception
+ cmd.getOutput()->failure(cmd, exc);
+ }
+ }
+
+ // End print firmware defaults
+
+ // Parse the argv array after resetting any used parameters.
+ firmware_type_arg.reset();
+ firmware_version_arg.reset();
cmd.parse(argc, argv);
// Ok! Now let's see what firmware and version were selected, then we can start adding parameters
// First, Set the firmware type
std::string firmware_type_string = firmware_type_arg.getValue();
- for (int i = 0; i < NUM_FIRMWARE_TYPES; i++)
- {
- if (firmware_type_names[i] == firmware_type_string)
- {
- args.firmware_args.firmware_type = static_cast<firmware_types>(i);
- }
- }
+ firmware_types firmware_type = static_cast<firmware_types>(get_firmware_type_from_string(firmware_type_string));
+
// Now set the version
// Set the firmware version, and check to make sure that the version supplied is supported.
std::string firmware_version_string = firmware_version_arg.getValue();
- switch (args.firmware_args.firmware_type)
- {
- case firmware_types::MARLIN_1:
- if (!marlin_1_firmware.is_valid_version(firmware_version_string))
- {
- throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg.getName(), "'" + firmware_version_string + "' is not a valid version for " + firmware_type_string + " firmware type.");
- }
- break;
- case firmware_types::MARLIN_2:
- if (!marlin_2_firmware.is_valid_version(firmware_version_string))
- {
- throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg.getName(), "'" + firmware_version_string + "' is not a valid version for " + firmware_type_string + " firmware type.");
- }
- break;
- case firmware_types::REPETIER:
- if (!repetier_firmware.is_valid_version(firmware_version_string))
- {
- throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg.getName(), "'" + firmware_version_string + "' is not a valid version for " + firmware_type_string + " firmware type.");
- }
- break;
- case firmware_types::PRUSA:
- if (!prusa_firmware.is_valid_version(firmware_version_string))
- {
- throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg.getName(), "'" + firmware_version_string + "' is not a valid version for " + firmware_type_string + " firmware type.");
- }
- break;
- case firmware_types::SMOOTHIEWARE:
- if (!smoothieware_firmware.is_valid_version(firmware_version_string))
- {
- throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg.getName(), "'" + firmware_version_string + "' is not a valid version for " + firmware_type_string + " firmware type.");
- }
- break;
- }
+ is_firmware_version_valid_for_type(firmware_type_string, firmware_version_string, firmware_version_arg.getName());
args.firmware_args.version = firmware_version_string;
// now that we have the firmware type and version, we can extract the default arguments and override any settings that are supplied
@@ -304,13 +299,16 @@ int run_arc_straightener(int argc, char* argv[])
break;
}
- // see if the user want's to see the default settings
- if (print_firmware_defaults_arg.getValue())
+
+
+ // See if the source parameter is included
+ bool isSourceIncluded = source_arg.isSet();
+
+ // if the source parameter isn't set, we have to complain
+ if (!isSourceIncluded)
{
- std::cout << "Showing arguments and defaults for " << firmware_type_string << " ("<< firmware_version_string << ")\n";
- std::cout << "Available argument for firmware: " << get_available_arguments_string(args.firmware_args.get_available_arguments()) << "\n";
- std::cout << "Default " << args.firmware_args.get_argument_description();
- return 0;
+ std::cout << "The <source> parameter is required. Please specify a file to convert.";
+ return 0;
}
// Get the value parsed by each arg.
args.source_path = source_arg.getValue();
@@ -539,4 +537,108 @@ std::string get_available_arguments_string(std::vector<std::string> firmware_arg
available_argument_string += "--" +utilities::replace(*it, "_", "-");
}
return available_argument_string;
+}
+
+int get_firmware_type_from_string(std::string firmware_type)
+{
+ for (int i = 0; i < NUM_FIRMWARE_TYPES; i++)
+ {
+ if (firmware_type_names[i] == firmware_type)
+ {
+ return i;
+ }
+ }
+ // We should never get here if we properly limited the argument values
+ return static_cast<firmware_types>(DEFAULT_FIRMWARE_TYPE);
+}
+
+bool is_firmware_version_valid_for_type(std::string firmware_type_string, std::string firmware_version, std::string firmware_version_arg_name)
+{
+ firmware_types firmware_type = static_cast<firmware_types>(get_firmware_type_from_string(firmware_type_string));
+ // Create an instance of all supported firmware types using the default args
+ arc_interpolation_args args;
+ marlin_1 marlin_1_firmware(args.firmware_args);
+ marlin_2 marlin_2_firmware(args.firmware_args);
+ repetier repetier_firmware(args.firmware_args);
+ prusa prusa_firmware(args.firmware_args);
+ smoothieware smoothieware_firmware(args.firmware_args);
+
+ switch (firmware_type)
+ {
+ case firmware_types::MARLIN_1:
+ if (!marlin_1_firmware.is_valid_version(firmware_version))
+ {
+ throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg_name, "'" + firmware_version + "' is not a valid version for " + firmware_type_string + " firmware type.");
+ }
+ break;
+ case firmware_types::MARLIN_2:
+ if (!marlin_2_firmware.is_valid_version(firmware_version))
+ {
+ throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg_name, "'" + firmware_version + "' is not a valid version for " + firmware_type_string + " firmware type.");
+ }
+ break;
+ case firmware_types::REPETIER:
+ if (!repetier_firmware.is_valid_version(firmware_version))
+ {
+ throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg_name, "'" + firmware_version + "' is not a valid version for " + firmware_type_string + " firmware type.");
+ }
+ break;
+ case firmware_types::PRUSA:
+ if (!prusa_firmware.is_valid_version(firmware_version))
+ {
+ throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg_name, "'" + firmware_version + "' is not a valid version for " + firmware_type_string + " firmware type.");
+ }
+ break;
+ case firmware_types::SMOOTHIEWARE:
+ if (!smoothieware_firmware.is_valid_version(firmware_version))
+ {
+ throw new TCLAP::ArgException("Unknown Version Exception", firmware_version_arg_name, "'" + firmware_version + "' is not a valid version for " + firmware_type_string + " firmware type.");
+ }
+ break;
+ }
+}
+
+void print_firmware_defaults(std::string firmware_type_string, std::string firmware_version_string, std::string firmware_version_arg_name)
+{
+ arc_interpolation_args args;
+ marlin_1 marlin_1_firmware(args.firmware_args);
+ marlin_2 marlin_2_firmware(args.firmware_args);
+ repetier repetier_firmware(args.firmware_args);
+ prusa prusa_firmware(args.firmware_args);
+ smoothieware smoothieware_firmware(args.firmware_args);
+
+
+ firmware_types firmware_type = static_cast<firmware_types>(get_firmware_type_from_string(firmware_type_string));
+ args.firmware_args.firmware_type = firmware_type;
+ is_firmware_version_valid_for_type(firmware_type_string, firmware_version_string, firmware_version_arg_name);
+ args.firmware_args.version = firmware_version_string;
+
+ // now that we have the firmware type and version, we can extract the default arguments and override any settings that are supplied
+ switch (args.firmware_args.firmware_type)
+ {
+ case firmware_types::MARLIN_1:
+ marlin_1_firmware.set_arguments(args.firmware_args);
+ args.firmware_args = marlin_1_firmware.get_default_arguments_for_current_version();
+ break;
+ case firmware_types::MARLIN_2:
+ marlin_2_firmware.set_arguments(args.firmware_args);
+ args.firmware_args = marlin_2_firmware.get_default_arguments_for_current_version();
+ break;
+ case firmware_types::REPETIER:
+ repetier_firmware.set_arguments(args.firmware_args);
+ args.firmware_args = repetier_firmware.get_default_arguments_for_current_version();
+ break;
+ case firmware_types::PRUSA:
+ prusa_firmware.set_arguments(args.firmware_args);
+ args.firmware_args = prusa_firmware.get_default_arguments_for_current_version();
+ break;
+ case firmware_types::SMOOTHIEWARE:
+ smoothieware_firmware.set_arguments(args.firmware_args);
+ args.firmware_args = smoothieware_firmware.get_default_arguments_for_current_version();
+ break;
+ }
+
+ std::cout << "Showing arguments and defaults for " << firmware_type_string << " (" << firmware_version_string << ")\n";
+ std::cout << "Available argument for firmware: " << get_available_arguments_string(args.firmware_args.get_available_arguments()) << "\n";
+ std::cout << "Default " << args.firmware_args.get_argument_description();
} \ No newline at end of file