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;
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nx二次开发中,出口函数是一个非常重要的概念。在nx二次开发中,每个功能模块都会有一个出口函数,用于控制模块的入口和出口。 出口函数的主要作用是将模块的核心功能与nx系统的其他模块进行连接,实现模块之间的数据交互和功能扩展。通过定义出口函数,我们可以将模块的数据输出、功能封装和业务逻辑的实现进行统一管理和调用。 在定义出口函数时,需要考虑以下几个方面: 1. 函数参数:根据模块的具体需求,设计合适的函数参数。参数可以是模块的输入数据、输出数据或者其他模块间的通信参数。 2. 返回值:出口函数可以返回模块处理后的结果,供其他模块使用。返回值可以是简单的数据类型,也可以是复杂的对象。 3. 函数命名:出口函数的命名应该具有代表性,方便其他开发人员理解模块的作用和功能。 4. 注释和文档:在定义出口函数时,要添加详细的注释和文档,方便其他开发人员理解函数的用途和使用方法。 在使用出口函数时,需要注意以下几点: 1. 函数调用:通过调用出口函数,可以实现模块的初始化、启动、停止和其他功能。在调用出口函数时,需要传入正确的参数,并对返回值进行处理。 2. 函数扩展:通过在出口函数中添加逻辑代码,可以扩展模块的功能。出口函数可以调用其他函数,实现更复杂的功能。 3. 错误处理:出口函数应该考虑各种异常情况,并进行合适的错误处理。错误处理可以返回错误码或抛出异常,通知调用方出现了异常情况。 总之,出口函数nx二次开发中扮演着重要的角色,能够连接各个功能模块,实现数据交互和功能扩展。合理设计和使用出口函数,可以提高开发效率,降低代码复杂度,实现系统的高效运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值