NX二次开发 图纸模块相关函数

环境: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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值