NX二次開(kāi)發(fā)習(xí)題及源碼.doc
《NX二次開(kāi)發(fā)習(xí)題及源碼.doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《NX二次開(kāi)發(fā)習(xí)題及源碼.doc(58頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、創(chuàng)建NXhello界面代碼:#include /包含UF_initialize()和UF_terminate()函數(shù)原型的頭文件#include /包含uc1601()函數(shù)原型的頭文件extern void ufusr(char *param, int *retcode, int param_len) if (UF_initialize()!=0)/獲取NX openapi的執(zhí)行權(quán)限 return;uc1601(Hello NX,1);/彈出消息窗口,顯示“Hello NX”UF_terminate();/釋放NX OPEN API的執(zhí)行權(quán)限 運(yùn)行結(jié)果截圖:2、創(chuàng)建一個(gè)模型,并在信息窗口顯示模型的tag值。代碼:#include #include #include #include #include #include static void do_ugopen_api(void) typedef unsigned int tag_t;UF_FEATURE_SIGN sign = UF_NULLSIGN;/無(wú)布爾運(yùn)算double cyl_orig3 = 0,0,0;/圓柱的圓心坐標(biāo)char *cyl_height=100;char *cyl_diam=40;double direction3=0,0,1;/延Z軸正方向tag_t obj=NULL_TAG;UF_MODL_create_cyl1(sign, cyl_orig,cyl_height,cyl_diam,direction, &obj);UF_UI_open_listing_window(); /顯示信息框:tag/*Returns the tag of the current display part. In a non-assembly part, this is the same as the work part. If there currently isnt a displayed part, a NULL_TAG is returned. */obj=UF_PART_ask_display_part();if(obj = NULL_TAG) /沒(méi)有部件的時(shí)候顯示的信息提示框 uc1601 ( 當(dāng)前沒(méi)有任何文件可供操作!,1); else char s10;sprintf(s, %d,obj); /sprinf()功能:把格式化的數(shù)據(jù)寫(xiě)入某個(gè)字符串UF_UI_write_listing_window(s);return;extern void ufusr( char *param, int *retcode, int rlen )/提供入口點(diǎn)if(UF_initialize()!=0)return;do_ugopen_api ();UF_terminate();return;extern int ufusr_ask_unload(void)return(UF_UNLOAD_IMMEDIATELY);運(yùn)行結(jié)果截圖:(1)無(wú)部件時(shí)的輸出(2)有部件時(shí)的輸出結(jié)果3、open part 用戶(hù)入口實(shí)例創(chuàng)建open part user exit在用戶(hù)點(diǎn)擊“open”時(shí)創(chuàng)建新部件,在其中創(chuàng)建sphere詳細(xì)說(shuō)明user exit設(shè)置文件過(guò)程代碼如下:#include #include #include #include #include #include #include #define UF_CALL(X) (report( _FILE_, _LINE_, #X, (X)static int report( char *file, int line, char *call, int irc)if (irc)char messg133;printf(%s, line %d: %sn, file, line, call);(UF_get_fail_message(irc, messg) ?printf( returned a %dn, irc) :printf( returned error %d: %sn, irc, messg);return(irc);static void do_ugopen_api(void)UF_FEATURE_SIGN sign = UF_NULLSIGN;tag_t part=null_tag;/如果沒(méi)有賦值的話(huà),直接就是tag_t part,當(dāng)你執(zhí)行.dll文件時(shí),就直接跑到建模環(huán)境了,沒(méi)有信息提示框。當(dāng)然你可以多申明幾個(gè)tag_tchar part_name13 = F:long.prt;/設(shè)置part名字以及存儲(chǔ)路徑double center 3 =0,0,0;/球心坐標(biāo)char * diam=100;int units =1; uc1601(創(chuàng)建直徑為100的球,1);UF_PART_new (part_name, units, &part);/在當(dāng)前的會(huì)話(huà)框中創(chuàng)建新的part,并把其作為工作部件/試比較下面兩個(gè)函數(shù)UF_MODL_create_sphere(sign,part,center,diam, &part );/UF_MODL_create_sphere1(sign,center,diam, &part);extern void ufusr(char *param, int *retcode, int paramLen) if (!UF_CALL(UF_initialize() do_ugopen_api();UF_CALL(UF_terminate(); extern int ufusr_ask_unload(void)return (UF_UNLOAD_IMMEDIATELY);運(yùn)行結(jié)果截圖:4、創(chuàng)建一個(gè)block,并指定某一特定面高亮顯示。代碼如下圖:#include #include #include #include#include#include#include#define UF_CALL(X) (report( _FILE_, _LINE_, #X, (X)static int report( char *file, int line, char *call, int irc)if (irc)char messg133;printf(%s, line %d: %sn, file, line, call);(UF_get_fail_message(irc, messg) ?printf( returned a %dn, irc) :printf( returned error %d: %sn, irc, messg);return(irc);static void do_ugopen_api(void)UF_FEATURE_SIGN sign=UF_NULLSIGN; tag_t obj=null_tag;double center 3=0,0,0 ; char *edge_len3=10,10,10;tag_t blk_feat;int units=2;/此行代碼的賦值,經(jīng)過(guò)調(diào)試,貌似只有1和2可以,它們的區(qū)別就是生成模型的默認(rèn)大小不同,可以自己調(diào)調(diào)看。char part_name13=F:long.part;/此段代碼有點(diǎn)小重要,注意一定要保證完整性,不完整的話(huà),估計(jì)會(huì)出現(xiàn)好多問(wèn)題,繞好多路。uc1601(創(chuàng)建一個(gè)正方體,并指定下表面高亮顯示,1);UF_PART_new(part_name,units,&obj);/UF_MODL_create_block(sign,obj,center,edge_len,&blk_feat);UF_MODL_create_block1(sign,center,edge_len,&blk_feat);uf_list_p_t face_list;/鏈表UF_MODL_create_list(&face_list);/創(chuàng)建鏈表UF_MODL_ask_feat_faces(blk_feat,&face_list);/獲取實(shí)體的個(gè)表面特征,并放入鏈表中int count=0;UF_MODL_ask_list_count(face_list,&count);for(int i=0;icount;i+)UF_MODL_ask_list_item(face_list,i,&obj);/從鏈表中取出對(duì)象int type;double point 20 ; double dir 20 ;double box 6;double radius;double rad_data; int norm_dir;UF_MODL_ask_face_data(obj,&type,point,dir,box,&radius,&rad_data,&norm_dir);/這個(gè)函數(shù)非常重要,可以說(shuō)是本段代碼中最核心的部分。if(dir0=0&dir1=0&dir2=-1)/確定高亮顯示的那個(gè)面的法向量UF_DISP_set_highlight(obj,1);/UF_OBJ_set_color(obj, 186);break;/*ARGSUSED*/extern void ufusr(char *param, int *retcode, int paramLen)if (!UF_CALL(UF_initialize()do_ugopen_api();UF_CALL(UF_terminate();extern int ufusr_ask_unload(void)return (UF_UNLOAD_IMMEDIATELY);運(yùn)行結(jié)果截圖:注:和高亮顯示還有一個(gè)類(lèi)似的設(shè)置,就是給實(shí)體上色,所用到的函數(shù)是:UF_OBJ_set_color(obj, 186);上面的這個(gè)函數(shù)是把對(duì)象顯示成紅色,如下圖:“186”是紅色的代號(hào)。這些數(shù)字可以在UG交互模式下的對(duì)象顯示里查到,如下圖:5、用遍歷的形式輸出當(dāng)前part所有面的tag至listing window代碼如下:#include #include #include #include #include #include #include #include #define UF_CALL(X) (report( _FILE_, _LINE_, #X, (X)static int report( char *file, int line, char *call, int irc)if (irc)char messg133;printf(%s, line %d: %sn, file, line, call);(UF_get_fail_message(irc, messg) ?printf( returned a %dn, irc) :printf(returned error %d: %sn, irc, messg);return(irc);static void do_ugopen_api(void)UF_FEATURE_SIGN sign = UF_NULLSIGN;double center 3 = 0,0,0; char * edge_len 3 =100,100,100; tag_t blk_feat =null_tag;char * part_name=F:long;int units=1;tag_t part =NULL_TAG;uc1601(創(chuàng)建一個(gè)block,并顯示每個(gè)面的tag,1);UF_PART_new(part_name,units,&part);/在當(dāng)前會(huì)話(huà)窗口中創(chuàng)建一個(gè)part,并使其成為工作部件UF_CALL(UF_MODL_create_block1(sign,center,edge_len, &blk_feat);if(blk_feat = NULL_TAG) uc1601 ( 當(dāng)前沒(méi)有任何文件可供操作!,1); elseint type=70;int subtype=2;tag_t obj=null_tag;tag_t display_part=UF_PART_ask_display_part();UF_OBJ_cycle_objs_in_part(display_part,70,&obj);while(obj!=null_tag)UF_OBJ_ask_type_and_subtype(obj,&type,&subtype);/返回一個(gè)被標(biāo)記的對(duì)象的對(duì)象類(lèi)型和子類(lèi)型UF_OBJ_cycle_objs_in_part (display_part,UF_solid_type,&obj);/查詢(xún)遍歷對(duì)象if(subtype= UF_solid_face_subtype)char s50;sprintf(s, %d, obj);UF_CALL(UF_UI_open_listing_window();UF_CALL(UF_UI_write_listing_window(s);UF_CALL(UF_UI_write_listing_window(n);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);運(yùn)行結(jié)果截屏:6、遍歷當(dāng)前part中所有features,輸出其類(lèi)型至listing window,UF_MODL_ask_feat_type()代碼如下:#include #include #include #include #include #include #define UF_CALL(X) (report( _FILE_, _LINE_, #X, (X)static int report( char *file, int line, char *call, int irc)if (irc)char messg133;printf(%s, line %d: %sn, file, line, call);(UF_get_fail_message(irc, messg) ?printf( returned a %dn, irc) :printf( returned error %d: %sn, irc, messg);return(irc);static void do_ugopen_api(void)char * part_name=F:NX;UF_FEATURE_SIGN sign = UF_NULLSIGN;tag_t part=null_tag;double center 3 =0,0,0;char * diam=100;int units =1; uc1601(創(chuàng)建直徑為100的球,并顯示其實(shí)體特征。,1);UF_PART_new (part_name, units, &part);/在當(dāng)前的會(huì)話(huà)框中創(chuàng)建新的part,并把其作為工作部件UF_MODL_create_sphere1(sign,center,diam, &part);int count = 0;char* solid_feature;tag_t found = NULL_TAG;tag_t display_part = UF_PART_ask_display_part();UF_UI_open_listing_window();UF_OBJ_cycle_objs_in_part(display_part,UF_feature_type,&found); while( found != NULL_TAG )count+;UF_CALL(UF_MODL_ask_feat_type(found,&solid_feature);/獲取輸入的特征的類(lèi)型UF_CALL(UF_UI_write_listing_window(feature:);UF_CALL(UF_UI_write_listing_window(solid_feature);UF_CALL(UF_UI_write_listing_window(n);UF_CALL(UF_OBJ_cycle_objs_in_part(display_part,UF_feature_type,&found);extern void ufusr(char *param, int *retcode, int paramLen)if (!UF_CALL(UF_initialize()do_ugopen_api();UF_CALL(UF_terminate();extern int ufusr_ask_unload(void)return(UF_UNLOAD_IMMEDIATELY);運(yùn)行結(jié)果截屏:6、創(chuàng)建人機(jī)交互界面新建圓柱體,并可以隨意選擇原點(diǎn)和矢量方向。代碼如下:#include #include #include #include #include #include #include #include #include #include #include #include cylinder.h#define CHANGE_CB_COUNT ( 3 + 1 ) /* Add 1 for the terminator */ tag_t blk_tag= null_tag;double blk_orig = 0,0,0; double direction 3 ;char * part_name=F:long;int units=1;static UF_STYLER_callback_info_t CHANGE_cbsCHANGE_CB_COUNT = UF_STYLER_DIALOG_INDEX, UF_STYLER_APPLY_CB , 0, CHANGE_apply_cb, CHANGE_ACTION_2 , UF_STYLER_ACTIVATE_CB , 1, CHANGE_action_2_act_cb, CHANGE_ACTION_3 , UF_STYLER_ACTIVATE_CB , 1, CHANGE_action_3_act_cb, UF_STYLER_NULL_OBJECT, UF_STYLER_NO_CB, 0, 0 ;static UF_MB_styler_actions_t actions = cylinder.dlg, NULL, CHANGE_cbs, UF_MB_STYLER_IS_NOT_TOP , NULL, NULL, NULL, 0 /* This is a NULL terminated list */;static int init_proc(UF_UI_selection_p_t select,void *user_data);extern void ufusr (char *param, int *retcode, int rlen)uc1601(創(chuàng)建一個(gè)圓柱,并指明原點(diǎn)和矢量,1); UF_PART_new(part_name,units,&blk_tag); int response = 0; int error_code = 0; if ( ( UF_initialize() ) != 0 ) return; if ( ( error_code = UF_STYLER_create_dialog ( cylinder.dlg, CHANGE_cbs, /* Callbacks from dialog */ CHANGE_CB_COUNT, /* number of callbacks*/ NULL, /* This is your client data */ &response ) ) != 0 ) char fail_message133; /* Get the user function fail message based on the fail code.*/ UF_get_fail_message(error_code, fail_message); UF_UI_set_status (fail_message); printf ( %sn, fail_message ); UF_terminate(); return;extern int ufusr_ask_unload (void) return ( UF_UNLOAD_IMMEDIATELY );extern void ufusr_cleanup (void) return;int CHANGE_apply_cb ( int dialog_id,void * client_data,UF_STYLER_item_value_type_p_t callback_data) if ( UF_initialize() != 0) return ( UF_UI_CB_CONTINUE_DIALOG ); /直徑的相關(guān)參數(shù) UF_STYLER_item_value_type_t data; data.item_id = REAL_0; data.item_attr = UF_STYLER_VALUE; data.indicator = UF_STYLER_REAL_VALUE; UF_STYLER_ask_value(dialog_id,&data);/用來(lái)查詢(xún)對(duì)話(huà)框控件的屬性值。 char diameter133; sprintf(diameter,%f,data.value.real); /高度的相關(guān)參數(shù) data.item_id = REAL_1; data.item_attr = UF_STYLER_VALUE; data.indicator = UF_STYLER_REAL_VALUE; UF_STYLER_ask_value(dialog_id,&data); char height133; sprintf(height,%f,data.value.real); UF_FEATURE_SIGN sign = UF_NULLSIGN; /tag_t blk_tag= null_tag; /UF_PART_new(part_name,units,&blk_tag); UF_MODL_create_cyl1(sign,blk_orig,diameter,height,direction , &blk_tag); UF_STYLER_free_value(&data);/釋放字符串或數(shù)組申請(qǐng)的內(nèi)存 UF_STYLER_ask_value(dialog_id,&data); UF_MODL_update(); UF_STYLER_free_value(&data); UF_terminate (); return (UF_UI_CB_CONTINUE_DIALOG); /選擇圓柱中心點(diǎn),選用點(diǎn)構(gòu)造器UF_UI_point_construct()int CHANGE_action_2_act_cb ( int dialog_id,void * client_data,UF_STYLER_item_value_type_p_t callback_data) if ( UF_initialize() != 0) return ( UF_UI_CB_CONTINUE_DIALOG ); char *cue = 點(diǎn)構(gòu)造器; UF_UI_POINT_base_method_t method = UF_UI_POINT_INFERRED; tag_t point_tag = NULL_TAG; /double sBasePoint3; int response; int error = UF_UI_point_construct(cue, &method, &point_tag, blk_orig, &response); UF_terminate (); return (UF_UI_CB_CONTINUE_DIALOG); /選擇圓柱方向(拾取向量對(duì)話(huà)框)int CHANGE_action_3_act_cb ( int dialog_id,void * client_data,UF_STYLER_item_value_type_p_t callback_data) if ( UF_initialize() != 0) return ( UF_UI_CB_CONTINUE_DIALOG ); double vec3, pnt3; int mode = UF_UI_ZC_AXIS;/默認(rèn)矢量方向 int disp_flag = UF_UI_DISP_NO_VECTOR;/顯示臨時(shí)坐標(biāo),是比較UF_UI_DISP_NO_VECTOR int response = 0; int ifail; UF_initialize(); ifail = UF_UI_specify_vector( 選擇一個(gè)矢量, &mode, disp_flag, vec, pnt, &response ); if ( ifail != 0 | response != UF_UI_OK ) printf( No vector selected n ); else printf( Vect base (%f, %f, %f), direction (%f, %f, %f) n, pnt0, pnt1, pnt2, vec0, vec1, vec2 ); fflush( stdout ); UF_terminate (); /double direction3; for(int i=0;i3;i+) directioni=veci-pnti; /* Callback acknowledged, do not terminate dialog */ return (UF_UI_CB_CONTINUE_DIALOG); static int init_proc(UF_UI_selection_p_t select,void* user_data) /指明了mask_triple數(shù)組的長(zhǎng)度int num_triples = 1;UF_UI_mask_t mask_triples = UF_solid_type, 0, UF_UI_SEL_FEATURE_SOLID_BODY;if(UF_UI_set_sel_mask(select, UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples) = 0)return (UF_UI_SEL_SUCCESS);elsereturn (UF_UI_SEL_FAILURE);運(yùn)行結(jié)果截屏7、(1)新建一個(gè)對(duì)象,選擇對(duì)象的面,返回這個(gè)面的tag值。代碼如下:#include #include #include #include #include static int sel_init_proc(UF_UI_selection_p_t select,void *user_data);#define UF_CALL(X) (report( _FILE_, _LINE_, #X, (X)static int report( char *file, int line, char *call, int irc) if (irc) char messg133; printf(%s, line %d: %sn, file, line, call); (UF_get_fail_message(irc, messg) ? printf( returned a %dn, irc) : printf( returned error %d: %sn, irc, messg); return(irc);static void do_ugopen_api(void)/類(lèi)選擇對(duì)話(huà)框相關(guān)變量 char cue = Select Objects; char title = Select faces; int scope=UF_UI_SEL_SCOPE_NO_CHANGE;int response, count, i; tag_p_t objects;int error_code = 0;char* str = (char*)UF_allocate_memory(sizeof(unsigned int)+1,&error_code); UF_UI_open_listing_window();if(UF_CALL(UF_UI_select_with_class_dialog( cue, title, scope,sel_init_proc, NULL, &response, &count, &objects) = 0) printf(object count = %dn,count); if (response = UF_UI_OK & count 0) for (i=0; icount; i+) sprintf(str,%dn,objectsi); UF_UI_write_listing_window(str); UF_DISP_set_highlight(objectsi, 0);/把選中的對(duì)象高亮顯示 UF_free(objects); /* selection initialization procedure */static int sel_init_proc(UF_UI_selection_p_t select,void* user_data) int num_triples=1; UF_UI_mask_t mask_triples = UF_solid_type, 0, UF_UI_SEL_FEATURE_PLANAR_FACE; /* enable only lines and edges */ if(UF_CALL(UF_UI_set_sel_mask(select,UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC, num_triples, mask_triples) = 0) return (UF_UI_SEL_SUCCESS); else return (UF_UI_SEL_FAILURE); /*ARGSUSED*/void ufusr(char *param, int *retcode, int param_len) if (!UF_CALL(UF_initialize() do_ugopen_api(); UF_CALL(UF_terminate(); int ufusr_ask_unload(void) return (UF_UNLOAD_IMMEDIATELY);運(yùn)行結(jié)果截屏:(2)讀取文本文件里的內(nèi)容和往文本文件中寫(xiě)入信息。代碼如下:#include #include #include #include #include #include #include #include #include #include #include #include Multiple_text.husing namespace std;#define CHANGE_CB_COUNT ( 3 + 1 ) /* Add 1 for the terminator */char prompt_string133=請(qǐng)選取文本文件;char title_string133=選取文本文件;char filter_string133 = 文本文件;char default_name133= ;char filename133;int response=0;static UF_STYLER_callback_info_t CHANGE_cbsCHANGE_CB_COUNT = UF_STYLER_DIALOG_INDEX, UF_STYLER_APPLY_CB , 0, CHANGE_apply_cb, CHANGE_ACTION_1 , UF_STYLER_ACTIVATE_CB , 1, CHANGE_action_1_act_cb, CHANGE_ACTION_2 , UF_STYLER_ACTIVATE_CB , 1, CHANGE_action_2_act_cb, UF_STYLER_NULL_OBJECT, UF_STYLER_NO_CB, 0, 0 ;static UF_MB_styler_actions_t actions = Multiple_text.dlg, NULL, CHANGE_cbs, UF_MB_STYLER_IS_NOT_TOP , NULL, NULL, NULL, 0 /* This is a NULL terminated list */;extern void ufusr(char *param, int *retcode, int rlen) int response = 0; int error_code = 0; if ( ( UF_initialize() ) != 0 ) return; if ( ( error_code = UF_STYLER_create_dialog ( Multiple_text.dlg, CHANGE_cbs, /* Callbacks from dialog */ CHANGE_CB_COUNT, /* number of callbacks*/ NULL, /* This is your client data */ &response ) ) != 0 ) char fail_message133; /* Get the user function fail message based on the fail code.*/ UF_get_fail_message(error_code, fail_message); UF_UI_set_status (fail_message); printf ( %sn, fail_message ); UF_terminate(); return;extern int ufusr_ask_unload (void) /* unload immediately after application exits*/ return ( UF_UNLOAD_IMMEDIATELY ); /*via the unload selection dialog. */ /*return ( UF_UNLOAD_SEL_DIALOG ); */ /*when UG terminates. */ /*return ( UF_UNLOAD_UG_TERMINATE ); */extern void ufusr_cleanup (void) return;int CHANGE_apply_cb ( int dialog_id, void * client_data, UF_STYLER_item_value_type_p_t callback_data) /* Make sure User Function is available. */ if ( UF_initialize() != 0) return ( UF_UI_CB_CONTINUE_DIALOG ); /* - Enter your callback code here - */ UF_terminate (); /* Callback acknowledged, do not terminate dialog */ /* A return value of UF_UI_CB_EXIT_DIALOG will not be accepted */ /* for this callback type. You must respond to your apply button.*/ return (UF_UI_CB_CONTINUE_DIALOG); int CHANGE_action_1_act_cb ( int dialog_id, void * client_data, UF_STYLER_item_value_type_p_t callback_data) /* Make sure User Function is available. */ if ( UF_initialize() != 0) return ( UF_UI_CB_CONTINUE_DIALOG ); /* - Enter your callback code here - */ UF_UI_create_filebox ( prompt_string, title_string, filter_string, default_name,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
0 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- NX 二次開(kāi)發(fā) 習(xí)題 源碼
鏈接地址:http://m.appdesigncorp.com/p-6525041.html