注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

NXOpen图层操作  

2014-05-23 15:14:46|  分类: UG NX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

头文件uf_layer.h中包含了操作图层的一系列函数,这些函数能够完成如下工作:

  • 查询工作图层;
  • 查询分类名称,分类成员图层,以及其描述;
  • 查询图层状态;
  • 遍历图层;
  • 编辑分类描述;
  • 编辑分类下的图层;
  • 设置图层状态;
  • 创建、查询、或者编辑图层分类。

1. 查询和设置图层状态

图层的状态

NX中最多有256个图层,头文件中的定义如下:

#define UF_LAYER_MIN_LAYER (1) 
#define UF_LAYER_MAX_LAYER (256)

图层有四种状态:工作,活动,不活动和参考图层,对应的定义如下:

#define UF_LAYER_WORK_LAYER 1 
#define UF_LAYER_ACTIVE_LAYER 2 
#define UF_LAYER_REFERENCE_LAYER 3 
#define UF_LAYER_INACTIVE_LAYER 4
与图层状态相关的是一个结构体UF_LAYER_status_info_s,也被定义为UF_LAYER_status_info_t类型,定义如下:
struct UF_LAYER_status_info_s 
{ 
   int  layer_number;
   int  layer_status;
}; 
其中layer_number是图层值,介于UF_LAYER_MIN_LAYER和UF_LAYER_MAX_LAYER之间,亦即1-256(可包括),layer_status就是图层状态,就是前面提到的四种之一。
相关的函数有UF_LAYER_ask_work_layer、UF_LAYER_ask_status和UF_LAYER_set_status,第一个函数查询工作图层,后面两个则分别是查询和设置给定的图层状态。
下面的测试代码用于查询工作图层,并将下一个图层作为工作图层:
void AskAndSetWorkLayer()
{
    int t;
    char msg[80];
    UF_LAYER_ask_work_layer(&t);
    sprintf_s(msg,"Work Layer is: %d",t);
    uc1601(msg,1);
    t++;
    if(t>UF_LAYER_MAX_LAYER)
        t=UF_LAYER_MIN_LAYER;
    UF_LAYER_set_status(t,UF_LAYER_WORK_LAYER);
    UF_LAYER_ask_work_layer(&t);
    sprintf_s(msg,"Work Layer is: %d",t);
    uc1601(msg,1);
}

另外一个比较有意思的函数是UF_LAYER_set_all_but_work,也是用于设置状态的,但是是除去工作图层之后的其他图层。与设置状态相关的还有UF_LAYER_set_many_layers_status函数,这个比较复杂。

2. 遍历图层

使用函数UF_LAYER_cycle_by_layer遍历一个图层,这里遍历的意思指查询位于本图层下的所有对象,函数原型如下:

int UF_LAYER_cycle_by_layer(int layer_number, tag_t * object_tag)
第一个参数提供待查询的图层号,值为0-256,这时肯定有人会问,图层号不是只有1-256之间吗?是的,这里多的0并不是指的图层,而是查询所有图层。而第二个参数则是所查询到的对象的标识,在使用的时候,必须传递给一个为NULL_TAG的标识,这样能让程序知道如何工作,在第一次调用该函数的时候,返回第一个查找到的对象的标识,然后下一次调用的时候则是查找下一个对象标识,等所有的对象都查询完毕,则该变量被设置为NULL_TAG,表明查询完毕。
注意:在查询循环中,切记不要试图删除对象,这会导致查询下一个对象时出错。
下面的测试代码阐明如何查询图层22中的所有对象。
void AskObjectsOnLayer22()
{
    int t=-1;
    char msg[80];
    tag_t tag_obj=NULL_TAG;
    do 
    {
        UF_LAYER_cycle_by_layer(22,&tag_obj);
        t++;
    } while (tag_obj!=NULL_TAG);
    sprintf_s(msg,"Total Object(s) on Layer 22: %d",t);
    uc1601(msg,1);
}
由于采用的是do…while循环,因此在使用时应将统计数目设置为-1。
3. 与分类相关的函数
在NX中,一个或者多个图层可以形成一组,也就是分类的概念,这在NX的界面中,可以使用如下方式看到,Ctrl+L,然后在图层设置中选中“类别显示”,即可看到NX中预定义的分类:
image
NX中预定义好了许多图层分类,这将有助于模型文件的管理,例如,根据NX推荐的做法,草图应归于21-60层,基准应位于61-80层(NX创建的基准坐标系就是位于61层)等,本人所在的公司就是按这个要求来执行的。
接下来我们看看与图层分类相关的一些结构和函数。结构体UF_LAYER_category_info_s,也被用作UF_LAYER_category_info_t,其定义如下:
struct UF_LAYER_category_info_s 
{ 
   char name[MAX_ENTITY_NAME_SIZE+1];
   logical layer_mask[UF_LAYER_MAX_LAYER]; 
   char descr[UF_LAYER_CAT_DESC_LEN+1];  
};
其中第一个参数是分类的名称,其长度不应超过实体名称长度(128),第二个参数决定1-256号图层是否属于该图层,如果对应位为TRUE,例如layer_mask[0]=TRUE,则1号图层属于该分类,如果layer_mask[134]=FALSE,则表明该135号图层不属于该分类。第三个参数是分类描述,简单介绍该分类的用途,或者其他信息,长度不超过80。
对分类的操作,无外乎创建、查询和编辑等。先说说创建图层分类。
函数UF_LAYER_create_category用于创建一个分类,函数原型如下:
int UF_LAYER_create_category(UF_LAYER_category_info_p_t category_info, tag_t * category)
第一个参数就是前面提到过的结构体,该结构体包含了一个图层分类应该具有的三要素:名称,所包含的图层,以及描述,第二个参数则返回函数所创建的图层分类标识。下面的测试代码创建了一个图层,图层中包括了11,21,31,41号图层。
void CreateCategory()
{
    char Cname[MAX_ENTITY_NAME_SIZE+1]="LEMNISCATE";
    logical Clayer_mask[UF_LAYER_MAX_LAYER]; 
    char Cdescr[UF_LAYER_CAT_DESC_LEN+1]="Created By Lemniscate";
    UF_LAYER_category_info_t cate;
    strcpy_s(cate.name,Cname);
    strcpy_s(cate.descr,Cdescr);   
    for(int i=0;i<UF_LAYER_MAX_LAYER;i++)
        cate.layer_mask[i]=FALSE;
    cate.layer_mask[10]=TRUE;
    cate.layer_mask[20]=TRUE;
    cate.layer_mask[30]=TRUE;
    cate.layer_mask[40]=TRUE;
    tag_t Tcat=NULL_TAG;
    UF_LAYER_create_category(&cate,&Tcat);
}
运行效果如下:
1
与图层分类中三要素相对应地,图层分类相关的编辑函数有三个,即对名称、图层和描述的编辑,函数分别为UF_LAYER_edit_category_name、UF_LAYER_edit_category_layer和UF_LAYER_edit_category_descr,这里就不展开细说。 
图层分类的查询函数有两个,UF_LAYER_ask_category_tag和UF_LAYER_ask_category_info,前者根据图层分类名称查询其图层分类标识,后者则是根据图层分类标识,去填充与之相关的UF_LAYER_category_info_t类型。
最后需要提到的是,以前与图层分类操作的三个函数是uc5007(被UF_LAYER_create_category取代),uc5008(被UF_LAYER_ask_category_info取代),以及uc5009(被UF_LAYER_edit_category_layer取代),不应该使用uc5007-5009这三个函数,而是采用新的函数。
  评论这张
 
阅读(1031)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016