队长的博客: 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. SQL注入,PreparedStatement和Statement

    代码区 还是一个工具类 代码: package cn.itcats.jdbc; import java.sql.Connection;import java.sql.DriverManager;imp ...

  2. JAVA教程 Java学习路线

  3. OO_Unit1_表达式求导

    CSDN链接 一.第一次作业 1.需求分析 简单多项式导函数 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16.19260817等. 幂函数 一般形式 由自变量x和指数组成,指数为 ...

  4. pass在if中

    pass在if中是停止if成立后的操作. 如 num=1 while num<=100: if num==50: pass        #当作先占位 elif num>=60 and n ...

  5. 白日梦的MySQL专题(第33篇):各种登陆MySQL的骚操作

    阅读原文 系列文章公众号首发,点击阅读原文 前置知识 我们想登陆到mysql中前提是肯定需要一个用户名和密码:比如 mysql -uroot -proot 在mysql中用户的信息会存放在 mysql ...

  6. Ansible流程控制

    Ansible流程控制 数据库操作问题: 数据库的操作问题,python需要依耐的模块MySQL-python . 数据库的操作 # 设置root的密码在,root的密码设置之后,创建用户和创建数据库 ...

  7. Ubuntu 获取升级信息失败。可能网络有问题

    升级Ubuntu系统时遇到的这个问题, 原因是默认的源不是国内的,而且还可能导致下载慢等问题. 1.备份源 cd /etc/apt/ sudo cp sources.list sources.list ...

  8. systemd 进程管理详解

    systemd进程管理 systemd管理的优势 1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...) 2.CentOS7 支持开机并行启动服务,显著提高开机 ...

  9. nosql数据库之Redis概念及基本操作

    一.概述 redis是一种nosql数据库(非关系型数据库),他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(st ...

  10. 3.socket编程示例

    #block_server.py 非阻塞IO示例#有个疑惑:下面的connfd的blockind要设置为True,不然会出错,待解决from socket import *from time impo ...