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

iCAx开思网

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

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

[复制链接]
21
发表于 2002-11-21 11:06:38 | 只看该作者
gzxzl wrote:
[quote]zzz wrote:
  
UF_OBJ_cycle_objs_in_part() can get any object in your part. I have told you before. Did you use it?

  
大虾,我都试过数次了。干脆这样,你用ug画个曲面或者长方体等实体,然后编一段程序(内部程序),对这个实体取截面线,可以吗?谢谢!请将您的程序贴至此处。::y::y::y [/quote]
  
你是得不到实体,还是生不成截面线?
要不你把你的这段程序贴出来看一下。
22
发表于 2002-11-21 15:41:34 | 只看该作者
zzz你好,假如有如下程序,对一打开的prt文件做如下操作;
#include <stdio.h>
#include <uf.h>
#include <uf_curve.h>
#include <uf_modl.h>
#include <uf_part.h>
#include <uf_so.h>
#include <uf_defs.h>
#include <uf_object_types.h>
  
#include <uf_csys.h>
#include <uf_obj.h>
  
#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];
        printf("%s, line %d, %s\n", file, line, call);
        UF_get_fail_message (irc, messg);
  
        printf("  returned a %d\n", irc);
        printf("  returned error %d, %s\n", irc, messg);
    }
    return (irc);
}
  
static void do_ugopen_api (void)
{
    double plane_data[9] = {100.0,0.0,50.0, 100.0,0.0,49.0,   100.0,1.0,50.0};
     double vect[3] = {250.0, 0.0, 0.0};
     double vect2[3] = {250.0, 50.0, 0.0};
     int   curr_part,num_parts,count_1;
  
    tag_t  part_tag, block_tag, plane_tag;
  
    tag_t  objects[1], planes[1];
    tag_t  section_curves_feature, *section_curves;
   
    tag_t  feature;
       const logical   flip = TRUE;
  
    int    num_section_curves, type;
  
   
  
    UF_CURVE_section_general_data_t  general_data;
    UF_CURVE_section_planes_data_t   planes_data;
    UF_CURVE_section_parallel_data_t parallel_data;
  
    char  *part_name = "section_curves";
  
    char  *edge_lens[3] = {"300.0","25.0","150.0"};
  
  在此应获得block_tag的值(也就是打开的part中的值),我不知如何处理,请大侠帮助解决?    
   
   objects[0] = block_tag;
  
    FTN(uf5374) (&plane_data[0], &plane_data[3], &plane_data[6],
                     [$plane_tag)]
  
  
   planes[0] = plane_tag;
  
    general_data.associate     = 1;
    general_data.objects       = objects;
    general_data.num_objects   = 1;
    general_data.grouping      = 0;
    general_data.join_type     = 0;
    general_data.tolerance     = 0.0254;
  
    planes_data.planes         = planes;
    planes_data.num_planes     = 1;
  
  UF_CALL (UF_CURVE_section_from_planes (&general_data, &planes_data,
                     [$section_curves_feature))]
  
    printf (" section curves feature tag is %d\n", section_curves_feature);
  
  parallel_data.base_plane     = plane_tag;
    parallel_data.step_distance  = 3.0;
    parallel_data.start_distance = 0.0;
    parallel_data.end_distance   = 10.0;
  
    UF_CALL (UF_CURVE_section_from_parallel_planes (&general_data, &parallel_data,
                     [$section_curves_feature))]
  
    UF_CALL (UF_CURVE_ask_feature_curves (section_curves_feature,
                       [$num_section_curves, &section_curves))]
  
    UF_free (section_curves);
  
}
  
void ufusr (char *param, int *retcode, int paramLen)
{
    if (!UF_CALL(UF_initialize()))
    {
        do_ugopen_api();
        UF_CALL(UF_terminate());
    }
}
   
int ufusr_ask_unload(void)
{
    return (UF_UNLOAD_IMMEDIATELY);
}
23
发表于 2002-11-21 15:49:30 | 只看该作者
zzz你好,我给你一个简单的prt文件,请在此中实现上贴中的程序。谢谢!!!

本帖子中包含更多资源

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

x
24
发表于 2002-11-21 16:51:38 | 只看该作者
继续努力,互相交流,共同提高,谢谢您的支持---darkhorse
gzxzl wrote:
zzz你好,假如有如下程序,对一打开的prt文件做如下操作;
#include <stdio.h>
#include <uf.h>
#include <uf_curve.h>
#include <uf_modl.h>
#include <uf_part.h>
#include <uf_so.h>
#include <uf_defs.h>
#include <uf_object_types.h>
  
#include <uf_csys.h>
#include <uf_obj.h>
  
#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];
         printf("%s, line %d, %s\n", file, line, call);
         UF_get_fail_message (irc, messg);
  
         printf("  returned a %d\n", irc);
         printf("  returned error %d, %s\n", irc, messg);
     }
     return (irc);
}
  
static void do_ugopen_api (void)
{
     double plane_data[9] = {100.0,0.0,50.0, 100.0,0.0,49.0,   100.0,1.0,50.0};
      double vect[3] = {250.0, 0.0, 0.0};
      double vect2[3] = {250.0, 50.0, 0.0};
      int   curr_part,num_parts,count_1;
  
     tag_t  part_tag, block_tag, plane_tag;
  
     tag_t  objects[1], planes[1];
     tag_t  section_curves_feature, *section_curves;
     
     tag_t  feature;
        const logical   flip = TRUE;
  
     int    num_section_curves, type;
  
     
   
     UF_CURVE_section_general_data_t  general_data;
     UF_CURVE_section_planes_data_t   planes_data;
     UF_CURVE_section_parallel_data_t parallel_data;
  
     char  *part_name = "section_curves";
  
     char  *edge_lens[3] = {"300.0","25.0","150.0"};
  
   在此应获得block_tag的值(也就是打开的part中的值),我不知如何处理,请大侠帮助解决?   
   
int type, subtype;
  
part_tag = UF_PART_ask_display_part();
   block_tag = NULL_TAG;
   UF_OBJ_cycle_objs_in_part(part_tag, UF_solid_type, [$block_tag)]
   while(block_tag)
   {
     UF_OBJ_ask_type_and_subtype(block_tag, [$type, &subtype)]
     if(subtype == UF_solid_body_subtype)
     {
              break;
     }
       UF_OBJ_cycle_objs_in_part(part_tag, UF_solid_type, [$block_tag)]
   }
   objects[0] = block_tag;
   
     FTN(uf5374) (&plane_data[0], &plane_data[3], &plane_data[6],
                      [$plane_tag)]
  
   
    planes[0] = plane_tag;
  
     general_data.associate     = 1;
     general_data.objects       = objects;
     general_data.num_objects   = 1;
     general_data.grouping      = 0;
     general_data.join_type     = 0;
     general_data.tolerance     = 0.0254;
  
     planes_data.planes         = planes;
     planes_data.num_planes     = 1;
  
   UF_CALL (UF_CURVE_section_from_planes (&general_data, &planes_data,
                      [$section_curves_feature))]
  
     printf (" section curves feature tag is %d\n", section_curves_feature);
  
   parallel_data.base_plane     = plane_tag;
     parallel_data.step_distance  = 3.0;
     parallel_data.start_distance = 0.0;
     parallel_data.end_distance   = 10.0;
  
     UF_CALL (UF_CURVE_section_from_parallel_planes ([$general_data, [$para]]llel_data,
                      [$section_curves_feature))]
  
     UF_CALL (UF_CURVE_ask_feature_curves (section_curves_feature,
                        [$num_section_curves, §ion_curves))]
  
     UF_free (section_curves);
  
}
  
void ufusr (char *param, int *retcode, int paramLen)
{
     if (!UF_CALL(UF_initialize()))
     {
         do_ugopen_api();
         UF_CALL(UF_terminate());
     }
}
   
int ufusr_ask_unload(void)
{
     return (UF_UNLOAD_IMMEDIATELY);
}
25
发表于 2002-11-22 17:36:37 | 只看该作者
大侠,你好!
我用如上的程序后,出现如下错误:
  Internal error:memory access violation.
  File name:F:\vcxuexi\gzx_ugexample\Debug\gzx_ugexample.dll.
  Function name:ufusr.
请问这是怎么回事?
再次感谢大侠的热情帮助。
26
发表于 2002-11-22 21:23:35 | 只看该作者
debug
27
发表于 2002-11-22 22:40:00 | 只看该作者
你的这个程序他的原型是/ugopen_doc/uf_curve/ufd_curve_section_example.c吧?总体来说该程序思路没错,ZZZ的方法也对,
到底什么原因不太清楚,
其中FTN(uf5374) ()
函数比较旧,用他的替代函数 UF_MODL_create_relative_dplane ()
我估计你是在学习而不是必须解决的问题,所以就不再耗费精力了,自己测试看看.
28
发表于 2002-11-23 21:49:24 | 只看该作者
感谢各位!可我还有些失望,没有最终解决问题。
29
发表于 2002-11-26 13:24:18 | 只看该作者
市面是有一本《UG/OPEN API编程基础》清华大学出版社出的,上周末刚买回来研究,推荐买一本,作者是董正卫、田立中、付宜利。
30
发表于 2002-11-26 21:53:55 | 只看该作者
可惜没有toolkit的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

GMT+8, 2025-1-29 08:39 , Processed in 0.026349 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

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