【NX二次开发】制图例子
1.在制图模块下,获得当前图纸页,投三视图,视图移动位置
2.切换到建模模块,将子部件设为工作部件,修剪、偏置实体
3.切换到制图模块,再次投图。并导出DWG文件


效果:

源码:
1 #include "Text.h" 2 3 #include <uf_defs.h> 4 #include <NXOpen/NXException.hxx> 5 #include <NXOpen/Session.hxx> 6 #include <NXOpen/Part.hxx> 7 #include <NXOpen/PartCollection.hxx> 8 #include <NXOpen/Session.hxx> 9 10 11 #include <NXOpen/Part.hxx> 12 #include <NXOpen/PartCollection.hxx> 13 #include <NXOpen/Session.hxx> 14 #include <NXOpen/DxfdwgCreator.hxx> 15 #include <NXOpen/DexManager.hxx> 16 17 //输入原型或者事例输出原型 18 tag_t ReturnPrototype(tag_t tagPartInput) 19 { 20 tag_t tagPartInput_pro = 0; 21 if (UF_ASSEM_is_occurrence(tagPartInput)) //TRUE = if object occurrence or a part occurrence. FALSE = 原型 22 { 23 tagPartInput_pro = UF_ASSEM_ask_prototype_of_occ(tagPartInput); //获得part原 24 } 25 else 26 { 27 tagPartInput_pro = tagPartInput; 28 } 29 return tagPartInput_pro; 30 } 31 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 32 { 33 UF_initialize(); 34 35 UF_DRAW_set_display_state(2);//显示图纸页 2 = Drawing View 1 = Modeling View 36 37 //得到当前图纸标识 38 tag_t drawing_tag; 39 UF_DRAW_ask_current_drawing(&drawing_tag); 40 41 char *view_name = "Front"; //主视图 的视图名称 42 tag_t view_tag; 43 UF_VIEW_ask_tag_of_view_name(view_name, &view_tag); //获得视图布局标识ID 44 double reference_point_a1[2] = { 150, 160 }; //中心坐标位置 45 //设置视图参数 = 图纸参数 46 UF_DRAW_view_info_t view_info; 47 UF_DRAW_initialize_view_info(&view_info); 48 view_info.view_status = UF_DRAW_ACTIVE_VIEW; 49 view_info.anchor_point = NULL_TAG; 50 view_info.view_scale = 1; //视图比例 51 view_info.use_ref_pt = FALSE; 52 view_info.inherit_boundary = FALSE; 53 tag_t import_view_tag; 54 UF_DRAW_import_view(drawing_tag, view_tag, reference_point_a1, &view_info, &import_view_tag); 55 double reference_point_a2[2] = { 150, 90 }; //中心坐标位置 56 double reference_point_a3[2] = { 240, 160 }; //中心坐标位置 57 58 tag_t ortho_view_tag2; 59 tag_t ortho_view_tag3; 60 UF_DRAW_add_orthographic_view(drawing_tag, import_view_tag, UF_DRAW_project_infer, reference_point_a2, &ortho_view_tag2); 61 UF_DRAW_add_orthographic_view(drawing_tag, import_view_tag, UF_DRAW_project_infer, reference_point_a3, &ortho_view_tag3); 62 double reference_point_a3_mov[2] = { 220, 90 }; //中心坐标位置 63 UF_DRAW_move_view(ortho_view_tag3, reference_point_a3_mov); 64 65 //更新图纸上所有视图 66 UF_DRAW_upd_out_of_date_views(drawing_tag); 67 68 //Menu: 应用模块(N)->设计(D)->建模(D) 69 NXOpen::Session *theSession = NXOpen::Session::GetSession(); 70 theSession->ApplicationSwitchImmediate("UG_APP_MODELING"); 71 72 tag_t tagFace = 59583;//镶件底面 73 tag_t tagBody = NULL_TAG; 74 UF_MODL_ask_face_body(tagFace, &tagBody); 75 76 tag_t tagPart = NULL_TAG; 77 UF(UF_ASSEM_ask_parent_component(tagFace, &tagPart)); 78 UF(UF_ASSEM_set_work_part(ReturnPrototype(tagPart))); 79 80 81 //创建固定的基准平面 82 double Origin_Point[3] = { 0, 0, 13 }; 83 double Plane_Normal[3] = { 0, 0, 1 }; 84 tag_t Plane_Tag = NULL_TAG; 85 UF_MODL_create_fixed_dplane(Origin_Point, Plane_Normal, &Plane_Tag); 86 87 double Origin_Point2[3] = { 0, 0, 5 }; 88 double Plane_Normal2[3] = { 0, 0, 1 }; 89 tag_t Plane_Tag2 = NULL_TAG; 90 UF_MODL_create_fixed_dplane(Origin_Point2, Plane_Normal2, &Plane_Tag2); 91 92 93 //创建修剪体 94 tag_t trim_feature; 95 UF(UF_MODL_trim_body(tagBody, Plane_Tag, 0, &trim_feature)); 96 //创建修剪体 97 tag_t trim_feature2; 98 UF(UF_MODL_trim_body(tagBody, Plane_Tag2,1, &trim_feature2)); 99 100 101 uf_list_p_t list1 = NULL;//定义链表 102 UF_MODL_create_list(&list1); //创建链表 103 //给链表赋值 UF_MODL_put_list_item(list1,tagObj); 104 UF_MODL_ask_feat_faces(trim_feature2, &list1); 105 106 tag_t tagOffsetFeat; 107 UF_MODL_create_face_offset("1", list1, &tagOffsetFeat); 108 109 110 UF_free(list1); //释放链表指针 111 list1 = NULL; //防止悬垂指针 112 113 114 UF_ASSEM_set_work_part(UF_PART_ask_display_part()); 115 116 //Menu: 应用模块(N)->设计(D)->制图(F) 117 theSession->ApplicationSwitchImmediate("UG_APP_DRAFTING"); 118 119 tag_t ortho_view_tag4; 120 UF_DRAW_copy_view(ortho_view_tag2, &ortho_view_tag4); 121 double ortho_view_tag4_mov[2] = { 60, 90 }; //中心坐标位置 122 UF_DRAW_move_view(ortho_view_tag4, ortho_view_tag4_mov); 123 UF_DRAW_update_one_view(drawing_tag, ortho_view_tag4); 124 125 /* 126 导出dwg 127 NXOpen::Session *theSession = NXOpen::Session::GetSession(); 128 DxfdwgCreator *dxfdwgCreator1; 129 dxfdwgCreator1 = theSession->DexManager()->CreateDxfdwgCreator(); 130 dxfdwgCreator1->SetExportData(DxfdwgCreator::ExportDataOptionDrawing); 131 dxfdwgCreator1->SetAutoCADRevision(DxfdwgCreator::AutoCADRevisionOptionsR2004); 132 dxfdwgCreator1->SetViewEditMode(true); 133 dxfdwgCreator1->SetFlattenAssembly(true); 134 dxfdwgCreator1->SetExportScaleValue("1:1"); 135 //dxfdwgCreator1->SetOutputFileType(DxfdwgCreator::OutputFileTypeOptionDxf);//导出DXF 136 dxfdwgCreator1->SetOutputFileType(DxfdwgCreator::OutputFileTypeOptionDwg);//导出DWG 137 dxfdwgCreator1->SetOutputFile("C:\\Users\\2055\\Desktop\\XJ_2D\\test5.dwg"); 138 dxfdwgCreator1->ObjectTypes()->SetCurves(true); 139 dxfdwgCreator1->ObjectTypes()->SetAnnotations(true); 140 dxfdwgCreator1->ObjectTypes()->SetStructures(true); 141 dxfdwgCreator1->SetInputFile("C:\\Users\\2055\\Desktop\\XJ_2D\\_model12_dwg 4.prt"); // 先保存 然后用当前显示部件 142 NXObject *nXObject1; 143 nXObject1 = dxfdwgCreator1->Commit(); 144 dxfdwgCreator1->Destroy(); 145 */ 146 UF_terminate(); 147 } 148 149 extern int ufusr_ask_unload(void) 150 { 151 return (UF_UNLOAD_IMMEDIATELY); 152 }

浙公网安备 33010602011771号