• 获取NX特征名称(无时间戳)


    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== '')
    16                 return right=(char *)dst;
    17             else
    18             {
    19                 pdst++;
    20                 psrc++;
    21             }
    22         }
    23         if (*psrc == '')
    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以后提供一个可以获取无时间戳的接口。

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    DOM BOM document window 区别
    cookie、localStorage和sessionStorage区别
    css实现九宫格
    三个提升网页性能技巧
    我们为什么在移动端项目中选择jQuery而不是Zepto
    SEO优化实践操作
    查询设计分析
    SQL Server常用元数据函数
    SQL Server数学函数
    SQL Server文本和图像函数
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12753437.html
Copyright © 2020-2023  润新知