#include "lc_global.h" #include #include "lc_application.h" #include "lc_colors.h" #include "lc_library.h" #include "lc_profile.h" #include "system.h" #include "console.h" #include "opengl.h" #include "project.h" #include "image.h" #include "mainwnd.h" #include "lc_shortcuts.h" lcApplication* g_App; lcApplication::lcApplication() { mProject = NULL; m_Library = NULL; mClipboard = NULL; } lcApplication::~lcApplication() { delete mClipboard; } void lcApplication::SetClipboard(lcFile* Clipboard) { delete mClipboard; mClipboard = Clipboard; gMainWindow->UpdatePaste(mClipboard != NULL); } bool lcApplication::LoadPiecesLibrary(const char* LibPath, const char* LibraryInstallPath, const char* LibraryCachePath) { if (m_Library == NULL) m_Library = new lcPiecesLibrary(); if (LibPath && LibPath[0]) { if (m_Library->Load(LibPath, LibraryCachePath)) return true; } else { char* EnvPath = getenv("LEOCAD_LIB"); if (EnvPath && EnvPath[0]) { if (m_Library->Load(EnvPath, LibraryCachePath)) return true; } else { char CustomPath[LC_MAXPATH]; strcpy(CustomPath, lcGetProfileString(LC_PROFILE_PARTS_LIBRARY)); if (CustomPath[0]) { if (m_Library->Load(CustomPath, LibraryCachePath)) return true; } else if (LibraryInstallPath && LibraryInstallPath[0]) { char LibraryPath[LC_MAXPATH]; strcpy(LibraryPath, LibraryInstallPath); int i = strlen(LibraryPath) - 1; if ((LibraryPath[i] != '\\') && (LibraryPath[i] != '/')) strcat(LibraryPath, "/"); strcat(LibraryPath, "library.bin"); if (m_Library->Load(LibraryPath, LibraryCachePath)) { m_Library->mNumOfficialPieces = m_Library->mPieces.GetSize(); return true; } } } } return false; } void lcApplication::ParseIntegerArgument(int* CurArg, int argc, char* argv[], int* Value) { if (argc > (*CurArg + 1)) { (*CurArg)++; int val; if ((sscanf(argv[(*CurArg)], "%d", &val) == 1) && (val > 0)) *Value = val; else console.PrintWarning("Invalid value specified for the %s argument.", argv[(*CurArg) - 1]); } else { console.PrintWarning("Not enough parameters for the %s argument.", argv[(*CurArg) - 1]); } } void lcApplication::ParseStringArgument(int* CurArg, int argc, char* argv[], char** Value) { if (argc > (*CurArg + 1)) { (*CurArg)++; *Value = argv[(*CurArg)]; } else { console.PrintWarning("No path specified after the %s argument.", argv[(*CurArg) - 1]); } } bool lcApplication::Initialize(int argc, char* argv[], const char* LibraryInstallPath, const char* LibraryCachePath) { char* LibPath = NULL; // Image output options. bool SaveImage = false; bool ImageAnimation = false; bool ImageInstructions = false; bool ImageHighlight = false; int ImageWidth = lcGetProfileInt(LC_PROFILE_IMAGE_WIDTH); int ImageHeight = lcGetProfileInt(LC_PROFILE_IMAGE_HEIGHT); int ImageStart = 0; int ImageEnd = 0; char* ImageName = NULL; // File to open. char* ProjectName = NULL; // Parse the command line arguments. for (int i = 1; i < argc; i++) { char* Param = argv[i]; if (Param[0] == '-') { if ((strcmp(Param, "-l") == 0) || (strcmp(Param, "--libpath") == 0)) { ParseStringArgument(&i, argc, argv, &LibPath); } else if ((strcmp(Param, "-i") == 0) || (strcmp(Param, "--image") == 0)) { SaveImage = true; if ((argc > (i+1)) && (argv[i+1][0] != '-')) { i++; ImageName = argv[i]; } } else if ((strcmp(Param, "-w") == 0) || (strcmp(Param, "--width") == 0)) { ParseIntegerArgument(&i, argc, argv, &ImageWidth); } else if ((strcmp(Param, "-h") == 0) || (strcmp(Param, "--height") == 0)) { ParseIntegerArgument(&i, argc, argv, &ImageHeight); } else if ((strcmp(Param, "-f") == 0) || (strcmp(Param, "--from") == 0)) { ParseIntegerArgument(&i, argc, argv, &ImageStart); } else if ((strcmp(Param, "-t") == 0) || (strcmp(Param, "--to") == 0)) { ParseIntegerArgument(&i, argc, argv, &ImageEnd); } else if (strcmp(Param, "--animation") == 0) ImageAnimation = true; else if (strcmp(Param, "--instructions") == 0) ImageInstructions = true; else if (strcmp(Param, "--highlight") == 0) ImageHighlight = true; else if ((strcmp(Param, "-v") == 0) || (strcmp(Param, "--version") == 0)) { printf("LeoCAD Version " LC_VERSION_TEXT "\n"); printf("Compiled "__DATE__"\n"); return false; } else if ((strcmp(Param, "-?") == 0) || (strcmp(Param, "--help") == 0)) { printf("Usage: leocad [options] [file]\n"); printf(" [options] can be:\n"); printf(" -l, --libpath : Loads the Pieces Library from path.\n"); printf(" -i, --image : Saves a picture in the format specified by ext.\n"); printf(" -w, --width : Sets the picture width.\n"); printf(" -h, --height : Sets the picture height.\n"); printf(" -f, --from