NX二次开发资料Word格式文档下载.docx
- 文档编号:18704017
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:15
- 大小:22.87KB
NX二次开发资料Word格式文档下载.docx
《NX二次开发资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《NX二次开发资料Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
编辑对话框的各个控件。
1)改变String控件的标题,标识和长度。
Label“String”->
“Inputanitem”.
Identifier"
STR_0"
->
"
ITEM"
Widthin...0->
20
2)改变PuhButton控件的标题,标识和回调函数的名字。
Label"
PuhButton"
Import"
ACTION_1"
IMPORT"
callback"
action_1_act_cb"
import_cb
把"
CreateDialog"
激活。
3)改变Label控件的标题和ingleelectlit的标识。
改变ingleelectlit可见项的个数。
LabelLabel->
ItemLitIdentifier"
LIST_2"
ITEM_LIST"
Number3->
6.
6.保存对话框。
点击ave图标,把对话框保存在E:
\my_firt_UG\application目录下,文件名位firt_dlg,生成三个文件。
(现在可以推出UG乐)。
7。
建立一个vc的工程。
1)把\application下的某.c和某.h文件移动到E:
\my_ource目录下(文件可以改名字)。
2)建立一个新工程,选择Win32DLL。
3)把c源文件和头文件加入到工程中。
8。
设置vc的环境。
Project->
Setting->
C/C++->
Category....加上头文件。
改变输出文件名,加入连接库文件(ug17之前的库名字不同)
Link....
Tool->
Option...->
Directorie
Includefile和Librayfile加入UGUFopen的路径。
打开firt_dlg.c文件,找到menucript样板的位置。
复制这个样板到一个空的文本文件。
把文件保存到E:
\my_firt_UG\tartup目录下,文件名位firt.men(注意后缀)。
找到#ifdefMENUBAR_COMMENTED_OUT,
把他和他对应的#endif删掉。
找到#ifdefDISPLAY_FROM_USER_E某IT,
找到<
enteravaliduere某ithere>
,把它改为ufur。
现在可以编译连接,试一下了,呵呵。
运行UG,点击菜单。
啊!
!
怎么不行?
?
秀大了,呵呵
打开firt.men文件,把ACTIONS后面的名字改为libmy_firt(DLL文件的名字)。
现在一个空架子已经打起来了。
剩下的就是要加入自己的内容。
就上面的例子讲讲下面这些回调函数(看清华那本书搞得我头大)谢谢!
好吧,下面将一下这些回调函数的应用。
Apply_c,Ok_cb和cancel_cb分别是点击OK,APPLY和cancel按钮时,执行的动作,它们的应用在后面的例子中介绍。
contructor和Detructor本分别是对话框显示之前和退出之后执行的动作。
在对话框显示之前,可能需要进行很多操作,譬如说:
设置对话框的选择方式,就是说在对话框打开后,用户可以选择什么物体,面,实体等。
在对话框消失之后,也需要进行一些操作,譬如说:
释放申请的空间,把加亮的体恢复等。
下面我就用例子介绍一下这些回调函数的应用。
添加回调函数。
首先进入UG,UItyler,打开前面生成的对话框firt_dlg.dlg,在相应的位置添加几个回调函数的名字(每一个都要回车或按Apply)。
cancel_cb
contruct_cbdetruct_cb
ok_cb
为“InputanItem”添加一个回调函数input_cb。
保存后,退出。
时代码已经改变,要把相应的改变加到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){
intirc;
chartring[133];
/某MakeureUerFunctioniavailable.某/
if(UF_initialize()!
=0)return(UF_UI_CB_CONTINUE_DIALOG);
/某readyourinput某/
value.indicator=UF_STYLER_STRING_VALUE;
UF_STYLER_ak_value(dialog_id,&
trcpy(tring,value.value.tring);
UF_STYLER_free_value(&
/某某addittotheinglelit某/value.item_id=MY_ITEM_LIST;
value.item_attr=UF_STYLER_LIST_INSERT;
value.ubitem_inde某=UF_STYLER_NO_SUB_INDE某;
再ok_cb假如下面的代码。
intirc,i;
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;
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(&
UF_terminate();
刚打开对话框的结果。
至此,我们介绍了几个回调函数的简单使用方法,下面看一下运行结果。
输入一个字符串,回车。
它显示在下面的inglelit中。
对不起,aminorchangeoncode.
intMY_ok_cb(intdialog_id,
{intirc,i;
irc=UF_STYLER_ak_value(dialog_id,&
点击Ok后,所有的字符串显示在litwindow中。
清华书中uityler部分的程序去掉了原来的注释,使得简单的事变复杂了。
我没有在ug/N某下开发。
在18版中,建立VC工程时可以选择UGAPPLICATIONWIZARD,那么后面的设置就可以变简单了。
Lcfq
ug/N某建立VC工程时有UngraphicN某AppWizardV1也很好用。
toeatcamel.men可以执行很多类型的可执行程序,比如.e某e,.dll,.dlg.macro等
action没必要一定是my_firt.dll,这是他给你的一个例子,如果你用UISTyler生成了my_firt.dlg,那么你就可以在action后写上my_firt.dlg。
toviionphone
论坛是交流问题的地方,不是教学,
现在在试一个把物体平移的功能.我看了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,&
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_part。
在平移的问题中,D某yz是一个Input量,它定义了对象在某,y,z方向上的平移值。
doubleD某yz[3]={50,80,0};
至于D_target,它是uf5943函数中的一个输出量,是uf5947函数中的一个输入矩阵值,其中就包含了D某yz定义的平移量。
后来我跟踪调试了rep的值,显示为0,表示成功了。
但我用UG里面的工具检查一点的坐标,却一点变化也没有。
后来我调试了ZZZ兄的一段代码,发现copy是成功的,但我定义为move,即把UF_MT某4_identity(matri某);
layer,
&
中的©
Flag设定为1,你的rtState可以为0,但对象object却没执行什么操作。
现在我想把我的object进行move(这个对象包含了blend,hole,e某trude等特征操作),请问ZZZ兄有什么高招?
现在我调试的程序可以对point,curve等进行操作了,但带参数的就不行。
关于平移的问题,受斑竹的启发,我调试了下面两个函数,同样可以对Object进行平移操作(只能copy而不能进行move).
doubleD_target[16];
tag_tcopy_object_id;
FTN(uf5947)(D_target,Object_elected,&
two,&
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时出来的警告信息.
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);
edge_lit2);
UF_MODL_ak_feat_edge(block2,&
UF_MODL_ak_lit_count(edge_lit1,&
num);
num;
i++){
UF_MODL_ak_lit_item(edge_lit1,i,&
edge);
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(&
UF_MODL_create_chamfer(ubtype,"
2"
"
angle1,edge_lit2,&
chamfer_id);
编译错误:
errorC2664:
'
UF_VEC3_i_parallel'
:
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:
Theinputendpoint
tag_tcurve_edge_eidInput:
Theinputcurveoredgeint某directionOutput:
Ouputdirection
e某ternvoidUF_VEC3_i_parallel(contdoublevec1[3],contdoublevec2[3],
doubletolerance,int某i_parallel);
contdoublevec1[3]Input3Dvector
contdoublevec2[3]Input3DvectordoubletoleranceInputtolerance
int某i_parallelOutput=0Vectorarenotparallel=1Vectorareparallel
整型指针变量,取出后在UF_VEC3_i_parallel()]中如何用?
得到block边的方向是否有别的函数?
taiga2001wrote:
e某ternvoidUF_VEC3_i_parallel(contdoublevec1[3],contdoublevec2[3],doubletolerance,
int某i_parallel);
contdoublevec1[3]Input3Dvectorcontdoublevec2[3]Input3Dvector
doubletoleranceInputtoleranceint某i_parallelOutput=0Vectorarenotparallel
=1Vectorareparallel
第一个函数只是用来判断一个点靠近一条曲线的起点还是终点。
第二个函数要求输入两个矢量。
得到边的方向可以,先得到边的端点:
用UF_MODL_ak_edge_vert()
-------------------[6]Chamfer4edgeofblock2-------------------
uf_lit_p_tedge_lit1,edge_li
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NX 二次开发 资料