import random #本棚作成支援スクリプト #選択している形状を、正面図で見て、右へ右へと回数分複製するスクリプト #複製の際に、ランダムにチェックを入れてると、大きさが異なる本が複製されます。 #shade12以後に追加されたメソッドを一部使用しているため、shade12や13、それ以降用です。 #上位パートに変換がかかっていると、正常に機能するかどうかわかりません。 #パラメーター #kaisuu ・・・・複製する回数 #sukima・・・・複製する際に、これだけ隙間を空ける #randomtakasa・・・・高さ方向にランダム要素を入れるかどうかのチェックボックス #randomhaba・・・・幅方向にランダム要素を入れるかどうかのチェックボックス #randomokuyuki・・・・奥行き方向にランダム要素を入れるかどうかのチェックボックス #takasamin・・・・ランダム(高さ)ONの場合の最小値(0から1まで)1以上の値を入れると1に設定される #takasamax・・・・ランダム(高さ)ONの場合の最大値(1以上) 1より下の値を入れると1に設定される #habamin・・・・ランダム(幅)ONの場合の最小値(0から1まで)1以上の値を入れると1に設定される #habamax・・・・ランダム(幅)ONの場合の最大値(1以上) 1より下の値を入れると1に設定される #okuyukimin・・・・ランダム(奥行き)ONの場合の最小値(0から1まで)1以上の値を入れると1に設定される #okuyukimax・・・・ランダム(奥行き)ONの場合の最大値(1以上) 1より下の値を入れると1に設定される #中心位置、大きさ(幅、高さ、奥行き)の情報を求める cenpos=xshade.scene().active_shape().center_position motocenpos=[cenpos[0],cenpos[1],cenpos[2]] bboxsize=xshade.scene().active_shape().bounding_box_size motohaba=bboxsize[0] mototakasa=bboxsize[1] motookuyuki=bboxsize[2] #ダイアログボックスを表示 kekka=True dialog=xshade.create_dialog_with_uuid('0x51911312') dialog.append_push_button('幅'+str(motohaba)) dialog.append_push_button('高さ'+str(mototakasa)) dialog.append_push_button('奥行き'+str(motookuyuki)) idxk000=dialog.append_int('回数') idxk001=dialog.append_float('隙間') idxk002=dialog.append_bool('高さランダム') idxk003=dialog.append_float('高さランダム最小倍率(0〜1)') idxk004=dialog.append_float('高さランダム最大倍率(1以上)') idxk005=dialog.append_bool('幅ランダム') idxk006=dialog.append_float('幅ランダム最小倍率(0〜1)') idxk007=dialog.append_float('幅ランダム最大倍率(1以上)') idxk008=dialog.append_bool('奥行きランダム') idxk009=dialog.append_float('奥行きランダム最小倍率(0〜1)') idxk010=dialog.append_float('奥行きランダム最大倍率(1以上)') kekka=dialog.ask('本棚作成支援スクリプト') kaisuu=dialog.get_value(idxk000) if (kekka==True and kaisuu>0): yokoidou=0 sukima=dialog.get_value(idxk001) if sukima<0:sukima=0 takasarandom=dialog.get_value(idxk002) habarandom=dialog.get_value(idxk005) okuyukirandom=dialog.get_value(idxk008) takasamin=dialog.get_value(idxk003) if takasamin<0:takasamin=0 if takasamin>1:takasamin=1 takasamax=dialog.get_value(idxk004) if takasamax<1:takasamax=1 habamin=dialog.get_value(idxk006) if habamin<0:habamin=0 if habamin>1:habamin=1 habamax=dialog.get_value(idxk007) if habamax<1:habamax=1 okuyukimin=dialog.get_value(idxk009) if okuyukimin<0:okuyukimin=0 if okuyukimin>1:okuyukimin=1 okuyukimax=dialog.get_value(idxk010) if okuyukimax<1:okuyukimax=1 #形状をクリップボードにコピー xshade.scene().active_shape().copy() tugihaba=motohaba for i in range(kaisuu): if takasarandom==True: rtakasa=random.uniform(takasamin,takasamax) else:rtakasa=1 if habarandom==True: rhaba=random.uniform(habamin,habamax) else:rhaba=1 if okuyukirandom==True: rokuyuki=random.uniform(okuyukimin,okuyukimax) else:rokuyuki=1 #形状をペースト xshade.scene().active_shape().paste() #形状のセンターポジションを中心に拡大縮小 xshade.scene().move_object([cenpos[0],cenpos[1],cenpos[2]],[rhaba,rtakasa,rokuyuki],None,None) #移動距離を求める yokoidou=yokoidou+0.5*tugihaba+sukima+0.5*motohaba*rhaba tugihaba=motohaba*rhaba tateidou=-1*(1-rtakasa)*0.5*mototakasa okuidou=-1*(1-rokuyuki)*0.5*motookuyuki #位置調整 xshade.scene().move_object(cenpos,None,None,[yokoidou,tateidou,okuidou])