奇塔车饰 发表于 2015-3-20 14:49:06

UG二次开发_体素特征创建_创建块

本例参考《图表详解 UG NX 二次开发》莫蓉、常智勇等,因为版本不同,自己做了细微调整。
目标:在UG中创建一个块
实现:利用UG中的UF_MODL_create_block1
来实现block的创建。
         函数介绍:UF_MODL_create_block
和UF_MODL_create_block1
,目前还没怎么搞明白两者之间的根本差别。

#include <uf.h>
#include <uf_ui.h>
#include <uf_exit.h>
#include <uf_modl.h>
#include <uf_modl_primitives.h>
extern DllExport void ufsta( char *parm, int *returnCode, int rlen )
{
//    UF_FEATURE_SIGN    sign    Input    The sign of the operation to be performed.
//动作标志,到底是新建还是增加还是去除等,通过这个SIGN来控制
//UF_NULLSIGN = create new target solid
//UF_POSITIVE = add to target solid
//UF_NEGATIVE = subtract from target solid
//UF_UNSIGNED = intersect with target solid
//double    corner_pt [ 3 ]   Input    Corner point (origin) of block一个角的坐标,现在也没弄明白到底以哪个//角为基准,有可能是有一个基准点,后续的三条边的长宽高,可以用负数去控制,等下我去试试
//char *    edge_len [ 3 ]   Input    Three edge lengths of block 三个边长
//tag_t *    blk_obj_id    Output    Feature object identifier of created block. 目标特征的tag

    if(!UF_initialize())
    {
      UF_FEATURE_SIGN sign_new=UF_NULLSIGN;
      UF_FEATURE_SIGN sign_add=UF_POSITIVE;
      double corner_pt [ 3 ]={0.0,0.0,0.0};
      double corner_pt1 [ 3 ]={0.0,0.0,3.0};
      char *    edge_len [ 3 ]={"1","2","3"};
      char *    edge_len1 [ 3 ]={"1","1","1"};
      tag_tblk_obj;
      tag_tblk1_obj;
      UF_MODL_create_block1(sign_new,corner_pt,edge_len,&blk1_obj);
      UF_MODL_create_block1(sign_add,corner_pt1,edge_len1,&blk1_obj);

      uc1601("The block is ready.",1);
          return;
    }
   
    UF_terminate();
}
extern int ufusr_ask_unload( void )
{
    return( UF_UNLOAD_IMMEDIATELY );
}



奇塔车饰 发表于 2015-3-20 14:55:11

试了一下,把这行注释掉也可以,可能uf_modl已经包含了这个头文件了//#include <uf_modl_primitives.h>
char *      edge_len [ 3 ]={"1","2","3"};
char *      edge_len1 [ 3 ]={"1","1","1"};
但是这两个边长里,输入负数不行,可能是因为其定义的是边的长度,不能为负数。

visahc* 发表于 2015-6-12 22:21:51

两个在指定布尔运算的方式不同,一个是可以自定义的,一个是上一个特征的体

nx9.0 发表于 2015-9-10 08:00:37

很好很强大
页: [1]
查看完整版本: UG二次开发_体素特征创建_创建块