import copy #選択辺のn番目絞りこみ #ウィジェットに収録する場合はutf8足す #複数の辺を選択状態で実行すると、「奇数番目の辺だけに選択を絞る」や #「偶数番目の辺だけに選択を絞る」、「n数番目の辺だけに選択を絞る」という #のができます。 #辺のループやリング選択実行直後に使うのを想定して作ったスクリプトです。 # #パラメーター #wari  除算数 #amari 余り #動作条件 #選択形状がポリゴンメッシュ #編集モードに入っている #辺編集モード #辺が二つ以上選択されている def return_henlist(face): #面番号から面を構成する辺の番号を返す #前後にsetup_winged_edgeとclean_winged_edgeが必要 tempvlist=xshade.scene().active_shape().face(face).vertex_indices henlist=[] for i in tempvlist: tempf=xshade.scene().active_shape().eccwfv(face,i,False) henlist.append(tempf) return henlist def sort_edge_by_active_order(edgelist): #辺の選択番号(active_order)順にリストの辺番号をソートして辺リストを返す #ソート templist=[] for i in edgelist: templist.append(i) newlist=[] while(len(newlist)1:dousasuru=1 if dousasuru==1: #選択辺を選択番号順に並び替える edgelist=sort_edge_by_active_order(edgelist) #ここに初期値 renzoku=1 wari=2 amari=0 # stype=0 # target=0 # nn=1 # nnmax=len(edgelist) while(renzoku==1): # tuikalist=[] #ダイアログ開く dialog=xshade.create_dialog() # dialog.begin_group() # idx1=dialog.append_radio_button('/選択に追加する/選択から除外する') # dialog.end_group() idx2=dialog.append_int('除算数(2以上)') idx3=dialog.append_int('余り(0以上)') # dialog.begin_group() # idx3=dialog.append_radio_button('検索の対象/すべての選択辺/後ろからn番目以内') # dialog.end_group() # idx4=dialog.append_int('後ろからn番目以内(max:'+str(nnmax)+')') dialog.set_value(idx2,wari) dialog.set_value(idx3,amari) # dialog.set_value(idx3,target) # dialog.set_value(idx4,nn) xshade.idle(120) xshade.scene().update_figure_window() kekka=dialog.ask('選択辺のn番目絞り込み') if kekka==False:renzoku=0 if kekka==True: wari=dialog.get_value(idx2) amari=dialog.get_value(idx3) if wari<2:wari=2 if amari<0:amari=0 #元の辺の選択状態を記憶 motoedgelist=copy.copy(edgelist) #選択辺のうち、条件に適さない選択辺は選択解除していく pp=0 for i in edgelist: pp+=1 tempamari=pp%wari if (tempamari!=amari): ashape.edge(i).active=False xscene.exit_modify_mode() xscene.enter_modify_mode() # xscene.allow_update() #元に戻すか聞く dialog2=xshade.create_dialog() dialog2.append_push_button('処理を確定しますか?') xshade.idle(120) xshade.scene().update_figure_window() kekka3=dialog2.ask('選択辺のn番目絞り込み') if kekka3==True: renzoku=0 if kekka3==False: #選択状態を元に戻す for i in range(ashape.number_of_edges): ashape.edge(i).active=False for i in motoedgelist: ashape.edge(i).active=True for i in range(len(motoedgelist)): xshade.scene().active_shape().edge(motoedgelist[i]).active_order=i+1 edgelist=copy.copy(motoedgelist) xscene.exit_modify_mode() xscene.enter_modify_mode()