UG二次开发教程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

UG二次开发教程编写:王作雨1。建立两个目录。建立第一个目录E:\my_first_UG,在这个目录下建立两个新的目录:E:\my_first_UG\application和E:\my_first_UG\startup。建立第二个目录E:\my_source,用存放你的源代码。2。设置环境变量。再Windows中设置一个新的环境变量:UGII_USER_DIR=E:\my_first_UG。3。打开UG,进入UIStyler应用(在Application菜单的最后)。4。设计一个对话框。1)在DialogTitle一栏填入:FirstDialog,按Apply(每次输入完成后,都要按Apply,为避免啰嗦,以后不再提及)。2)在Cue一栏输入:%……%¥%¥¥##*%*(*(*—*—((,什么都行,呵呵。3)在PrefixName中,把CHANGE改为MY。4)加入四个控件。String,PushButton,Label和SingleSelectList编辑对话框的各个控件。1)改变String控件的标题,标识和长度。Label“String”-“Inputanitem”.IdentifierSTR_0-ITEMWidthin...0-202)改变PushButton控件的标题,标识和回调函数的名字。LabelPushButton-ImportIdentifierACTION_1-IMPORTcallbacksaction_1_act_cb-import_cb把CreatesDialog激活。3)改变Label控件的标题和singleselectlist的标识。改变singleselectlist可见项的个数。LabelLabel-ItemsListIdentifierLIST_2-ITEM_LISTNumber3-6.6.保存对话框。点击save图标,把对话框保存在E:\my_first_UG\application目录下,文件名位first_dlg,生成三个文件。(现在可以推出UG乐)。7。建立一个vc的工程。1)把\application下的*.c和*.h文件移动到E:\my_source目录下(文件可以改名字)。2)建立一个新工程,选择Win32DLL。3)把c源文件和头文件加入到工程中。8。设置vc的环境。Project-Settings-C/C++-Category....加上头文件。Project-Settings-Link....改变输出文件名,加入连接库文件(ug17之前的库名字不同)Tools-Options...-DirectoriesIncludefiles和Librayfiles加入UGUFopen的路径。打开first_dlg.c文件,找到menuscript样板的位置。复制这个样板到一个空的文本文件。把文件保存到E:\my_first_UG\startup目录下,文件名位first.men(注意后缀)。找到#ifdefMENUBAR_COMMENTED_OUT,把他和他对应的#endif删掉。找到#ifdefDISPLAY_FROM_USER_EXIT,把他和他对应的#endif删掉。找到enteravaliduserexithere,把它改为ufusr。现在可以编译连接,试一下了,呵呵。打开first.men文件,把ACTIONS后面的名字改为libmy_first(DLL文件的名字)。现在一个空架子已经打起来了。剩下的就是要加入自己的内容。请讲一讲回调Callback编写、连接(把上边的例子做完好吗)。就上面的例子讲讲下面这些回调函数(看清华那本书搞得我头大)谢谢!好吧,下面将一下这些回调函数的应用。Apply_c,Ok_cb和cancel_cb分别是点击OK,APPLY和cancel按钮时,执行的动作,它们的应用在后面的例子中介绍。constructor和Destructor本分别是对话框显示之前和退出之后执行的动作。在对话框显示之前,可能需要进行很多操作,譬如说:设置对话框的选择方式,就是说在对话框打开后,用户可以选择什么物体,面,实体等。在对话框消失之后,也需要进行一些操作,譬如说:释放申请的空间,把加亮的体恢复等。下面我就用例子介绍一下这些回调函数的应用。添加回调函数。首先进入UG,UIstyler,打开前面生成的对话框first_dlg.dlg,在相应的位置添加几个回调函数的名字(每一个都要回车或按Apply)。cancel_cbconstruct_cbdestruct_cbok_cb为“InputanItem”田家一个回调函数input_cb。保存后,退出。这时代码已经改变,要把相应的改变加到vc的工程中去,(推荐一个工具AraxisMerge)。打开first_dlg.c,找到construct_cb的位置,在其中添加以下代码。intMY_construct_cb(intdialog_id,void*client_data,UF_STYLER_item_value_type_p_tcallback_data){intirc;UF_STYLER_item_value_type_tvalue;charstring[133]=Inputastringhere.;/*MakesureUserFunctionisavailable.*/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);value.item_id=MY_ITEM;value.item_attr=UF_STYLER_VALUE;value.value.string=string;irc=UF_STYLER_set_value(dialog_id,&value);if(irc){charmessage[132];UF_get_fail_message(irc,message);}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;charstring[133];/*MakesureUserFunctionisavailable.*/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_ask_value(dialog_id,&value);strcpy(string,value.value.string);UF_STYLER_free_value(&value);/**addittothesinglelist*/value.item_id=MY_ITEM_LIST;value.item_attr=UF_STYLER_LIST_INSERT;value.subitem_index=UF_STYLER_NO_SUB_INDEX;value.indicator=UF_STYLER_STRING_VALUE;value.value.string=string;irc=UF_STYLER_set_value(dialog_id,&value);if(irc){charmessage[132];UF_get_fail_message(irc,message);}UF_terminate();再ok_cb假如下面的代码。intirc,i;UF_STYLER_item_value_type_tvalue;/*MakesureUserFunctionisavailable.*/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);UF_UI_open_listing_window();value.item_id=MY_ITEM_LIST;value.indicator=UF_STYLER_STRING_PTR_VALUE;value.item_attr=UF_STYLER_SUBITEM_VALUES;UF_STYLER_ask_value(dialog_id,&value);for(i=0;ivalue.count;i++){UF_UI_write_listing_window(value.value.strings);UF_UI_write_listing_window(\n);}UF_STYLER_free_value(&value);UF_terminate();不能覆盖,前面我们修改了一些地方,这些地方要保留(删掉if,endif,改为ufusr等)。至此,我们介绍了几个回调函数的简单使用方法,下面看一下运行结果。刚打开对话框的结果。输入一个字符串,回车。它显示在下面的singlelist中。对不起,aminorchangeoncode.intMY_ok_cb(intdialog_id,void*client_data,UF_STYLER_item_value_type_p_tcallback_data){intirc,i;UF_STYLER_item_value_type_tvalue;/*MakesureUserFunctionisavailable.*/if(UF_initialize()!=0)return(UF_UI_CB_CONTINUE_DIALOG);UF_UI_open_listing_window();value.item_id=MY_ITEM_LIST;value.indicator=UF_STYLER_STRING_PTR_VALUE;value.item_attr=UF_STYLER_SUBITEM_VALUES;irc=UF_STYLER_ask_value(dialog_id,&value);for(i=0;ivalue.count;i++){UF_UI_write_listing_window(value.value.strings);UF_UI_write_listing_window(\n);}UF_STYLER_free_value(&value);点击Ok后,所有的字符串显示在listwindow中。如果你的OK和Apply执行的是同样的功能的话,那就是相同的代码啦。平移的例子doublematrix[16];intcount=1,copyFlag=2,layer=2,curveFlag=2,rtState;UF_MTX4_identity(matrix);UF_MTX4_edit_translation(matrix,vec);FTN(uf5947)(matrix,&srcObj,&count,©Flag,&layer,&curveFlag,copyedObj,NULL,&rtState);returnrtState;现在我调试我的程序发现不能进行move操作之后,和我的同学讨论了一下,他的意见是复杂的物体带有了许多参数,如果要把带参数的整个Object进行move操作,之需要把根feature进行平移,而其他的特征会自动跟着平移.下面着段程序就是要获得根feature的操作.uf_list_p_tcmtag;intug_type,ug_subtype;intN_features;i_ret=UF_OBJ_ask_type_and_subtype(*Object_selected,&ug_type,&ug_subtype);i_ret=UF_MODL_ask_

1 / 17
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功