Author | Manuela Ruiz (mruiz@lcc.uma.es) |
This class represents a robot, that is, a set of projects that are executed in some specified ordering, so as to automatically produce a set of designs
number_of_designs | number of designs to be generated |
design_directory | directory to save the generated designs in |
Executes the robot
# File lib/main-structures.rb, line 1850 1850: def execute(number_of_designs, design_directory) 1851: goals_command_directory = "#{File.dirname(__FILE__)}/commands/random-goal-execute-command.rb" 1852: goals_command_directory.gsub!("/", "\\") 1853: 1854: current_shape_directory = "#{File.dirname(__FILE__)}/commands/temp/current_shape.txt" 1855: current_shape_directory.gsub!("/", "\\") 1856: 1857: project_directory = "#{File.dirname(__FILE__)}/commands/temp/project.txt" 1858: project_directory.gsub!("/", "\\") 1859: 1860: n_command_directory = "#{File.dirname(__FILE__)}/commands/n-execute-random-command.rb" 1861: n_command_directory.gsub!("/", "\\") 1862: 1863: for i in 1..number_of_designs.to_i 1864: design_path = "#{design_directory}\\design#{i}.txt" 1865: 1866: first = true 1867: 1868: t1 = Time.now 1869: @project_paths.each_with_index { |project_path, p| 1870: 1871: Shade.project.load(project_path) 1872: Shade.project.execution.reset 1873: 1874: if !first 1875: new_axiom = LabelledShape.new(Array.new, Array.new) 1876: new_axiom.load(current_shape_directory) 1877: Shade.project.execution.file_axiom = true 1878: Shade.project.execution.grammar.axiom = new_axiom 1879: Shade.project.execution.reset 1880: 1881: Shade.project.execution.current_shape.refresh 1882: Shade.project.execution.current_shape.create_pi 1883: end 1884: 1885: mode = @execution_modes[p] 1886: 1887: #Save project into fix .txt file 1888: Shade.project.save(project_directory, true) 1889: 1890: #Save current shape into fix .txt file 1891: Shade.project.execution.current_shape.save(current_shape_directory) 1892: 1893: #Save execution history 1894: history_directory = "#{File.dirname(__FILE__)}/commands/temp" 1895: history_directory.gsub!("/", "\\") 1896: Shade.project.execution.save_execution_history(history_directory) 1897: 1898: if mode == "Goals" 1899: output = system("ruby \"#{goals_command_directory}\" 0 1000") 1900: else 1901: output = system("ruby \"#{n_command_directory}\" #{mode.to_i}") 1902: end 1903: 1904: #Catch return from external command 1905: if !($? == 0) 1906: UI.messagebox("The loaded constraints/goals of #{project_path} use some functions of SketchUp API. The execution will be performed inside the SketchUp environment, and it may take more time.") 1907: 1908: if mode == "Goals" 1909: success = Shade.project.execution.apply_goal_rules_random(false, 0, 1000) 1910: else 1911: success = Shade.project.execution.apply_n_rules_random(mode.to_i, false) 1912: end 1913: if !success 1914: UI.messagebox("Failure. Impossible to satisfy goals in #{project_path}.") 1915: else 1916: #Save current shape into fix .txt file 1917: Shade.project.execution.current_shape.save(current_shape_directory) 1918: end 1919: else 1920: log_directory = "#{File.dirname(__FILE__)}/commands/temp/result.log" 1921: log_directory.gsub!("/", "\\") 1922: File.open(log_directory, 'r') do |f| 1923: line = f.gets.strip 1924: if (line == "false") 1925: UI.messagebox("Failure. Impossible to satisfy goals in #{project_path}.") 1926: end 1927: 1928: end 1929: end 1930: 1931: first = false 1932: } 1933: Shade.project.execution.current_shape.load(current_shape_directory) 1934: Shade.project.execution.current_shape.refresh 1935: Shade.project.execution.current_shape.create_pi 1936: Shade.project.execution.current_shape.save(design_path) 1937: t2 = Time.now 1938: puts "Elapsed time for design #{i}: #{t2 - t1} seconds" 1939: #delete files of temporal directory 1940: dir = Dir.new("#{File.dirname(__FILE__)}/commands/temp") 1941: dir.each { |file_name| 1942: if file_name == '.' or file_name == '..' then next 1943: else File.delete("#{File.dirname(__FILE__)}/commands/temp/#{file_name}") 1944: end 1945: } 1946: 1947: end 1948: 1949: end
path | the path to save the robot from |
Loads the robot from the specified path
# File lib/main-structures.rb, line 1831 1831: def load(path) 1832: @project_paths = Array.new 1833: @execution_modes = Array.new 1834: File.open(path.strip, 'r') do |f| 1835: while line = f.gets 1836: line_a = line.split(':') 1837: 1838: project_path = "#{File.dirname(path)}\\#{line_a[0]}.prj" 1839: execution_mode = line_a[1].strip 1840: @project_paths.push project_path 1841: @execution_modes.push execution_mode 1842: end 1843: end 1844: end
path | the path to save the robot in |
Saves the robot in the specified path
# File lib/main-structures.rb, line 1800 1800: def save(path) 1801: #the path is a .txt file 1802: #we need the directory 1803: directory = ShadeUtils.get_directory_from_path(path) 1804: title = ShadeUtils.get_title_from_path(path) 1805: 1806: old_project_path = Shade.project.path 1807: 1808: File.open(path.strip, 'w') do |f| 1809: @project_paths.each_with_index { |project, i| 1810: project_title = ShadeUtils.get_title_from_path(project) 1811: f.write("#{project_title}:#{@execution_modes[i]}\n") 1812: 1813: Shade.project.load(project) 1814: Shade.project.save("#{directory}\\#{project_title}.prj", true) 1815: } 1816: end 1817: 1818: if old_project_path 1819: Shade.project.load(old_project_path) 1820: 1821: Shade.project.execution.reset 1822: Shade.project.refresh(true) 1823: else 1824: ShadeUtils.create_default_project 1825: end 1826: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.