⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update
  • Draw face from webdialog

    2
    0 Votes
    2 Posts
    305 Views
    sdmitchS
    add an action to the form <form action="skp:ruby_messagebox@"> change button type to "submit" In the callback tokens=params[1..-1].split("&"); tokens.each{|t| var,val = t.split("="); case var when "pt1" then pt1=Geom::Point3d.new(val) . . end
  • OnElementAdded inside Group or Component

    4
    0 Votes
    4 Posts
    544 Views
    M
    Hi, I've been experimenting on adding/removing EntitiesObservers when groups/components are opened/closed, and I've found difference in behavior in old and new Sketchup versions. When I have few nested groups and I open/close them multiple times (without leaving top parent group): Sketchup 8 and Sketchup 2013 - observers are added/removed as expected and each new entity is detected only once Sketchup 2014 and Sketchup 2015 - it seems like observers aren't removed each time 'onActivePathChanged' is called (although in console is printed that they are removed). When I add new face inside some nested group it is detected multiple times. Number of times EntitiesObserver is called is increased each time I open/close some subgroup. Below it the code which is independent from my plugin and can be simply loaded in Sketchup for testing purposes: module DL;;Daylighting #Attach observers to model, entities and materials class DLAppObserver < Sketchup;;AppObserver def initializeObservers(model) model_observer = DL;;Daylighting;;DLModelObserver.new() model_observer.initializeObservers(model) model.add_observer(model_observer) end def onNewModel(model) initializeObservers(model) end def onOpenModel(model) initializeObservers(model) end end class DLModelObserver < Sketchup;;ModelObserver @@observers = {} @@entitiesObserver = nil def initializeObservers(model) @@entitiesObserver = DL;;Daylighting;;DLEntitiesObserver.new() model.entities.add_observer(@@entitiesObserver) end #When new group is opened remove old observers and add new observer for active_entities def onActivePathChanged(model) puts "active path changed" #remove all previous observers @@observers.each_pair{|entities,observer| begin puts "***entities #{entities} remove observer #{observer}; #{entities.remove_observer(observer)}" rescue Exception => e puts "Can't remove observer",e.message end } @@observers={} #if all groups are closed -> don't add observers if !Sketchup.active_model.active_path return end entitiesObserver = DL;;Daylighting;;DLEntitiesObserver.new() entities = Sketchup.active_model.active_entities puts "***entities #{entities} add observer #{entitiesObserver}" if entities.add_observer(entitiesObserver) @@observers[entities] = entitiesObserver end end end class DLEntitiesObserver < Sketchup;;EntitiesObserver def onElementAdded( ents, new_ent ) #detect only Sketchup;;Face entities if new_ent.class == Sketchup;;Face puts "onElementAdded #{ents}; #{new_ent}" end end end end #DL;;Daylighting To attach these observers to the application just in call in Ruby console app_observer = DL;;Daylighting;;DLAppObserver.new() app_observer.initializeObservers(Sketchup.active_model) Sketchup.add_observer(app_observer) I don't understand what I'm doing wrong, because printed messages in ruby console show that old observer is always removed from entities when Active path is changed, but still new faces are detected multiple times. Once I leave all groups and go back to model (active_path=nil), all observers are like reset and I have only one EntitiesObserver. When I go inside groups and subgroups again, the number of observers increases again. And to repeat, in Sketchup 8 and Sketchup 2013 - this problem doesn't exist. Any suggestion is welcome, because I'm moving in circles with this observers. Thanks in advance, Marija
  • Selected Dim to Component Instance

    4
    0 Votes
    4 Posts
    399 Views
    K
    Thanks for the help. I'll try your suggestions. Keith
  • Cut and Paste-in-place from within Component Instances

    20
    0 Votes
    20 Posts
    2k Views
    JClementsJ
    Try this script which Sdmitch created. Edit a "top level" instance, make a selection (can be a group, a component, loose geometry or any combination of them), then run the script from the Edit menu > item "Cut selection within Comp Instance and Paste in Place from all Instances" (it is a long description, change if it if you want one less lengthy). You will be given an option to place the objects to be pasted onto a specific layer. I tested it in SU2014 and SU2014. Cut and Paste in Place.rb
  • Error in Triangles with a small side

    13
    0 Votes
    13 Posts
    1k Views
    S
    @driven said: are you updating su2pov3.rb or starting again? john No, it's an old version, I'm working on a new one, but unfortunately I'm trying to understand how to use SketchUp Alpha declared a value on one side, and a different value in the same back_face simultaneously. All this is complicated by the same concept in the statements of the parent block. A problem that for now I can not find answer ..... This is a version a bit less old, but I hope to improve soon http://imitidicthulhu2.blogspot.it/2010/12/skup2ray-v006.html
  • Save workbook with input box entry

    5
    0 Votes
    5 Posts
    518 Views
    D
    Right on, thanks!
  • Ruby scripting issues

    3
    0 Votes
    3 Posts
    357 Views
    Dan RathbunD
    # First we pull in the standard API hooks. require 'sketchup.rb' require 'extensions.rb' Sketchup::require 'su_sandbox/GeometryHelpers' (1) They do not really "pull in the API hooks". (2) You only require scripts and libraries, if this script (which has the require statements,) are going to use what is defined in them. And your script uses nothing in those two files. (The files are located in the "Tools" sub-directory, of SketchUp program directory. They are not scrambled and can be read. Also everything defined in the "extensions.rb" file, is explained in the API dictionary under the SketchupExtensions class.) (3) require statements are always best located at the top of a file, since they should be dependencies. If they cannot be loaded, the rest of the script should not be run, because a LoadError exception will be raised.
  • Changes in 2015

    45
    0 Votes
    45 Posts
    2k Views
    D
    I saved it as a componant and ... DefinitionList.load Timing Tests > SketchUp Version; 15.0.9349 > 0.033619; 0.033619 > 0.003637; 0.003637 > 0.003768; 0.003768 > 0.004126; 0.004126 > 0.003228; 0.003228 > 0.003331; 0.003331 > 0.003248; 0.003248 > 0.003292; 0.003292 > 0.003231; 0.003231 > 0.003322; 0.003322 > Average; 0.006480200000000001 prior to that I got DefinitionList.load Timing Tests > SketchUp Version; 15.0.9349 > 1.569674; 1.569674 > 1.604715; 1.604715 > 1.554494; 1.554494 > 1.546019; 1.546019 > 1.591651; 1.591651 > 1.560916; 1.560916 > 1.561827; 1.561827 > 1.580865; 1.580865 > 1.577112; 1.577112 > 1.575873; 1.575873 > Average; 1.5723146 john
  • Need a way to round up

    3
    0 Votes
    3 Posts
    317 Views
    D
    Right on, thanks, forgot about that.
  • Draw parallel line, distance=11

    21
    0 Votes
    21 Posts
    4k Views
    D
    Thanks
  • Script won't find face

    4
    0 Votes
    4 Posts
    346 Views
    D
    Thank you, That worked.
  • Move points to a '3D grid'

    26
    0 Votes
    26 Posts
    3k Views
    thomthomT
    This wasn't something I ever planned to publish. It was just a code snipped posted for anyone to grab.
  • Yosemite filter code...

    6
    0 Votes
    6 Posts
    407 Views
    Dan RathbunD
    @driven said: can I PM you it, to have a look? Sure, John.
  • Rusty with Ruby. Import help needed.

    5
    0 Votes
    5 Posts
    488 Views
    Dan RathbunD
    You'll need to make your own button images 16x16 and 24x24 The code will be near to: if Sketchup.version.to_i > 13 # no save as before v14 ! save_as_v8_cmd = UI;;Command.new("Save As v8") { model = Sketchup.active_model path = model.path if path.empty? if RUBY_PLATFORM !~ /(darwin)/i # MS Windows path = UI.savepanel( "Save Model As v8 skp...", "*.skp", "SketchUp Files (*.skp)|*.skp;||" ) else # Mac path = UI.savepanel( "Save Model As v8 skp...", "*.skp" ) end unless path.nil? # nil if dialog cancelled model.save( path, Sketchup;;Model;;VERSION_8 ) end else # use current filepath model.save( "", Sketchup;;Model;;VERSION_8 ) end } save_as_v8_cmd.small_icon= "your_icon_name_16.png" save_as_v8_cmd.large_icon= "your_icon_name_24.png" UI.menu("File").add_item save_as_v8_cmd # assume you've created a toolbar ref'd as my_toolbar; my_toolbar.add_item save_as_v8_cmd end
  • Change variable after certain number of loops

    14
    0 Votes
    14 Posts
    847 Views
    jolranJ
    @unknownuser said: Thanks, I'm just trying to find a way not to have to keep pressing 'Ctrl & "A" then delete, every time I want to test a code. Ah, right! Understood. Well TT and Driven got the answers already. Another handy plugin is using Alex Ruby-code editor. You don't have to wrap code in Start Operation cause there's an inbuilt Play and Undo button. Very useful for testing loose code snippets. Copy and paste from Notepad for ex..
  • How to distribute my plugin

    6
    0 Votes
    6 Posts
    488 Views
    W
    Thanks guys, I'll go ahead and post it here and wait a while and see what people say before submitting to the Extension Warehouse. Thanks again, Walter P.S. That 5 million euro thing was a joke, right? Coz I think all I got is 2 dollars and change.
  • Smooth Line after push/pull

    4
    0 Votes
    4 Posts
    371 Views
    sdmitchS
    @ktkoh said: sdmitch I am trying to learn from you code. How is the smoothing only applied to the edges created by the add arc? It needs some English description if you will!! Keith I save the vertices, vrt1 and vrt2, at the beginning and end of the arc. Then I look at all the edges associated with those vertices and eliminate all that are not the proper length. This leaves me with a single edge that is softened.
  • TAO open source programming language for real-time ...

    2
    0 Votes
    2 Posts
    462 Views
    pilouP
    Very amazing! [image: logo.png] Official site! TaoDyne Documentation is fabulous! http://www.youtube.com/watch?v=Fvi29XAo4SI
  • Retreive world coords nested component InputPoint

    2
    0 Votes
    2 Posts
    7k Views
    sdmitchS
    InputPoint returns the transformation, if any, for the face you clicked on. Simply apply that tranformation to the vertices of the face to get the real world coordinates. rwc = @ip.face.vertices.map{|v| v.position.transform(@ip.transformation)}
  • WebDialog particular html issue

    6
    0 Votes
    6 Posts
    612 Views
    Dan RathbunD
    [off:2cqiik2n]I've suggested Gecko a number of times. Yes, each time I have to implement a WebDialog, knowing it will be a pain in the <bleep>,.. I put it off for as long as possible. I'd prefer for native dialogs that Qt worked inside SketchUp. I think that development and maintenance on WxWidgets has stalled.[/off:2cqiik2n]

Advertisement