Module: Glitch3d

Defined in:
lib/glitch3d.rb,
lib/glitch3d/version.rb,
lib/glitch3d/strategies/none.rb,
lib/glitch3d/strategies/default.rb,
lib/glitch3d/strategies/localized.rb,
lib/glitch3d/strategies/duplication.rb,
lib/glitch3d/strategies/find_and_replace.rb

Defined Under Namespace

Modules: Default, Duplication, FindAndReplace, Localized, None

Constant Summary collapse

VERTEX_GLITCH_ITERATION_RATIO =
0.1
VERTEX_GLITCH_OFFSET =
1
FACE_GLITCH_ITERATION_RATIO =
0.1
FACE_GLITCH_OFFSET =
0.5
BOUNDARY_LIMIT =

Contain model within BOUNDARY_LIMITxBOUNDARY_LIMITxBOUNDARY_LIMIT cube

3
CHUNK_SIZE =
20
BLENDER_EXECUTABLE_PATH =
ENV['BLENDER_EXECUTABLE_PATH'].freeze
RENDERING_SCRIPT_PATH =
File.dirname(__FILE__) + '/glitch3d/bpy/main.py'
BASE_BLEND_FILE_PATH =
File.dirname(__FILE__) + '/../fixtures/base.blend'
VERSION =
'0.2.4.0'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.rand_vertex_glitch_offsetObject



77
78
79
# File 'lib/glitch3d.rb', line 77

def rand_vertex_glitch_offset
  rand(-VERTEX_GLITCH_OFFSET..VERTEX_GLITCH_OFFSET)
end

Instance Method Details

#clean_model(source_file) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/glitch3d.rb', line 21

def clean_model(source_file)
  self.class.include Glitch3d::None
  base_file_name = source_file.gsub(/.obj/, '')
  model_name = File.basename(source_file, '.obj')
  target_file = base_file_name + '.obj'
  create_glitched_file(glitch(read_source(source_file)), target_file, model_name)
end

#infer_strategy(mode) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/glitch3d.rb', line 62

def infer_strategy(mode)
  if !mode
    mode_chosen = [ Glitch3d::Default, Glitch3d::Duplication, Glitch3d::FindAndReplace, Glitch3d::Localized, Glitch3d::None].sample
    puts "Defaulting to #{mode_chosen}"
    return mode_chosen
  end
  puts "Using #{mode}"
  begin
    return eval("Glitch3d::#{mode.to_s.gsub(/(?:_|^)(\w)/){$1.upcase}}")
  rescue
    raise "Strategy #{mode.to_s..gsub(/(?:_|^)(\w)/){$1.upcase}} not found"
  end
end


47
48
49
50
# File 'lib/glitch3d.rb', line 47

def print_version
  puts Glitch3d::VERSION
  return nil
end

#process_model(source_file, args) ⇒ Object

Parameters:

  • String

    source_file, 3d model file to take as input

  • Hash

    args, parameters { ‘stuff’ => ‘shit’ }



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/glitch3d.rb', line 31

def process_model(source_file, args)
  raise 'Make sure Blender is correctly installed' if BLENDER_EXECUTABLE_PATH.nil?
  return clean_model(source_file) if args['clean']
  source_file = random_fixture if source_file.nil?
  print_version if args.has_key?('version')
  raise 'Set Blender executable path in your env variables before using glitch3d' if BLENDER_EXECUTABLE_PATH.nil?
  self.class.include infer_strategy(args['mode'])
  @quality = args['quality'] || 'low'
  source_file = source_file
  base_file_name = source_file&.gsub(/.obj/, '')
  model_name = File.basename(source_file, '.obj')
  target_file = base_file_name + '_glitched.obj'
  create_glitched_file(glitch(read_source(source_file)), target_file, model_name)
  render(args, target_file, args['shots-number'] || 6) unless args['no-render']
end

#random_fixtureObject



52
53
54
55
56
57
58
59
60
# File 'lib/glitch3d.rb', line 52

def random_fixture
  @fixtures_path = File.dirname(__FILE__) + '/../fixtures'
  fixtures = []
  Dir.foreach(@fixtures_path) do |item|
    next if item == '.' or item == '..' or item.end_with?('_glitched.obj') or !item.end_with?('.obj')
    fixtures << @fixtures_path + '/' + item
  end
  fixtures.sample
end