Suggestion for code - Minimize (rollup) Outliner
-
That's a good suggestion, John.
I tried a quick experiment. It is possible to shade the Outliner from Ruby, but I don't see a way to tell if it is currently open. Anyone have an idea about that?
Note that the Ruby API in SketchUp 7 has changed to address this issue. The change is in the start_operation method:
SU 6:
Sketchup.active_model.start_operation("Create a zillion faces")
versus SU 7:
Sketchup.active_model.start_operation("Create a zillion faces", true)
-
I wrote this up a while ago. I am pretty sure I sent it to you Jim...
def toggleRollUp(name) findWindow = Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N') pw=findWindow.call(0,name) sendMessage = Win32API.new("user32.dll", "SendMessage", ['N','N','N','P'], 'N') sendMessage.call (pw,0x00a1,2,"")#WM_NCLBUTTONDOWN sendMessage.call(pw,0x0202,0,"")#WM_LBUTTONUP end def isRolledUp(name) findWindow = Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N') getWindowRect= Win32API.new("user32.dll", "GetWindowRect",['P','PP'], 'N') pw=findWindow.call(0,name) data=Array.new.fill(0.chr,0..4*4).join getWindowRect.call (pw,data); rect=data.unpack("i*") #if window height is less than 90 then the window is rolledup return (rect[3]-rect[1])<90 end
-
Wow, this is an excellent idea.
The outliner is a fantastic tool when editing.
But it is indeed a pain in the ass when you got it open while using heavy scripts.This (future) script might save me a headache
-
You would still need to add it every existing script you want to use it in.
-
Jim F:
So if CPhillips' code can be stored as a .rb and is given a name like "Outliner_Rollup.rb" and it is located in the SU/Plugins directory, what code would need to be inserted into a script to call Outliner_Rollup.rb and where should it be placed relative to the existing code?
John
-
@jclements said:
Jim F:
So if CPhillips' code can be stored as a .rb and is given a name like "Outliner_Rollup.rb" and it is located in the SU/Plugins directory, what code would need to be inserted into a script to call Outliner_Rollup.rb and where should it be placed relative to the existing code?
John
I added hideOutliner() and restoreOutliner(). Just call before and after your script respectively.
require "win32api.so" #these 2 functions are untested but should work. def hideOutliner() $bOutlinerWasOpen=!isRolledUp("Outliner") toggleRollUp("Outliner") if $bOutlinerWasOpen end def restoreOutliner() toggleRollUp("Outliner") if $bOutlinerWasOpen end def toggleRollUp(name) findWindow = Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N') pw=findWindow.call(0,name) sendMessage = Win32API.new("user32.dll", "SendMessage", ['N','N','N','P'], 'N') sendMessage.call (pw,0x00a1,2,"")#WM_NCLBUTTONDOWN sendMessage.call(pw,0x0202,0,"")#WM_LBUTTONUP end def isRolledUp(name) findWindow = Win32API.new("user32.dll", "FindWindow", ['P','P'], 'N') getWindowRect= Win32API.new("user32.dll", "GetWindowRect",['P','PP'], 'N') pw=findWindow.call(0,name) data=Array.new.fill(0.chr,0..4*4).join getWindowRect.call (pw,data); rect=data.unpack("i*") #if window height is less than 90 then the window is rolledup return (rect[3]-rect[1])<90 end
-
While you'll still need a method to determine if the Outliner is visible or not... you can just call this:
UI.show_inspector "Outliner"
to toggle between rolled up and rolled down. (At least in SU 7, didn't try 6)
-
Had a similar problem awhile back and just hacked it by adding "Sketchup.send_action 21926" before/after the function to temporarily hide all the dialog windows.
The above ideas are more elegant and official, however
--alz
-
Is this still valid for Ruby 2, or is there now a better way using the Ruby StdLib?
-
I see this thread is almost ten years old, but has this issue ever actually gotten fixed?
Advertisement