⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update
  • Ruby Observer Existence Check

    6
    0 Votes
    6 Posts
    2k Views
    Dan RathbunD
    @tig said: You can set @obs = ... within a module, outside of any of its methods and that then persists thereafter. This is true because, a module is an instance of class Module. @hank said: Have not gotten very advanced with Classes etc. so just a simple module. The Class class is the direct child class of class Module. So classes inherit all of Module's functionality, and get a little bit of their own (ie, a few extra methods and the ability to have many instance copies of themselves, that can hold their own instance variable values.)
  • Copying files using "ftools.rb" library

    5
    0 Votes
    5 Posts
    1k Views
    Dan RathbunD
    @mgate said: require 'ftools.rb' > ... > folder = File.dirname( __FILE__ ) > resources = "Resources" > resource_name= "XXXXXX AT Template.skp" > resource_file = File.join(folder, resources, resource_name).tr("\\","/") > ... > Problem here. The "Resources" folder is not in a sub-folder of the "Plugins" folder, nor in a sub-folder of YOUR extension sub-folder (which should be in a sub-folder of "Plugins".) This should return the correct path: resource_path = Sketchup.find_support_file("Resources") The above script certainly creates the copy in the correct folder but SU crashes afterwards.[/quote] Do you get a BugSplat!, or is a Windows Error Report (WER) generated (ie, check Event Viewer) ? Secondly, your rescue clauses are not telling you what error is happening. Do something like this: begin # file operation rescue => e puts e.inspect # or UI.messagebox(e.inspect) else # change to more meaningful message; puts "file operation success!" end Thirdly, we used to tell users to run SketchUp as administrator because all users needed read and write permissions on folder in the SketchUp application's program path. (This can cause file drag and drop to stop working for SketchUp.) The alternative is to set permissions for SketchUp and all it's program sub-folders to allow all users full permissions.
  • Getting group's dimensions

    7
    0 Votes
    7 Posts
    1k Views
    S
    Thank you, I will work on this.
  • How to implement entity selection "wizard"

    5
    0 Votes
    5 Posts
    1k Views
    Dan RathbunD
    ... and new for SketchUp vers 2016 and higher is a rectangular window picking method: http://ruby.sketchup.com/Sketchup/PickHelper.html#window_pick-instance_method You should download the SketchUp Team's Examples extension to see how Tools are written. http://extensions.sketchup.com/en/content/example-ruby-scripts
  • Beginning Ruby - Array and other Questions

    5
    0 Votes
    5 Posts
    1k Views
    TIGT
    You can't rely on the ordering of a selection or an entities collection. Also you should never 'loop' through a selection or an entities collection, IF your code will affect the selection or collection - since it's references will 'shift' - use .to_a to free it as an array if you must do this... If you are adding several faces you make a simple empty array at the start: faces = [] Then every time you make a face you can add that into that array. ... face = ... faces << face ... Later on you can access the faces array and its ordering will remain constant. You can only add geometry into an entities context - so that's either the model.entities [the lowest base level - even if not currently active], model.active_entities [current active context - which might be any collection], or any group.entities or definition.entities ... In passing, a group is just a special subset of a component. They both have a definition [so does an Image, but we'll not go there yet]. A definition can have instances - placed into some entities context. A component definition can have several instances - changing one changes the others. You can make an instance unique so that editing does not affect its relatives. A group definition can have several instances, BUT editing one of them automatically makes it unique. When iterating a definitions collection you can filter its members using defn.image? and defn.group? to choose or avoid those types...
  • Erratic Duplication of Dynamic Components?

    3
    0 Votes
    3 Posts
    985 Views
    H
    Thanks @pcmoor I see what you are saying... The WALL DC has only dumb objects in it with no parameters. The OPENING DC has sub objects that use parameters. But this seems insane! You mean, the second you take advantage of parameters for your sub-objects you loose the ability to have central command of your DCs?!!! Perhaps you can explain your modeling techniques more? So you have a DC you copy around a bunch of times the explode it? Doesn't that kill any link you have to the original definition?
  • Polygon Positioning Tool

    13
    0 Votes
    13 Posts
    2k Views
    Dan RathbunD
    @medeek said: ... so I went back to my basic Windows Notepad, ... How do you know what encoding it saves the file it ? How do you know what type of line ending characters it uses ? These are things easily set with a real code editor. In addition code editors use color lexing to help you spell keywords correctly, match up the begins and ends of code blocks, etc. They also can use autocomplete features to help fillout method calls.
  • Boolean Subtraction or ???

    12
    0 Votes
    12 Posts
    2k Views
    medeekM
    I'm still digging through the code you sent me. It may take a week but I will attempt to figure out how this actually works. Its amazing how much you are able to compress into such a small body of code.
  • Need some development help.

    9
    0 Votes
    9 Posts
    2k Views
    S
    Wow! okay. This is totally awesome. This is quite a few levels above what I am capable of writing. This may take me like a week just to figure out. Sdmitch, you have saved me hundreds of hours of treachery. I want to buy you a beer, but I think you deserve a whole keg. This is way better then what I was plugging away at. Tig had got me thinking in the right direction about what I was trying for better ideas, and I had a feeling bounds was the answer to locating the foobar. I changed line 65 to some regex (=~/^[Ff]oo/) I learned from Tig back in the day to solve for a couple foos that were made unique and I left out the selection bits. This should be the example to anyone trying to get components out of their parents and gathered into their own. I want to thank the community here for being so awesome and living up to the name Sketchucation. I have learned so much from guys like Dan Rathbun, Thom Thom, TIG, sdmitch and too many others to list. Thanks & Cheers!
  • How to retrieve the version of the model

    2
    0 Votes
    2 Posts
    878 Views
    TIGT
    You need to read in the first part of the binary file SKP and see what version it says... ໿SketchUp Model೿{17.0.18899}䖯挢べ仪躯蘚䆤寸ÿ... In Ruby try something like this: vv=File.open(skp_path, 'rb'){|f| f.read }.unpack('m*').pack('m').gsub(/SketchUpModel/,'').to_i.to_s;if vv[0].chr=='1';v=vv[0].chr+vv[1].chr;else;v=vv[0].chr;end skp_path is the full path to the SKP you are trying to find the version of. vv is the long version number, as a string [e.g. "17018899"] v is the short version number, as a string [e.g. "17"] If you want more details parse vv differently...
  • Copy a Group within a Component in Ruby, preserve location

    8
    0 Votes
    8 Posts
    2k Views
    Dan RathbunD
    @hank said: **@Dan Rathbun:**I am just using the layer as an easy selector for the groups I want within the component. This is fine. Ie, using the layer property as a filter. @hank said: Do you recommend another way? I recommend rereading what I wrote. It was just general information (triggered by incorrect terminology you chose to use in an earlier post.)
  • What does it take to write a commertial plugin?

    3
    0 Votes
    3 Posts
    1k Views
    A
    Alright, thank you! I assume it's all legal unless I'm planning to write a new softwate/app.
  • Component that can not be made unique

    4
    0 Votes
    4 Posts
    849 Views
    S
    If you want each copy to be unique, why not use Groups? The Group#copy method automatically clones the associated ComponentDefinition and hooks the new copy to the new clone. That is, each copy is "unique" right from the start.
  • Right and Left Handedness

    6
    0 Votes
    6 Posts
    1k Views
    TIGT
    The pushpull direction is still important. As you will always be going to push the face down, then all you need to do is to make all of your faces look upwards. Rather than worry about the loop ccw/cw-ness [which will fail at z=0 as a ccw face will swap to look downwards anyway !] - instead just add the flat face [its loop-direct unimportant], then face.reverse! if face.normal==Z_AXIS.reverse Again you need to do a -ve pushpull, so that the top face [now always looking upwards' is retained as the form extrudes downwards... You seem to be making this more convoluted than it needs to be...
  • Adding edges to manual selection following a snake pattern.

    2
    0 Votes
    2 Posts
    813 Views
    Dan RathbunD
    phpBB engined forums uses BBcode. Please wrap program code in code tags like: [pre:3asokg6p][ code ] code here [ /code ][/pre:3asokg6p]There is a "code" button on the post edit toolbar (2nd row, 3rd button) Read help on BBcode: http://sketchucation.com/forums/faq.php?mode=bbcode
  • Are Swig generated Ruby bindings compatible with Sketchup?

    13
    0 Votes
    13 Posts
    3k Views
    D
    @metasim said: Success! [...] I hope someone else finds this useful. I'm glad I don't have to resort to a client/server type implementation and associated headaches. Simeon Hello, I've taken the time to register in SketchEducation just to be able to thank you for this excellent tip. Thanks to you I've been able to succeed after many headaches with my .bundle Swig/CMake generated Ruby/Sketchup extension files causing segfaults every time I used "require" to load them. Linking against the Sketchup 2016 embedded Ruby library solved the problems and now I can use the extension!! It was extremely useful. Thank you very much!
  • View.write_image shows dotted line border

    13
    0 Votes
    13 Posts
    3k Views
    C
    This is a cross post from our SketchUp Forum post tl;dr - In addition to trying the work-arounds in this thread (only the resolution magic numbers worked) we discovered that turning off anti-aliasing eliminates the issue for any resolution - if you can accept the jaggies. Hope that helps someone diagnose and fix the issue, or is a workaround for someone until the fix.
  • Material Attributes

    14
    0 Votes
    14 Posts
    2k Views
    Dan RathbunD
    @avariant said: Ok. Has this been reported to SU as an official "bug"? It would be very nice to get it fixed some day. for SketchUp 2017 @unknownuser said: (https://help.sketchup.com/en/article/141303)":2kct16r6] Fixes/Improvements General SketchUp API Release Notes (Mac) Fixed issue where SKM files lost attribute dictionaries when saved from ‘In Model’ to local library.
  • Tool.onCancel - Reselect tool?

    9
    0 Votes
    9 Posts
    1k Views
    fredo6F
    @eneroth3 said: This seems like a documentation error. However when re-selecting a tool the deactivate and activate methods seems to be called right after each other so maybe comparing a timestamp can be used to detect when a tool is re-activated. That's what I do, including for simulating a double-click on icon. However, you cannot avoid the calls to activate() and deactivate(), just shortcut them. I just realize that, should Trimble fix this issue, there could be some regression in my scripts, because I only test status 0. Fredo
  • Draw vs. Import Component

    3
    0 Votes
    3 Posts
    927 Views
    TIGT
    You could have the three parts assembled into another SKP in your folder and then load that - bringing in the assembly and the three parts. However, if you want to add a new component into the model then use something like: model = Sketchup.active_model ### set up names of parts bolt = "MyBolt" washer = "MyWasher" nut = "MyNut" ### here I'm assuming they are already loaded [OR add then now]... ### get a reference to each from the name... defn_bolt = model.definitions[bolt] defn_washer = model.definitions[washer] defn_nut = model.definitions[nut] ### now combine them - add new empty definition name = "MyAssembly" path = Filejoin(path_to_folder, name+".skp") defn = model.definitions.add(path) name = defn.name ### in case name is preexisting, and it's now "MyAssembly#1" ### establish a suitable transformation of each component part - here I'll just call it 'tr_bolt' etc ### because the tr is within the definition's entities, center parts on the ORIGIN ### and move the nut/washer along the Z as needed ### a good idea would be to have the component parts with their insertion points ### at their ORIGINS and the bolt shaft facing down in the Z etc ? defn.entities.add_instance(defn_bolt, tr_bolt) defn.entities.add_instance(defn_washer, tr_washer) defn.entities.add_instance(defn_nut, tr_nut) ### you place the assembly 'defn' the same way, with another suitable transformation... some_entitites_collection.add_instance(defn, tr_defn)

Advertisement