import copy #指定の頂点数の面を選択 #指定した数の頂点を持つ面だけを選択状態にします。 #面選択モードで面を一つ以上選択している場合は、最後に選択に追加した面と同じ頂点数の面を選択します #shade12.1の表示用に修正(2011.12.09) #shade1301に対応 #動作条件 #選択形状がポリゴンメッシュ #選択面と同じ頂点数の面を選択する場合は #編集モードに入っている #面編集モード #面を一つ以上選択している dousasuru=0 xscene=xshade.scene() ashape=xscene.active_shape() #まずは動作条件を満たしているかチェック if xshade.scene().active_shape().type==7: dousasuru=1 if xshade.scene().selection_mode==0 and xscene.is_modify_mode==True: aflist=[] for i in range(ashape.number_of_faces): if ashape.face(i).active==True: aflist.append(i) if len(aflist)>0:dousasuru=2 if dousasuru>0: #上位パートに変換がかかっているなら動作しない if xshade.scene().active_shape().local_to_world_matrix!=((1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0, 0.0), (0.0, 0.0, 0.0, 1.0)): dousasuru=0 dialog=xshade.create_dialog() dialog.append_push_button('上位パートに変換がかかっているため') dialog.append_push_button('スクリプトが実行できません') dialog.ask('エラー') if dousasuru>0: #ここに初期値 renzoku=1 tyouten=3 mode=0 tuika=0 while (renzoku==1): #ダイアログ開く dialog=xshade.create_dialog() if dousasuru==2: idx1=dialog.append_radio_button('/頂点数で選択/選択面と同じ頂点数の面を選択') if dousasuru==1: idx1=dialog.append_radio_button('/頂点数で選択') dialog.begin_group('頂点数で選択の場合') idx2=dialog.append_int('頂点数') dialog.end_group() dialog.begin_group() idx3=dialog.append_radio_button('/指定の面のみ選択状態にする/指定の面を選択に追加する/指定の面を選択から除外する') dialog.end_group() dialog.set_value(idx1,mode) dialog.set_value(idx2,tyouten) dialog.set_value(idx3,tuika) xshade.idle(120) xshade.scene().update_figure_window() kekka=dialog.ask('頂点数で面選択') if kekka==False:renzoku=0 else: mode=dialog.get_value(idx1) tyouten=dialog.get_value(idx2) if tyouten<3:tyouten=3 tuika=dialog.get_value(idx3) #元の形状をコピーして下に置いておく xscene.copy() xscene.paste() xscene.select_sister() xscene.enter_modify_mode() tyouten2=tyouten tuikalist=[] if mode==1: temvlist=ashape.face(aflist[len(aflist)-1]).vertex_indices tyouten2=len(temvlist) if xscene.selection_mode!=0: xscene.selection_mode=0 #選択をすべて解除 if tuika==0: for i in range(ashape.number_of_faces): ashape.face(i).active=False #指定の頂点数の面だけ選択状態に count=0 for i in range(ashape.number_of_faces): temvlist=ashape.face(i).vertex_indices if len(temvlist)==tyouten2: count+=1 # ashape.face(i).active=True tuikalist.append(i) for i in tuikalist: if tuika==0 or tuika==1: ashape.face(i).active=True if tuika==2: ashape.face(i).active=False #ダイアログ表示と元に戻すか聞く xscene.exit_modify_mode() xscene.enter_modify_mode() xscene.update_figure_window() dialog2=xshade.create_dialog() if tuika==0: dialog2.append_push_button(str(count)+'個の面を選択しました。') if tuika==1: count33=0 for i in range(ashape.number_of_faces): if ashape.face(i).active==True:count33+=1 tnum=count33-len(aflist) if tnum<0:tnum=0 dialog2.append_push_button(str(tnum)+'個の面を選択に追加。') dialog2.append_push_button('(合計で'+str(count33)+'個選択状態です)') if tuika==2: count33=0 for i in range(ashape.number_of_faces): if ashape.face(i).active==True:count33+=1 tnum=len(aflist)-count33 if tnum<0:tnum=0 dialog2.append_push_button(str(tnum)+'個の面を選択から除外。') dialog2.append_push_button('(合計で'+str(count33)+'個選択状態です)') dialog2.append_push_button('処理を確定しますか?') xshade.idle(120) xshade.scene().update_figure_window() kekka2=dialog2.ask('頂点数で面選択') if kekka2==False: idou=0 if ashape.has_sis==True:idou=1 xscene.clear() if idou==1:xscene.select_brother() xscene.enter_modify_mode() ashape=xscene.active_shape() else: renzoku=0 xscene.select_brother() xscene.clear() xscene.enter_modify_mode()