Knowledge Fusion例子

#! NX/KF 5.0
#
#*******************************************************************************************
#				Design:	 GuiTu
#        			Date  :  2017.9.8
#				E_mall:	 1714787391@qq.com
#				QQ    :  1714787391			
#				name  :  批量层处理
#*********#  文件名与类名  #****************************************************************
Defclass:  guitu_setlayer (%ui_comp) ;

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

############################    参数声名区       ##########################################
(any Parameter Modifiable)         layer_value: 256;
(any Parameter Modifiable)         str:   "256";
(any Parameter Modifiable)         str1:   "";
(any Parameter Modifiable)         b1:   true;
(any Parameter Modifiable)         b2:   true;
(any Parameter Modifiable)         b3:   true;
(any Parameter Modifiable)         b4:   true;
(any Parameter Modifiable)         b5:   true; # 隐藏
(any Parameter Modifiable)         b6:   true; # 草图

(any Parameter Modifiable)         int:  256;

############################    UI界面 区       ##########################################
(child) select_group:
{
    class, %ui_comp_group;
    title, "选择目标";
    Members, {select_face: };  
};


    
(Child)  select_face: 
{
	Class, %ui_comp_selection;
  	Many, false;			     #是否多选
  	SnapPointOverlay, false;
  	SoUpdateOption, 3;

  	Tooltip, "选择目标";
  	Scope, 1;
  	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}};	#选择类型		  	
  	SelectedObjects, {};		
  	SelectedObject, SelectedObjects:;  };
(child) fanyi_group:
{
  	class, %ui_comp_group;
 	title, "图层";
    	Members, {rh_label3:,rh_label4:,rh_label5:,rh_label6:, UI_button:,list_box:,integer:};   					#####表示在shaft_group:组下有多少子规则
}; 

(child) rh_label3: 
{
        class,     %ui_comp_label;
        Title,     "遍历目标体="  ;
          topAttach,  select_face:  ;                             
};
(child) rh_label4: 
{
        class,       %ui_comp_label;
        Title,    str1: ;
        leftAttach,  rh_label3:;
        topAttach,   select_face: ;
};
(child) rh_label5: 
{
        class,     %ui_comp_label;
        Title,    "" ;
       topAttach, rh_label4: ;                             
};
(child) rh_label6: 
{
        class,     %ui_comp_label;
        Title,    "提示:   "+"~n" +"你的图层类别没有设置或设置格式与本工具有异"+"~n"+"你可通过设置图层类别来获得更多可选图层列表信息"+"~n"+"了解更多信息请点击下列图标按钮";
        icon, "advwave_legend_icon_outofdate.bmp";	
        topAttach,  rh_label5:  ;
        leftAttach,  rh_label5:;                             
};
(Child) UI_button: 
{
  Class, %ui_comp_button;
  Title, " ";
  icon,"informational_symbol.bmp"; # 
};
(Child) list_box: 
{
  	Class, %ui_comp_list_box;
  	ListItems, Append_type_layer_string: ;	# 列表内容
  	SelectedItems, {};		#  返回选择的列表内容
  	selected, SelectedItems:;   
  	SingleSelect, false;            #  单选多选
  	ShowMoveUpDownButtons, true;    #  true显示上下移动按钮
  	DisplayRows, 4;			#  列表框的显示行数
};
(any)  int_value:      first ( SplitString(nth( if list_box:SelectedItems:={} then 1  else first(list_box:SelectedItems:)+1    ,Append_type_layer_string:),"   "));

(Child) integer:
 {
    Title, " ";
  Class, %ui_comp_integer;
  value,int:;
  MaximumValue, 2^30;
  MinimumValue, -2^30;
  Width, 0;
};
(child) set_group:
{
    class, %ui_comp_group;
    title, "设置";
    Members, {toggle:,toggle1: ,toggle2:,toggle4:,toggle5:,toggle3: };  
};
(Child) toggle: {
  Class, %ui_comp_toggle;
  title, "允许改动图层";
  value, b1:;
};
(Child) toggle1: {
  Class, %ui_comp_toggle;
  title, "仅相同图层";
  value, b2:;
};
(Child) toggle2: {
  Class, %ui_comp_toggle;
  title, "仅相同颜色";
  value, b3:;
};
(Child) toggle4: {
  Class, %ui_comp_toggle;
  title, "仅显示对象"; 
  value, b5:;
};
(Child) toggle5: {
  Class, %ui_comp_toggle;
  title, "不操作草图对象"; 
  value, b6:;
};

(Child) toggle3: {
  Class, %ui_comp_toggle;
  title, "区分样条cntl和thru"; 
  value, b4:;
};


############################    代码 区       ##########################################

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

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

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


#( 图层   信息 )


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

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


#+
基准平面
ug_cycleObjectsByType({ug_datum_plane},"")

#-

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

(list) Categoryinfor:  mqc_askCategory();
(list) askEmptyLayers:  mqc_askEmptyLayers();
(list) askEmptyLayersatCategory:  findDuplicates( askEmptyLayers:+ Append_type_layer:);

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

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

# 1 .将int list 变为 str list        2.区分空层和非空层   mqc_ask_layer_entities({$m}, ALL,true)
(any) Append_type_layer_string:  loop {
                       for $a from 0 to length(Append_type_layer:)-1;           
                       for $b is  $a +1;
                       for $m is nth($b,Append_type_layer:);  
                        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 ) } ;   
                     }; 




#*********************************  技术三 过滤机制
#  收集颜色相同类型的object  toggle2:
(list) sametypeColorobj: loop {
                       for $a from 0 to length(cycledeal:)-1;           
                       for $b is  $a +1;
                       for $m is  ug_vd_si_ask_color(nth($b,cycledeal:));
                       if  $m=color1:   Append  {nth($b,cycledeal:)} ;
               }; 
(list)  Colorobj:  if toggle2:value:=true then sametypeColorobj: else cycledeal:;
#  收集图层相同类型的object   toggle1:
(list) sametypelayerobj:  loop {
                       for $a from 0 to length(cycledeal:)-1;           
                       for $b is  $a +1;
                       for $m is    if a:="ug_body" then asklayer(first(select_face:SelectedObjects:)) else nth(5,mqc_askEntityDisplayData(ug_cam_askObjectTag(nth($b,cycledeal:))));  
                       if  $m=layer1:   Append  {nth($b,cycledeal:)} ;
 }; 
(list)  layerobj:  if toggle1:value:=true then sametypelayerobj:  else cycledeal:;
#  收集隐藏object   toggle4:
(list) allblankobj:       mqc_askBlankedObjects(); 
(list) selectobjblankobj:  loop {
                       for $a from 0 to length(cycledeal:)-1;           
                       for $b  is  $a +1;
                       for $m is   nth($b,cycledeal:); 
                       for $T  is   ug_cam_askObjectTag($m) ;
                       if mqc_findSublist( $T,   { allblankobj: } )={}   Append  {nth($b,cycledeal:)} ; # 表示仅仅收集没有隐藏对象
                     }; 
(list)  blankobj:  if toggle4:value:=false then cycledeal:  else selectobjblankobj:;

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

# sket过滤   setlayerobj:

(list) askFeat:  mqc_askFeatures();
 (any) sket: loop {
                       for $a from 0 to length(setlayerobj:)-1;           
                       for $b is  $a +1;
                       for $m is nth($b,setlayerobj:);
                       for $objtag is  ug_cam_askObjectTag($m);
                       for $Featuretag is mqc_askFeatureOfObject ($objtag ); 
                       if  $Featuretag!=-1  append{$m}; 
};
# collect is skect object
 (any) sketFeat: loop {
                       for $a from 0 to length(sket:)-1;           
                       for $b is  $a +1;
                       for $m is nth($b,sket:);
                       for $objtag is  ug_cam_askObjectTag($m);
                       for $Featuretag is mqc_askFeatureOfObject ($objtag ); 
                       if second(mqc_askFeatureNameAndType($Featuretag))="SKETCH"  append{$m}; 
};

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

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


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

(list)  demandValue: {setlayer:};               
                   






#  对话框的初始化 1

(Method integer) OnInitialize:(Instance $instance)
@{
	
	
	%ui_comp_setCacheValue(self(), int:,integer:,value);
                %ui_comp_setCacheValue(self(), b1:,toggle:,value);
                 %ui_comp_setCacheValue(self(), b2:,toggle1:,value);
                %ui_comp_setCacheValue(self(), b3:,toggle2:,value);
                %ui_comp_setCacheValue(self(), b4:,toggle3:,value);
               %ui_comp_setCacheValue(self(), b5:,toggle4:,value);
               %ui_comp_setCacheValue(self(), b6:,toggle5:,value);
#        if (string3:value:="guitu_information") then {%ui_comp_setCacheValue(self(), true,UI_button:,Visibility);} else    {%ui_comp_setCacheValue(self(), false ,UI_button:,Visibility);};

 if   (last(SplitString(a:,"_"))="point"&length(Append_type_layer_string:)=1) then 
              {
	%ui_comp_setCacheValue(self(), true, rh_label6: ,Visibility);
	%ui_comp_setCacheValue(self(), true,UI_button:,Visibility);
                 } 
else    
	{
	%ui_comp_setCacheValue(self(), false , rh_label6: ,Visibility);
	 %ui_comp_setCacheValue(self(), false ,UI_button:,Visibility);
	};
  
 if  (a2:="ug_spline_thru"|a2:="ug_spline_cntl")
then 
              {
	%ui_comp_setCacheValue(self(), true,toggle3: ,Visibility);
	
                 } 
else    
	{
	%ui_comp_setCacheValue(self(), false , toggle3:  ,Visibility);
	
	};





0;
};

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

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


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

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

   else 
       doNothing;

 if   (last(SplitString(a:,"_"))="ug_spline_thru"|length(Append_type_layer_string:)=1) then 
              {
	%ui_comp_setCacheValue(self(), true, rh_label6: ,Visibility);
	%ui_comp_setCacheValue(self(), true,UI_button:,Visibility);
                 } 
else    
	{
	%ui_comp_setCacheValue(self(), false , rh_label6: ,Visibility);
	 %ui_comp_setCacheValue(self(), false ,UI_button:,Visibility);
	};


 if  (a2:="ug_spline_thru"|a2:="ug_spline_cntl")
then 
              {
	%ui_comp_setCacheValue(self(), true,toggle3: ,Visibility);
	
                 } 
else    
	{
	%ui_comp_setCacheValue(self(), false , toggle3:  ,Visibility);
	
	};





0;
};

  

原文地址:https://www.cnblogs.com/liuxiaoqing1/p/12024556.html