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以后提供一个可以获取无时间戳的接口。

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    eclipse中向左缩进快捷键
    如何在Eclipse RCP中使用第三方包
    Eclipse RCP中Viewer交互的三种方式/Make your Eclipse applications richer with view linking
    【技术应用】vs2010 BCGControlBar 静态链编 link2001
    【技术应用】网页信息抓取与分析概要
    【技术应用】vs2010 libjingle login例子
    【技术应用】visual studio 2010 + chromium 更改代码 去掉地址栏
    【敏捷开发实践】起航
    【技术应用】vs2010 下编译 libjingle 库
    【技术应用】visual studio 2010 + chromium 下载编译
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12753437.html
Copyright © 2011-2022 走看看