incoming:setup-sheets

This commit is contained in:
lovebird 2021-10-31 19:04:46 +01:00
parent 7e97bc25d3
commit e241cd20e5

159
.incoming/setup-sheets.cpp Normal file
View File

@ -0,0 +1,159 @@
#include <Core/CoreAll.h>
#include <CAM/CAMAll.h>
#ifdef _WINDOWS
#include <shlwapi.h>
#else
#include <stdlib.h>
#endif
using namespace adsk::core;
using namespace adsk::cam;
Ptr<UserInterface> ui;
extern "C" XI_EXPORT bool run(const char* context)
{
Ptr<Application> app = Application::get();
if (!app)
return false;
ui = app->userInterface();
if (!ui)
return false;
Ptr<Document> doc = app->activeDocument();
if (!doc)
return false;
Ptr<Products> products = doc->products();
if(!products)
return false;
Ptr<CAM> camProduct = products->itemByProductType("CAMProductType");
if (!camProduct)
{
ui->messageBox("There are no CAM operations in the active document. This script requires the active document to contain at least one CAM operation.",
"No CAM Operations Exist", MessageBoxButtonTypes::OKButtonType, MessageBoxIconTypes::CriticalIconType);
return false;
}
std::string outputFolder = camProduct->temporaryFolder();
SetupSheetFormats sheetFormat = SetupSheetFormats::HTMLFormat;
DialogResults dlgResults = ui->messageBox("View setup sheets when done?", "Generate Setup Sheets",
MessageBoxButtonTypes::YesNoButtonType,
MessageBoxIconTypes::QuestionIconType);
bool viewResults = dlgResults == DialogResults::DialogNo ? false : true;
int scenario = 3;
switch (scenario)
{
case 1:
{
ui->messageBox("Setup sheets for all operations will be generated.");
camProduct->generateAllSetupSheets(sheetFormat, outputFolder, viewResults);
}
break;
case 2:
{
ui->messageBox("Setup sheets for operations in the first setup will be generated.");
Ptr<Setups> setups = camProduct->setups();
if (!setups)
return false;
Ptr<Setup> setup = setups->item(0);
if (!setup)
return false;
camProduct->generateSetupSheet(setup, sheetFormat, outputFolder, viewResults);
}
break;
case 3:
{
ui->messageBox("A setup sheet for the first operation in the first setup will be generated.");
Ptr<Setups> setups = camProduct->setups();
if (!setups)
return false;
Ptr<Setup> setup = setups->item(0);
if (!setup)
return false;
// It is a set of Operations, Folders and Patterns.
Ptr<ObjectCollection> objects = setup->allOperations();
if (!objects)
return false;
if (objects->count() == 0)
{
ui->messageBox("There is not any operation in the first setup!");
return false;
}
Ptr<Base> baseObject = objects->item(0);
if (!baseObject)
return false;
Operation* pOperation = baseObject->query<Operation>();
if (!pOperation)
return false;
Ptr<Operation> operation(pOperation, false);
if (operation->hasToolpath())
{
camProduct->generateSetupSheet(operation, sheetFormat, outputFolder, viewResults);
}
else
{
ui->messageBox("This operation has no toolpath. A valid toolpath must exist in order for a setup sheet to be generated.");
return false;
}
}
break;
default:
break;
}
// Show output folder.
ui->messageBox("Setup Sheets have been generated in '" + outputFolder + "'.");
#ifdef _WINDOWS
ShellExecuteA(nullptr, "open", outputFolder.c_str(), nullptr, nullptr, SW_SHOWNORMAL);
#else
std::string command = "open " + outputFolder;
system(command.c_str());
#endif
// Active CAM workspace if it is not the active one.
if (ui->activeWorkspace()->name() != "CAM")
{
DialogResults result = ui->messageBox("Activate the CAM Workspace?", "CAM Workspace Activate",
MessageBoxButtonTypes::YesNoButtonType, MessageBoxIconTypes::QuestionIconType);
bool activeCAMWorkspace = result == DialogResults::DialogYes ? true : false;
if (activeCAMWorkspace)
{
Ptr<Workspace> camWorkspace = ui->workspaces()->itemById("CAMEnvironment");
camWorkspace->activate();
}
}
return true;
}
#ifdef XI_WIN
#include <windows.h>
BOOL APIENTRY DllMain(HMODULE hmodule, DWORD reason, LPVOID reserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#endif // XI_WIN