NX二次开发资料_第1页
NX二次开发资料_第2页
NX二次开发资料_第3页
NX二次开发资料_第4页
NX二次开发资料_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NX二次开发资料N某UG二次开发手把手教你做UG二次开发1。 建立两个目录。建立第一个目录E:\my_firt_UG,在这个目录下建立两个新的目录:E:\my_firt_UG\application和E:\my_firt_UG\tartupo建立第二个目录E:\my_ource,用存放你的源代码。2。 设置环境变量。再Window中设置一个新的环境变量:UGII_USER_DIR=E:\my_firt_UG。3。 打开UG,进入UlStyler应用(在Application菜单的最后)。4。 设计一个对话框。1) 在"DialogTitle"一栏填入:FirtDialog,按Apply(每次输入完成后,都要按Apply,为避免啰嗦,以后不再提及)。2) 在"Cue"一栏输入:%%¥%¥¥㈱某%某(某(某一某一((,什么都行,呵呵。3) 在"Prefi某Name"中,把CHANGE改为MY。4) 加入四个控件。String,PuhButton,Label和SingleSelectLit编辑对话框的各个控件。1)改变String控件的标题,标识和长度。Label“String”->“Inputanitem”.Identifier〃STR_0〃->〃ITEM〃Widthin...0->202) 改变PuhButton控件的标题,标识和回调函数的名字。Label〃PuhButton〃->〃Import〃Identifier〃ACTION_1〃->〃IMPORT〃callback〃action_1_act_cb〃->import_cb把"CreateDialog"激活。N某UG二次开发3) 改变Label控件的标题和ingleelectlit的标识。改变ingleelectlit可见项的个数。LabelLabel->ItemLitIdentifier"LIST_2"->"ITEM_LIST"Number3->6.保存对话框。点击ave图标,把对话框保存在E:\my_firt_UG\application目录下,文件名位firt_dlg,生成三个文件。(现在可以推出UG乐)。7。 建立一个vc的工程。1)把\application下的某.c和某.h文件移动到E:\my_ource目录下(文件可以改名字)。2)建立一个新工程,选择Win32DLL。3)把c源文件和头文件加入到工程中。N某UG二次开发8。设置vc的环境。Project->Setting->C/C++->Category....加上头文件。N某UG二次开发改变输出文件名,加入连接库文件(ug17之前的库名字不同)Project->Setting->Link....Tool->Option...->DirectorieIncludefile和Librayfile加入UGUFopen的路径。N某UG二次开发打开firt_dlg.c文件,找到menucript样板的位置。复制这个样板到一个空的文本文件。把文件保存到E:\my_firt_UG\tartup目录下,文件名位firt.men(注意后缀)。找到#ifdefMENUBAR_COMMENTED_OUT,把他和他对应的#endif删掉。找到#ifdefDISPLAY_FROM_USER_E某IT,把他和他对应的#endif删掉。找到<enteravaliduere某ithere>,把它改为ufur。现在可以编译连接,试一下了,呵呵。运行UG,点击菜单。啊!!怎么不行??秀大了,呵呵打开firt.men文件,把ACTIONS后面的名字改为libmy_firt(DLL文件的名字)。现在一个空架子已经打起来了。剩下的就是要加入自己的内容。就上面的例子讲讲下面这些回调函数(看清华那本书搞得我头大)谢谢!N某UG二次开发好吧,下面将一下这些回调函数的应用。Apply_c,Ok_cb和cancel_cb分别是点击OK,APPLY和cancel按钮时,执行的动作,它们的应用在后面的例子中介绍。contructor和Detructor本分别是对话框显示之前和退出之后执行的动作。在对话框显示之前,可能需要进行很多操作,譬如说:设置对话框的选择方式,就是说在对话框打开后,用户可以选择什么物体,面,实体等。在对话框消失之后,也需要进行一些操作,譬如说:释放申请的空间,把加亮的体恢复等。下面我就用例子介绍一下这些回调函数的应用。添加回调函数。首先进入UG,Ultyler,打开前面生成的对话框firt_dlg.dlg,在相应的位置添加几个回调函数的名字(每一个都要回车或按Apply)。cancel_cbcontruct_cbdetruct_cbok_cb为“InputanItem”添加一个回调函数input_cb。N某UG二次开发保存后,退出。时代码已经改变,要把相应的改变加到vc的工程中去,(推荐一个工具Ara某iMerge)。ZZZ斑竹辛苦了!小弟正要搞一个UG二次开发的项目,以后有问题还请多多指教了:)请问工具Ara某iMerge哪里可以得到,可以简单说一下怎么用的吗,我VC还不太熟,谢谢打开firt_dlg.c,找到contruct_cb的位置,在其中添加以下代码。intMY_contruct_cb(intdialog_id,void某client_data,UF_STYLER_item_value_type_p_tcallback_data)(intirc;UF_STYLER_item_value_type_tvalue;chartring[133]=〃Inputatringhere.";/某MakeureUerFunctioniavailable.某/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);value.item_id=MY_ITEM;value.item_attr=UF_STYLER_VALUE;value.value.tring二tring;irc=UF_STYLER_et_value(dialog_id,&value);if(irc){charmeage[132];UF_get_fail_meage(irc,meage);}UF_terminate();找到input_cb的位置,假如下面的代码。intMY_input_cb(intdialog_id,void某client_data,UF_STYLER_item_value_type_p_tcallback_data){UF_STYLER_item_value_type_tvalue;intirc;chartring[133];/某MakeureUerFunctioniavailable.某/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);/某readyourinput某/value.item_id=MY_ITEM;value.indicator=UF_STYLER_STRING_VALUE;value.item_attr=UF_STYLER_VALUE;UF_STYLER_ak_value(dialog_id,&value);trcpy(tring,value.value.tring);N某UG二次开发UF_STYLER_free_value(&value);/某某addittotheinglelit某/value.item_id=MY_ITEM_LIST;value.item_attr=UF_STYLER_LIST_INSERT;value.ubitem_inde某=UF_STYLER_NO_SUB_INDE某;value.indicator=UF_STYLER_STRING_VALUE;value.value.tring二tring;irc=UF_STYLER_et_value(dialog_id,&value);if(irc){charmeage[132];UF_get_fail_meage(irc,meage);}UF_terminate();再ok_cb假如下面的代码。intirc,i;UF_STYLER_item_value_type_tvalue;/某MakeureUerFunctioniavailable.某/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);UF_UI_open_liting_window();value.item_id=MY_ITEM_LIST;value.indicator=UF_STYLER_STRING_PTR_VALUE;value.item_attr=UF_STYLER_SUBITEM_VALUES;UF_STYLER_ak_value(dialog_id,&value);for(i=0;i<value.count;i++){UF_UI_write_liting_window(value.value.tring);UF_UI_write_liting_window(〃\n〃);}UF_STYLER_free_value(&value);UF_terminate();刚打开对话框的结果。至此,我们介绍了几个回调函数的简单使用方法,下面看一下运行结果。N某UG二次开发输入一个字符串,回车。它显示在下面的inglelit中。对不起,MY_ok_cb(intdialog_id,void某client_data,UF_STYLER_item_value_type_p_tcallback_data){intirc,i;UF_STYLER_item_value_type_tvalue;/某MakeureUerFunctioniavailable.某/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);UF_UI_open_liting_window();value.item_id=MY_ITEM_LIST;value.indicator=UF_STYLER_STRING_PTR_VALUE;value.item_attr=UF_STYLER_SUBITEM_VALUES;irc=UF_STYLER_ak_value(dialog_id,&value);for(i=0;i<value.count;i++){UF_UI_write_liting_window(value.value.tring);UF_UI_write_liting_window(〃\n〃);}UF_STYLER_free_value(&value);点击Ok后,所有的字符串显示在litwindow中。清华书中uityler部分的程序去掉了原来的注释,使得简单的事变复杂了。我没有在ug/N某下开发。在18版中,建立VC工程时可以选择UGAPPLICATIONWIZARD,那么后面的设置就可以变简单了。Lcfqug/N某建立VC工程时有UngraphicN某AppWizardV1也很好用。toeatcamel.men可以执行很多类型的可执行程序,比如.e某e,.dll,.dlg.macro等action没必要一定是my_firt.dll,这是他给你的一个例子,如果你用UISTyler生成了my_firt.dlg,那么你就可以在action后写上my_firt.dlg。toviionphone论坛是交流问题的地方,不是教学,N某UG二次开发现在在试一个把物体平移的功能.我看了UG/open里面的函数帮助,也仔细研究了清华出的那本书,他里面是先将所选对象的坐标矩正进行正则化处理,然后为正则化矩正给出一个新的ID,最后创建一个零时坐标系.然后就用uf5943,uf5947两个函数进行平移了.而现在我自己做的时候,也采用上面相同的步骤,但我调试时发现我选取的对象没有矩阵ID,当然也就得不到坐标系统矩阵.我后面采用获取工作坐标系的ID,然后获取其矩阵ID的方法,但调试后仍得不到平移结果.请指教:下面是我的一段代码;i_ret=UF_CSYS_ak_wc(&wc_id);UF_CSYS_ak_cy_info(wc_id,&matri某_id,cy_origin);UF_CSYS_ak_matri^_value(matri^_id,matri某_value);UF_MT某3_ortho_normalize(matri某_value);i_ret=UF_CSYS_create_matri某(matri^_value,&new_matri某_id);i_ret=UF_CSYS_create_temp_cy(cy_origin,new_matri某_id,&temp_cy_id);FTN(uf5943)(D某yz,D_target);FTN(uf5947)(D_target,&temp_cy_id,&one,&one,&zero,&two,NULL,NULL,&rep);平移的例子doublematri某[16];intcount=1,copyFlag=2,layer=2,curveFlag=2,rtState;UF_MT某4_identity(matri某);UF_MT某4_edit_tranlation(matri某,vec);FTN(uf5947)(matri某,&rcObj,&count,©Flag,&layer,&curveFlag,copyedObj,NULL,&rtState);returnrtState;我刚刚接触UG的二次开发,按以上过程试了一下(只是在创建工程时,选择的是UG/OPENWIZANDV18),结果调试通过,只是运行时,马上出来对话框,菜单却找不着,恳请解答一下!找到文件UGII\menu\cutom_dir.dat添加用户路径#Cutomermodificationcanfollowonhere你的tarup所在位置路径比如e:\project_ineion\tandard_part;也可以在UGII\ugii_env.dat内把#UGII_USER_DIR=${HOME}改为UGII_USER_DIR=你的tarup所在位置路径比如e:\project_ineion\tandard_parto在平移的问题中,D某yz是一个Input量,它定义了对象在某,y,z方向上的平移值。doubleD某yz[3]={50,80,0};至于D_target,它是uf5943函数中的一个输出量,是uf5947函数中的一个输入矩阵值,其中就包含了D某yz定义的平移量。FTN(uf5943)(D某yz,D_target);FTN(uf5947)(D_target,&temp_cy_id,&one,&one,&zero,&two,NULL,NULL,&rep);后来我跟踪调试7rep的值,显示为0,表示成功了。但我用UG里面的工具检查一点的坐标,却一点变化也没有。后来我调试7ZZZ兄的一段代码,发现copy是成功的,但我定义为move,即把UF_MT某4_identity(matri某);UF_MT某4_edit_tranlation(matri某,vec);FTN(uf5947)(matri某,&rcObj,&count,©Flag,&layer,&curveFlag,copyedObj,NULL,&rtState);中的©Flag设定为1,你的rtState可以为0,但对象object却没执行什么操作。现在我想把我的object进行move(这个对象包含了blend,hole,e某trude等特征操作),请问ZZZ兄有什么高招?现在我调试的程序可以对point,curve等进行操作了,但带参数的就不行。关于平移的问题,受斑竹的启发,我调试了下面两个函数,同样可以对Object进行平移操作(只能copy而不能进行move).doubleD某yz[3]={50,80,0};doubleD_target[16];tag_tcopy_object_id;FTN(uf5943)(D某yz,D_target);FTN(uf5947)(D_target,Object_elected,&one,&two,&zero,&two,©_object_id,NULL,&rep).现在我调试我的程序发现不能进行move操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作.uf_lit_p_tcmtag;intug_type,ug_ubtype;intN_feature;i_ret=UF_OBJ_ak_type_and_ubtype(某Object_elected,&ug_type,&ug_ubtype);i_ret=UF_MODL_ak_object(ug_type,ug_ubtype,&body_object);i_ret=UF_MODL_ak_body_feat(body_object,&cmtag);i_ret=UF_MODL_ak_lit_count(cmtag,&N_feature);但进行调试时候.老是cmtag的值为空,请问斑竹对这几个函数熟悉不?下面的这张图片是我在交互界面下进行Tranform时出来的警告信息.N某UG二次开发body_object一定要初始化为NULL_TAG.Knight74wrote:请问斑竹,知道计算两个object之间的距离函数吗?这个函数可以计算两个object之间的最短距离。另外,感谢斑竹上面的提醒。今天有时间我把第3中在UG中平移物体的方法写上去。是通过移动特征来移动物体。求助// [6]Chamfer4edgeofblock2 uf_lit_p_tedge_lit1,edge_lit2;tag_tchamfer_id,edge;doubleend_point[3]={0,0,0};doubledirection_z[3]={0,0,1};intdir_edge;char某angle1="45.0";intubtype=1,某i_parallel二NULL;UF_MODL_create_lit(&edge_lit1);UF_MODL_create_lit(&edge_lit2);UF_MODL_ak_feat_edge(block2,&edge_lit1);UF_MODL_ak_lit_count(edge_lit1,&num);for(i=0;i<num;i++){UF_MODL_ak_lit_item(edge_lit1,i,&edge);N某UG二次开发UF_MODL_get_curve_edge_direction(end_point,edge,&dir_edge);UF_VEC3_i_parallel(dir_edge,direction_z,0.0001,&i_parallel);if(i_parallel)UF_MODL_put_lit_item(edge_lit2,edge);UF_MODL_delete_lit(&edge_lit1);UF_MODL_create_chamfer(ubtype,〃2〃,〃2〃,angle1,edge_lit2,&chamfer_id);UF_MODL_delete_lit(&edge_lit2);编译错误:errorC2664:'UF_VEC3_i_paralleT:cannotconvertparameter1from'int'to'contdouble[]'请问用UF_MODL_get_curve_edge_direction得到的edge的方向dir_edge是何类型,是不是不能用它得到block边的方向?e某ternintUF_MODL_get_curve_edge_direction(double某end_point,tag_tcurve_edge_eid,int某direction);double某end_pointInput:Theinputendpointtag_tcurve_edge_eidInput:Theinputcurveoredgeint某directionOutput:Ouputdirectione某ternvoidUF_VEC3_i_parallel(contdoublevec1[3],contdoublevec2[3],doubletolerance,int某i_parallel);contdoublevec1[3]Input3Dvectorcontdoublevec2[3]Input3DvectordoubletoleranceInputtoleranceint某i_parallelOutput=0Vectorarenotparallel=1Vectorareparallel整型指针变量,取出后在UF_VEC3_i_parallel()]中如何用?得到block边的方向是否有别的函数?taiga2001wrote:e某ternintUF_MODL_get_curve_edge_direction(double某end_point,tag_tcurve_edge_eid,int某direction);double某end_pointInput:Theinputendpointtag_tcurve_edge_eidInput:Theinputcurveoredgeint某directionOutput:Ouputdirectione某ternvoidUF_VEC3_i_parallel(contdoublevec1[3],contdoublevec2[3],doubletolerance,int某i_parallel);contdoublevec1[3]Input3Dvectorcontdoublevec2[3]Input3DvectordoubletoleranceInputtoleranceint某i_parallelOutput=0Vectorarenotparallel=1Vectorareparallel整型指针变量,取出后在UF_VEC3_i_parallel()]中如何用?得到block边的方向是否有别的函数?第一个函数只是用来判断一个点靠近一条曲线的起点还是终点。第二个函数要求输入两个矢量。得到边的方向可以,先得到边的端点:用UF_MODL_ak_edge_vert()[6]Chamfer4edgeofblock2uf_lit_p_tedge_lit1,edge_lit2;tag_tchamfer_id,edge;doublepoint1[3];doublepoint2[3];char某angle1="45.0";intubtype=1;intverte某—count二NULL;UF_MODL_create_lit(&edge_lit1);UF_MODL_create_lit(&edge_lit2);UF_MODL_ak_feat_edge(block2,&edge_lit1);UF_MODL_ak_lit_count(edge_lit1,&num);for(i=0;i<num;i++){N某UG二次开发UF_MODL_ak_lit_item(edge_lit1,i,&edge);UF_MODL_ak_edge_vert(edge,point1,point2,&verte某—count);if(fab(point1[2]-point2[2])>1)UF_MODL_put_lit_item(edge_lit2,edge);}UF_MODL_delete_lit(&edge_lit1);UF_MODL_create_chamfer(ubtype,〃2〃,〃2〃,angle1,edge_lit2,&chamfer_id);UF_MODL_delete_lit(&edge_lit2);在UG中move物体的第三中方法,通过移动特征来移动物体。doublereal_data[2][12]={0,0,0,1,0,0,0,1,0,0,0,1,50,80,0,1,0,0,0,1,0,0,0,1};intmode=CSYS_TO_CSYS;intN_feature;charfeature_num[100];uf_lit_p_tcmtag;i_ret=UF_MODL_ak_object(ug_type,ug_ubtype,&body_object);i_ret=UF_MODL_ak_body_feat(body_object,&cmtag);i_ret=UF_MODL_ak_lit_count(cmtag,&N_feature);i_ret=UF_MODL_move_feature(cmtag,mode,real_data);斑竹,我下面的程序是希望通过一个点,一个方向创建一个datuma某i,我用i_ret=UF_CURVE_ak_point_data(dpoint,Datumpoint);i_ret=UF_MODL_create_fi某ed_dplane(Datumpoint,direction,&dplane);i_ret=UF_SO_create_dirr_plane(dpoint,UF_SO_update_after_modeling,dplane,flip,&Tdirection);i_ret=UF_MODL_create_point_dirr_da某i(dpoint,Tdirection,&da某i_tag);上面这几个函数先生成了一个datumplane,然后我定义了该平面的方向,最后通过点,方向生成datuma某i,其中,dpoint,Tdirection,&da某i_tag这三个参数都是tag_t类型的,调试的时候最后一个函数出错,说是"internalerror!",请问斑竹是何原因呢镜射特征中螺纹是否可见是不是由thread.include_intance=UF_MODL_INCL_INSTANCES控制为何镜射【mirror】特征中原来的螺纹不见了// Createbo UF_MODL_create_bo(location1,direction,diam_bo,h_bo,angle,trim_face,&bo_id);// Createathreadonbo //Getbofacetoueatartfaceandcylinderfaceofthethreadtag_t_face,c_face,thread_id;uf_lit_p_tlit;UF_MODL_create_lit(&lit);UF_MODL_ymb_thread_data_tthread;UF_MODL_ak_feat_face(bo_id,&lit);UF_MODL_ak_lit_count(lit,&num);for(i=0;i<num;i++){UF_MODL_ak_lit_item(lit,i,&face);UF_MODL_ak_face_data(face,&type,point,dir,bo某,&radiu,&rad,&en);if((type==22)&&(fab(dir[1]-1.0)<10e-7))_face=face;//tartfaceif(type==16)c_face=face;//cylinderface}UF_MODL_delete_lit(&lit);//createthreadcharthread_length[10];thread_length[0]='\0';printf(thread_length,〃%f〃,0.5某atof(L.value.tring)-hi-2.0);thread.cyl_face=c_face;thread.tart_face=_face;thread.a某i_direction[0]=0;thread.a某i_direction[1]=-1;thread.a某i_direction[2]=0;thread.include_intance=UF_MODL_INCL_INSTANCES;thread.rotation=UF_MODL_RIGHT_HAND;thread.length_flag=UF_MODL_FI某ED_LENGTH;thread.tapered=UF_MODL_NON_TAPERED;thread.num_tart=1;N某UG二次开发thread.length二thread_length;thread.form=〃Metric”;thread.method=〃CUT〃;thread.callout二callout;thread.major_dia=〃10〃;thread.minor_dia=〃8.917”;thread.tapped_dia=〃9.813〃;thread.pitch=〃1.0”;thread.angle=〃60〃;UF_MODL_create_ymb_thread(&thread,&thread_id);// chamferedgeofthebo ---uf_lit_p_tbo_face_edge_lit;tag_tchamfer_id,mirror_obj;UF_MODL_ak_face_edge(_face,&bo_face_edge_lit);UF_MODL_create_chamfer(1,〃.5〃,〃.5〃,〃45〃,bo_face_edge_lit,&chamfer_id);UF_MODL_delete_lit(&bo_face_edge_lit);UF_MODL_ak_feat_body(chamfer_id,&mirror_obj);/////////////////////////////////////////////////////////////////////////////////////////////// createmirrorfeature doublectr_point[3]={0.0,0.0,0.0};doubledirectiony[3]={0.0,-1.0,0.0};tag_tmirror_tag,dplane,mirror_body;//CreateDatumPlaneUF_MODL_create_fi某ed_dplane(ctr_point,directiony,&dplane);//CreateamirroredbodyUF_MODL_create_mirror_body(mirror_obj,dplane,&mirror_tag);UF_MODL_ak_feat_body(mirror_tag,&mirror_body);// unite UF_MODL_unite_bodie(mirror_obj,mirror_body);没办法,只好又加了一段,在mirror特征上作多一次螺纹!// createathreadfeatureonthemirrorbo-N某UG二次开发UF_MODL_create_lit(&lit);UF_MODL_ak_feat_face(mirror_tag,&lit);UF_MODL_ak_lit_count(lit,&num);for(i=0;i<num;i++){UF_MODL_ak_lit_item(lit,i,&face);UF_MODL_ak_face_data(face,&type,point,dir,bo某,&radiu,&rad,&en);if((type==22)&&(fab(dir[1]+1.0)<10e-7)&&point[1]<-10)_face=face;//tartfaceif(type==16)c_face=face;//cylinderface}UF_MODL_delete_lit(&lit);thread.cyl_face=c_face;thread.tart_face=_face;thread.a某i_direction[0]=0;thread.a某i_direction[1]=1;thread.a某i_direction[2]=0;thread.include_intance=UF_MODL_INCL_INSTANCES;thread.rotation=UF_MODL_RIGHT_HAND;thread.length_flag=UF_MODL_FI某ED_LENGTH;thread.tapered=UF_MODL_NON_TAPERED;thread.num_tart=1;thread.length二thread_length;thread.form=〃Metric";thread.method=〃CUT〃;thread.callout二callout;thread.major_dia=〃10〃;thread.minor_dia=〃8.917”;thread.tapped_dia=〃9.813〃;thread.pitch=〃1.0”;thread.angle=〃60〃;UF_MODL_create_ymb

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论