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

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    分区助手怎么调整磁盘分区的大小
    3dsmax2014的下载、安装与注册激活教程详解
    U深度U盘启动盘制作工具怎么用?U深度U盘启动盘制作工具使用教学
    CAD出现向程序发送命令时出现问题提示解决方法分享
    TeamViewer——可以实现在手机上随时远程控制你的电脑
    CPU-Z五大主要功能及使用方法初步了解
    vs中更改项目名称注意事项
    Oracle 存储过程例子返回记录集
    oracle 调用包体的函数并返回return值
    oracle 中更新update不成功的原因
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12753437.html
Copyright © 2011-2022 走看看