chpmould 发表于 2012-8-12 18:38:00

[Scmold]UG二次开发工具

以前在UG中开发的模具BOM,标准件...等,先贴图片看看,如果需要的人多就上传... ...



邹锋 发表于 2013-6-20 23:22:00

高手,哈哈,正学习UG中,还不怎么会呢,学会后再用UG开发,跟你学,有没有QQ

303297160 发表于 2014-8-8 08:20:00

这个以后再学。

jslxt 发表于 2015-4-18 18:30:00

高手小弟学习了

wayne_myles 发表于 2015-6-7 15:39:00

好东西 啊希望用用看啊

pengfei2010 发表于 2017-10-11 17:36:00

回帖是一种美德!感谢楼主的无私分享 谢谢

邹锋 发表于 2019-12-26 10:16:00

#if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
#   include
#   include
using std:strstream;
using std::endl;   
using std::ends;
using std::cerr;
#else
#   include
#   include
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
////////////////////以下使用UGOPEN..
#include
#include
#include
#include
#include
#include
#include
using namespace NXOpen;
/////////////////
static double qiucha(double num,double num1)
{
      double shuzhi;
      shuzhi=(fabs (num-num1));
      return(shuzhi);
}static void getscej(void)
{
      char ti[]="选择统计类型:";
      int def=2;
      char items[]={"统计顶针","统计螺丝"};
      int ej=0,sc=0;
      int ret=uc1603(ti,def,items,2);
      switch (ret)
      {
      case 1:
                //uc1601("Back",1);
                return;//按回退退出程序
      case 2:
                //uc1601("Cancel",1);
                return;//按取消退出程序
      case 5:
                ej=1;
                break;//跳出
      case 6:
                sc=1;
                break;//跳出
      }
      char cue[] = "选择对象";
      char title[] = "对象选择对话框";
      tag_p_t objects;
      int count=0;
      int i=0;
      uf_list_p_t face_list;
      double tmp_lst;
      int n = 0;
      tag_t face=null_tag;
      DWORD start, stop;//声明时间变量
      int type;
      double point ;
      double dir ;
      double box ;
      double radius;
      doublerad_data;
      intnorm_dir;
      double z;//声明长度
      int response=0;
      /////实体定义总长度数据,如果实体带斜度,侧不准
      double min_corner ;
      double directions ;
      double distances ;
      double min_corner1 ;
      double directions1 ;
      double distances1 ;
      ///改变算法,不用坐标系统,用圆柱面积算法
      //uf_list_p_t edge_list;
      //UF_MODL_create_list(&edge_list);
      //tag_t edge;
      //UF_CURVE_arc_t edge_data;
      //double len=0.0;
      //tag_t wcs_id ;
      //UF_CSYS_ask_wcs(&wcs_id);
      //double csys_origin={0,0,0};
      //tag_t csys_id ;
      ///改变算法,不用坐标系统,用圆柱面积算法
      ///////以下使用UGOPEN
      Session *theSession = Session::GetSession();
      Part *workPart(theSession-&gtarts()->Work());//取得当前工作部件
      Unit *unit1(dynamic_cast(workPart->UnitCollection()->FindObject("SquareMilliMeter")));//取得单位1
      Unit *unit2(dynamic_cast(workPart->UnitCollection()->FindObject("MilliMeter")));//取得单位2
      std::vector objects1(1);
      MeasureFaces *measureFaces1;
      double area;
      double perimeter;
      ////////////
      //L10:
      tag_t mat_id,csys_id;
      double pt={0,0,0};//设置原点 ABS
      double matrix_values ={1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0};//原点MAT
      UF_CSYS_create_matrix(matrix_values,&mat_id);//生成MAT
      UF_CSYS_create_temp_csys(pt,mat_id,&csys_id);//建立一个临时的ABS工作坐标系
      UF_CSYS_set_wcs(csys_id);//设置刚建立的ABS坐标系统
      UF_UI_select_with_class_dialog(cue,title,0, init_proc_body, NULL,&response,&count, &objects); //选择对象 object需要定义为tag_p_t
      start = GetTickCount();///计时开始
      int aa=0;
      double num={};//声明二维数组,数量有500个
      UF_MODL_create_list(&face_list);
      if (response == UF_UI_OK&&count>0)
      {
                for(i=0;i300)
                                                      {
                                                                z=z+20;
                                                      }
                                                      if (z=250)
                                                      {
                                                                z=300;
                                                      }
                                                      if (z=200)
                                                      {
                                                                z=250;
                                                      }
                                                      if (z=150)
                                                      {
                                                                z=200;
                                                      }
                                                      if (z=100)
                                                      {
                                                                z=150;
                                                      }
                                                      if (z=50)
                                                      {
                                                                z=100;
                                                      }
                                                      if (z=26)
                                                      {
                                                                z=50;
                                                      }
                                                }
                                                else
                                                {
                                                      /////以下使用UGOPEN求面积
                                                      objects1 = dynamic_cast(NXObjectManager::Get(face));//转换面
                                                      measureFaces1 = workPart->MeasureManager()->NewFaceProperties(unit1, unit2, 0.99, objects1);//取得面,相关的数据
                                                      area = measureFaces1->Area();//取得面积
                                                      perimeter = measureFaces1-&gterimeter();//取得周长
                                                      //////////////////////////////////////////
                                                      z = area/perimeter*2;//螺丝比较有规则,可以用面积/周长*2就可以得到高度,它这周长是2条线的周长
                                                      z=z+0.6;//再加上倒角长度
                                                      //z=int(z/5+0.5)*5;////取得长度为5一级的数
                                                }
                                                if (k==0)//判断是否是第一个圆柱面,是就记录下来,保存好数据如果不是,则执行ELSE下面的
                                                {
                                                      tmp_lst=radius;
                                                      tmp_lst=z;
                                                      tmp_lst=hdist;
                                                }
                                                else
                                                {
                                                      if (radius85)//判断统计顶针的时候,托长是否小于85,则不会记录它是一只顶针,取现在的直径与长度
                                                                {
                                                                        num=radius;
                                                                        num=z;
                                                                        aa=aa+1;
                                                                }
                                                                if (ej==0 && sc==1)//判断是统计螺丝的时候 ,,取现在的直径与长度
                                                                {
                                                                        if (qiucha(radius,4)85)///判断统计顶针的时候,托长是否小于85,则不会记录它是一只顶针 ,取第一次记录的直径与长度
                                                                {
                                                                        num=tmp_lst;
                                                                        num=tmp_lst;
                                                                        aa=aa+1;
                                                                }
                                                                if (ej==0 && sc==1)//判断是统计螺丝的时候 ,取第一次记录的直径与长度
                                                                {
                                                                        if (qiucha(tmp_lst,4)=num_list)/* 把值比较大的元素沉到底 */
                              {
                                        ci=num_list;
                                        ci=num_list;
                                        ci=num_list;
                                        num_list=num_list;
                                        num_list=num_list;
                                        num_list=num_list;
                                        num_list=ci;
                                        num_list=ci;
                                        num_list=ci;
                              }
                        }
                }
                UF_UI_open_listing_window();
                UF_UI_write_listing_window("本程序制作:深圳_邹锋");
                UF_UI_write_listing_window("\n联系方式Q609719845");
                UF_UI_write_listing_window("\n");
                char radstr, lens,pcsstr;//定义字符变量
                char str1, str2,str3;//定义字符变量
                char file_name[] = "d:\\1.txt";//声明文件名
                FILE *fp;//声明文本路径
                fp= fopen(file_name,"w");//以写的方式打开文本
                for(i=0;i<aaa;i++)
                {
                        sprintf(str1,"%0.2f", num_list);//转换变量成字符
                        sprintf(str2,"%0.0f",num_list);//转换变量成字符
                        sprintf(str3,"%0.0f\n",num_list);//转换变量成字符
                        strcat(str1,str2);//合成字符
                        strcat(str1,str3);//合成字符
                        fprintf(fp, str1);//写入字符到文本中的一行,
                        sprintf(radstr,"直径:Φ%0.2f", num_list);
                        sprintf(lens,"长度:%0.0fmm",num_list);
                        sprintf(pcsstr,"数量:%0.0f个",num_list);
                        UF_UI_write_listing_window(radstr);
                        UF_UI_write_listing_window(lens);
                        UF_UI_write_listing_window(pcsstr);
                        UF_UI_write_listing_window("\n");
                }
                fclose (fp);//关闭文本
                stop = GetTickCount();///计时结束
                char sdd;
                sprintf(sdd,"用时:%lld毫秒。\n", stop - start);
                UF_UI_write_listing_window(sdd);
                //goto L10;
      }
}/*ARGSUSED*/
void ufusr(char *param, int *retcode, int param_len)
{
      if (!UF_CALL(UF_initialize()))
      {
                getscej();
                UF_CALL(UF_terminate());
      }
}
int ufusr_ask_unload(void)
{
      return (UF_UNLOAD_IMMEDIATELY);
}

邹锋 发表于 2019-12-26 10:17:00

统计螺丝,顶针 看了我13年还在学UG入门给你评轮的,,

1028882406@qq.c 发表于 2021-12-10 21:45:00

大佬上传个玩玩呢
页: [1]
查看完整版本: [Scmold]UG二次开发工具