找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 23053|回复: 44
打印 上一主题 下一主题

【求助】关于UG二次开发的问题,急!!!

[复制链接]
跳转到指定楼层
1
发表于 2002-11-12 10:40:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
各位大虾好!由于初学UG的二次开发(UG/Open API),有难题须向高人请教,请不吝赐教!
      我想获得打开的UG文件中模型的tag,不知用何函数,是当前对象的tag,请各位大虾帮助解决,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
发表于 2002-11-12 16:21:05 | 只看该作者
什么叫当前对象?
3
发表于 2002-11-12 16:34:20 | 只看该作者
/**********************************************************
本来不想麻烦了,我也不太熟悉,不过看了一段时间还么有人回复,只好帮你找了找,希望对你有所帮助。
********************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <uf.h>
#include <uf_ugmgr.h>
#include <uf_part.h>
#include <uf_assem.h>
#define CHECK( func_ ) \
{ int  ifail_ = 0; \
  char message[133]; \
  ifail_ = (func_);  
  if ( ifail_ != 0 ) { \
    UF_get_fail_message( ifail_, message ); \
    printf("ERROR: %s returned from %s\n", message, # func_); \
    return ifail_; } }
static int create_part( void );
static int print_work_part_info( void );
/*---------------------------------------------------------------*/
int main(int argc, char *argv[])
{
  int  ifail = 0;
  ifail = UF_UGMGR_initialize(argc,(const char**)argv);
  if (ifail != 0)
  {
    printf("ERROR: Failed to initialize with error code %d",
    ifail);
    exit(1);
  }
  create_part();
  print_work_part_info();
  UF_PART_close_all();
  UF_UGMGR_terminate();
  return 0;
}
/*---------------------------------------------------------------*/
static int create_part( void )
{
  char*                   part_number = "600-A-wej-mk1-eng";
  char*                   part_revision = "A";
  char*                   part_file_type = "master";
  char*                   part_file_name = "";
  char                    encoded_name[MAX_FSPEC_SIZE + 1];
  tag_t                   part_tag;
  UF_UGMGR_tag_t          db_part_tag;
  UF_UGMGR_tag_t          root_folder;
  char                    root_folder_name[UF_UGMGR_NAME_SIZE];
  int                     i, count;
  UF_UGMGR_tag_t          *folder_contents;
  UF_UGMGR_object_type_t  object_type;
  char                    folder_name[UF_UGMGR_NAME_SIZE];
  logical                 folder_exists = false;
  CHECK(UF_UGMGR_ask_root_folder([$root_folder))]
  CHECK(UF_UGMGR_ask_folder_name(root_folder, root_folder_name));   
  printf("Root folder is %s\n", root_folder_name);
  /* Scan through the root folder, looking for a folder called
     "Test Set Default Folder". If this folder exists, set it to be
     the default folder into which newly created parts are
     placed.
  */
  CHECK(UF_UGMGR_list_folder_contents(root_folder, &count,
              [$folder_contents))]
  for ( i=0; i<count; i++ )
  {
    CHECK(UF_UGMGR_ask_object_type(folder_contents,
               [$object_type))]
    if (object_type == UF_UGMGR_type_folder)
    {
      CHECK(UF_UGMGR_ask_folder_name(folder_contents,
              folder_name));
      if ( strcmp( folder_name, "Test Set Default Folder" ) == 0 )
      {
        printf("Test Set Default Folder exists\n");
        CHECK(UF_UGMGR_set_default_folder(folder_contents));
        folder_exists = true;
        printf("Set default folder to %s\n", folder_name);
      }
    }
  }
  /* If the folder "Test Set Default Folder" doesn't exist, set the
     default folder to be the root folder.
  */
  if (!folder_exists)
  {
    printf("Test Set Default Folder does not exist\n");
    CHECK(UF_UGMGR_set_default_folder(root_folder));
    printf("Set default folder to %s\n", root_folder_name);
  }
  printf("Encoding UG/Manager part filename...\n");
  CHECK(UF_UGMGR_encode_part_filename( part_number, part_revision,
               part_file_type,
               part_file_name,
               encoded_name ));
  CHECK(UF_PART_new( encoded_name, 1, [$part_tag ))]
  printf("Created part...\n");
  CHECK(UF_PART_save());
  printf("Saved part...\n");
  CHECK(UF_UGMGR_ask_part_tag( part_number, [$db_part_tag ))]
  CHECK(UF_UGMGR_set_part_name_desc( db_part_tag, "engine",
              "Mk3 Engine" ));
  printf("Set part name and description...\n");
  return 0;
}
/*---------------------------------------------------------------*/
static int print_work_part_info( void )
{
  char             work_part_name[MAX_FSPEC_SIZE+1];
  tag_t            work_part_tag;
  char             part_number[UF_UGMGR_PARTNO_SIZE+1];
  char             part_revision[UF_UGMGR_PARTREV_SIZE+1];
  char             part_file_type[UF_UGMGR_FTYPE_SIZE+1];
  char             part_file_name[UF_UGMGR_FNAME_SIZE+1];
  UF_UGMGR_tag_t   db_tag;
  char             part_name[UF_UGMGR_NAME_SIZE+1];
  char             part_desc[UF_UGMGR_DESC_SIZE+1];
  work_part_tag = UF_ASSEM_ask_work_part();
  UF_PART_ask_part_name( work_part_tag, work_part_name );
  
CHECK(UF_UGMGR_decode_part_filename( work_part_name,
                part_number,
                part_revision,
                part_file_type,
                part_file_name ));
  printf( "For the current Work Part\n\n" );
  printf( "  Part Number      : %s\n", part_number );
  printf( "  Part Revision    : %s\n", part_revision );
  printf( "  Part File Type   : %s\n", part_file_type );
  printf( "  Part File Name   : %s\n", part_file_name );
  CHECK(UF_UGMGR_ask_part_tag( part_number, [$db_tag ))]
  CHECK(UF_UGMGR_ask_part_name_desc( db_tag, part_name,  
              part_desc ));
  printf( "  Part Name        : %s\n", part_name );
  printf( "  Part Description : %s\n", part_desc );
  return 0;
}
4
发表于 2002-11-13 09:38:40 | 只看该作者
谢谢二位大侠!
     对于第二位说的,我觉得还不是我想要的。比如,我建立了一个名为ug_example.prt的文件,我只在这个文件里画了个长方体,现在我打开这个文件,然后执行UG/Open API程序,在这个长方体上作截面。同样我打开其他的文件,也能用同一程序对文件中的部件进行操作。程序在实现时,首先要取得“长方体”的tag,是吗?请大虾帮助解决!
5
发表于 2002-11-13 11:15:17 | 只看该作者
gzxzl wrote:
谢谢二位大侠!
      对于第二位说的,我觉得还不是我想要的。比如,我建立了一个名为ug_example.prt的文件,我只在这个文件里画了个长方体,现在我打开这个文件,然后执行UG/Open API程序,在这个长方体上作截面。同样我打开其他的文件,也能用同一程序对文件中的部件进行操作。程序在实现时,首先要取得“长方体”的tag,是吗?请大虾帮助解决!

  
UF_PART_ask_displayed_part()
UF_OBJ_cycle_objs_in_part()
6
发表于 2002-11-13 17:42:10 | 只看该作者
非常感谢zzz,以及前两位大侠。不知你们是否有QQ号,我的是123621747。希望能经常交流技术问题。
7
发表于 2002-11-14 10:12:31 | 只看该作者
各位好!我的问题还没有解决,我使用了函数UF_PART_ask_displayed_part()  
编译时就不成功,我又使用了函数UF_ASSEM_ask_work_part,虽然编译成功但到UG中去执行就是不行。哎,谁能帮我!!!
8
发表于 2002-11-14 16:10:55 | 只看该作者
这两个都是文件的tag,要获得长方体的tag,可以通过用户选择或者uf_obj_cycle_by_name
  
                                   注:彼处出力,此处加分,--darkhorse
9
发表于 2002-11-14 22:18:57 | 只看该作者
stranger wrote:
这两个都是文件的tag,要获得长方体的tag,可以通过用户选择或者uf_obj_cycle_by_name

  
你好!感谢您的热心帮助。我还有个疑问,当使用uf_obj_cycle_by_name函数时需要输入名字,可是我想对打开的文件都适用,如果输入一个名字,那么这个程序不是对别的文件不起作用了吗?
10
发表于 2002-11-14 23:12:59 | 只看该作者
gzxzl wrote:
各位好!我的问题还没有解决,我使用了函数UF_PART_ask_displayed_part()  
编译时就不成功,我又使用了函数UF_ASSEM_ask_work_part,虽然编译成功但到UG中去执行就是不行。哎,谁能帮我!!!

  
UF_ASSEM_ask_work_part()只能用在装配中,UF_PART_ask_displayed_part()YING应该没有问题,只要把libufun.lib和LIBUGOPENINT.LIB连到你的程序中就可以了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-29 08:36 , Processed in 0.031580 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表