队长的博客: https://www.cnblogs.com/nxopen2018/p/13174207.html

显示此对话框,点击可中断操作:

用到的ufun函数:

UF_ABORT_ask_flag_status 检查用户是否通过按CTRL+SHIFT+L键或在工作进程对话框中选择停止来发出中止请求
UF_ABORT_clear_abort 清除任何挂起的中止请求。如果处理了中止请求,则应该调用它。
UF_ABORT_disable_abort 禁用中止处理程序
UF_ABORT_enable_abort 启用中止处理程序

源码:

#include <uf.h>
#include <uf_ui.h>
#include <uf_abort.h>
#include <uf_modl.h>
extern DllExport void ufusr(char *param, int *returnCode, int rlen)
{
UF_initialize();
UF_ABORT_clear_abort();//清除标记位
UF_ABORT_enable_abort();//打开中断检测(对话框)
bool isUserClickWidget = false;
for (int i = 0; i < 200; i++)
{
//创建块
UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
double Corner_pt[3] = { i * 120, 0.0, 0.0 };//设置原点
char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
tag_t BlkTag = NULL_TAG;
UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);
logical logi;
UF_ABORT_ask_flag_status(&logi);//访问中断标记
if (logi)
{
//用户中断标记
UF_ABORT_clear_abort();//清除标记位
isUserClickWidget = true;
break;
}
}
if (isUserClickWidget)
{
uc1601("用户退出", 1);
}
else
{
uc1601("自然结束", 1);
}
UF_ABORT_disable_abort();//关闭中断检测(对话框)
UF_terminate(); } extern int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}

结果(自然结束):

结果(用户终止):

存在BUG:用户点击停止时,程序没有停止。最后自然结束。我们发现少创建了一个块:(后面分析原因)

编写测试程序,仅循环创建块:

#include <uf.h>
#include <uf_ui.h>
#include <uf_abort.h>
#include <uf_modl.h>
extern DllExport void ufusr(char *param, int *returnCode, int rlen)
{
UF_initialize(); for (int i = 0; i < 200; i++)
{
//创建块
UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
double Corner_pt[3] = { i * 120, 0.0, 0.0 };//设置原点
char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
tag_t BlkTag = NULL_TAG;
UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);
}
UF_terminate();
} extern int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}

结果:

可以看到即使我们不使用UF_ABORT_enable_abort();NX也会在UF_MODL_create_block1()时,自己弹出询问中断的对话框。并且我试过如果用户中断UF_MODL_create_block1()这个函数会返回一个值:66,代表:User abort(用户终止)

完善后的代码:

#include <uf.h>
#include <uf_ui.h>
#include <uf_abort.h>
#include <uf_modl.h>
extern DllExport void ufusr(char *param, int *returnCode, int rlen)
{
UF_initialize();
UF_ABORT_clear_abort();//清除标记位
UF(UF_ABORT_enable_abort());//打开中断检测(对话框)
bool isUserClickWidget = false;
int failcode = 0;
for (int i = 0; i < 200; i++)
{
//创建块
UF_FEATURE_SIGN Sign = UF_NULLSIGN;//设置布尔
double Corner_pt[3] = { i * 120, 0.0, 0.0 };//设置原点
char *Edge_Len[3] = { "100", "100", "100" };//设置长宽高
tag_t BlkTag = NULL_TAG;
failcode=UF_MODL_create_block1(Sign, Corner_pt, Edge_Len, &BlkTag);
//错误代码:66,错误原因:User abort
logical logi;
UF_ABORT_ask_flag_status(&logi);//访问中断标记
if ((logi)||(failcode))
{
//用户中断标记
UF_ABORT_clear_abort();//清除标记位
isUserClickWidget = true;
break;
}
}
if (isUserClickWidget)
{
uc1601("用户退出", 1);
if (failcode)
{
uc1601("创建块终止", 1);
}
}
else
{
uc1601("自然结束", 1);
}
UF_ABORT_disable_abort();//关闭中断检测(对话框)
UF_terminate(); } extern int ufusr_ask_unload(void)
{
return (UF_UNLOAD_IMMEDIATELY);
}

结果:

【转】【NX二次开发】UFUN进度中断,单击停止可中断此操作的更多相关文章

  1. NX二次开发-UFUN发射线函数UF_MODL_trace_a_ray的用法

    今天是国庆节,放假休息懒得动,没有出去玩,在家研究一下发射线函数UF_MODL_trace_a_ray.小弟以前在软件公司混的时候,当时我做的那个项目就用到了UF_MODL_trace_a_ray,当 ...

  2. NX二次开发-UFUN将工程图转成CGM和PDF文件UF_CGM_export_cgm

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  3. NX二次开发-UFUN获取NX系统默认导出CGM的选项设置UF_CGM_ask_default_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  4. NX二次开发-UFUN获取当前导出CGM选项设置UF_CGM_ask_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  5. NX二次开发-UFUN修改当前导出CGM文件选项设置UF_CGM_set_session_export_options

    文章转载自唐康林NX二次开发论坛,原文出处: http://www.nxopen.cn/thread-126-1-1.html 刚才有同学问到这个问题,如果是用NXOpen来做,直接录制一下就可以了: ...

  6. NX二次开发-UFUN计算两点距离UF_VEC3_distance

    NX11+VS2013 #include <uf.h> #include <uf_curve.h> #include <uf_vec.h> UF_initializ ...

  7. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded

    NX9+VS2012 //NX二次开发中常用拉伸函数为UF_MODL_create_extruded2,但是此函数不能拉伸片体, //想要拉伸片体用函数UF_MODL_create_extruded. ...

  8. NX二次开发-UFUN拉伸函数UF_MODL_create_extruded2

    NX9+VS2012 //NX二次开发中常用拉伸函数为UF_MODL_create_extruded2,但是此函数不能拉伸片体, //想要拉伸片体用函数UF_MODL_create_extruded. ...

  9. NX二次开发-UFUN和NXOpen结合开发中Tag_t对象与TaggedObject对象转换方法

    本文通过举四个例子来告诉大家在NX二次开发过程中会经常用到UFUN和NXOpen结合去开发,在UFUN中我们得到的是Tag_t对象,在NXOpen中得到的是TaggedObject对象,这两个是需要进 ...

  10. NX二次开发-Ufun API Example

    UF公共类型 UF_begin_timer计时函数 https://www.cnblogs.com/nxopen2018/p/10957135.html UF_end_timer计时函数 https: ...

随机推荐

  1. ajax提交session超时跳转页面使用全局的方法来处理

    来自:http://www.jb51.net/article/43770.htm 如果是ajax提交,超时时从服务器发出的跳转命令就不会起作用,所以如果是session超时,而且是在ajax请求,就在 ...

  2. php实现微信推送消息

    一.<?phpnamespace Org\Weixin;class OrderPush{ protected $appid; protected $secrect; protected $acc ...

  3. Linux 中如何使用 IP 命令

    老版本的 Linux 中都是使用 ifconfig 命令检查和配置网络接口,但是该命令目前已经没有维护了,取而代之的是 ip 命令 ip 命令和 ifconfig 命令很相似,但是 相比起来,ip命令 ...

  4. 【近取 Key】Alpha - v1.0 版本发布说明

    功能与特性 Alpha 版本虽然为本软件的第一代版本,但已基本覆盖了用户个人使用时的主要功能.除登陆注册与后台管理外,下文将分版块详细介绍面向用户的主要功能特性. 『产品主页』 潜在应用场景 场景 0 ...

  5. Beta——发布声明

    Beta阶段 1. 新功能: 介绍页面 用户点击软件右上角的 ? 按钮即可看到软件的操作说明! 项目模式 目前软件支持三种模式 空白表单模式.该模式可以生成基于模板的表单数据,也支持生成数据直接训练模 ...

  6. java集合-数组ArrayList

    1.简介 ArrayList是java集合框架常用的集合类之一,底层是基于数组来实现容量大小动态变化的. 2.类图(JDK 1.8) 下图是ArrayList实现的接口和继承的类关系图: public ...

  7. golang:指针理解总结

    指针的定义 指针是一个代表着某个内存地址的值.这个内存地址往往是在内存中存储的另一个变量的值的起始位置. go指针是提供操作数据的基本桥梁.因为go很多调用,往往复制一份对象,例如函数的参数,如果没有 ...

  8. Windows10查看电脑的USB接口是2.0还是3.0

    Windows10查看电脑的USB接口是2.0还是3.0原创小晓酱手记 最后发布于2019-08-22 16:09:48 阅读数 3662 收藏展开 同事要拷贝资料给我,问我电脑的USB接口是2.0还 ...

  9. 064.Python开发虚拟环境

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需要对于不同的工程使用不同 ...

  10. ubuntu中安装qgit工具-(转自Linux中国)

    QGit是一款由Marco Costalba用Qt和C++写的开源的图形界面 Git 客户端.它是一款可以在图形界面环境下更好地提供浏览版本历史.查看提交记录和文件补丁的客户端.它利用git命令行来执 ...