int main(int argc, char **argv) { #if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) //Lower the process priority on linux and mac. setpriority(PRIO_PROCESS, 0, 10); #endif signal(SIGFPE, signal_FPE); GCodeExport gcode; ConfigSettings config; int fileNr = 0; config.filamentDiameter = 2890; config.filamentFlow = 100; config.initialLayerThickness = 300; config.layerThickness = 100; config.extrusionWidth = 400; config.insetCount = 2; config.downSkinCount = 6; config.upSkinCount = 6; config.initialSpeedupLayers = 4; config.initialLayerSpeed = 20; config.printSpeed = 50; config.infillSpeed = 50; config.moveSpeed = 200; config.fanFullOnLayerNr = 2; config.skirtDistance = 6000; config.skirtLineCount = 1; config.skirtMinLength = 0; config.sparseInfillLineDistance = 100 * config.extrusionWidth / 20; config.infillOverlap = 15; config.objectPosition.X = 102500; config.objectPosition.Y = 102500; config.objectSink = 0; config.supportAngle = -1; config.supportEverywhere = 0; config.supportLineDistance = config.sparseInfillLineDistance; config.supportExtruder = -1; config.supportXYDistance = 700; config.supportZDistance = 150; config.retractionAmount = 4500; config.retractionSpeed = 45; config.retractionAmountExtruderSwitch = 14500; config.retractionMinimalDistance = 1500; config.minimalExtrusionBeforeRetraction = 100; config.enableCombing = 1; config.multiVolumeOverlap = 0; config.minimalLayerTime = 5; config.minimalFeedrate = 10; config.coolHeadLift = 1; config.fanSpeedMin = 100; config.fanSpeedMax = 100; config.raftMargin = 5000; config.raftLineSpacing = 1000; config.raftBaseThickness = 0; config.raftBaseLinewidth = 0; config.raftInterfaceThickness = 0; config.raftInterfaceLinewidth = 0; config.spiralizeMode = 0; config.fixHorrible = 0; config.gcodeFlavor = GCODE_FLAVOR_REPRAP; config.startCode = "M109 S210 ;Heatup to 210C\n" "G21 ;metric values\n" "G90 ;absolute positioning\n" "G28 ;Home\n" "G1 Z15.0 F300 ;move the platform down 15mm\n" "G92 E0 ;zero the extruded length\n" "G1 F200 E5 ;extrude 5mm of feed stock\n" "G92 E0 ;zero the extruded length again\n"; config.endCode = "M104 S0 ;extruder heater off\n" "M140 S0 ;heated bed heater off (if you have it)\n" "G91 ;relative positioning\n" "G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n" "G1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\n" "G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n" "M84 ;steppers off\n" "G90 ;absolute positioning\n"; fprintf(stderr,"Cura_SteamEngine version %s\n", VERSION); for(int argn = 1; argn < argc; argn++) { char* str = argv[argn]; if (str[0] == '-') { for(str++; *str; str++) { switch(*str) { case 'h': print_usage(); exit(1); case 'v': verbose_level++; break; case 'b': argn++; binaryMeshBlob = fopen(argv[argn], "rb"); break; case 'o': argn++; gcode.setFilename(argv[argn]); if (!gcode.isValid()) { logError("Failed to open %s for output.\n", argv[argn]); exit(1); } break; case 's': { argn++; char* valuePtr = strchr(argv[argn], '='); if (valuePtr) { *valuePtr++ = '\0'; if (!config.setSetting(argv[argn], valuePtr)) printf("Setting found: %s %s\n", argv[argn], valuePtr); } } break; case 'm': argn++; sscanf(argv[argn], "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &config.matrix.m[0][0], &config.matrix.m[0][1], &config.matrix.m[0][2], &config.matrix.m[1][0], &config.matrix.m[1][1], &config.matrix.m[1][2], &config.matrix.m[2][0], &config.matrix.m[2][1], &config.matrix.m[2][2]); break; default: logError("Unknown option: %c\n", *str); break; } } } else { if (!gcode.isValid()) { logError("No output file specified\n"); return 1; } gcode.addComment("Generated with Cura_SteamEngine %s", VERSION); processFile(argv[argn], config, gcode, fileNr == 0); fileNr ++; } } if (gcode.isValid()) { gcode.addFanCommand(0); gcode.setZ(maxObjectHeight + 5000); gcode.addMove(gcode.getPositionXY(), config.moveSpeed, 0); gcode.addCode(config.endCode); log("Print time: %d\n", int(gcode.getTotalPrintTime())); log("Filament: %d\n", int(gcode.getTotalFilamentUsed())); if (gcode.getFlavor() == GCODE_FLAVOR_ULTIGCODE) { char numberString[16]; sprintf(numberString, "%d", int(gcode.getTotalPrintTime())); gcode.replaceTagInStart("<__TIME__>", numberString); sprintf(numberString, "%d", int(gcode.getTotalFilamentUsed())); gcode.replaceTagInStart("<FILAMENT>", numberString); } } }
int main(int argc, char **argv) { #if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) //Lower the process priority on linux and mac. setpriority(PRIO_PROCESS, 0, 10); #endif signal(SIGFPE, signal_FPE); ConfigSettings config; fffProcessor processor(config); config.filamentDiameter = 2890; config.filamentFlow = 100; config.initialLayerThickness = 300; config.layerThickness = 100; config.extrusionWidth = 400; config.insetCount = 2; config.downSkinCount = 6; config.upSkinCount = 6; config.initialSpeedupLayers = 4; config.initialLayerSpeed = 20; config.printSpeed = 50; config.infillSpeed = 50; config.moveSpeed = 200; config.fanFullOnLayerNr = 2; config.skirtDistance = 6000; config.skirtLineCount = 1; config.skirtMinLength = 0; config.sparseInfillLineDistance = 100 * config.extrusionWidth / 20; config.infillOverlap = 15; config.objectPosition.X = 102500; config.objectPosition.Y = 102500; config.objectSink = 0; config.supportAngle = -1; config.supportEverywhere = 0; config.supportLineDistance = config.sparseInfillLineDistance; config.supportExtruder = -1; config.supportXYDistance = 700; config.supportZDistance = 150; config.retractionAmount = 4500; config.retractionSpeed = 45; config.retractionAmountExtruderSwitch = 14500; config.retractionMinimalDistance = 1500; config.minimalExtrusionBeforeRetraction = 100; config.enableOozeShield = 0; config.enableCombing = 1; config.wipeTowerSize = 0; config.multiVolumeOverlap = 0; config.minimalLayerTime = 5; config.minimalFeedrate = 10; config.coolHeadLift = 1; config.fanSpeedMin = 100; config.fanSpeedMax = 100; config.raftMargin = 5000; config.raftLineSpacing = 1000; config.raftBaseThickness = 0; config.raftBaseLinewidth = 0; config.raftInterfaceThickness = 0; config.raftInterfaceLinewidth = 0; config.spiralizeMode = 0; config.fixHorrible = 0; config.gcodeFlavor = GCODE_FLAVOR_REPRAP; memset(config.extruderOffset, 0, sizeof(config.extruderOffset)); config.startCode = "M109 S210 ;Heatup to 210C\n" "G21 ;metric values\n" "G90 ;absolute positioning\n" "G28 ;Home\n" "G1 Z15.0 F300 ;move the platform down 15mm\n" "G92 E0 ;zero the extruded length\n" "G1 F200 E5 ;extrude 5mm of feed stock\n" "G92 E0 ;zero the extruded length again\n"; config.endCode = "M104 S0 ;extruder heater off\n" "M140 S0 ;heated bed heater off (if you have it)\n" "G91 ;relative positioning\n" "G1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\n" "G1 Z+0.5 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\n" "G28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\n" "M84 ;steppers off\n" "G90 ;absolute positioning\n"; fprintf(stdout,"Cura_SteamEngine version %s\n", VERSION); for(int argn = 1; argn < argc; argn++) { char* str = argv[argn]; if (str[0] == '-') { for(str++; *str; str++) { switch(*str) { case 'h': print_usage(); exit(1); case 'v': verbose_level++; break; case 'b': argn++; binaryMeshBlob = fopen(argv[argn], "rb"); break; case 'o': argn++; if (!processor.setTargetFile(argv[argn])) { logError("Failed to open %s for output.\n", argv[argn]); exit(1); } break; case 's': { argn++; char* valuePtr = strchr(argv[argn], '='); if (valuePtr) { *valuePtr++ = '\0'; if (!config.setSetting(argv[argn], valuePtr)) printf("Setting not found: %s %s\n", argv[argn], valuePtr); } } break; case 'm': argn++; sscanf(argv[argn], "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &config.matrix.m[0][0], &config.matrix.m[0][1], &config.matrix.m[0][2], &config.matrix.m[1][0], &config.matrix.m[1][1], &config.matrix.m[1][2], &config.matrix.m[2][0], &config.matrix.m[2][1], &config.matrix.m[2][2]); break; default: logError("Unknown option: %c\n", *str); break; } } }else{ try { processor.processFile(argv[argn]); }catch(...){ printf("Unknown exception\n"); exit(1); } } } processor.finalize(); }
int main(int argc, char **argv) { #if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) //Lower the process priority on linux and mac. On windows this is done on process creation from the GUI. setpriority(PRIO_PROCESS, 0, 10); #endif //Register the exception handling for arithmic exceptions, this prevents the "something went wrong" dialog on windows to pop up on a division by zero. signal(SIGFPE, signal_FPE); ConfigSettings config; fffProcessor processor(config); logError("Cura_SteamEngine version %s\n", VERSION); if(!config.readSettings()) { logError("Default config '%s' not used\n", DEFAULT_CONFIG_PATH); } for(int argn = 1; argn < argc; argn++) { char* str = argv[argn]; if (str[0] == '-') { for(str++; *str; str++) { switch(*str) { case 'h': print_usage(); exit(1); case 'v': increaseVerboseLevel(); break; case 'p': enableProgressLogging(); break; case 'g': argn++; //Connect the GUI socket to the given port number. processor.guiConnect(atoi(argv[argn])); break; case 'b': argn++; //The binaryMeshBlob is depricated and will be removed in the future. binaryMeshBlob = fopen(argv[argn], "rb"); break; case 'o': argn++; if (!processor.setTargetFile(argv[argn])) { logError("Failed to open %s for output.\n", argv[argn]); exit(1); } break; case 'c': { // Read a config file from the given path argn++; if(!config.readSettings(argv[argn])) { logError("Failed to read config '%s'\n", argv[argn]); } } break; case 's': { //Parse the given setting and store it. argn++; char* valuePtr = strchr(argv[argn], '='); if (valuePtr) { *valuePtr++ = '\0'; if (!config.setSetting(argv[argn], valuePtr)) logError("Setting not found: %s %s\n", argv[argn], valuePtr); } } break; case 'm': //Read the given rotation/scale matrix argn++; sscanf(argv[argn], "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &config.matrix.m[0][0], &config.matrix.m[0][1], &config.matrix.m[0][2], &config.matrix.m[1][0], &config.matrix.m[1][1], &config.matrix.m[1][2], &config.matrix.m[2][0], &config.matrix.m[2][1], &config.matrix.m[2][2]); break; default: logError("Unknown option: %c\n", *str); break; } } }else{ try { //Catch all exceptions, this prevents the "something went wrong" dialog on windows to pop up on a thrown exception. // Only ClipperLib currently throws exceptions. And only in case that it makes an internal error. processor.processFile(argv[argn]); }catch(...){ logError("Unknown exception\n"); exit(1); } } } //Finalize the processor, this adds the end.gcode. And reports statistics. processor.finalize(); }
int main(int argc, char **argv) { #if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) //Lower the process priority on linux and mac. On windows this is done on process creation from the GUI. setpriority(PRIO_PROCESS, 0, 10); #endif //Register the exception handling for arithmic exceptions, this prevents the "something went wrong" dialog on windows to pop up on a division by zero. signal(SIGFPE, signal_FPE); ConfigSettings config; fffProcessor processor(config); std::vector<std::string> files; cura::logError("Cura_SteamEngine version %s\n", VERSION); cura::logError("Copyright (C) 2014 David Braam\n"); cura::logError("\n"); cura::logError("This program is free software: you can redistribute it and/or modify\n"); cura::logError("it under the terms of the GNU Affero General Public License as published by\n"); cura::logError("the Free Software Foundation, either version 3 of the License, or\n"); cura::logError("(at your option) any later version.\n"); cura::logError("\n"); cura::logError("This program is distributed in the hope that it will be useful,\n"); cura::logError("but WITHOUT ANY WARRANTY; without even the implied warranty of\n"); cura::logError("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"); cura::logError("GNU Affero General Public License for more details.\n"); cura::logError("\n"); cura::logError("You should have received a copy of the GNU Affero General Public License\n"); cura::logError("along with this program. If not, see <http://www.gnu.org/licenses/>.\n"); if(!config.readSettings()) { cura::logError("Default config '%s' not used\n", DEFAULT_CONFIG_PATH); } for(int argn = 1; argn < argc; argn++) cura::log("Arg: %s\n", argv[argn]); for(int argn = 1; argn < argc; argn++) { char* str = argv[argn]; if (str[0] == '-') { for(str++; *str; str++) { switch(*str) { case 'h': print_usage(); exit(1); case 'v': cura::increaseVerboseLevel(); break; case 'p': cura::enableProgressLogging(); break; case 'g': argn++; //Connect the GUI socket to the given port number. processor.guiConnect(atoi(argv[argn])); break; case 'b': argn++; //The binaryMeshBlob is depricated and will be removed in the future. binaryMeshBlob = fopen(argv[argn], "rb"); break; case 'o': argn++; if (!processor.setTargetFile(argv[argn])) { cura::logError("Failed to open %s for output.\n", argv[argn]); exit(1); } break; case 'c': { // Read a config file from the given path argn++; if(!config.readSettings(argv[argn])) { cura::logError("Failed to read config '%s'\n", argv[argn]); } } break; case 's': { //Parse the given setting and store it. argn++; char* valuePtr = strchr(argv[argn], '='); if (valuePtr) { *valuePtr++ = '\0'; if (!config.setSetting(argv[argn], valuePtr)) cura::logError("Setting not found: %s %s\n", argv[argn], valuePtr); } } break; case 'm': //Read the given rotation/scale matrix argn++; sscanf(argv[argn], "%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf", &config.matrix.m[0][0], &config.matrix.m[0][1], &config.matrix.m[0][2], &config.matrix.m[1][0], &config.matrix.m[1][1], &config.matrix.m[1][2], &config.matrix.m[2][0], &config.matrix.m[2][1], &config.matrix.m[2][2]); break; case '-': try { //Catch all exceptions, this prevents the "something went wrong" dialog on windows to pop up on a thrown exception. // Only ClipperLib currently throws exceptions. And only in case that it makes an internal error. if (files.size() > 0) processor.processFile(files); files.clear(); }catch(...){ cura::logError("Unknown exception\n"); exit(1); } break; default: cura::logError("Unknown option: %c\n", *str); break; } } }else{ if (argv[argn][0] == '$') { try { //Catch all exceptions, this prevents the "something went wrong" dialog on windows to pop up on a thrown exception. // Only ClipperLib currently throws exceptions. And only in case that it makes an internal error. std::vector<std::string> tmp; tmp.push_back(argv[argn]); processor.processFile(tmp); }catch(...){ cura::logError("Unknown exception\n"); exit(1); } }else{ files.push_back(argv[argn]); } } } try { //Catch all exceptions, this prevents the "something went wrong" dialog on windows to pop up on a thrown exception. // Only ClipperLib currently throws exceptions. And only in case that it makes an internal error. if (files.size() > 0) processor.processFile(files); }catch(...){ cura::logError("Unknown exception\n"); exit(1); } //Finalize the processor, this adds the end.gcode. And reports statistics. processor.finalize(); return 0; }