Class: AimsProject::GeometryWindow
- Inherits:
-
Wx::Panel
- Object
- Wx::Panel
- AimsProject::GeometryWindow
- Includes:
- Wx
- Defined in:
- lib/aims_project/geometry_window.rb
Instance Attribute Summary collapse
-
#update_unit_cell ⇒ Object
Returns the value of attribute update_unit_cell.
Instance Method Summary collapse
- #display_exception(e) ⇒ Object
-
#geometry ⇒ Object
Get the currently displayed geometry.
- #image ⇒ Object
-
#initialize(app, parent) ⇒ GeometryWindow
constructor
A new instance of GeometryWindow.
- #nudge_selected_atoms(x, y, z) ⇒ Object
-
#open_geometry_file(file = nil) ⇒ Object
Display a file dialog and attempt to open and display the file.
- #select_atom(atom) ⇒ Object
-
#show_geometry(geometry) ⇒ Object
Display the given geometry.
- #show_inspector ⇒ Object
-
#update_viewer ⇒ Object
Apply UI settings to viewer and re-render.
Constructor Details
#initialize(app, parent) ⇒ GeometryWindow
Returns a new instance of GeometryWindow.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/aims_project/geometry_window.rb', line 9 def initialize(app, parent) super(parent) @app = app # Initialize the selection of atoms @selection = {} # Tracks whether changes in inspector should update the unit cell @update_unit_cell = false # Get an inspector window to add into @inspector_window = @app.inspector.add_inspector_window # This is a model/controller for the inspector to pass to the crystal viewer @options = CrystalViewerOptions.new(@inspector_window) # Top level is a splitter topSplitterWindow = SplitterWindow.new(self) sizer = VBoxSizer.new sizer.add_item(topSplitterWindow, :proportion => 1, :flag => EXPAND) set_sizer(sizer) @console = GeometryConsole.new(self, topSplitterWindow) # The bottom is a vertical splitter geomWindowSplitter = SplitterWindow.new(topSplitterWindow) @geomEditor = GeometryEditor.new(self, geomWindowSplitter) @geomViewer = CrystalViewer.new(self, geomWindowSplitter, @options) geomWindowSplitter.split_vertically(@geomEditor, @geomViewer) # Add top and bottom sides together topSplitterWindow.split_horizontally(geomWindowSplitter, @console, -100) layout # Define events evt_list_item_selected(@console) {|evt| open_geometry_file(evt.get_item.get_data) } show_geometry(GeometryFile.new) end |
Instance Attribute Details
#update_unit_cell ⇒ Object
Returns the value of attribute update_unit_cell.
7 8 9 |
# File 'lib/aims_project/geometry_window.rb', line 7 def update_unit_cell @update_unit_cell end |
Instance Method Details
#display_exception(e) ⇒ Object
126 127 128 |
# File 'lib/aims_project/geometry_window.rb', line 126 def display_exception(e) @console.print(e., Wx::RED) end |
#geometry ⇒ Object
Get the currently displayed geometry
91 92 93 |
# File 'lib/aims_project/geometry_window.rb', line 91 def geometry @original_uc end |
#image ⇒ Object
86 87 88 |
# File 'lib/aims_project/geometry_window.rb', line 86 def image @geomViewer.image end |
#nudge_selected_atoms(x, y, z) ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/aims_project/geometry_window.rb', line 118 def nudge_selected_atoms(x,y,z) if @selection[:atoms] @selection[:atoms].each{|a| a.displace!(x,y,z)} end @geomViewer.draw_scene @geomEditor.update end |
#open_geometry_file(file = nil) ⇒ Object
Display a file dialog and attempt to open and display the file
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/aims_project/geometry_window.rb', line 61 def open_geometry_file(file = nil) begin unless file fd = FileDialog.new(@app.frame, :message => "Open", :style => FD_OPEN, :default_dir => @working_dir) if ID_OK == fd.show_modal file = fd.get_path @working_dir = fd.get_directory else return end end @app.set_status "Opening #{file}" if (@app.project) show_geometry GeometryFile.new(File.new(file), @app.project.get_binding) else show_geometry GeometryFile.new(File.new(file)) end rescue Exception => dang @app.error_dialog(dang) end end |
#select_atom(atom) ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/aims_project/geometry_window.rb', line 109 def select_atom(atom) @selection[:atoms] = [atom] puts "Selection:" puts @selection[:atoms].each{|a| puts a.format_geometry_in} @geomEditor.select_atom(atom) @console.echo("\n" + atom.to_s) @console.prompt end |
#show_geometry(geometry) ⇒ Object
Display the given geometry
96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/aims_project/geometry_window.rb', line 96 def show_geometry(geometry) begin @original_uc = geometry @geomViewer.unit_cell = @original_uc rescue AimsProjectException => e @app.error_dialog(e) ensure @geomEditor.unit_cell = @original_uc end # @inspector.update(@geomViewer) # @geomViewer.draw_scene end |
#show_inspector ⇒ Object
56 57 58 |
# File 'lib/aims_project/geometry_window.rb', line 56 def show_inspector @app.inspector.show_inspector_window(@inspector_window) end |
#update_viewer ⇒ Object
Apply UI settings to viewer and re-render
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/aims_project/geometry_window.rb', line 131 def update_viewer puts "GeometryWindow.update_viewer" if @original_uc and self.update_unit_cell if @correct.get_value # @geomViewer.unit_cell = @original_uc.correct new_geom = @original_uc.repeat(@x_repeat.get_value, @y_repeat.get_value, @z_repeat.get_value).correct else # @geomViewer.unit_cell = @original_uc new_geom = @original_uc.repeat(@x_repeat.get_value, @y_repeat.get_value, @z_repeat.get_value) end @geomViewer.unit_cell = new_geom @geomEditor.unit_cell = new_geom self.update_unit_cell = false end # @geomViewer.repeat = [@inspector.x_repeat, @inspector.y_repeat, @inspector.z_repeat] @geomViewer.show_bonds = @show_bonds.get_value @geomViewer.bond_length = @bond_length.get_value @geomViewer.lighting = @show_lighting.get_value @geomViewer.show_supercell = @show_cell.get_value @geomViewer.show_xclip = @show_xclip.get_value @geomViewer.show_yclip = @show_yclip.get_value @geomViewer.show_zclip = @show_zclip.get_value @geomViewer.background.alpha = ((@transparent_bg.get_value) ? 0 : 1) @geomViewer.draw_scene end |