• Login
sketchucation logo sketchucation
  • Login
ℹ️ GoFundMe | Our friend Gus Robatto needs some help in a challenging time Learn More

[Plugin] AMS Library 3.7.1b (29 May 2021)

Scheduled Pinned Locked Moved Plugins
107 Posts 38 Posters 614.4k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    Anton_S
    last edited by 6 Nov 2014, 20:41

    Since SU2014 the plugins folder was changed to AppData location. To get rid of the plugin, copy this path to your explorer:
    %appdata%\SketchUp\SketchUp 2015\SketchUp\Plugins

    From there, delete the following:

    1. ams_Lib.rb and amsLib folder.
    2. ams_WindowSettings.rb and ams_WindowSettigns folder.

    I will get this thing compatible with SU2015 and prevent the message from showing up each time...
    Sorry for inconvenience.

    1 Reply Last reply Reply Quote 0
    • L Offline
      lionk
      last edited by 8 Nov 2014, 14:32

      uninitialized constant
      Win32::API::Callback
      hope the issue can be resolved! thank you!

      1 Reply Last reply Reply Quote 0
      • D Offline
        davidheritier
        last edited by 2 Dec 2014, 11:32

        hello thanks for this plugin!
        but when your are full screen with nothing else how can you come back to toolbar?
        thx again

        1 Reply Last reply Reply Quote 0
        • Y Offline
          ying2014
          last edited by 15 Feb 2015, 08:17

          Can I ask you a question?How do you make a *.html files does not display a dialog box in SketchUp ?just like the ams_WindowSettings.I think it is very cool.So ,if possible ,can you give a simple example?

          1 Reply Last reply Reply Quote 0
          • A Offline
            Anton_S
            last edited by 17 Feb 2015, 22:41

            Ying2014, here is a code snippet which allows you to remove borders from the dialog:

            
            # Create a web dialog
            @title = 'MyDialog'
            @dialog = UI;;WebDialog.new(@title, false, 'MyDialog', width, height, ix, iy, true)
            # Add Callbacks
            @dialog.set_on_close(){
              @dialog = nil
              @handle = nil
            }
            # Set file
            @dialog.set_file(html_path)
            # Show dialog
            RUBY_PLATFORM =~ /mswin|mingw/i ? @dialog.show ; @dialog.show_modal
            # Find dialog handle
            @handle = AMS;;Sketchup.find_window_by_caption(@title)
            # Remove dialog caption and borders
            if @handle
              layered = AMS;;System.get_windows_version < 6.0 ? 0 ; 0x00080000
              style_ex = 0x00010000 | layered # WS_EX_CONTROLPARENT | WS_EX_LAYERED
              style = 0x94000000 # WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS
              AMS;;Window.lock_update(@handle)
              AMS;;Window.set_long(@handle, -20, style_ex)
              AMS;;Window.set_long(@handle, -16, style)
              AMS;;Window.lock_update(nil)
              AMS;;Window.set_pos(@handle, 0, 0, 0, 0, 0, 0x0267)
            end
            
            

            Basically, what it does is creates a webdialog, finds its handle, and removes its borders. Along with removing borders it adds a layered style, which allows it to be made transparent.

            To make the dialog draggable, you'd have to implement a few callbacks in your javascript file that would respond to mouse click and mouse move. Here is a snippet:

            
            function callback(name, data) {
              if (!data) data = "";
              window.location.href = "skp;" + name + "@" + data;
            }
            $(document).ready( function() {
            
              var md = false;
              var pos = [0,0];
              var dragged = false;
              
              // Detect Drag.
              $( "#some_id" ).mousedown(function(e) {
                md = true;
                var x = e.clientX;
                var y = e.clientY;
                pos = [x,y];
                callback("drag_start", null);
                dragged = false;
                return false;
              });
              $( document ).mousemove(function(e) {
                if (!md) return;
                var x = e.clientX;
                var y = e.clientY;
                var dx = x-pos[0];
                var dy = y-pos[1];
                if ((dx == 0) && (dy == 0)) return;
                dragged = true;
                callback("drag", "["+dx+","+dy+"]");
            	return false;
              });
              $( document ).mouseup(function(e) {
                if (md) {
                  md = false;
                  callback("drag_end", null);
            	  return false;
                }
              });
            });
            
            

            In the code above, "#some_id" has to be changed to any id of an element in your HTML. It can also be changed to document to respond to drag anywhere in HTML.

            Then have these callbacks implemented in SketchUp:

            
            @offset = [0,0]
            @dialog.add_action_callback('drag_start'){ |dlg, params|
              c = AMS;;Cursor.get_pos
              d = AMS;;Window.get_origin(@handle)
              @offset = [c.x - d.x, c.y - d.y]
            }
            @dialog.add_action_callback('drag'){ |dlg, params|
              c = AMS;;Cursor.get_pos
              x,y = [c.x - @offset.x, c.y - @offset.y]
              AMS;;Window.set_origin(@handle, x, y, false)
            }
            @dialog.add_action_callback('drag_end'){ |dlg, params|
              @offset = [0,0]
            }
            
            

            To change dialog opacity, use this function:
            AMS::Window.set_layered_attributes(@handle, 0, opacity, 2)

            To make the dialog clip to screen and snap to viewport, you'd have to add more ruby functionality and modify dialog position in the 'drag' callback. I would advice looking into ams_WindowSettings/main.rb for source.

            1 Reply Last reply Reply Quote 0
            • Y Offline
              ying2014
              last edited by 25 Feb 2015, 03:32

              thanks!!It is very helpful to me

              1 Reply Last reply Reply Quote 0
              • W Offline
                wikii
                last edited by 15 Sept 2015, 03:44

                @anton_s said:

                Description

                AMS Library is a collection of tools and functions used to interact with SketchUp window and its sub-windows using Microsoft Windows API. It's capable to switch SketchUp full screen, show/hide toolbar containers, status bar, scenes bar, and more elements of the window. It's also capable to observe and make decisions to various events of the window procedure. In many ways, this library is written to achieve things that cannot be done with standard SketchUp API.

                This library includes Ruby FFI and and Win32 API extensions as part of the utility. Both of these gems are recompiled under my own name-space for compatibility with other extensions. I do not take ownership of such gems, nor I claim any credit for them. I just happen to rely on them so much that it was essential to include them in the library.

                Requirements

                • Microsoft Windows XP, Vista, 7, or 8
                • SketchUp 6 or later
                  Usage

                Yardoc Documentation

                Download

                • Available at PluginStore
                • ams_Lib_2.2.0.zip
                  Extract content into the Plugins folder!

                It is a great lib!

                one question:

                when i use swo_on_maximize ,like this
                class MySketchupObserver
                def swo_on_maximize
                r=AMS::C.get_viewport_rect()
                p r
                end
                end
                AMS::Sketchup.add_observer($o=MySketchupObserver.new)

                I found get_viewport_rect returns the value of viewport before maximized.

                So, can you provide a method like swo_on_maximized, will be called when maximize complete?

                thank you for the great lib!

                wikii

                1 Reply Last reply Reply Quote 0
                • A Offline
                  Anton_S
                  last edited by 15 Sept 2015, 05:51

                  That's a good idea. I will add swo_on_post_[event] methods in the upcoming version.

                  1 Reply Last reply Reply Quote 0
                  • A Offline
                    Anton_S
                    last edited by 16 Sept 2015, 11:06

                    Hi Wikii. I added the post-events.
                    You should try out this example in Ruby console:

                    class MySUWindowObserver
                      def swo_on_maximize
                        puts 'swo_on_maximize'
                        p AMS;;Sketchup.get_viewport_rect()
                      end
                    
                      def swo_on_post_maximize
                        puts 'swo_on_post_maximize'
                        p AMS;;Sketchup.get_viewport_rect()
                      end
                    
                    end # class MySUWindowObserver
                    
                    my_obs = MySUWindowObserver.new
                    AMS;;Sketchup.add_observer(my_obs)
                    

                    AMS Library 3 ChangeLog: http://www.rubydoc.info/github/AntonSynytsia/AMS-Library/master/file/CHANGELOG.md

                    1 Reply Last reply Reply Quote 0
                    • W Offline
                      wikii
                      last edited by 17 Sept 2015, 08:36

                      @anton_s said:

                      Hi Wikii. I added the post-events.
                      You should try out this example in Ruby console:

                      class MySUWindowObserver
                      >   def swo_on_maximize
                      >     puts 'swo_on_maximize'
                      >     p AMS;;Sketchup.get_viewport_rect()
                      >   end
                      > 
                      >   def swo_on_post_maximize
                      >     puts 'swo_on_post_maximize'
                      >     p AMS;;Sketchup.get_viewport_rect()
                      >   end
                      > 
                      > end # class MySUWindowObserver
                      > 
                      > my_obs = MySUWindowObserver.new
                      > AMS;;Sketchup.add_observer(my_obs)
                      

                      AMS Library 3 ChangeLog: http://www.rubydoc.info/github/AntonSynytsia/AMS-Library/master/file/CHANGELOG.md

                      Hi Anton_S !

                      It works well in my pc.
                      It is really cool!

                      Thank you for your working.

                      But I have one question more:

                      When I use win+left or win+right to fill Sketchup to half the size of the screen, which observer call catch this operation?

                      Thank you!

                      wikii

                      1 Reply Last reply Reply Quote 0
                      • A Offline
                        Anton_S
                        last edited by 17 Sept 2015, 13:59

                        Currently, no observer catches such operation, but if you want to track window moving and resizing, you can always use swo_on_enter_size_move, swo_on_size_move, swo_on_exit_size_move, or/and swo_on_viewport_size. Check out available observers here: http://www.rubydoc.info/github/AntonSynytsia/AMS-Library/master/AMS/SketchupObserver

                        1 Reply Last reply Reply Quote 0
                        • P Offline
                          Pherim
                          last edited by 19 Sept 2015, 08:17

                          Hello, when I updated to 3.0.0 WindowsSettings didn't work any more, I had to delete both AMS Lib and WindowSettings and reinstall them to make it work again. Just thought I'd mention it in case anyone else has this problem.

                          1 Reply Last reply Reply Quote 0
                          • P Offline
                            Pherim
                            last edited by 5 Oct 2015, 11:20

                            I am not entirely sure, because I have not used SketchUp very much recently, but this plugin could be causing crashes for me, since I only noticed this happening after I installed the new version and it seems to have stopped since I deactivated it (and the Windows Settings plugin with it).

                            1 Reply Last reply Reply Quote 0
                            • A Offline
                              Anton_S
                              last edited by 5 Oct 2015, 13:53

                              Thanks for your feedback Pherim. It would be nice to know more details about the crash, so that I could fix it in case it came from that plugin:

                              1. What Windows version and SU version were you using?
                              2. Were you using AMS Library 3.0.1 and AMS Window Settings 4.2.0 - the latest versions of these plugins?
                              3. When did the crash occur? Did it occur right away or after some time of using SU?
                              4. What were you doing at the time the crash occurred? Like, what tool were you using or what command were you accessing?
                              5. What is the list of other plugins you have installed?

                              Your response would be greatly appreciated,
                              Anton

                              1 Reply Last reply Reply Quote 0
                              • P Offline
                                Pherim
                                last edited by 5 Oct 2015, 17:34

                                Hello,

                                1. I'm using Windows 7 Professional 64bit and the newest version of Sketchup Make 2015 64bit.
                                2. Yes, both plugins were up to date. I am completely sure about this as I had to uninstall both and then reinstall them via the plugin store to make it work at all... just updating both plugins somehow did not work, as I wrote in the post before. I also updated it to 3.0.1 after I wrote this post.
                                3. I am not entirely sure, and right now I am unable to reproduce the crash... it's just that I noticed suddenly that when I changed the tool the cursor would not change as it was supposed to, and also the old tool would still be highlighted in the toolbar. And then, as soon as I right-clicked on a component (well, at least it was a component or group at least some of the times it happened), Sketchup crashed instantly. Well, at the moment it doesn't seem to happen even with your plugins active, but I'll be on guard about it.
                                4. Quite a lot I'm afraid... Though so far, they all worked fine together, and so did the old versions of your plugins.

                                At the moment everything seems to be fine. If this changes, I'll get in touch again.

                                1 Reply Last reply Reply Quote 0
                                • A Offline
                                  Anton_S
                                  last edited by 5 Oct 2015, 19:21

                                  Thank you for your response, Pherim. I, too, came across cursor changing issues, but didn't consider it was related to my library. For AMS Library 3.x.y, the main difference between prior versions, is that I modified it to be Unicode rather than Ascii. That said, I probably implemented something improperly. I will look into that issue.

                                  1 Reply Last reply Reply Quote 0
                                  • A Offline
                                    Anton_S
                                    last edited by 6 Oct 2015, 07:50

                                    Hello Pherim. I tried to reproduce the crash or inconsistent cursor changing behavior with AMS Library 3.0.1, but, similarly to your trial, I couldn't. It is very likely that such bug persisted in version 3.0.0, but not in the current version, 3.0.1. But to be sure, I'll keep an eye on the library.

                                    1 Reply Last reply Reply Quote 0
                                    • W Offline
                                      wikii
                                      last edited by 22 Nov 2015, 02:59

                                      AMS::Window.send_message can sent something to a sketchup window, but,how to get message in sketchup by ruby?

                                      thank you.

                                      1 Reply Last reply Reply Quote 0
                                      • A Offline
                                        Anton_S
                                        last edited by 22 Nov 2015, 05:24

                                        Are you asking for a windows function, like [GetMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v) or [PeekMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644943(v)?

                                        Current version of AMS Library, doesn't have these functions implemented.
                                        However, you can implement a Windows function manually, using Win32::API that is shipped with AMS::Library. Here is an example:

                                        
                                        module MyDesiredNamespace
                                        
                                          GetMessageA = AMS;;Win32;;API.new('GetMessageA', 'PLLL', 'I', 'User32')
                                          GetMessageW = AMS;;Win32;;API.new('GetMessageW', 'PLLL', 'I', 'User32')
                                        
                                          class << self
                                        
                                            # Get windows message ANSI.
                                            # @note GetMessage waits until the message is received. This means this
                                            #   function will freeze the computer until the message is triggered.
                                            # @param [Fixnum] filter_min Value of the lowest message value to be retrieved.
                                            # @param [Fixnum] filter_max Value of the highest message value to be retrieved.
                                            # @param [Fixnum] handle A handle to the window whose messages are to be retrieved.
                                            # @return [Array] Message inforamtion;
                                            #   [handle, message, wParam, lParam, time, x, y]
                                            # @see https://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx
                                            def get_messageA(filter_min, filter_max, handle = AMS;;Sketchup.get_main_window)
                                              buffer = "\0" * (4 * 7)
                                              # See https://github.com/djberg96/win32-api for Win32;;API usage
                                              res = GetMessageA.call(buffer, handle, filter_min, filter_max)
                                              return buffer.unpack('lLlllll')
                                            end
                                        
                                            # Get windows message Unicode.
                                            # @note GetMessage waits until the message is received. This means this
                                            #   function will freeze the computer until the message is triggered.
                                            # @param [Fixnum] filter_min Value of the lowest message value to be retrieved.
                                            # @param [Fixnum] filter_max Value of the highest message value to be retrieved.
                                            # @param [Fixnum] handle A handle to the window whose messages are to be retrieved.
                                            # @return [Array] Message inforamtion;
                                            #   [handle, message, wParam, lParam, time, x, y]
                                            # @see https://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx
                                            def get_messageW(filter_min, filter_max, handle = AMS;;Sketchup.get_main_window)
                                              buffer = "\0" * (8 * 4) * (4 * 3)
                                              # See https://github.com/djberg96/win32-api for Win32;;API usage
                                              res = GetMessageW.call(buffer, handle, filter_min, filter_max)
                                              return buffer.unpack('qLqqqll')
                                            end
                                        
                                          end # class << self
                                        end # module MyDesiredNamespace
                                        
                                        # In the following case, the function will return when left or right mouse
                                        # buttons are click caption or non-client area of any window.
                                        res = MyDesiredNamespace.get_messageW(0x0A1, 0x0A6, 0)
                                        
                                        

                                        However, if you're aiming to monitor Sketchup action commands, which come when different tools are activated, then you'll probably want to use AMS::SketchupObserver with swp_on_command(id):

                                        
                                        class MyObserver
                                        
                                          def swp_on_command(id)
                                            # Process command here
                                            p id
                                            # Return 1 to block this command; 0 to pass this command
                                            0
                                          end
                                        
                                        end
                                        
                                        my_observer = MyObserver.new
                                        AMS;;Sketchup.add_observer(my_observer)
                                        
                                        1 Reply Last reply Reply Quote 0
                                        • W Offline
                                          wikii
                                          last edited by 22 Nov 2015, 06:49

                                          Hi Anton_S

                                          Thank you for you reply!

                                          If I want send a message from Sketchup window A to Sketchup window B, I can use AMS::Window.send_message.

                                          But ,how can Sketchup window B get to know there is a message come from window A?

                                          I think , Window B must have an observer to get message when message come.

                                          I want to konw , can window B respond message sent from A immediately?

                                          Thank you for you great lib!

                                          wikii

                                          1 Reply Last reply Reply Quote 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 6
                                          • 1 / 6
                                          • First post
                                            Last post
                                          Buy SketchPlus
                                          Buy SUbD
                                          Buy WrapR
                                          Buy eBook
                                          Buy Modelur
                                          Buy Vertex Tools
                                          Buy SketchCuisine
                                          Buy FormFonts

                                          Advertisement