Как я могу получить пространственную координату группы? - PullRequest
0 голосов
/ 09 января 2019

На youtube есть видео с анимацией, выполненное в Sketchup от Ruby. Здесь ссылка !

Я хочу сделать ту же анимацию, и я использовал функцию косинуса. Но, к сожалению, я понятия не имею, как можно получить пространственные координаты $grp_main для использования в функции косинуса.

Вот мои коды:

$mod = Sketchup.active_model # Open model
$ent = $mod.entities # All entities in model
$sel = $mod.selection # Current selection
$grp_main = $ent.add_group
$view = $mod.active_view

$s = 100.inch
$w = 60.inch
$beta = 0.0085

def build_material()
  n = 10
  (0..n-1).each { |i|
    (0..n-1).each { |j|
      pts = []
      pts[0] = [i*$s,j*$s,0]
      pts[1] = [i*$s,j*$s+$w,0]
      pts[2] = [i*$s+$w,j*$s+$w,0]
      pts[3] = [i*$s+$w,j*$s,0]
      entities2 = $grp_main.entities
      face = entities2.add_face pts
      face.back_material = [200,(255/(n)*j).round,(255/(n)*i).round]
      face.pushpull -40
  }
    }
end  

def scale_object(x)
  height = Math.cos($beta*((x*x + ((x+10)*(x+10))))) #I NEED HELP HERE
  scale_transformation = Geom::Transformation.scaling(1,1,height)
  $grp_main.transformation *= scale_transformation
  $grp_main.transform!(scale_transformation);
end

def repaint(n_times, delay)
  for x in 0..n_times-1
    scale_object(x);
    $view.refresh
    sleep delay;
   end
end
build_material();
repaint(20,0.7);
#
height = Math.cos($beta*((x*x + ((x+10)*(x+10)))))

Там я понятия не имею, как я могу получить координаты x и y ...

1 Ответ

0 голосов
/ 11 марта 2019

Я решил свою проблему так:

def build_material()
  n = 10
  (0..n-1).each { |i|
    (0..n-1).each { |j|
      pts = []
      pts[0] = [i*@s,j*@s,0]
      pts[1] = [i*@s,j*@s+@w,0]
      pts[2] = [i*@s+@w,j*@s+@w,0]
      pts[3] = [i*@s+@w,j*@s,0]
      entities2 = @ent.add_group
      face = entities2.entities.add_face pts
      face.back_material = [200,(255/(n)*j).round,(255/(n)*i).round]
      face.pushpull -40
      @dizi[i][j]=entities2
  }
    }
end  

def scale_object()
  (0..45).each { |k|
    (0..9).each { |i|
        (0..9).each { |j|

          height = Math.cos(@beta*(((i)*(i+k))+((j)*(j+k))))*1.4
          scale_transformation = Geom::Transformation.scaling(1,1,height)
          @dizi[j][i].transformation =scale_transformation
          @dizi[j][i].transform!(scale_transformation)


          }
         # $view.refresh


          }

          sleep 0.08
          @view.refresh
          }
end




build_material()
scale_object()
...