环境:Win10, VS2017,NX1907
1.获取所有图纸页对象
std::vector<tag_t> GetAllSheet()
{
int drawCount = 0;
tag_t* drawingTag = NULL;
UF_DRAW_ask_drawings(&drawCount, &drawingTag);
if (0 == drawCount)
{
return std::vector<tag_t>();
}
std::vector<tag_t> res;
for (int i = 0; i < drawCount; ++i)
{
res.push_back(drawingTag[i]);
}
return res;
}
2. 使用NX对话框,选择对象控件,选中某一个图纸节点时,获取的不是图纸对象,需要转化
//计算得到005-1@0,返回005-1
bool CalSheetUINodeName(tag_t sheetObj, std::string &sheetName)
{
sheetName = "";
if (NULL_TAG == sheetObj)
{
return false;
}
bool res = false;
std::string endKeyword = "@0"; //界面上选择的图纸会有后缀名字
std::string tmpName = GetObjName(sheetObj);
if (tmpName.size() > endKeyword.size())
{
std::string endValue = tmpName.substr(tmpName.size() - endKeyword.size());
if (endValue == endKeyword)
{
res = true;
sheetName = tmpName.substr(0, tmpName.size() - endKeyword.size());
}
}
return res;
}
3.判断是否图纸模块
bool IsInDafting()
{
int module = UF_APP_NONE;
UF_ask_application_module(&module);
return (module == UF_APP_DRAFTING);
}
4.进入图纸模块
void UDS::SwitchDraw()
{
NXOpen::Session::GetSession()->ApplicationSwitchImmediate("UG_APP_DRAFTING");
}
5. 打开图纸页
bool OpenSheet(tag_t sheet)
{
if (NULL_TAG == sheet)
{
return false;
}
NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display());
NXOpen::Drawings::DraftingDrawingSheet *draftingDrawingSheet1 = (dynamic_cast<NXOpen::Drawings::DraftingDrawingSheet *>(ToNXObj(sheet)));
if (NULL == draftingDrawingSheet1)
{
return false;
}
draftingDrawingSheet1->Open();
//更新视图
workPart->Views()->WorkView()->UpdateCustomSymbols();
workPart->Drafting()->SetTemplateInstantiationIsComplete(true);
return true;
}
6 图纸页导出图片
//窗口区域导出图片
//文件-导出-图像-(图形区域,png)
bool ExportImage(std::string exportPicPath)
{
NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display());
NXOpen::Gateway::ImageExportBuilder *imageExportBuilder1 = NXOpen::UI::GetUI()->CreateImageExportBuilder();
imageExportBuilder1->SetRegionMode(false);
std::vector<int> regiontopleftpoint1(2);
const int regiontopleftpoint1_initial_values[] = { 0, 0 };
regiontopleftpoint1.assign(regiontopleftpoint1_initial_values, regiontopleftpoint1_initial_values + 2);
imageExportBuilder1->SetRegionTopLeftPoint(regiontopleftpoint1);
imageExportBuilder1->SetRegionWidth(1);
imageExportBuilder1->SetRegionHeight(1);
imageExportBuilder1->SetFileFormat(NXOpen::Gateway::ImageExportBuilder::FileFormatsPng);
imageExportBuilder1->SetFileName(exportPicPath);
imageExportBuilder1->SetBackgroundOption(NXOpen::Gateway::ImageExportBuilder::BackgroundOptionsOriginal);
imageExportBuilder1->SetEnhanceEdges(false);
bool res = false;
try
{
NXOpen::NXObject *nXObject1 = imageExportBuilder1->Commit();
res = true;
}
catch (...)
{
}
imageExportBuilder1->Destroy();
return res;
}