ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info
  • 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
    932 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
    810 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
    951 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
    763 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
    995 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
    764 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
    2k 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
    868 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)
  • SketchUp Ruby Scrambler for Windows

    2
    0 Votes
    2 Posts
    3k Views
    TIGT
    The freestanding RB scrambler has been scrapped for the last couple of SketchUp versions. It is no longer available. You must now register as a developer with Trimble and upload your RBZ [a re-suffixed ZIP file] containing just one 'loader - "xxx.rb" - and one "xxx" subfolder [containing the extension's main code files and other helper files] to here: https://extensions.sketchup.com/en/developer_center/extension_signature This gives then you the option of leaving everything as RB files, or encrypting any RB files in the "xxx" subfolder [the 'loader' RB is never encrypted]. There are also 2 options for encrypting. RBS is the older format that is known to have been cracked and offers only obfuscation and not full protection of your IP, however it's advantage is that if will work in all SketchUp versions from v8 up to v2017. RBE this newer format is more robust and not [yet] hacked. Its disadvantage is that it only works with v2016 and newer versions. If you opt for including both encrypted versions in your RBZ, then the RBS version exposes your IP anyway. Depending on the options chosen, after only a few minutes or processing a modified RBZ is then available for you to download and redistribute yourself. When submitting your RBZ it will now always ne 'signed'. Two special files are added to the RBZ's subfolder - these 'hash' the RBZ's contents. If the two files are removed or changed, OR any of the sensitive files to which they refer are different from the initial submission, then that loading extension will report itself as 'unsigned' etc in the Extension Manager and will not load is the more restricted loading-policies [although most users will stick with 'unrestricted' anyway!]. The 'sensitive' files in RBZ are RB/RBS/RBE/HTM/HTML/JS/CSS. Having your own RBZs 'signed' is not as onerous as making a submission to the EWH. If your intention is to publish at the EWH then you also need to register separately as a developer there. You then submit your unsigned/unencrypted RBZ to them. It takes considerably longer than the self-certification option. There are also much stricter coding requirements etc and your submission can be rejected for not following their best practice. This is explained more fully on their site...
  • Cloth tool in sketchup?

    16
    0 Votes
    16 Posts
    15k Views
    sicksickisckS
    dream about real stuff in sketchup heheh no
  • Component browser current selection?

    5
    0 Votes
    5 Posts
    985 Views
    M
    Ok - thanks TIG - i tried again over the weekend. Unfortunately i can't get it working the way i want. I think the available observers and methods are just not providing the necessary functionality. I can intercept the default MoveTool for a component instance contained in the model using a ToolsObserver and let my tool run instead - fine. I can spot when an instance was placed using a ModelObserver with onPlaceComponent and let my tool run - fine But i can't intercept the placement of a component before an instance was actually added to the model. The ToolsObserver fires when i click on a component in the components browser but doesn't provide info on the chosen definition. On that first click in the browser the definition is added to the model's definitionlist (only once as i stated before) and a DefinitionsObserver can spot this (once). The component now sticks to the mouse pointer and i can hover over the model. There's no change to the model's entities collection yet. The instance is placed when i click (a second time) somewhere in the model. Now the component instance is added to the model entities collection and at this point an Entities-Observer or Model-Observer (onPlaceComponent) can spot it. But this is already too late for visual feedback while placing. Nevertheless... keeping on sketch(up)ing Michael S.
  • Plug-in idea - Rounded rectangle, Lozenge, etc as in Layout.

    12
    0 Votes
    12 Posts
    2k Views
    Bob JamesB
    @sdmitch said: My RoundedCornerRectangle still works. Other than the nit-pick of only available for x-y plane - Perfect. Thank you EDIT Dumb old me: I already had it installed [image: txKW_rectangle.png]

Advertisement