#選択の拡張(貫通) #2010.10.08 #最初に選択してる要素(頂点、辺、面)と、同じXZ座標(YZ座標、XY座標)の要素を選択に追加します。 #パラメーター #gosa・・・・誤差 #axis・・・0の場合同じYZ座標、1の場合、同じXZ座標、2の場合、同じXY座標を選択に加える #動作条件 #選択形状がポリゴンメッシュ #編集モードに入っている #要素(頂点、辺、面)が1個以上選択されている def faceal(): #面の場合 ashape=xshade.scene().active_shape() xscene=xshade.scene() #選択面をリストに格納 aflist=[] for i in range(ashape.number_of_faces): if ashape.face(i).active==True: aflist.append(i) #選択順にソート aflist=sort_faces_by_active_order(aflist) dousasuru=0 if len(aflist)>0:dousasuru=1 if dousasuru==1: renzoku=1 gosa=0.0001 axis=0 while(renzoku): #ダイアログ開く dialog22=xshade.create_dialog() idxf1=dialog22.append_radio_button('/側面図で見て同じ位置にある面/上面図で見て同じ位置にある面/正面図で見て同じ位置にある面') idxf2=dialog22.append_double('誤差') dialog22.set_value(idxf1,axis) dialog22.set_value(idxf2,gosa) kekka1=dialog22.ask('選択の拡張 貫通') if kekka1==False:renzoku=0 else: axis=dialog22.get_value(idxf1) gosa=dialog22.get_value(idxf2) #選択面の中心位置リストを作成 afcenter=[] for gg in aflist: templist2=ashape.face(gg).vertex_indices tempc=[0,0,0] for jj in templist2: tempos=ashape.vertex(jj).position tempc=[tempc[0]+tempos[0],tempc[1]+tempos[1],tempc[2]+tempos[2]] tempc=[tempc[0]/len(templist2),tempc[1]/len(templist2),tempc[2]/len(templist2)] afcenter.append(tempc) #全ての面の中心位置リストを作成 allcenter=[] for gg in range(ashape.number_of_faces): templist2=ashape.face(gg).vertex_indices tempc=[0,0,0] for jj in templist2: tempos=ashape.vertex(jj).position tempc=[tempc[0]+tempos[0],tempc[1]+tempos[1],tempc[2]+tempos[2]] tempc=[tempc[0]/len(templist2),tempc[1]/len(templist2),tempc[2]/len(templist2)] allcenter.append(tempc) #面の検査と追加リスト作成 tuikalist=[] for gg in afcenter: for jj in range(len(allcenter)): x1=1 y1=1 z1=1 if axis==0:x1=0 if axis==1:y1=0 if axis==2:z1=0 if ( ((allcenter[jj][0]-gg[0])**2)*x1+((allcenter[jj][1]-gg[1])**2)*y1+((allcenter[jj][2]-gg[2])**2)*z1)0:dousasuru=1 if dousasuru==1: renzoku=1 gosa=0.0001 axis=0 while(renzoku): #ダイアログ開く dialog22=xshade.create_dialog() idxf1=dialog22.append_radio_button('/側面図で見て同じ位置にある辺/上面図で見て同じ位置にある辺/正面図で見て同じ位置にある辺') idxf2=dialog22.append_double('誤差') dialog22.set_value(idxf1,axis) dialog22.set_value(idxf2,gosa) kekka1=dialog22.ask('選択の拡張 貫通') if kekka1==False:renzoku=0 else: axis=dialog22.get_value(idxf1) gosa=dialog22.get_value(idxf2) #選択辺の中心位置リストを作成 aecenter=[] for gg in aelist: v0p=ashape.vertex(ashape.edge(gg).v0).position v1p=ashape.vertex(ashape.edge(gg).v1).position tempc=[(v0p[0]+v1p[0])/2,(v0p[1]+v1p[1])/2,(v0p[2]+v1p[2])/2] aecenter.append(tempc) #全ての辺の中心位置リストを作成 allcenter=[] for gg in range(ashape.number_of_edges): v0p=ashape.vertex(ashape.edge(gg).v0).position v1p=ashape.vertex(ashape.edge(gg).v1).position tempc=[(v0p[0]+v1p[0])/2,(v0p[1]+v1p[1])/2,(v0p[2]+v1p[2])/2] allcenter.append(tempc) #辺の検査と追加リスト作成 tuikalist=[] x1=1 y1=1 z1=1 if axis==0:x1=0 if axis==1:y1=0 if axis==2:z1=0 for gg in aecenter: for jj in range(len(allcenter)): if (((allcenter[jj][0]-gg[0])**2)*x1+((allcenter[jj][1]-gg[1])**2)*y1+((allcenter[jj][2]-gg[2])**2)*z1)0:dousasuru=1 if dousasuru==1: renzoku=1 gosa=0.0001 axis=0 while(renzoku): #ダイアログ開く dialog22=xshade.create_dialog() idxf1=dialog22.append_radio_button('/側面図で見て同じ位置にある頂点/上面図で見て同じ位置にある頂点/正面図で見て同じ位置にある頂点') idxf2=dialog22.append_double('誤差') dialog22.set_value(idxf1,axis) dialog22.set_value(idxf2,gosa) kekka1=dialog22.ask('選択の拡張 貫通') if kekka1==False:renzoku=0 else: axis=dialog22.get_value(idxf1) gosa=dialog22.get_value(idxf2) #選択頂点の位置リストを作成 apcenter=[] for gg in aplist: tempc=ashape.vertex(gg).position apcenter.append(tempc) #全ての頂点の中心位置リストを作成 allcenter=[] for gg in range(ashape.total_number_of_control_points): tempc=ashape.vertex(gg).position allcenter.append(tempc) #頂点の検査と追加リスト作成 tuikalist=[] x1=1 y1=1 z1=1 if axis==0:x1=0 if axis==1:y1=0 if axis==2:z1=0 for gg in apcenter: for jj in range(len(allcenter)): if (((allcenter[jj][0]-gg[0])**2)*x1+((allcenter[jj][1]-gg[1])**2)*y1+((allcenter[jj][2]-gg[2])**2)*z1)