首页   产品介绍   开发培训   技术文档   下载中心   招聘信息   客户服务  
   
公司产品
自动拼图系统
工程图辅助设计系统OpenDraft
G/OpenAPI开发宝典-基础篇
UG/OpenAPI开发宝典-问答篇
UG/OpenAPI开发宝典-实例篇
UG/OpenAPI开发宝典-综合篇
电极工艺图生成系统
孔自动标注
注塑模具辅助设计系统OpenMold
加工表单生成器
电极自动生成工具
加工辅助工具集ToolCAM
文件加密系统
公差自动标注系统
车床快速设计系统
格栅除污机快速设计系统
     
FLEXlm对CADLicense的管理
UG中约束的分类与应用
Windows平台上UG的二次开发
UG中标准件库的建立
UG中装配件特殊运动的实现
UG的二次开发中特征的识别和设定
UG二次开发的自动装配技术
UG二次开发中定位约束孔的建立
UG二次开发中爆炸图和ODBC示例
UG二次开发动画示例
             
 
产品介绍
公司产品
培训与招聘
相关信息
技术文档
技术文档
技术交流
联系我们
相关联接
技术联接

UGOPEN

UG二次开发中定位约束孔的建立

南京欧奔软件技术有限公司

#include <stdio.h>
#include <uf.h>
#include <uf_modl.h>
#include <uf_ui.h>
#include <malloc.h>

/*定义全局变量,用于转递相对定位的目标边*/
tag_t target_edge;

/*注册孔定位的用户函数*/
int rpo_routine_hole(tag_t obj_id)
{
  int irc;
  uf_list_p_t edge_list;

  tag_t obj_id_target[1],obj_id_tool[1];
  char *constraint_value[]={"0.0"};
  char *constraint_array[]={"PARA_DIST_PARMS"};
  int target_qualifier[]={UF_MODL_ARC_CENTER};
  int tool_qualifier[]={UF_MODL_ARC_CENTER};

  UF_MODL_ask_feat_edges(obj_id, &edge_list );
  UF_MODL_ask_list_item(edge_list, 0, &obj_id_tool[0]);
  UF_MODL_delete_list(&edge_list);

  obj_id_target[0] = target_edge;

  irc=UF_MODL_create_rpo_constraints(obj_id,NULL_TAG,NULL_TAG,obj_id_target,
  target_qualifier,obj_id_tool,tool_qualifier,constraint_value,constraint_array,1);

  return irc;
}

static void create_hole(void)
{
  UF_FEATURE_SIGN sign = UF_NULLSIGN;
  double origin[ 3 ] = {0, 0, 0};
  char * height = "10";
  char * diam = "50";
  double direction[ 3 ] = {0, 0, 1};
  tag_t cyl_obj_id;
  uf_list_p_t face_list, edge_list;
  tag_t placement_face, thru_face;
  #if CREATE_HOLE_DEBUG
  tag_t face_tag, edge_tag;
  int count, i;
  char buff[100], name[255];
  #endif

  double location[ 3 ] = {0, 0, 20};
  double direction1[ 3 ] = {0, 0, -1};
  char * diame = "40";
  char *depth = "100";
  char *angle = "0";
  tag_t hole_tag;

/*create cylinder*/
  UF_MODL_create_cyl1(sign, origin, height, diam, direction, &cyl_obj_id );

/*find placement face and thru face*/
  UF_MODL_ask_feat_faces(cyl_obj_id, &face_list );
  #if CREATE_HOLE_DEBUG
  UF_MODL_ask_list_count(face_list, &count );
  for (i=0; i<count; i++)
  {
    UF_MODL_ask_list_item(face_list, i, &face_tag);
    sprintf(buff, "%d", i);
    strcpy(name, "face");
    strcat(name, buff);
    UF_OBJ_set_name (face_tag, name );
  }
  #endif
  UF_MODL_ask_list_item(face_list, 0, &placement_face);
  UF_MODL_ask_list_item(face_list, 1, &thru_face);?
  /*delete the uf_list_p_t data*/
  UF_MODL_delete_list(&face_list);

  /*获得块上边的标识,用于相对定位*/
  UF_MODL_ask_feat_edges(cyl_obj_id, &edge_list);
  #if CREATE_HOLE_DEBUG
  UF_MODL_ask_list_count(edge_list, &count );
  for (i=0; i<count; i++)
  {
    UF_MODL_ask_list_item(edge_list, i, &edge_tag);
    sprintf(buff, "%d", i);
    strcpy(name, "edge");
    strcat(name, buff);
    UF_OBJ_set_name(edge_tag, name );
  }
  #endif
  UF_MODL_ask_list_item(edge_list, 1, &target_edge);
  UF_MODL_delete_list(&edge_list);

  /*register constrain function*/
  UF_MODL_register_rpo_routine(rpo_routine_hole);?
  /*create hole*/
  UF_MODL_create_simple_hole(location, direction1,?
  diame, depth, angle,?
  placement_face, thru_face,
  &hole_tag);

  /*remove register constrain function*/
  UF_MODL_unregister_rpo_routine();
}

void ufusr(char *param, int *retcode, int paramLen)
{
  if (UF_initialize() != 0)
  return;
  create_hole();
  UF_terminate();
}
int ufusr_ask_unload(void)
{
  return (UF_UNLOAD_IMMEDIATELY);
}

Copyright © 2011 南京欧奔软件技术有限公司,保留全部权利
南京欧奔软件技术有限公司
地址: 南京市洪武路359号福鑫国际大厦22楼2205室 邮编: 210002
电话:(86)025-84456296 传真:(86)025-84456296 手机:13186429310
技术讨论QQ群:49466232
网站备案/许可证号:苏ICP备05038408号