队长的博客: 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. Day004 选择结构

    选择结构 if单选择结构(if) if双选择结构(if...else...) if多选择结构(if..else if...else) 嵌套的if结构 switch多选择结构 switch语句中的变量类 ...

  2. 【maven】mvn不是内部命令 也不是可运行的程序

    按解压.配置环境变量,重启cmd,还是出现这个问题 使用java -version确定是不是安装了jdk.因为maven是java开发,需要依赖jdk 将系统变量中Path的%MAVEM_HOME%\ ...

  3. 一、unittest介绍与基础使用

    一.unittest为单元测试框架,系统标准库 import unittest

  4. MySQL binlog_ignore_db 参数最全解析

    前言: 经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select.show等).注意默认情况下会记录所有库的操作,那么如果我们有另类需求 ...

  5. 为什么说Zoho CRM是最好的销售预测系统?

    在文章的开头,我们来讲讲什么是销售预测--销售预测是指利用销售管道中的商机.已完成的配额.有望完成目标的销售团队或个人等关键信息对产品的销售数量与销售金额进行预测的手段.企业在制定销售计划时的重要任务 ...

  6. 拿到列表的长度len(列表名)

    拿到列表的长度len(列表名),即元素个数 列表要放在括号里面

  7. Flutter 2.2 更新详解

    Flutter 2.2 版已正式发布!要获取新版本,您只需切换到 stable 渠道并更新目前安装的 Flutter,或前往 flutter.cn/docs/get-started 从头开始安装. 虽 ...

  8. reboot 就是 poweroff 然后power on

    halt Shut down and halt the system poweroff Shut down and power-off the system reboot [ARG] Shut dow ...

  9. keepalived的脑裂问题与解决

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工 ...

  10. Ansible_常用文件模块使用详解

    一.Ansibel常用文件模块使用详解 1.file模块 1️⃣:file模块常用的参数列表: path       被管理文件的路径 state状态常用参数: absent           删除 ...