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

唐康林NX二次开发论坛

 找回密码
 立即注册
查看: 371|回复: 2

[技术分享] NX二次开发利用KF遍历所有点线分类图层操作

[复制链接]

2

主题

5

帖子

92

积分

见龙在田

Rank: 2

积分
92
发表于 2018-5-4 21:53:02 | 显示全部楼层 |阅读模式
还是来个附件吧
=========================
请以后发贴,不要整这种不清不楚的东西。
①标题要明确;
②内容要表达出具体的内容,相关功能等。
③论坛发代码,要像下图这样,插入代码文字。(在发贴窗口中有一个<>图标,点一下,将代码粘贴到这个里面)
  1. #! NX/KF 5.0
  2. #
  3. #*******************************************************************************************
  4. #                                Design:         GuiTu
  5. #                                Date  :  2017.9.8
  6. #                                E_mall:         1714787391@qq.com
  7. #                                QQ    :  1714787391                        
  8. #                                name  :  批量层处理
  9. #*********#  文件名与类名  #****************************************************************
  10. Defclass:  guitu_setlayer (%ui_comp) ;

  11. (string) title:     "批量层处理";
  12. (string) cue:       "归途提示:选择要移动层对象";
  13. ############################    定义组区        ###########################################
  14. (list) DialogItems: {select_group:,fanyi_group:,set_group:};    # 对话框里组的  列表(list)

  15. ############################    参数声名区       ##########################################
  16. (any Parameter Modifiable)         layer_value: 256;
  17. (any Parameter Modifiable)         str:   "256";
  18. (any Parameter Modifiable)         str1:   "";
  19. (any Parameter Modifiable)         b1:   true;
  20. (any Parameter Modifiable)         b2:   true;
  21. (any Parameter Modifiable)         b3:   true;
  22. (any Parameter Modifiable)         b4:   true;
  23. (any Parameter Modifiable)         b5:   true; # 隐藏
  24. (any Parameter Modifiable)         b6:   true; # 草图

  25. (any Parameter Modifiable)         int:  256;

  26. ############################    UI界面 区       ##########################################
  27. (child) select_group:
  28. {
  29.     class, %ui_comp_group;
  30.     title, "选择目标";
  31.     Members, {select_face: };  
  32. };


  33.    
  34. (Child)  select_face:
  35. {
  36.         Class, %ui_comp_selection;
  37.           Many, false;                             #是否多选
  38.           SnapPointOverlay, false;
  39.           SoUpdateOption, 3;

  40.           Tooltip, "选择目标";
  41.           Scope, 1;
  42.           FilterTriple, {{2,0,0},{3,0,0},{5,0,0},{9,0,0},{197,0,0},{70,0,0},{19,0,0},{20,0,0},{43,0,0}};        #选择类型                          
  43.           SelectedObjects, {};               
  44.           SelectedObject, SelectedObjects:;  };
  45. (child) fanyi_group:
  46. {
  47.           class, %ui_comp_group;
  48.          title, "图层";
  49.             Members, {rh_label3:,rh_label4:,rh_label5:,rh_label6:, UI_button:,list_box:,integer:};                                           #####表示在shaft_group:组下有多少子规则
  50. };

  51. (child) rh_label3:
  52. {
  53.         class,     %ui_comp_label;
  54.         Title,     "遍历目标体="  ;
  55.           topAttach,  select_face:  ;                             
  56. };
  57. (child) rh_label4:
  58. {
  59.         class,       %ui_comp_label;
  60.         Title,    str1: ;
  61.         leftAttach,  rh_label3:;
  62.         topAttach,   select_face: ;
  63. };
  64. (child) rh_label5:
  65. {
  66.         class,     %ui_comp_label;
  67.         Title,    "" ;
  68.        topAttach, rh_label4: ;                             
  69. };
  70. (child) rh_label6:
  71. {
  72.         class,     %ui_comp_label;
  73.         Title,    "提示:   "+"~n" +"你的图层类别没有设置或设置格式与本工具有异"+"~n"+"你可通过设置图层类别来获得更多可选图层列表信息"+"~n"+"了解更多信息请点击下列图标按钮";
  74.         icon, "advwave_legend_icon_outofdate.bmp";        
  75.         topAttach,  rh_label5:  ;
  76.         leftAttach,  rh_label5:;                             
  77. };
  78. (Child) UI_button:
  79. {
  80.   Class, %ui_comp_button;
  81.   Title, " ";
  82.   icon,"informational_symbol.bmp"; #
  83. };
  84. (Child) list_box:
  85. {
  86.           Class, %ui_comp_list_box;
  87.           ListItems, Append_type_layer_string: ;        # 列表内容
  88.           SelectedItems, {};                #  返回选择的列表内容
  89.           selected, SelectedItems:;   
  90.           SingleSelect, false;            #  单选多选
  91.           ShowMoveUpDownButtons, true;    #  true显示上下移动按钮
  92.           DisplayRows, 4;                        #  列表框的显示行数
  93. };
  94. (any)  int_value:      first ( SplitString(nth( if list_box:SelectedItems:={} then 1  else first(list_box:SelectedItems:)+1    ,Append_type_layer_string:),"   "));

  95. (Child) integer:
  96. {
  97.     Title, " ";
  98.   Class, %ui_comp_integer;
  99.   value,int:;
  100.   MaximumValue, 2^30;
  101.   MinimumValue, -2^30;
  102.   Width, 0;
  103. };
  104. (child) set_group:
  105. {
  106.     class, %ui_comp_group;
  107.     title, "设置";
  108.     Members, {toggle:,toggle1: ,toggle2:,toggle4:,toggle5:,toggle3: };  
  109. };
  110. (Child) toggle: {
  111.   Class, %ui_comp_toggle;
  112.   title, "允许改动图层";
  113.   value, b1:;
  114. };
  115. (Child) toggle1: {
  116.   Class, %ui_comp_toggle;
  117.   title, "仅相同图层";
  118.   value, b2:;
  119. };
  120. (Child) toggle2: {
  121.   Class, %ui_comp_toggle;
  122.   title, "仅相同颜色";
  123.   value, b3:;
  124. };
  125. (Child) toggle4: {
  126.   Class, %ui_comp_toggle;
  127.   title, "仅显示对象";
  128.   value, b5:;
  129. };
  130. (Child) toggle5: {
  131.   Class, %ui_comp_toggle;
  132.   title, "不操作草图对象";
  133.   value, b6:;
  134. };

  135. (Child) toggle3: {
  136.   Class, %ui_comp_toggle;
  137.   title, "区分样条cntl和thru";
  138.   value, b4:;
  139. };


  140. ############################    代码 区       ##########################################

  141. # ********************************* 技术 一  获得选择对象信息

  142. #获得选择目标 Type (类型)
  143.               (String)   a: ug_object_askType(first(select_face:SelectedObjects:));
  144.               (list)       a1:   askTypeSubtype(first(select_face:SelectedObjects:));
  145.               (String)   a2:  if  a:!="" then  a:  else "" ;

  146. #( askcolor  info)
  147.               (integer) color1: ug_vd_si_ask_color(first(select_face:SelectedObjects:));
  148. #( asklayer  info)
  149.               (integer) layer1: if a:="ug_body" then asklayer(first(select_face:SelectedObjects:)) else  nth(5,mqc_askEntityDisplayData(ug_cam_askObjectTag(first(select_face:SelectedObjects:))));


  150. #( 图层   信息 )


  151. #给定遍历的的类型进行遍历
  152. (Any) cycle:  ug_cycleObjectsByType({MakeName(a2:)},"");
  153. # 遍历处理(区分 "ug_spline_thru"和"ug_spline_cntl")
  154. (Any) cycledeal_1:  loop {
  155.                        for $a from 0 to length(cycle:)-1;           
  156.                        for $b is  $a +1;
  157.                        if  ug_object_askType(nth($b,cycle:))= a:    append  {nth($b,cycle:)};
  158.                        
  159.                      }    ;

  160. (Any) cycledeal:   if  a2:="ug_spline_thru"|a2:="ug_spline_cntl"& toggle3:value:=true then  cycledeal_1:  else  cycle: ;  


  161. #+
  162. 基准平面
  163. ug_cycleObjectsByType({ug_datum_plane},"")

  164. #-

  165. #**********************************技术 二 扩展技术  获得对象类型所在图层

  166. (list) Categoryinfor:  mqc_askCategory();
  167. (list) askEmptyLayers:  mqc_askEmptyLayers();
  168. (list) askEmptyLayersatCategory:  findDuplicates( askEmptyLayers:+ Append_type_layer:);

  169. #收集类型所在的层
  170. (any) select_layer:   nth(5,mqc_askEntityDisplayData(ug_cam_askObjectTag(first(select_face:SelectedObjects:))));  

  171. (any) Append_type_layer:  loop {
  172.                        for $a from 0 to length(Categoryinfor:)-1;           
  173.                        for $b is  $a +1;
  174.                        for $m is  last(SplitString(first(nth($b,Categoryinfor:)),"_"));
  175.                        if  last(SplitString(a:,"_"))=$m  return  {if ug_AskWorkLayer()=select_layer:   then  256  else 256,ug_AskWorkLayer()}+nth(4,(nth($b,Categoryinfor:)));
  176.                        return is {256};
  177.   };

  178. # 1 .将int list 变为 str list        2.区分空层和非空层   mqc_ask_layer_entities({$m}, ALL,true)
  179. (any) Append_type_layer_string:  loop {
  180.                        for $a from 0 to length(Append_type_layer:)-1;           
  181.                        for $b is  $a +1;
  182.                        for $m is nth($b,Append_type_layer:);  
  183.                         append { if  mqc_findSublist( $m,   {  askEmptyLayersatCategory: } )={}&ug_AskWorkLayer()=$m  then  stringValue($m )+"   "+stringValue(length(mqc_askObjectsInLayer({$m}, ALL,true)))+"  "+"工作层" else if  mqc_findSublist( $m,   {  askEmptyLayersatCategory: } )={}   then stringValue($m )+"   "+stringValue(length(mqc_askObjectsInLayer({$m}, ALL,true)))   else stringValue($m ) } ;   
  184.                      };




  185. #*********************************  技术三 过滤机制
  186. #  收集颜色相同类型的object  toggle2:
  187. (list) sametypeColorobj: loop {
  188.                        for $a from 0 to length(cycledeal:)-1;           
  189.                        for $b is  $a +1;
  190.                        for $m is  ug_vd_si_ask_color(nth($b,cycledeal:));
  191.                        if  $m=color1:   Append  {nth($b,cycledeal:)} ;
  192.                };
  193. (list)  Colorobj:  if toggle2:value:=true then sametypeColorobj: else cycledeal:;
  194. #  收集图层相同类型的object   toggle1:
  195. (list) sametypelayerobj:  loop {
  196.                        for $a from 0 to length(cycledeal:)-1;           
  197.                        for $b is  $a +1;
  198.                        for $m is    if a:="ug_body" then asklayer(first(select_face:SelectedObjects:)) else nth(5,mqc_askEntityDisplayData(ug_cam_askObjectTag(nth($b,cycledeal:))));  
  199.                        if  $m=layer1:   Append  {nth($b,cycledeal:)} ;
  200. };
  201. (list)  layerobj:  if toggle1:value:=true then sametypelayerobj:  else cycledeal:;
  202. #  收集隐藏object   toggle4:
  203. (list) allblankobj:       mqc_askBlankedObjects();
  204. (list) selectobjblankobj:  loop {
  205.                        for $a from 0 to length(cycledeal:)-1;           
  206.                        for $b  is  $a +1;
  207.                        for $m is   nth($b,cycledeal:);
  208.                        for $T  is   ug_cam_askObjectTag($m) ;
  209.                        if mqc_findSublist( $T,   { allblankobj: } )={}   Append  {nth($b,cycledeal:)} ; # 表示仅仅收集没有隐藏对象
  210.                      };
  211. (list)  blankobj:  if toggle4:value:=false then cycledeal:  else selectobjblankobj:;

  212. #****技术(一)------1 (过滤处理)
  213. # 判断是否选相同颜色
  214. (list)  setlayerobj:  ug_findDuplicates(ug_findDuplicates(blankobj:+layerobj: )+ug_findDuplicates(layerobj:+Colorobj:  )+ug_findDuplicates(blankobj:+Colorobj:  ) ) ;

  215. # sket过滤   setlayerobj:

  216. (list) askFeat:  mqc_askFeatures();
  217. (any) sket: loop {
  218.                        for $a from 0 to length(setlayerobj:)-1;           
  219.                        for $b is  $a +1;
  220.                        for $m is nth($b,setlayerobj:);
  221.                        for $objtag is  ug_cam_askObjectTag($m);
  222.                        for $Featuretag is mqc_askFeatureOfObject ($objtag );
  223.                        if  $Featuretag!=-1  append{$m};
  224. };
  225. # collect is skect object
  226. (any) sketFeat: loop {
  227.                        for $a from 0 to length(sket:)-1;           
  228.                        for $b is  $a +1;
  229.                        for $m is nth($b,sket:);
  230.                        for $objtag is  ug_cam_askObjectTag($m);
  231.                        for $Featuretag is mqc_askFeatureOfObject ($objtag );
  232.                        if second(mqc_askFeatureNameAndType($Featuretag))="SKETCH"  append{$m};
  233. };

  234. # decide whether or not to select an operation skect object through  toggle5:value: is true or false

  235. (list)  endsetlayer:  if toggle5:value:=true then SetDifference(setlayerobj:,sketFeat:)  else setlayerobj:;


  236. #**********************************  技术 四   设置图层                 
  237. (any) setlayer: loop {
  238.                        for $a from 0 to length( endsetlayer:)-1;           
  239.                        for $b is  $a +1;
  240.                         if toggle:value:=False return 0;
  241.                        do ug_setObjectLayer(nth($b, endsetlayer:), makenumber(int_value:));
  242.                      };                  

  243. (list)  demandValue: {setlayer:};               
  244.                   






  245. #  对话框的初始化 1

  246. (Method integer) OnInitialize:(Instance $instance)
  247. @{
  248.         
  249.         
  250.         %ui_comp_setCacheValue(self(), int:,integer:,value);
  251.                 %ui_comp_setCacheValue(self(), b1:,toggle:,value);
  252.                  %ui_comp_setCacheValue(self(), b2:,toggle1:,value);
  253.                 %ui_comp_setCacheValue(self(), b3:,toggle2:,value);
  254.                 %ui_comp_setCacheValue(self(), b4:,toggle3:,value);
  255.                %ui_comp_setCacheValue(self(), b5:,toggle4:,value);
  256.                %ui_comp_setCacheValue(self(), b6:,toggle5:,value);
  257. #        if (string3:value:="guitu_information") then {%ui_comp_setCacheValue(self(), true,UI_button:,Visibility);} else    {%ui_comp_setCacheValue(self(), false ,UI_button:,Visibility);};

  258. if   (last(SplitString(a:,"_"))="point"&length(Append_type_layer_string:)=1) then
  259.               {
  260.         %ui_comp_setCacheValue(self(), true, rh_label6: ,Visibility);
  261.         %ui_comp_setCacheValue(self(), true,UI_button:,Visibility);
  262.                  }
  263. else   
  264.         {
  265.         %ui_comp_setCacheValue(self(), false , rh_label6: ,Visibility);
  266.          %ui_comp_setCacheValue(self(), false ,UI_button:,Visibility);
  267.         };
  268.   
  269. if  (a2:="ug_spline_thru"|a2:="ug_spline_cntl")
  270. then
  271.               {
  272.         %ui_comp_setCacheValue(self(), true,toggle3: ,Visibility);
  273.         
  274.                  }
  275. else   
  276.         {
  277.         %ui_comp_setCacheValue(self(), false , toggle3:  ,Visibility);
  278.         
  279.         };





  280. 0;
  281. };

  282. #更新机制 2
  283. (Method integer ) Update:(Instance $instance)
  284. @{

  285.    
  286.       %ui_comp_setCacheValue(self(),Append_type_layer_string:,list_box: ,ListItems);
  287.       %ui_comp_setCacheValue(self(),makenumber(int_value:),integer:,value);
  288.    
  289.         %ui_comp_setCacheValue(self(),  if a2:="" then "{"+format("%d",first(a1:))+","+format("%d",last(a1:)) +"}"+" :   可选图层列表" else a2: +" :   可选图层列表" ,rh_label5: ,Title);
  290.        %ui_comp_setCacheValue(self(),   format("%d",length(endsetlayer:)),rh_label4: ,Title);


  291. if ($instance = UI_button:) then
  292.    @{
  293.        ug_printValues( {" 批量层处理帮助 "});
  294.     ug_printValues( {"======================"});
  295.     ug_printValues( {"信息列表创建者      : "+ug_askUserName()});
  296.     ug_printValues( {"日期              : "+dateTimeString(localTime? ,True)});
  297.     ug_printValues( {"当前工作部件       : "+ug_askScenarioDirectory()+".prt"});
  298.     ug_printValues( {"系统平台          : "+ug_askOSName()});
  299.        ug_printValues( {"======= 过滤对象==========="});
  300.       ug_printValues( {"颜色相同对象       : ",length(Colorobj:)});
  301.        ug_printValues( {"图层相同          : ",length(layerobj:)});
  302.        ug_printValues( {"隐藏对象          : ",length(blankobj:)});
  303.        ug_printValues( {"遍历目标体        : ", length(setlayerobj: )});
  304.    ug_printValues( {"sket:        : ", sketFeat:});
  305.    ug_printValues( {"sket:        : ",setlayerobj:});

  306.         ug_printValues({"草图对象        : ", length(setlayerobj: )-length(notsketFeat: )});
  307.      ug_printValues( {"&&&&&&&&&&&&&&&&&&&      设置       &&&&&&&&&&&&&&&&&&&&&&&&&&&"});
  308.      ug_printValues( {"***************允许移动图层                开关作用 ***********************  : "+ "~n" });
  309.                   ug_printValues({"   是否移动对象 " + "~n" } );
  310.      ug_printValues({ "***************仅相同图层                   开关作用 ***********************  : "+ "~n" });
  311.                   ug_printValues({"   仅操作图层相同的类型对象 " + "~n" } );
  312.      ug_printValues({ "***************仅相同图层                  开关作用 ***********************  : "+ "~n" });
  313.                  ug_printValues({ "   仅操作图层相同的类型对象 " + "~n"  });
  314.     ug_printValues( {"***************仅相同颜色                   开关作用 ***********************  : "+ "~n" });
  315.                   ug_printValues({"   仅操作颜色相同的类型对象 " + "~n"  });
  316.      ug_printValues( {"**************仅显示对象                   开关作用 ***********************  : "+ "~n" });
  317.                   ug_printValues( {"仅操作当前显示的的类型对象 " + "~n" } );
  318.       ug_printValues({ "*************区分样条cntl和thru       开关作用 ***********************  : "+ "~n" +
  319.                   "原本以为样条分为'通过点'和'根据极点' 那么thru 应为'通过点'  而cntl 应为'根据极点' " + "~n" +
  320.                    "但是经过后来测试发现并不是那回事 但也相似 "+"~n" +
  321.                    "做逆向造型常用到截面线 这个命令截出的类型即为 cntl 型,还有就是使用'根据极点'创建得到的以及使用'通过点'当你选择的(次数=创建的点数)" + "~n" });
  322.      
  323.      
  324.     }

  325.    else
  326.        doNothing;

  327. if   (last(SplitString(a:,"_"))="ug_spline_thru"|length(Append_type_layer_string:)=1) then
  328.               {
  329.         %ui_comp_setCacheValue(self(), true, rh_label6: ,Visibility);
  330.         %ui_comp_setCacheValue(self(), true,UI_button:,Visibility);
  331.                  }
  332. else   
  333.         {
  334.         %ui_comp_setCacheValue(self(), false , rh_label6: ,Visibility);
  335.          %ui_comp_setCacheValue(self(), false ,UI_button:,Visibility);
  336.         };


  337. if  (a2:="ug_spline_thru"|a2:="ug_spline_cntl")
  338. then
  339.               {
  340.         %ui_comp_setCacheValue(self(), true,toggle3: ,Visibility);
  341.         
  342.                  }
  343. else   
  344.         {
  345.         %ui_comp_setCacheValue(self(), false , toggle3:  ,Visibility);
  346.         
  347.         };





  348. 0;
  349. };
复制代码


guitu_setlayer.zip

4.28 KB, 下载次数: 45

ceng操作

回复

使用道具 举报

2

主题

12

帖子

145

积分

见龙在田

Rank: 2

积分
145
发表于 2018-5-6 13:35:53 | 显示全部楼层
这个厉害了,学习了
回复 支持 反对

使用道具 举报

0

主题

6

帖子

93

积分

见龙在田

Rank: 2

积分
93
发表于 4 天前 | 显示全部楼层
支持一下!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-7-19 16:02 , Processed in 0.101578 second(s), 25 queries .

Powered by www.nxopen.cn

© 2001-2013 nxopen.cn

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