[Plugin] AMS Library 3.7.1b (29 May 2021)
-
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.
-
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.
-
AMS::Window.send_message can sent something to a sketchup window, but,how to get message in sketchup by ruby?
thank you.
-
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
withswp_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)
-
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
-
Hmm, communication between windows? That's interesting! I will look into that.
-
-
Thanks for the head start, Jim! That, SendMessageCallback, should do it. I will implement it into my library for an easy way to use. This is what I'm thinking to add in the future release:
A function to communicate to another window.
` # Transmit information to another window.@param [Fixnum] dest_handle A handle to a destination window.
@param [Fixnum] id A unique message identifier, a value b/w 0 and 4016.
ID allows users to filter their messages from messages of other users.
However, there is a downside, as some plugin developers might use
same ID, but it's very unlikely.
@param [String] data Message information.
AMS::Sketchup.send_message_to_window(dest_handle, id, data)`
An observer that receives transmitted messages.
` # Called when user sent message arrives to its destination window.@param [Fixnum] sender_handle A handle to a window that sent a message.
@param [Fixnum] id Message id.
@param [Fixnum] data Message information.
AMS::SketchupObsever.swo_on_message_received(sender_handle, id, data)`
A bonus function that allows users to get handles to all Sketchup Windows.
` # Get all SU windows@return [Array<Fixnum>] An array of all SketchUp main windows except this one.
AMS.get_all_sketchup_windows`
An example, where this window communicates to all other SU windows:
class MyDataTransferClass MY_PORT = 123 # @param [String] Data in string form. def send_data_to_all_windows(data) su_windows = AMS.get_all_sketchup_windows su_windows.each { |dest_handle| AMS;;Sketchup.send_message_to_window(dest_handle, MY_PORT, data) } end # Implement one of the SketchUp Window Observer callback methods. def swo_on_message_received(sender_handle, id, data) # Return if id is not yours if id != MY_PORT # Otherwise, do anything with data. # In our case, we'll evaluate it. eval(data) end end # class MyDataTransferClass # Create an instance of our communication class my_data_transfer = MyDataTransferClass.new # Register your class to SketchUp observers as it contains one of the SU observer methods. AMS;;Sketchup.add_observer(my_data_transfer) # Send a message to all other SU windows. my_data_transfer.send_data_to_all_windows("puts 'Hi, this is a message from another window!'")
Well, you have an insigt of how I'm planning to implement it. Once I'll add these functions into my library, I will notify you, wikii.
If anyone has any suggestions on improvement of this plan, please inform.
-
@anton_s said:
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.
Hello,
it happened again, now in Sketchup2016, with basically nothing but your plugins installed via Sketchucation tools. I don't know what exactly causes it, but it never happened with AMS Library and Window Settings disabled. I hope you can find the issue and fix it, as I would really like to be able to toggle toolbars and toolbar containers with hotkeys. With SU2016, the new trays which replace the dialog windows can natively be toggled with hotkeys, which is a very good addition in my opinion.
-
Thanks for your another report Pherim. I'm trying my best to reproduce that crash. In order to track it down, a little more information that lead to a crash would be appreciated.
- Did the crash occurred following a certain operation, like triggering a particular button, shortcut, or command or did the crash occur randomly?
- At what time did SU crash, when SU launched or some after it after is launched?
- Was the Window Settings dialog open at the time of the crash?
-
Alright, here's what I got so far:
When I start Sketchup with AMS Lib and Window Settings active, at first everything works fine. As I begin playing around with different tools, both native SU and from extensions, after a short time, tools begin to stay highlighted in the toolbar (only native SU toolbars in SU 2016, as tools in other toolbar are not highlighted at all in this version) even after changing to another tool, and then shortly after SU will crash when right-clicking, mostly on a group or component, I believe, and possibly only with a non-native tool active.
It does not happen with just AMS Lib active and Window Settings disabled in Sketchucation Plugins/Extensions Manager, but as no other plugin depends on it, I guess it could be the cause, as well.
-
Hello Wikii, I have added a feature to communicate between windows on same computer. See http://www.rubydoc.info/github/AntonSynytsia/AMS-Library/master/AMS/Sketchup#send_user_message-class_method
Pherim, I tried reproducing that crash and I came across it once, but, following similar operations, I couldn't reproduce it again. It seems to occur very rarely. I haven't been able to track the crash down, but I did make small changes and improvements, which could potentially resolve the crash.
-
I'm afraid it still happens... I was just able to reproduce it two times, using only standard tools.
-
Good! Looks like you know the exact steps to reproduce it. List 'em here, please.
-
Well there is not much more to it than I already wrote. I just use various tools, make groups and components and edit them, until the tools begin to stay highlighted in the toolbar - this happens all the time. Then, at some point, it eventually crashes when I right-click, possibly only or at least more often on groups or components. I tried to record a video of the process, but so far, I have not been able to produce a crash while recording. Maybe they are not happening as often now, but they definitely still do.
-
Hello everyone, AMS Library version 3.1.1 has been released. It is important to upgrade to a new version because it addresses a bug fix, which caused spike in performance, which lead to toolbar icons staying highlighted and eventually to a crash. Huge thanks to Pherim for reporting and verifying it. See first post for download links.
-
Thanks again for fixing it!
-
i think it no longer has a support for xp...it shows some error ...sorry i forgot to post some pics...but it really does.i hope some xp users show the error..but i'll post it soon...or maybe its a bug...please dont stop the support for xp unlike microsoft...this is a really great plugin with lots of possibilities....
-
Opps I forgot to test it on Win XP. Ill check it out.
-
Hello, junaramaro, I made it compatible with Windows XP. Thanks for reporting.
Advertisement