################# 外部参照################## require 'sketchup.rb' ########################################### ## プログラムの本体 def sOPFF2 #メソッドの定義 model = Sketchup.active_model # 現在アクティブになっているモデル(図面)にmodelという名前を付ける entities = model.active_entities # modelの中のアクティブになっているエンティティ(図形)にentitiesという名前を付ける group = entities.add_group #グループ化     entities = group.entities # 円の半径を入力する画面 prompts = ["外径","内径","P.C.D","穴径","穴数","厚み","セグメント"] # 画面表示用の文字列 if not $roI values = [210.0,115.0,175.0,19,8,18.0,24] # 入力値の初期値 else values = [$roI,$riI,$pcdI,$hI,$hnI,$tI,$nI] #前入力値 end results = inputbox prompts, values, "フランジのパラメータ" # 入力画面表示 return nil if not results # キャンセルした場合にプログラムを終了 $roI,$riI,$pcdI,$hI,$hnI,$tI,$nI = results #変数radiusに代入 ro = $roI.mm ri = $riI.mm pcd = $pcdI.mm h = $hI.mm t = $tI.mm hn = $hnI n = $nI ns = 24 #穴のセグメントは’24’に固定  ## 図形編集開始 model.start_operation "sOPFF2" #for Undo centerp = ORIGIN #原点を中心とする vec=Z_AXIS #xy平面にフェイスができ、Z軸に厚みができる circleI = entities.add_circle centerp, vec, ro/2,n # 外円を描く face = entities.add_face circleI #面を作成     inner = entities.add_circle centerp, vec, ri/2,n #内円    inner[0].faces.each {|f| f.erase! if( f != face)} #内円の面を消去    r=pcd/2 sita1=Math::PI / hn sita2=Math::PI*2 / hn x = r*Math.cos(sita1)+centerp[0] y= r*Math.sin(sita1)+centerp[1] z=centerp[2] center =[x,y,z] bHole = entities.add_circle center, vec, h/2,ns bHole[0].faces.each {|f| f.erase! if( f != face)} i=1 while i<=hn do x = r*Math.cos(sita1+(sita2*i))+centerp[0] y= r*Math.sin(sita1+(sita2*i))+centerp[1] z=centerp[2] center =[x,y,z] bHole = entities.add_circle center, vec, h/2, ns bHole[0].faces.each {|f| f.erase! if( f != face)} i=i+1 end t = -t if face.normal.dot(vec) < 0.0 #Push face.pushpull t model.commit_operation ## 図形編集終了 end ## プログラム終了 ## ## メニュー登録 ## if( not file_loaded?("sOPFF2.rb") ) UI.menu("Plugins").add_separator UI.menu("Plugins").add_item("sOPFF2") { sOPFF2 } UI.menu("Plugins").add_separator end file_loaded("sOPFF2.rb")