Updates and Changes

3.7.1 - 26 May 2021

  • Removed AMS::TEMP_DIR and AMS::SU_PLUGINS_LOCATION
  • Added AMS.get_folder_path and AMS.get_temp_dir
  • Added AMS::Sketchup.is_viewport_focused?
  • Upgraded AMS::Translate to parse strings in JSON format. Translations are now only compatible with SU2014 and later.
  • Fixed the incorrect behavior with triggering shortcuts when the menu bar is hidden. Now, if the menu bar is hidden, accelerators trigger if and only if the viewport window has the keyboard focus. Originally, the shortcuts triggered even if a child window had the keyboard focus.
  • Updated the behavior of the AMS::Sketchup.switch_full_screen function to allow changing the target screen mode, without having to unset the full-screen mode beforehand. Additional changes include window activation removal and adjustments to the return value behavior.
  • Removed unnecessary aliases, including:
    • AMS.is_bool?
    • AMS::Registry.read / write / remove
    • AMS::Sketchup.activate
    • AMS::Keyboard.key
    • AMS::Keyboard.alt_down? / alt_up?
    • AMS::Keyboard.ctrl_down? / ctrl_up?
    • AMS::Keyboard.lctrl_down? / lctrl_up?
    • AMS::Keyboard.rctrl_down? / rctrl_up?
    • AMS::Keyboard.lalt_down? / lalt_up?
    • AMS::Keyboard.ralt_down? / ralt_up?
  • Reworked AMS::Sketchup.show_toolbar_container, fixing potential bugs.
  • Added AMS::Sketchup.is_toolbar_container_hidden?
  • Slightly altered the behavior of AMS::Sketchup.is_toolbar_container_visible?
  • Ruby 2.7

3.6.0 - November 15, 2018

  • Added AMS::SU_MAJOR_VERSION
  • Added AMS::SU_PLUGINS_LOCATION
  • Added AMS.clamp_int and AMS.clamp_real
  • Added AMS.min_int and AMS.min_real
  • Added AMS.max_int and AMS.max_real
  • Added AMS.sign_int and AMS.sign_real
  • Added AMS.refresh_toolbars
  • Added AMS::Translate.convert_text function for translating HTML files.
  • Added AMS::Keyboard.send_mouse_input
  • Added AMS::Keyboard.send_keyboard_input
  • Added AMS::Keyboard.send_hardware_input
  • Added AMS::Window.get_class_long
  • Added AMS::Window.set_class_long
  • Added AMS::Window.set_background_color
  • Added AMS::Window.get_keyboard_focus
  • Added AMS::Window.set_keyboard_focus
  • Added AMS::Menu.is_item_checked_by_pos?
  • Added AMS::Menu.is_item_checked_by_id?
  • Added AMS::Menu.is_item_grayed_by_pos?
  • Added AMS::Menu.is_item_grayed_by_id?
  • Added AMS::Geometry.scale_matrix
  • Added AMS::Geometry.extract_matrix_w_factor
  • Added AMS::Geometry.product_vectors
  • Added AMS::Group.split
  • Revised all AMS::Group and AMS::Geometry functions, optimizing for performance.
  • Removed AMS::Lib loader functions
  • Removed swo_on_viewport_paint and swo_on_post_viewport_paint
  • Fixed bug in AMS::Geometry.blend_colors
  • Fixed bugs in AMS::ExtensionManager and made it load from stage path as the last resort in case all else fails.
  • Keyboard events are now triggered across the entire SketchUp thread. Unwanted events can be omitted with checks for active window.
  • Changed mouse move, mouse enter, and mouse leave events from SWO to SWP.
  • Compatibility with Ruby 2.5.

3.5.2 - July 25, 2017

  • Compatibility with Windows XP.

3.5.1 - July 17, 2017

  • Compatibility with SU versions prior to 2013.

3.5.0 - July 9, 2017

  • Migrated AMS, AMS::Group, AMS::Geometry, and AMS::MultiLineText to C++ extension, which includes optimizations and various fixes.
  • Removed AMS::System platform detection functions: is_windows?, is_mac?, and is_linux?; use constants instead.
  • Removed AMS::Sketchup.is_32bit? and AMS::Sketchup.is_64bit?.
  • Added AMS::IS_SKETCHUP_32BIT and AMS::IS_SKETCHUP_64BIT.
  • Added AMS::IS_RUBY_VERSION_18, AMS::IS_RUBY_VERSION_20, and AMS::IS_RUBY_VERSION_22.
  • Revised AMS::RayUtil functions and moved them to AMS::Geometry.
  • Moved AMS.scale_vector to AMS::Geometry.
  • Added AMS::Geometry.calc_cubic_bezier_point(ratio, p0, p1, p2, p3).
  • Added AMS::Geometry.calc_cubic_bezier_slope(ratio, p0, p1, p2, p3).
  • Added AMS::Geometry.scale_point(point, scale).
  • Removed AMS::Geometry.rotate_matrix1_to_matrix2.
  • Added AMS::Geometry.rotate_matrix_xaxis_to_dir(transformation, dir).
  • Added AMS::Geometry.rotate_matrix_yaxis_to_dir(transformation, dir).
  • Added AMS::Geometry.rotate_matrix_zaxis_to_dir(transformation, dir).
  • Added AMS::Geometry.rotate_vector(vector, normal, angle).
  • Added AMS::Geometry.angle_between_vectors(v1, v2, normal).
  • Reworked AMS::Geometry.transition_transformation(t1, t2, ratio) to consider scaled matrices.
  • Rearranged parameters for AMS::Geometry.blend_colors and AMS::Geometry.get_points_on_circle3d.
  • AMS::Geometry.get_points_on_circle2d and AMS::Geometry.get_points_on_circle3d now accept rot_angle in radians.
  • Revised most AMS::Group functions.
  • Replaced AMS::MultiLineText.#entity with AMS::MultiLineText.#get_entity.
  • Added AMS::MultiLineText.#set_entity(entity).
  • Added AMS::MultiLineText.#get_position.
  • Added AMS::MultiLineText.#set_position(x,y).
  • Added AMS::Window.peek_message(handle, msg_filter_min, msg_filter_max, remove_flag).
  • Added AMS::Window.peek_message2(handle, msg_filter_min, msg_filter_max, remove_flag).
  • Added AMS::Keyboard.get_key_name(vk_code).
  • Added AMS::Group.get_bounding_box_from_edges(object, recursive = true, transformation = nil, &entity_validation).
  • Added AMS::Sketchup.show_trays(state).
  • Added AMS::Sketchup.close_trays.
  • Added AMS::Sketchup.activate_scenes_bar_tab(tab_index).
  • Added AMS::Sketchup.threaded_messagebox(caption, text, type, owner_handle).
  • Added AMS::SketchupObserver.#swp_on_page_selected(page1, page2, tab_index1, tab_index2).
  • Added two additional parameters to AMS::SketchupObserver.#swo_on_page_selected.
  • Removed AMS::Win32::API as it hasn't been used since version 2.
  • Removed AMS::Lib.clean_up.
  • Added AMS::ExtensionManager to prevent overwrite issues that occur when updating loaded extensions. Thanks to ThomThom for the original version.

3.4.1 - December 17, 2016

  • Added signature.

3.4.0 - October 31, 2016

  • Made most keyboard and midi functions compatible with Mac OS X.
  • Added AMS::MIDI.is_device_open?
  • Added AMS::MIDI.out_message(*args)

3.3.0 - July 10, 2016

  • Added more MIDI functions.
  • Added Group and Geometry modules.
  • Added AMS.round(value, precision)
  • Started making compatible with Mac OS X.

3.2.5 - May 22, 2016

  • Improved performance with observers.

3.2.4 - May 21, 2016

  • More compatibility with different encodings.

3.2.3 - May 19, 2016

  • Made compatible with different encodings.

3.2.2 - April 05, 2016

  • Fixed crash when toggling menu bar on different localization. Thanks to herojack and perroloco2000 for report.

3.2.1 - March 30, 2016

  • Fixed small bug in AMS::Window.set_pos.
  • Recompiled with optimized settings.
  • Fixed the frozen path load error on particular machines.

3.2.0 - February 28, 2016

  • Added AMS::SketchupObserver.#swo_on_page_selected(page1, page2)

3.1.4 - February 06, 2016

  • Made SU full screen function associate to the desired monitor(s). Thanks to DimaV83 for request.

3.1.3 - December 30, 2015

  • Fixed a bug that caused a crash when remove AMS observer from within an observer method.

3.1.2 - December 04, 2015

  • Made it compatible with Windows XP. Thanks for Junar Amaro for report.
  • Fixed a bug that prevented menu bar from working properly on Windows XP.
  • Fixed a bug where starting SU8, with dialogs open, the library failed to identify the main window.

3.1.1 - November 29, 2015

  • Fixed a bug that caused increase in CPU usage and lead to a crash. Thanks to Pherim for report.

3.1.0 - November 26, 2015

  • Added AMS::Sketchup.send_user_message(receiver_handle, id, data)
  • Added AMS::SketchupObserver.#swo_on_user_message(sender_handle, id, data)
  • Added AMS::Sketchup.get_other_main_windows
  • Added AMS::Sketchup.get_executable_name
  • Added AMS::Window.get_moudle_handle(handle)
  • Added AMS::Window.get_executable_path(handle)
  • Added AMS::Window.get_executable_name(handle)
  • AMS::SketchupObserver.#swp_on_command(id) no longer triggers on 24214 command. The 24214 command occurs very often and is called when the view is invalidated, rather than when the tool is activated.
  • Added AMS.inspect_element(item)

3.0.1 - September 20, 2015

  • Fixed some security issues.

3.0.0 - September 16, 2015

  • Fully rewritten library with optimizations, bug fixes, and improvements.
  • All code that deals with Windows API is now a C++ extension.
  • Unicode strings are now handled properly.
  • Removed Ruby-FFI library as it's no longer necessary.
  • Changed MIDI behaviour and renamed some of its functions:
    • AMS::MIDI.play_note no longer has the 'duration' parameter, and it returns a sound id rather than boolean.
    • AMS::MIDI.stop_note now asks for a sound id.
    • Replaced AMS::MIDI.channel_sustain_pedal with AMS::MIDI.sustain_channel_pedal.
    • Removed AMS::MIDI.play_3d_note and AMS::MIDI.set_3d_note_position.
    • Added AMS::MIDI.set_note_position(id, position, max_hearing_range)
    • Added AMS::MIDI.get_device_handle()
  • Replaced AMS::Keyboard.get_key_value with AMS::Keyboard.get_key_code.
  • Added AMS::Keyboard.get_virtual_key_codes
  • Added AMS::Keyboard.get_virtual_key_codes2
  • Added AMS::Keyboard.get_virtual_key_names
  • Added AMS::Sketchup.include_toolbar(handle)
  • Added AMS::Sketchup.ignore_toolbar(handle)
  • Added additional parameters to AMS::Sketchup.find_window_by_caption(caption, full_match = true, case_sensitive = true)
  • Added AMS::Sketchup.find_child_window_by_caption(parent_handle, caption, include_sub_childs = false, full_match = true, case_sensitive = true)
  • Added AMS::Sketchup.find_window_by_class_name(class_name, full_match = true, case_sensitive = true)
  • Added AMS::Sketchup.find_child_window_by_class_name(parent_handle, class_name, include_sub_childs = false, full_match = true, case_sensitive = true)
  • AMS::Sketchup.refresh and AMS::Sketchup.close now return boolean rather than void.
  • Removed AMS::Menu.validate
  • Replaced AMS::Menu.get_menu_item_string_by_pos with AMS::Menu.get_item_string_by_pos.
  • Replaced AMS::Menu.get_menu_item_string_by_id with AMS::Menu.get_item_string_by_id.
  • Replaced AMS::Menu.set_menu_item_string_by_pos with AMS::Menu.set_item_string_by_pos.
  • Replaced AMS::Menu.set_menu_item_string_by_id with AMS::Menu.set_item_string_by_id.
  • Fixed a bug where AMS::Menu.get_item_id failed to return -1 if given index represented a submenu.
  • Removed AMS::Window.validate
  • AMS::Window.show(handle, state) now returns boolean rather than integer.
  • AMS::Window.is_child?(parent_handle, handle) was changed to AMS::Window.is_child?(handle, parent_handle)
  • Replaced AMS::Window.bring_window_to_top with AMS::Window.bring_to_top
  • Replaced AMS::Window.get_text with AMS::Window.get_caption
  • Replaced AMS::Window.set_text with AMS::Window.set_caption
  • AMS::Window.send_message now returns message processing result rather than nil.
  • Added AMS::Window.post_message(handle, message, wParam, lParam)
  • Added AMS::Window.get_layered_attributes(handle)
  • AMS::Window.set_layered_attributes(handle, color, opacity, flags) now accepts an array of RGB values for the color parameter.
  • Added AMS::Window.get_windows(include_hidden = true)
  • Added AMS::Window.get_process_windows(process_id, include_hidden = true)
  • Added AMS::Window.get_thread_windows(thread_id, include_hidden = true)
  • Added AMS::Window.get_child_windows(parent_handle, include_sub_childs = false, include_hidden = true)
  • Added AMS::Window.find_window_by_caption(caption, full_match = true, case_sensitive = true)
  • Added AMS::Window.find_child_window_by_caption(parent_handle, caption, include_sub_childs = false, full_match = true, case_sensitive = true)
  • Added AMS::Window.find_window_by_class_name(class_name, full_match = true, case_sensitive = true)
  • Added AMS::Window.find_child_window_by_class_name(parent_handle, class_name, include_sub_childs = false, full_match = true, case_sensitive = true)
  • Added AMS::Window.is_unicode?(handle)
  • Added AMS::Window.get_related(handle, command)
  • Added AMS::Window.get_ancestor(handle, flag)
  • Added AMS::Window.client_to_screen(handle, x, y)
  • Added AMS::Window.screen_to_client(handle, x, y)
  • Added AMS::Window.map_point(handle_from, handle_to, x, y)
  • Added AMS::DLL.load_libarary(path)
  • Added AMS::DLL.free_libarary(handle)
  • NULL window/menu handles now return nil rather than zero.
  • Fixed a bug where activating/deactivating particular observer triggered swo_activate/swo_deactivate in all active observers rather than in particular observer being activated or deactivated.
  • Fixed a bug where swo_on_toolbar_container_filled/swo_on_toolbar_container_emptied was unintentionally called when toolbar container visibility state was changed.
  • Added post events for AMS::SketchupObserver: swo_on_post_enter_menu, swo_on_post_exit_menu, swo_on_post_switch_full_screen, swo_on_post_maximize, swo_on_post_minimize, swo_on_post_restore, swo_on_post_focus, swo_on_post_blur, swo_on_post_enter_size_move, swo_on_post_size_move, swo_on_post_exit_size_move, swo_on_post_caption_changed, swo_on_post_menu_bar_changed, swo_on_post_viewport_paint, swo_on_post_viewport_size, swo_on_post_viewport_border_changed, swo_on_post_scenes_bar_visibility_changed, swo_on_post_scenes_bar_filled, swo_on_post_scenes_bar_emptied, swo_on_post_status_bar_visibility_changed, swo_on_post_toolbar_container_visibility_changed, swo_on_post_toolbar_container_filled, swo_on_post_toolbar_container_emptied.

2.2.0 - January 22, 2015

  • Migrated from a C extension to a C++ extension.
  • Added an option to hide Vray dialogs. Thanks to shake1 for request.

2.1.0 - December 03, 2014

  • Added AMS::Lib.clean_up, which removes all unregistered Ruby files from the library.
  • Added AMS::System.get_metrics(index)
  • Minor bug fixes.

2.0.0 - November 20, 2014

  • Improved functionality.
  • Added support for SU 64 bit.
  • Reorganized various functions and rewrote documentation.
  • Migrated from relying on win32-api gem to using a C extension.
  • Implemented Windows MIDI.
  • Made FFI Compatible with Ruby 1.8.6. It's not compatible with Ruby 1.8.0 though.

1.0.9 - April 26, 2014

  • Added get_keys and get_values to the registry.
  • Improved MultiLineText.

1.0.8 - February 12, 2014

  • Stabilized registry readers and writers.
  • Stabilized custom shortcuts on localized SU versions.

1.0.7 - February 04, 2014

  • Added custom timers.
  • Optimized show/hide dialogs function.
  • Added swo_tbc_onFilled(bar) and swo_tbc_onEmptied(bar) observers, which are called when a certain toolbar container is emptied or filled with toolbars.
  • Added swo_mw_onCommand(id), which responds to Sketchup.send_action events.

1.0.6 - January 29, 2014

  • Figured out a way to keep all menu shortcuts working when the menu bar is removed. Yes!!!
  • Added registry accessors.
  • Added swo_mw_onEnterMenu and swo_mw_onExitMenu observers.
  • Added AMS::Windows::API - thanks to Daniel J. Berger.
  • Fixed get screen resolution function. Originally it returned resolution of the current screen. Now, it returns resolution of all monitors combined.
  • Improved observers.
  • Increased callbacks limit of AMS::Win32::API to 20 callbacks.
  • Simplified libraries.

1.0.5 - December 16, 2013

  • Fixed the observers bug that made SketchUp freeze when pressing a key in the menu.

1.0.4 - December 15, 2013

  • Improved the refresh function.

1.0.3 - December 15, 2013

  • Some fixes and improvements.
  • Added AMS::Window.invalid?
  • Added AMS::Window.set_pos
  • Added AMS::Window.set_size

1.0.2 - December 06, 2013

  • Some fixes and improvements.
  • Increased observers reaction speed.

1.0.1 - November 22, 2013

  • Improved set full screen, maximize, minimize, and restore functions.

1.0.0 - November 17, 2013

  • Initial release.