NX获取特征名称使用UF_MODL_ask_feat_name这个接口,接口说明里有一段话:

Returns a character string containing the feature type and time stamp of the feature passed into the function. The time stamp refers to the order of creation. For example, if you created two blocks they would be time stamped as BLOCK(0) and BLOCK(1).

所以在获取名称时,NX会根据时间顺序自动加上序号,就像上面所说的BLOCK(0)、BLOCK(1)等。那如果想获取无时间戳的名称怎么实现呢?NX提供了一个获取特征时间戳的接口UF_MODL_ask_time_stamp_of_feature,由此可以获取时间序号进行比对,然后从名称中将时间戳去除掉即可。代码实现如下:

 1 char* strrstr(const char *dst, const char *src)
2 {
3 if ((NULL == dst) || (NULL == src))
4 {
5 return (char*)dst;
6 }
7
8 const char *pdst = dst;
9 const char *psrc = src;
10 char *right= NULL;
11 while (*dst)
12 {
13 while (*pdst == *psrc)
14 {
15 if (*pdst== '\0')
16 return right=(char *)dst;
17 else
18 {
19 pdst++;
20 psrc++;
21 }
22 }
23 if (*psrc == '\0')
24 right = (char *)dst;
25 pdst = ++dst;
26 psrc = src;
27 }
28
29 return right;
30 }
31
32 void UF_MODL_ask_feat_name_no_stamp(tag_t feature_tag,char* name)
33 {
34 if ((NULL_TAG == feature_tag) || (NULL == name))
35 {
36 return ;
37 }
38
39 char* featureName = NULL;
40 UF_MODL_ask_feat_name(feature_tag,&featureName);
41
42 if (NULL == featureName)
43 {
44 return;
45 }
46
47 int index = 0;
48 UF_MODL_ask_time_stamp_of_feature(feature_tag,&index);
49 char timeStamp[35] = {0};
50 sprintf_s(timeStamp,"(%d)",index);
51
52 //应该从后往前找,而非strstr
53 char* subStr = strrstr(featureName, timeStamp);
54 if (subStr)
55 {
56 memmove(name, featureName, subStr - featureName);
57 }
58
59 UF_free(featureName);
60 }

当然还有更暴力的手法,就是获取名称之后,从后往前找'(',找到之后,将'('之前的内容返回即是名称,这个方法代码更简洁

 1 void UF_MODL_ask_feat_name_no_stamp(tag_t feature_tag,char* name)
2 {
3 if ((NULL_TAG == feature_tag) || (NULL == name))
4 {
5 return ;
6 }
7
8 char* featureName = NULL;
9 UF_MODL_ask_feat_name(feature_tag,&featureName);
10
11 if (NULL == featureName)
12 {
13 return;
14 }
15
16 //从后往前找'('
17 char* subStr = strrchr(featureName, '(');
18 if (subStr)
19 {
20 memmove(name, featureName, subStr - featureName);
21 }
22
23 UF_free(featureName);
24 }

以上方法任选其一均可,由于两种方法都依赖'('字符,且NX添加的时间戳必须是在名称最后,所以从鲁棒性来讲是一样的,我自己更偏向第二种方法。期待NX以后提供一个可以获取无时间戳的接口。

获取NX特征名称(无时间戳)的更多相关文章

  1. NX二次开发-UFUN输入表达式名称,获取它的名称和值UF_MODL_ask_exp

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建一个新的表达式,有TAG tag_t ...

  2. 获取NX装配结构信息

    最近在做一个项目,需要获取NX装配结构信息,这里把代码分享给大家,希望对各位有帮助,注意以下几点: 1)代码获取了PART的属性.表达式等,因此一些细节可能需要您根据实际情况修改. 2)读写XML用的 ...

  3. DEDECMS中,获取当前栏目名称

    获取当前栏目名称 {dede:field name='typeurl' function=”GetTypeName(@me)”/} 指的是当前栏目的URL地址 {dede:field name='ty ...

  4. Winform获取当前程序名称或路径

    以下几种方法获取当前程序名称或路径: // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory // 获取模块的完整路径.      // 获 ...

  5. Java获取精确到秒的时间戳(转)

    1.时间戳简介: 时间戳的定义:通常是一个字符序列,唯一地标识某一刻的时间.数字时间戳技术是数字签名技术一种变种的应用.是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01 ...

  6. dede织梦栏目页和文章页中获取当前栏目名称方法

    一般情况下,在dede织梦系统中列表页.栏目页和文章页中获取当前所在栏目名称只需要代码:{dede:type}[field:typename]{/dede:type}即可,不需要定义ID,默认的就是当 ...

  7. Android BLE与终端通信(一)——Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址

    Android BLE与终端通信(一)--Android Bluetooth基础API以及简单使用获取本地蓝牙名称地址 Hello,工作需要,也必须开始向BLE方向学习了,公司的核心技术就是BLE终端 ...

  8. JS 获取本月第一天零点时间戳并转化成yy-mm-dd

    JS 获取本月第一天零点时间戳并转化成yy-mm-dd 格式 <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  9. dedecms获取顶级栏目名称、二级栏目名称实现方法 转

    织梦DEDECMS文章.栏目页获取当前页面顶级栏目名称的方法 在用织梦做一些项目时,时常会碰到需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} ...

随机推荐

  1. Istio的流量管理(实操三)

    Istio的流量管理(实操三) 涵盖官方文档Traffic Management章节中的egress部分.其中有一小部分问题(已在下文标注)待官方解决. 目录 Istio的流量管理(实操三) 访问外部 ...

  2. idea创建mybatis的逆向工程:generator

    1在工程的目录下配置mybatis-generator插件 <build> <plugins> <!-- mybatis逆向工程 --> <plugin> ...

  3. JavaScript中pipe实战

    JavaScript中pipe原理 代码示例 const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x); 原理 一行代码 ...

  4. vue刷新数组

    困扰我两天的问题被一行代码解决了!!! 最近在做某个功能时用到了v-for,页面内容都是根据父页面传递过来的数组生成的,但是当我改变数组内容时页面不会跟着改变.这个问题足足困扰了我两天时间,最终下面的 ...

  5. 阿里云体验实验室 教你《搭建Hadoop环境》

    体验平台简介 面向开发者和中小企业打造的一站式.全云端的开发平台,打开浏览器就可以开发.调试.上线,所测即所得,并结合无服务器的模式,重新定义云原生时代的研发工作方法论.旨在降低开发者上手成本和中小企 ...

  6. 《spring源码解读》 - IoC 之解析 import 标签

    在上一文中我们分析了注册 BeanDefinition 的过程,在其中我们了解到在解析跟节点和子节点时分两种情况,对于默认名称空间的标签我们通过 DefaultBeanDefinitionDocume ...

  7. 【Linux利用远程SSH连接】SecureCRT中文出现乱码解决办法 Linux服务器技术

    1. 修改远程linux机器的配置   vim /etc/sysconfig/i18n   把LANG改成支持UTF-8的字符集   如:   LANG="zh_CN.UTF-8″   或者 ...

  8. android 数据绑定(6)自定义绑定方法、双向数据绑定

    1.官方文档 https://developer.android.com/topic/libraries/data-binding/binding-adapters https://developer ...

  9. Tesseract OCR 安装尝试

    1.简介 Tesseract是一个图像识别项目,将图中的文字识别出来.将一个.jpg .png 等等 的图片作为输入,.txt作为识别内容输出 Tesseract项目GitHub地址 2.安装 你可以 ...

  10. Codeforces Round #669 (Div. 2)A-C题解

    A. Ahahahahahahahaha 题目:http://codeforces.com/contest/1407/problem/A 题解:最多进行n/2的操作次数,我们统计这n个数中1的个数,是 ...