【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 }

 

posted @ 2020-10-10 08:22  王牌飞行员_里海  阅读(501)  评论(0)    收藏  举报