请选择 进入手机版 | 继续访问电脑版

NX二次开发

 找回密码
 立即注册
查看: 253|回复: 0

[技术分享] 分享一个我在UG中读写XML源码

[复制链接]

7

主题

14

帖子

91

积分

见龙在田

Rank: 2

积分
91
发表于 2019-5-6 09:14:36 | 显示全部楼层 |阅读模式
QQ图片20190506090757.png
要安装MSXML4.0 或者6.0
(我也用过tinyxml的库,差不多的)


  1. #if ! defined ( __hp9000s800 ) && ! defined ( __sgi ) && ! defined ( __sun )
  2. #   include <strstream>
  3. #   include <iostream>
  4.     using std::ostrstream;
  5.     using std::endl;   
  6.     using std::ends;
  7.     using std::cerr;
  8. #else
  9. #   include <strstream.h>
  10. #   include <iostream.h>
  11. #endif
  12. #include <uf_exit.h>
  13. #include <uf.h>
  14. #include <uf_ui.h>
  15. #include <uf_exit.h>
  16. #include <uf_obj.h>
  17. #include <uf_styler.h>
  18. #include <string.h>
  19. #include <uf_modl.h>
  20. #include <string>
  21. #include <io.h>
  22. #include <vector>
  23. #include <iostream>
  24. #include <fstream>
  25. #include <math.h>
  26. #import "msxml4.dll"  
  27. using namespace MSXML2;


  28. #define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))
  29. static int report( char *file, int line, char *call, int irc)
  30. {
  31.         if (irc)
  32.         {
  33.                 char    messg[133];
  34.                 printf("%s, line %d:  %s\n", file, line, call);
  35.                 (UF_get_fail_message(irc, messg)) ?
  36.                         printf("    returned a %d\n", irc) :
  37.                 printf("    returned error %d:  %s\n", irc, messg);
  38.         }
  39.         return(irc);
  40. }

  41. extern void UF_OBJ_get_layer(tag_t object_id,int * lay)
  42. {
  43.         UF_OBJ_disp_props_t disp_props;
  44.         UF_OBJ_ask_display_properties(object_id,&disp_props);
  45.         *lay =  disp_props.layer;
  46. };

  47. extern void UF_OBJ_get_color(tag_t object_id ,int *col)
  48. {
  49.         UF_OBJ_disp_props_t disp_props;
  50.         UF_OBJ_ask_display_properties(object_id,&disp_props);
  51.         *col =  disp_props.color;
  52. };

  53. extern void UF_OBJ_get_blank_status(tag_t object_id,int *blank)
  54. {
  55.         UF_OBJ_disp_props_t disp_props;
  56.         UF_OBJ_ask_display_properties(object_id,&disp_props);
  57.         *blank =  disp_props.blank_status;
  58. };

  59. extern void UF_OBJ_get_font(tag_t object_id,int *fonts)
  60. {
  61.         UF_OBJ_disp_props_t disp_props;
  62.         UF_OBJ_ask_display_properties(object_id,&disp_props);
  63.         *fonts =  disp_props.font;
  64. };

  65. extern void UF_OBJ_get_line_width(tag_t object_id,int *line_width)
  66. {
  67.         UF_OBJ_disp_props_t disp_props;
  68.         UF_OBJ_ask_display_properties(object_id,&disp_props);
  69.         *line_width =  disp_props.line_width;
  70. };


  71. extern void UF_OBJ_get_highlight_status(tag_t object_id,int *status)
  72. {
  73.         UF_OBJ_disp_props_t disp_props;
  74.         UF_OBJ_ask_display_properties(object_id,&disp_props);
  75.         *status =  disp_props.highlight_status;
  76. };


  77. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  78. ///////////////////////////////////////////////////////////////////////////////////////////////////
  79. //选择实体
  80. static int init_proc_body_and_curve(UF_UI_selection_p_t select,void* user_data)
  81. {
  82.         int num_triples = 5;//表示mask_triples里面的种类
  83.         UF_UI_mask_t mask_triples[] =
  84.         {
  85.                 UF_line_type,0,0,
  86.                 UF_circle_type,0,0,
  87.                 UF_conic_type,0,0,
  88.                 UF_spline_type,0,0,
  89.                 UF_solid_type,UF_solid_body_subtype,0,
  90.         };
  91.         if((UF_CALL(UF_UI_set_sel_mask(select,
  92.                 UF_UI_SEL_MASK_CLEAR_AND_ENABLE_SPECIFIC,
  93.                 num_triples, mask_triples))) == 0)
  94.         {
  95.                 return (UF_UI_SEL_SUCCESS);
  96.         }
  97.         else
  98.         {
  99.                 return (UF_UI_SEL_FAILURE);
  100.         }
  101. }

  102. static void SetAttributeToXml(MSXML2::IXMLDOMElementPtr  ptElement,char  cvalue[7][256])
  103. {
  104.         char name1[7][20]={"ID","layer","color","width","toumin","name","font"};
  105.         for (int l=0;l<7;l++)
  106.         {
  107.                 ptElement->setAttribute(name1[l], cvalue[l]);
  108.         }
  109. }

  110. static void  write_object_att(uf_list_p_t body_list,int num)
  111. {
  112.         if (num > 0 )
  113.         {
  114.                 const char * xmlFile = "d:\\1.xml";
  115.                 ::CoInitialize(NULL);
  116.                 if ( FAILED( CoInitialize( NULL ) ) )
  117.                 {
  118.                         uc1601 ( "CoInitialize( )失败!", 1 ); return;
  119.                 }
  120.                 HRESULT hr = E_UNEXPECTED;
  121.                 MSXML2::IXMLDOMDocumentPtr DomDocPtr;
  122.                 hr = DomDocPtr.CreateInstance( __uuidof( DOMDocument40 ) );
  123.                 if ( FAILED( hr ) )
  124.                 {
  125.                         uc1601("创建COM对象实例失败!", 1);
  126.                         CoUninitialize();
  127.                         return;
  128.                 }
  129.                 DomDocPtr->async = VARIANT_FALSE;


  130.                 MSXML2::IXMLDOMProcessingInstructionPtr pProInstruction = NULL;                // xml声明
  131.                 pProInstruction = DomDocPtr->createProcessingInstruction((_bstr_t)(char*)"xml", (_bstr_t)(char*)"version=\"1.0\" encoding=\"gb2312\"");
  132.                 DomDocPtr->appendChild(pProInstruction);


  133.                 MSXML2::IXMLDOMElementPtr DomRoot = NULL_TAG;
  134.                 DomRoot = DomDocPtr->createElement(_bstr_t("Part") );
  135.                 DomDocPtr->appendChild( DomRoot );


  136.                 tag_t object_tag=NULL_TAG;
  137.                 for (int k =0;k<num;k++)
  138.                 {
  139.                         UF_MODL_ask_list_item(body_list,k,&object_tag);
  140.                         char  cvalue[7][256];
  141.                         //取实体ID
  142.                         char str_id[256]="";
  143.                         sprintf(cvalue[0],"%d",object_tag);

  144.                         //取图层
  145.                         int obj_lay=1;
  146.                         UF_OBJ_get_layer(object_tag,&obj_lay);//取得对象图层
  147.                         sprintf(cvalue[1],"%d",obj_lay);

  148.                         //取颜色
  149.                         int obj_color=1;
  150.                         UF_OBJ_get_color(object_tag,&obj_color);//取颜色
  151.                         sprintf(cvalue[2],"%d",obj_color);

  152.                         //取线宽
  153.                         int obj_width=1;
  154.                         UF_OBJ_get_line_width(object_tag,&obj_width);//取线宽
  155.                         sprintf(cvalue[3],"%d",obj_width);

  156.                         //取透明度
  157.                         int obj_trans=0;
  158.                         UF_OBJ_ask_translucency(object_tag,&obj_trans);//取透明度
  159.                         sprintf(cvalue[4],"%d",obj_trans);

  160.                         //取实体名
  161.                         UF_OBJ_ask_name(object_tag,cvalue[5]);//取实体名

  162.                         int linefont;
  163.                         UF_OBJ_get_font(object_tag,&linefont);
  164.                         sprintf(cvalue[6],"%d",linefont);

  165.                         int objtype,uftype;
  166.                         UF_OBJ_ask_type_and_subtype(object_tag, &objtype, &uftype); //获得对象类型

  167.                         MSXML2::IXMLDOMElementPtr BodyElement = DomRoot->GetownerDocument()->createElement(_bstr_t("OBJ" ));
  168.                         SetAttributeToXml(BodyElement, cvalue);
  169.                         DomRoot->appendChild( BodyElement );

  170.                 }
  171.                 DomDocPtr->save( "d://1.xml" );
  172.         }
  173. }

  174. extern DllExport void ufsta( char *param, int *returnCode, int rlen )
  175. {
  176.     if( UF_CALL(UF_initialize()) )
  177.     {
  178.         return;
  179.     }
  180.         uf_list_p_t body_list;  
  181.         UF_MODL_create_list(&body_list);

  182.         int i=0;
  183.         char cue[] = "选择对象";
  184.         char title[] = "对象选择对话框";
  185.         int response=0;
  186.         tag_p_t objects;
  187.         int count=0;
  188.         UF_UI_select_with_class_dialog(cue,title,0, init_proc_body_and_curve, NULL,&response,&count, &objects);
  189.         if (response == UF_UI_OK&&count>0)
  190.         {
  191.                 i=count;
  192.                 for(int k=0;k<count;k++)
  193.                 {  
  194.                         UF_DISP_set_highlight(objects[k],0);//取消对象的高亮显示
  195.                         UF_MODL_put_list_item(body_list, objects[k]);  // next_tag对象加入到链表里
  196.                 }
  197.         }
  198.         if (i>0)
  199.         {
  200.                 write_object_att(body_list,i);
  201.         }
  202.     UF_CALL(UF_terminate());
  203. }

  204. extern int ufusr_ask_unload( void )
  205. {
  206.     return( 1 );
  207. }


  208. //////////////////////

  209. 以下用tixml
  210. //新建XML
  211.         if (num > 0 )
  212.         {
  213.                 char xmlFile[256];
  214.                 strcpy(xmlFile,dir_name);
  215.                 strcat(xmlFile,"prt_att.xml");

  216.                 TiXmlDocument doc;
  217.                 TiXmlDeclaration * decl = new TiXmlDeclaration("1.0", "gb2312", "");  //定义开头
  218.                 doc.LinkEndChild(decl);
  219.                 TiXmlElement * PartElement = new TiXmlElement( "Part" ); //新建 一个根
  220.                 if (!PartElement)
  221.                 {
  222.                         doc.Clear();
  223.                         return 1;
  224.                 }
  225.                 tag_t object_tag=NULL_TAG;
  226.                 for (int k =0;k<num;k++)
  227.                 {
  228.                         UF_MODL_ask_list_item(body_list,k,&object_tag);
  229.                         char  cvalue[7][256];
  230.                         //取实体ID
  231.                         char str_id[256]="";
  232.                         //sprintf(cvalue[0],"%d",object_tag);
  233.                         TIXML_SNPRINTF( cvalue[0], sizeof(cvalue[0]), "%d", object_tag);

  234.                         //取图层
  235.                         int obj_lay=1;
  236.                         UF_OBJ_get_layer(object_tag,&obj_lay);//取得对象图层
  237.                         //sprintf(cvalue[1],"%d",obj_lay);
  238.                         TIXML_SNPRINTF( cvalue[1], sizeof(cvalue[1]), "%d", obj_lay);

  239.                         //取颜色
  240.                         int obj_color=1;
  241.                         UF_OBJ_get_color(object_tag,&obj_color);//取颜色
  242.                         //sprintf(cvalue[2],"%d",obj_color);
  243.                         TIXML_SNPRINTF( cvalue[2], sizeof(cvalue[2]), "%d", obj_color);

  244.                         //取线宽
  245.                         int obj_width=1;
  246.                         UF_OBJ_get_line_width(object_tag,&obj_width);//取线宽
  247.                         //sprintf(cvalue[3],"%d",obj_width);
  248.                         TIXML_SNPRINTF( cvalue[3], sizeof(cvalue[3]), "%d", obj_width);

  249.                         //取透明度
  250.                         int obj_trans=0;
  251.                         UF_OBJ_ask_translucency(object_tag,&obj_trans);//取透明度
  252.                         //sprintf(cvalue[4],"%d",obj_trans);
  253.                         TIXML_SNPRINTF( cvalue[4], sizeof(cvalue[4]), "%d", obj_trans);

  254.                         //取实体名
  255.                         UF_OBJ_ask_name(object_tag,cvalue[5]);//取实体名

  256.                         int linefont;
  257.                         UF_OBJ_get_font(object_tag,&linefont);
  258.                         //sprintf(cvalue[6],"%d",linefont);
  259.                         TIXML_SNPRINTF( cvalue[6], sizeof(cvalue[6]), "%d", linefont);

  260.                         int objtype,uftype;
  261.                         UF_OBJ_ask_type_and_subtype(object_tag, &objtype, &uftype); //获得对象类型


  262.                                 TiXmlElement * BodyElement = new TiXmlElement( "OBJ" ); //新建个实体标签
  263.                                 SetAttributeToXml(BodyElement, cvalue);
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋| ( 蜀ICP备16014681号

GMT+8, 2019-7-24 15:26 , Processed in 0.082243 second(s), 29 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

快速回复 返回顶部 返回列表