zoukankan      html  css  js  c++  java
  • 获取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以后提供一个可以获取无时间戳的接口。

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12753437.html
Copyright © 2011-2022 走看看