💡 LightUp 7.1 | SketchUp's only real-time renderer that uses object-based rendering Download Trial
  • Timing script needed for bad timer

    3
    0 Votes
    3 Posts
    3k Views
    S

    Bruce - see the bottom of this thread:
    Dead Link
    This is timely- project management software commercially available for free today, but only today - 16 hours left

    [Shaun Tennant]

  • Sketchup.active_model.layers returns <Deleted Entity>?

    7
    0 Votes
    7 Posts
    4k Views
    R

    I tried your example script, and see the problem you see.

    According to the SU ruby docs:

    "Currently there are two behaviors defined.

    A page keeps a list of layers that do not have their default behavior. If a layer is not in that list, then it is set to its default visibility determined by one of these flags.

    LAYER_VISIBLE_BY_DEFAULT 0x0000
    LAYER_HIDDEN_BY_DEFAULT 0x0001"

    The strange thing is that in commenting out different lines and trying the script again, LAYER_IS_HIDDEN_ON_NEW_PAGES is the setting that sticks - not LAYER_IS_HIDDEN_BY_DEFAULT.

    I'll report that to the SU crew.

  • Saved file does not match what's on the screen.

    3
    0 Votes
    3 Posts
    4k Views
    R

    I could take a look - contact me through Smustard.

  • A Ruby to display the name and creator of a ruby?

    2
    0 Votes
    2 Posts
    4k Views
    A

    If the programmers would writing real extensions, you could see name etc. under Windows > Preferences.

    Would be possible to do this with variables, BUT: The programmers must write classes, not only simple methods including the following module in the way the class MyExtension does:

    module DescribedExtension @@author = '' @@version = '' # ... end class MyExtension > Sketchup;;Extension include DescribedExtension def initialize @@author = 'azuby' if @@author.empty? @@version = '1.0' if @@version.empty? end # YOUR METHODS HERE end

    So you can ask the extension for info:

    if MyExtension.include? DescribedExtension puts MyExtension.author puts MyExtension.version end

    A much better way would be a kind of manger, which is could from extensions which include DescribedExtension. Than you only have to ask the manager for all described extensions.

    This is done in my approach to write an extension manager. But unfortunately the Sketchup Ruby API does not provide the required methods to finish my work. But you can go into the sources and look how it is done.

    azuby

  • Accessing submenus / extension manager

    14
    0 Votes
    14 Posts
    6k Views
    J
    ("a".."z").each { |l| begin print "Trying #{l};" UI.menu(l).add_submenu('jim') puts "OK" rescue puts "Error on #{l}." end }

    I don't like the "code" font, by the way; it's hard to read.

  • Organize your Rubies?

    7
    0 Votes
    7 Posts
    5k Views
    A

    I'm wondering, why the Ruby extension programmers do not make use of the Sketchup built-in Extension class, so the users can switch the extension on and off via Window > Preferences ... In every case (with a loader script or built-in support) you need to restart Sketchup when switchung off extensions, because you can't take away menu items. Would be possible to overwrite the methods in the Ruby extension when switching off via loader script, but anyway the extension is loaded.

    Also have a look on my approach(!) to organize scripts:
    http://www.sketchucation.com/forums/scf/viewtopic.php?f=127&p=7623#p7623

    azuby

  • Something about AppObserver#onQuit

    2
    0 Votes
    2 Posts
    4k Views
    R

    Sorry I'm no help - have not tried that observer yet. The onSave observer has been requested, and noted by the SU folks, so maybe we'll get that one soon...

  • Shortcuts Plugin Possible?

    19
    0 Votes
    19 Posts
    9k Views
    CadFatherC

    the CadFather strikes again! 💚

    EDIT: one more bug, if you go and enter a new (or the same) key for 'add scenes', 'update scenes' etc
    it will overwrite your tweak - however it will work as long as once you have set it you leave it alone.

    and that is the end for tonight

  • Make &quot;saveas SU5&quot; default in SU6...

    8
    0 Votes
    8 Posts
    6k Views
    CraigDC

    Ah yes, Tom, I am aware of the edges showing through alpha pings. I entered that bug in our database actually! Yeah, it's a tricky one, I hear...

    Man, it's always hard when one person's bug is another person's daily workflow. I empathize. I will add some weight to the bug. That is part of my "special purpose".. 😉

    Cheers,

    - CraigD (Is there any other "CraigD"! :wink:
  • Align points

    5
    0 Votes
    5 Posts
    6k Views
    PixeroP

    Thanks Azuby, I didnt know that. But I am a noob on Ruby. 😉
    I've never seen it in the ruby docs though. Since I've seen both @ and $ used, I assumed you could use either.
    In my noobiness I though the @ came from @-atlast. 😳

    Rick W, thanks I tried it but it still doesnt work. Could you please take a look at my script to see where I go wrong?
    Maybe try my script with a rectangle and set Align to custom and some custom value.

    jsAlign.zip

  • Scripy sticks?

    4
    0 Votes
    4 Posts
    6k Views
    CadFatherC

    hey Coen that's way fast!! chill out! 💚

    thanks Didier,
    i think i did it right - did try a registry trick but it didn't work... and this business has been around so long...

  • Ss add ss.group ???? Need Help

    2
    0 Votes
    2 Posts
    7k Views
    TIGT

    Try

    ss.add(ss[0].parent.entities)

  • May I know how to use &quot;close_active&quot; from the Model Class,pl

    2
    0 Votes
    2 Posts
    7k Views
    TIGT

    Sketchup.active_model.close_active

    will close a group or component that you have open for editing, and return to the base model, or group/component if the group being edited is 'nested' inside others. It returns 'true' if successful. It will return 'false' if you are in the base model itself as there's nothing to 'close'...

    TIG

  • Working with selection - ungrouped or within a group

    4
    0 Votes
    4 Posts
    8k Views
    Didier BurD

    Yes it is doable.

    For instance:

    def editing_group?
    if Sketchup.active_model.active_entities.parent.class == Sketchup::ComponentDefinition and Sketchup.active_model.active_entities.parent.group?
    return true
    else return false
    end

    Will return a boolean to tell the script if the user is currently editing a group. BUT using methods of the selection class is independant of that.
    Even if the user is editing a group, Sketchup.active_model.entities can be accessed the usual way, and Sketchup.active_model.active_entities will return a collection of entities of the active group/component.

    If you have to check wether selection is a group or not, use this test:
    Sketchup.active_model.active_entities.parent.class == Sketchup::ComponentDefinition
    (because group are stored as if they are components !)
    and if you have to check wether a particular selected object is part of a group or not, use this test:

    if editing_group? and Sketchup.active_model.active_entities.include?( object_id ) ...
    Hope this helps,

  • Outliner to Text?

    11
    0 Votes
    11 Posts
    10k Views
    S

    Thinking about this last night, combining some of my own work with things downloaded from the 3D warehouse, I came up with another feature which would be very useful.

    If you could show the number of faces at each level or the amount of memory used, you could tell where the most inefficient parts of your drawing are so that you could speed things up. I have no idea how to do that, or even if it's possible, but it's an idea.

  • Launching non-blocking external applications

    6
    0 Votes
    6 Posts
    10k Views
    T

    Interesting solution Azuby. I have to check how if it allows to pass parameters as well.
    Thanks

    Tomasz

  • Absolute vs. Relative Meshes/Groups

    2
    0 Votes
    2 Posts
    9k Views
    K

    Huh. Well. As it happens, it was much less painful adding in the transformation information than I thought: it works perfectly now.

    For anyone interested, just as an fyi, if you want to recapture the correct geometry, you have to transform the mesh according to the value returned by Group.transform, not the inverse of Group.transform. In other words, you want something like:

    t_matrix = Geom;;Tranformation.new def output_entity(entity, t_matrix) if entity.typename == "Group" t_matrix = t_matrix * entity.transformation # <== *NOT* t_matrix * entity.transformation.inverse entity.entities.each{|sub_entity| output_entity(sub_entity, t_matrix) } elsif entity.typename == "Face" mesh = entity.mesh 0 mesh = mesh.tranform! t_matrix # [Add output code here] end end

    Anyway, I'd still be curious if there's a more "internal" solution, but it seems like everything's working perfectly, and much less painfully than I'd expected.

    Kevin

Advertisement