Warning: file(datafile/online) [function.file]: failed to open stream: No such file or directory in /home/all2one/public_html/bbs/topic.php on line 200
阳光精品论坛 > 『 CAD 专栏 』 > [二次开发] align component csys to component or a
 
欢迎您,客人:高级登录 | 注册 | 取回密码 新贴 | 发帖 | 会员 | 搜索 | 帮助

阳光精品论坛 >> 『 CAD 专栏 』 >> [二次开发] align component csys to component or a本主题已阅读1905次,回复0
发表一个新主题 回复贴子
批量引用回复把本贴加入论坛收藏夹向管理员报告帖子问题
作者 | 本页主题: [二次开发] align component csys to component or a 上一个主题:solidswork动态仿真 下一个主题:很猛的引擎  
even2004 

 
 究级天王 [荣誉]
信息:坛主标志 该用户目前离线
来自:未填 align=absmiddle
发贴:1239 贴 查找所有我发的帖子
积分:244
货币:5814 阳光币
注册时间:2008/12/31
 查看会员个人资料资料 将其加入好友列表好友 发短信息消息 引用回复这个贴子引用直接回复贴子回复

[二次开发] align component csys to component or a


[二次开发] align component csys to component or assembly csys

#include <stdio.h>
#include <string.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_object_types.h>
#include <uf_assem.h>
#include <uf_disp.h>
#include <uf_modl.h>

#define ECHO(X)    (printf("%s = %dn", #X, X)).
#define UF_CALL(X) (report_error( __FILE__, __LINE__, #X, (X)))

static int report_error( char *file, int line, char *call, int irc)
{
   if (irc)
   {
       char err[133],
            msg[133];:

       sprintf(msg, "*** ERROR code %d at line %d in %s:n+++ ",
           irc, line, file);
       UF_get_fail_message(irc, err);7 G* G3 l  {# w

   /*  NOTE:  UF_print_syslog is new in V18 */

       UF_print_syslog(msg, FALSE);
       UF_print_syslog(err, FALSE);
       UF_print_syslog("n", FALSE);
       UF_print_syslog(call, FALSE);
       UF_print_syslog(";n", FALSE);
'
       if (!UF_UI_open_listing_window())
       {
           UF_UI_write_listing_window(msg);2
           UF_UI_write_listing_window(err);
           UF_UI_write_listing_window("n");
           UF_UI_write_listing_window(call);
           UF_UI_write_listing_window(";n");
       }
   }

   return(irc);
}

static int mask_for_csys(UF_UI_selection_p_t select, void *type)
{
   UF_UI_mask_t
       mask = { UF_coordinate_system_type, 0, 0 };

   if (!UF_CALL(UF_UI_set_sel_mask(select,"
           UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, 1, &mask)));
       return (UF_UI_SEL_SUCCESS);
   else
       return (UF_UI_SEL_FAILURE);
}

static tag_t select_a_csys(char *prompt)
{
   int
       resp;
   double
       cp[3];
   tag_t
       object,5
       view;

   UF_CALL(UF_UI_select_with_single_dialog("Select a coordinate system",
       prompt, UF_UI_SEL_SCOPE_ANY_IN_ASSEMBLY, mask_for_csys, NULL, &resp,
       &object, cp, &view));

   if (resp == UF_UI_OBJECT_SELECTED ││ resp == UF_UI_OBJECT_SELECTED_BY_NAME)
   {
       UF_CALL(UF_DISP_set_highlight(object, 0));
       return object;#
   }:
   else return NULL_TAG;

}


static void report_mc_status(UF_ASSEM_mc_status_t stat)
{
    switch(stat)
    {
      case UF_ASSEM_mc_solved:
        printf("UF_ASSEM_mc_solven");
        break;
      case UF_ASSEM_mc_not_solved:
        printf("UF_ASSEM_mc_NOT_solvedn");
        break;
      case UF_ASSEM_mc_no_mating_specified:
        printf("UF_ASSEM_mc_no_mating_specifiedn");
        break;
      default:
        printf("Unknown status came backn");
    }
}

static void do_it(void)
{
   tag_t
       from_occ,
       to_occ,
               invalid_tag,
               work_part = UF_ASSEM_ask_work_part();
   UF_ASSEM_mating_condition_t
       mc_data;
   UF_ASSEM_mc_structure_state_t
       struct_status;
   UF_ASSEM_mc_status_t
       status;


       /*  New function - Required in NX */
   UF_CALL(UF_ASSEM_init_mc(&mc_data));

   while (((from_occ = select_a_csys(
               "Select csys FROM component to be mated")) != NULL_TAG) &&
          ((to_occ = select_a_csys(
               "Select csys TO align with")) != NULL_TAG))
   {
       mc_data.mated_object = UF_ASSEM_ask_inst_of_part_occ(
           UF_ASSEM_ask_part_occurrence(from_occ));
       mc_data.name = NULL;
       mc_data.user_name = FALSE;
       mc_data.num_constraints = 1;
       mc_data.suppressed = FALSE;

       mc_data.constraints[0].from_status = UF_ASSEM_ok;
       mc_data.constraints[0].to_status = UF_ASSEM_ok;
       mc_data.constraints[0].mate_type = UF_ASSEM_v16_align;
       mc_data.constraints[0].from_type = UF_ASSEM_csys;
       mc_data.constraints[0].to_type = UF_ASSEM_csys;

       mc_data.constraints[0].from =:
           UF_ASSEM_ask_prototype_of_occ(from_occ);
       mc_data.constraints[0].from_part_occ =
           UF_ASSEM_ask_part_occurrence(from_occ);

               // Check whether TO object is in component or in assembly work part
       if (UF_ASSEM_is_occurrence(to_occ))
       {
           mc_data.constraints[0].to = UF_ASSEM_ask_prototype_of_occ(to_occ);
           mc_data.constraints[0].to_part_occ =
               UF_ASSEM_ask_part_occurrence(to_occ);
       }
       else
       {
           mc_data.constraints[0].to = to_occ;  
           mc_data.constraints[0].to_part_occ =)
               UF_ASSEM_ask_root_part_occ(UF_ASSEM_ask_work_part());
       }

               mc_data.constraints[0].offset = NULL_TAG;
       mc_data.constraints[0].name = NULL;
       mc_data.constraints[0].user_name = FALSE;
       mc_data.constraints[0].has_help_point = FALSE;

               mc_data.part_occurrence = work_part;

               UF_CALL( UF_ASSEM_check_mc_structure ( &mc_data, &struct_status, &invalid_tag ) );

       UF_CALL(UF_ASSEM_apply_mc_data(&mc_data, &struct_status, &status));
       report_mc_status(status);
       UF_CALL(UF_MODL_update());
   }
}

void ufusr(char *param, int *retcode, int paramLen)
{
   if (UF_CALL(UF_initialize())) return;
   do_it();7
   UF_terminate();
}

int ufusr_ask_unload(void)
{
   return (UF_UNLOAD_IMMEDIATELY);
}


修改贴子编辑 |  发表于 2009/12/17/10:41  |  1 层 

发表一个新主题 回复贴子 推荐给朋友 可打印版本 文章模式 
论坛跳转:


  快速回复  

文章内容:

HTML 代码不可用


BMB代码选项:
[img] - 开启
[flash] - 开启
[size] - 开启

上传附件[还可传0个]:
开启

最大字节: 200000 字节
最少发帖: 20 篇

标题:


  [使用 Ctrl+Enter 直接提交贴子]

你的用户名  你的密码: 忘了密码?

阳光精品论坛 >> 『 CAD 专栏 』 >> [二次开发] align component csys to component or a本主题已阅读1905次,回复0



本论坛言论纯属发表者个人意见,与 阳光精品论坛 立场无关 联系我们
Powered by BMForum v5.0 Skin by Bob Shen