iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 22527|回复: 1
打印 上一主题 下一主题

UG OPEN API 如何在面所在的边上建3个点,有源码,高手请进来

[复制链接]
跳转到指定楼层
楼主
发表于 2012-9-29 00:07:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

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

x
请教如何在面的边上建三个点,最好不要是端点


/******************************************************************************
             Copyright (c) 2006 Unigraphics Solutions, Inc.
                       DIMENSITION REPORT
        
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <uf.h>
#include <uf_ui.h>
#include <uf_part.h>
#include <uf_disp.h>
#include <uf_curve.h>
#include <uf_drf.h>
#include <uf_modl.h>
#include <uf_disp.h>
#include <uf_obj.h>
#include <uf_csys.h>
#include <uf_ui_ont.h>
#include <math.h>
#include <uf_so.h>
#include <uf_oper.h>
#include <UF_EVAL.h>
#include <uf_layer.h>
#include <uf_draw.h>
#include <uf_setup.h>
#include <uf_object_types.h>
#include <uf_cam_planes.h>
#include <uf_cam_prefs.h>
#include <uf_view.h>
#include <uf_mtx.h>
#include <time.h>
#include <string.h>
#include "custom.h"
#include <uf_mtx.h>
#include <uf_point.h>
#define gongcha0 0.0001
#define gongcha1 1.0001
#define gongcha2 0.9999
#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
static int report( char *file, int line, char *call, int irc)
{
  if (irc)
  {
     char    messg[133],str[133];
     printf("%s, line %d:  %s\n", file, line, call);
     (UF_get_fail_message(irc, messg)) ?
       sprintf(str,"    returned a %d\n", irc) :
       sprintf(str,"    returned error %d:  %s\n", irc, messg);
    uc1601(str,1);
  }
  return(irc);
}
static void do_ugopen_api(void)
{
    int                        type;
    int                        ask_type;
    int                        ask_subtype;
int                        dis_num1;//选择实体的显示层
int                        dis_blank;//选择实体的显示层
int                        layer_status_out;//输出层的状态
int                        body_num=0 ;
int                        face_type ;
int                        face_liexing;
int                        face_liexing1;//输出
    int                        list_count;
    int                        edges_count;
    int                        curve_type;
    double                     uv_min_max[ 4 ];
    double                     af_parm[ 2 ];
    double                     kongjian_point[ 3 ]={10,20,30};
    double                     face_pnt[ 3 ];
    double                     face_pro_param1[ 2 ];
    double                     face_pro_point1[ 3 ];
    double                     face_pro_unit_norm1[ 3 ];
    double                     face_pro_radii1[ 2 ];
    double                     face_pro_param2[ 2 ];
    double                     face_pro_point2[ 3 ];
    double                     face_pro_unit_norm2[ 3 ];
    double                     face_pro_radii2[ 2 ];
    double                     bounding_box[ 6 ];
    double                     mid_point[ 3 ];
    double                     u1[ 3 ];
    double                     v1[ 3 ];
    double                     u2[ 3 ];
    double                     v2[ 3 ];
    double                     matrix_values[ 9 ];
    double                     z_vec[ 3 ];
    double                   * curve_data;
tag_t                      face_dis[20000];
tag_t                      display_part;
tag_t                      solid= NULL_TAG ;
tag_t                      point ;
    tag_t                      line;
    tag_t                      wcs_id;
    tag_t                      matrix_id;
uf_list_t                * edge_list;
    tag_t                      edge;
    tag_t                    point_feature_id;
    UF_CURVE_struct_t        * curve_struct;

      
   
UF_OBJ_disp_props_t        disp_props;
    UF_CURVE_line_t            line_coords;
    display_part=UF_PART_ask_display_part ( );
    type = UF_solid_type;
UF_OBJ_cycle_objs_in_part( display_part, type, &solid );
while ( solid != NULL_TAG )
    {
          UF_CALL(UF_OBJ_cycle_objs_in_part( display_part, type, &solid ));
    UF_OBJ_ask_type_and_subtype (solid, &ask_type,&ask_subtype );
          UF_OBJ_ask_display_properties (solid, &disp_props );
    dis_num1=disp_props.layer;
    dis_blank=disp_props.blank_status;
         
    UF_LAYER_ask_status (dis_num1, &layer_status_out );
    UF_CURVE_line_t line_coords;
          tag_t   point;
    if( ask_subtype==2 && layer_status_out<=2 && dis_blank==0  ) //面的状态
    {   
              UF_MODL_ask_face_type ( solid, &face_liexing );
                       UF_MODL_ask_face_edges (solid, &edge_list );//得到面的所有边
                       UF_MODL_ask_list_count (edge_list, &edges_count );
        for ( int i=0;i<edges_count;i++ )
        {
                            UF_MODL_ask_list_item (edge_list, i, &edge );//面的一条边的TAG
//请教如何在面的边上建三个点,最好不要是端点
/*
有哪位高手能够补充下,万分感谢,困惑了好久,也试了不同的方法,有的思路总感觉太复杂了。



*/
        //UF_CURVE_ask_curve_struct ( edge, &curve_struct );
                               // UF_CURVE_ask_curve_struct_data (curve_struct, &curve_type, &curve_data );
                               // UF_CURVE_free_curve_struct (curve_struct );
   }   
   
}   
   
}//do_ugopen_api结束花括号
/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
  if (!UF_CALL(UF_initialize()))
  {
    do_ugopen_api();
    UF_CALL(UF_terminate());
  }
}
int ufusr_ask_unload(void)
{
  return (UF_UNLOAD_IMMEDIATELY);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 支持支持
沙发
 楼主| 发表于 2012-10-17 23:30:46 | 只看该作者

马上注册登录,享用更多网站功能!

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

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-22 06:21 , Processed in 0.010964 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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