⚠️ Important | Libfredo 15.6b introduces important bugfixes for Fredo's Extensions Update
  • Distance between two points / optimization

    14
    0 Votes
    14 Posts
    2k Views
    thomthomT
    @jolran said: As a continuation of Thomthoms advice. Should you ever want to create a C-extension easily for distance between Points the code is already written and available https://bitbucket.org/thomthom/sketchup-ruby-c-extension/src/e2fe0f2e43e43ebae568535b6d7a98e160b4624c/src/Example%20-%20Basics/SXBasics.c?at=default Note: That example is OLD! You can refer to it for how I resolve the distance calculation, but had I done that today I would have done it in C++ using Visual Studio and Xcode: https://github.com/SketchUp/ruby-c-extension-examples
  • SU2015 gives NoMethodError for Length class #abs method

    6
    0 Votes
    6 Posts
    504 Views
    tt_suT
    @archidave said: but in SU 2015; > 2.m.abs gives the NoMethodError This is pretty bad (it has broken my plugin for SU 2015) and means I now need to go hunting through the code for all occurrences of <Length>.abs replacing them with <Length>.to_f.abs and building-in extra validation where the class is not intrinsically known, just in case there could be a Length instead of a Float. The Length class used to be a subclass of Float. However this isn't really possible in Ruby, but from the Ruby C API this was hacked together a way to do so. When we added 64bit support in SU2015 this broke because the data structures where different. So we had to re-implement Length by forwarding the methods to Float. Initially this used the Ruby Standard Library, but due to another bug in Ruby where the StdLib would not always load if there was unicode characters in the user's username the StdLib would fail and the Length class would not properly initialize. There was also a bug in SU at some point where the StdLib would fail to load if the user started SketchUp by double clicking an SKP file. We later corrected the new Length implementation to not use StdLib so it would not fail if the StdLib failed to load. And we also fixed the bug regarding starting SU via SKP files. But those fixes should be in SU2015M2 - so I don't understand why you'd experience such problems. I am not able to reproduce your error. Can you try without any extensions enabled - just so we can eliminate that possibility?
  • Sketchup 8 faster than sketchup 13?

    29
    0 Votes
    29 Posts
    4k Views
    R
    @unknownuser said: There is no "external" ruby pipeline. Phew, I was worried for a moment.
  • Ruby Group Swap

    12
    0 Votes
    12 Posts
    2k Views
    S
    If anyone is interested, I finally solved my imported group's origin problem fairly simply with this... ga = entities.grep(Sketchup::Group) ga.each { |e| n=e.name; e.model.entities.add_group(e); e.parent.instances[0].name=n} Basically it just takes all the groups after import, adds them into a new group and names the new group the same name. This resets the origin, and allows the swap code to work properly.
  • 3d text box through Sketchup.send_action(21023)

    3
    0 Votes
    3 Posts
    375 Views
    G
    @driven said: well, they have always said not to rely on them... but this works on my mac, but isn't in the list... Sketchup.send_action "select3dTextTool;" john it works also in windows 7 it was not documented thank you
  • Escaping out of editing a component

    4
    0 Votes
    4 Posts
    394 Views
    tt_suT
    Note that if only close the currently open instance. If you are deeply nested you need to loop until you are back in the root - (if that's what you desire). And before SU2014 the method was bugged and could mess up geometry if the close was undone. (The method actually creates an undo item)
  • How to judge whether a 3D point is visible or not

    6
    0 Votes
    6 Posts
    448 Views
    lbsswuL
    @sdmitch said: @lbsswu said: Hi everyone, Suppose I have opened the Sketchup software, I want to know whether a 3D point is visible or not in current view. For example, the 3D point may locate on the back of a person, thus we can't see it when the person facing to us. This should be done by Sketchup ruby code.Could anyone help me? I placed a construction point, the little black dot just below the horizon, and "Nancy" in the model. I then used the following code to test if the point was visible. mod = Sketchup.active_model > ent = mod.active_entities > sel = mod.selection > vue = mod.active_view > eye = vue.camera.eye > cp = ent.grep(Sketchup;;ConstructionPoint)[0] > pt = cp.position > vec = pt.vector_to(eye) > hit = mod.raytest([pt,vec]) > if hit > puts "pt is not visible" > else > puts "pt is visible" > end > Hi, sdmitch. Thank you very much. It works!
  • How to get the projected coordinate of a 3D point?

    5
    0 Votes
    5 Posts
    430 Views
    lbsswuL
    @tig said: view.screen_coords returns the point in the Model as X,Y coords - screen value. But you must ensure that the exported image used the same size as the window, otherwise there is no direct relationship between the point and the image's pixels... Got it! Thanks for your help!
  • Component axis problem

    18
    0 Votes
    18 Posts
    1k Views
    PixeroP
    I just thought I'd post this snippet in case it will help someone with a similar problem. def set_origin(compdef, compinst, pt0, pt1, pt3) tr1 = compinst.transformation rotvector = pt1-pt0 originvector = Geom;;Vector3d.new(1,0,0) org = pt3 angle = rotvector.angle_between originvector if angle < 90.degrees angle2 = -angle elsif angle > 90.degrees angle2 = angle end #if if angle == Math;;PI/2 angle2 = -90.degrees end if pt0.y > pt1.y && angle == Math;;PI/2 #Check if it's drawn at 90 degrees but in opposite direction angle2 = 90.degrees end compinst.transform! tr1.inverse tr2 = Geom;;Transformation.rotation(org, Z_AXIS, angle2) tr3 = Geom;;Transformation.new(org) compdef.entities.transform_entities(tr2, compdef.entities.to_a) compdef.entities.transform_entities(tr3.inverse, compdef.entities.to_a) compinst.transformation = compinst.transformation * tr3 compinst.transform! tr1 * tr2.inverse compdef.invalidate_bounds end #def
  • Replace component and set dynamic attributes?

    3
    0 Votes
    3 Posts
    813 Views
    G
    There are a few things that I had to deal with. I found it easier to put the dynamic attributes in a nested group as opposed to the outside group. This way you can rotate the entire door and jamb to fit it into the door opening and you don't have to keep changing the dynamic rotz. These doors can be copied, flipped and or rotated while preserving the desired angles of rotation. 4 doors.skp [image: COJv_4doors.PNG]
  • Key combinations

    5
    0 Votes
    5 Posts
    396 Views
    S
    @cadfather said: Thanks Guys, i'll have a look at Jan's table. can't believe it's so messy working with the keyboard. Yes, messy - but the mess originates in the OS, not SketchUp!
  • Fixing the Undo-stack (and others!)

    13
    0 Votes
    13 Posts
    947 Views
    J
    Got it, thanks Thom. I realised that I could have optimised it to recurse fewer times, but at some point with increasingly complex surfaces it will run into a stack overflow again. I had a little read elsewhere and found that there are workarounds (ulimit and altering the interpreter, sounds like a bit of a dodgy hack to me..), but eventually it's always got an upper limit. I very much like the idea of a Geometry walker traversing geometry, and ended up using a solution very similar to yours. Cheers! -CJ
  • OnKey_Downer!

    7
    0 Votes
    7 Posts
    628 Views
    CadFatherC
    i guess one workaround is to make a webdialog tiny enough not to intrude but able to 'catch' the keystrokes repeating...
  • Plugins Locations

    19
    0 Votes
    19 Posts
    1k Views
    Dan RathbunD
    .. and the nested module definition has no end closure.
  • Odd behavior of Draw

    17
    0 Votes
    17 Posts
    865 Views
    S
    @sdmitch said: Well I have tried all the suggested combinations and nothing seems to solve the "problem". Perhaps it is just my 7 year old laptop!!!!! Since these draw operations go directly to OpenGL, this explanation seems quite possible! There could be a bug in either your laptop's OpenGL drivers or an incompatibility in how SketchUp uses OpenGL.
  • Save thumbnails components

    2
    0 Votes
    2 Posts
    284 Views
    thomthomT
    http://www.sketchup.com/intl/en/developer/docs/ourdoc/componentdefinition#save_thumbnail
  • I have a question, about Model.import of sketchup API

    8
    0 Votes
    8 Posts
    719 Views
    Y
    @thomthom said: Do you get any errors? What format are you trying to import? .skp? I import a dae file to sketchup by api. but i need to click to position. is there a way to position it automatically?
  • SVG file Import (importing)

    20
    0 Votes
    20 Posts
    25k Views
    M
    @catalyst said: Hi danbig, You need to open your SVG file with inkscape. Go into Inskcape's preferences Under "Tools" select "SVG output" Under "Path data" - uncheck "Allow relative coordinates" Right below that - check "Force repeat commands" Be sure to save the new preferences by hitting the little triangle-in-a-box button in the top right corner of the preferences window. Once you do that, you can save Plain SVG files and import them successfully into Sketchup for further manipulation. I HAVE NOT BEEN ABLE TO SUCCESSFULLY IMPORT A PLAIN SVG FILE INTO SKETCHUP MAKE 2014 USING THIS METHOD. IS THERE ANY ADDITIONAL STEPS I NEED? GOAL IS TO INPUT A SVG FILE (THE WORDS "PEACE" "ON" AND 'EARTH" WHICH HAVE BEEN TRACED AND WELDED TOGETHER IN TO THREE INDIVIDUAL SVGS.) OF A WELDED WORD INTO SKETCHUP AND EXTRUDE IT TO MAKE A 3D 'BOX' ABOUT 2" THICK.
  • Change of style in undo stack?

    7
    0 Votes
    7 Posts
    621 Views
    Dan RathbunD
    @xorunison said: This is a smaller but somewhat annoying problem. The situation is this: I have a few Plug-Ins which allow the user to switch between different working modes. To do so each Plug-In with its own button does 2 things: 1: Change the current style (between my predefined styles Construction and Display) 2: Turn on/off certain layers This sounds like a perfect job for scenepages. One for display, one for work. Each has their own styles set, and each has their own set of off layers, and on layers. The button(s) could simply switch between the pages (if you did not want to waste the space for page tabs.) The scenes could be preset into a template model.
  • Returning a value from a Class method

    17
    0 Votes
    17 Posts
    924 Views
    Dan RathbunD
    @johnwmcc said: If you are storing Point3d objects, would you need @contents.to_a first, before .max.y or min.y? The min and max methods come from the Enumerable mixin module. Enumerable is mixed into Array, but not Geom::Point3d, nor Geom::Vector3d. To see what modules may be mixed into a class, use *Classname*.ancestors So to answer the question, yes, or if using your own collection class, you might mix in the Enumerable module into it. @johnwmcc said: It does, for me. It was intended to select out the y coordinate (a scalar) from the point coordinates. ary = [pt1, pt2, pt3, pt4, ... ] To select the point which has the minimum y value, from an array of points, do this: miny_pt = ary.min {|a,b| a.y <=> b.y } To select the point which has the maximum y value, from an array of points, do this: maxy_pt = ary.max {|a,b| a.y <=> b.y } ... then get your thickness: thickness = maxy_pt.y - miny_pt.y To translate: [ruby:247d5h9w]ary.max {|a,b| a.y <=> b.y }[/ruby:247d5h9w], into plain English: "iterate [ruby:247d5h9w]ary[/ruby:247d5h9w], each loop compare the current member ([ruby:247d5h9w]a[/ruby:247d5h9w])'s y value, against the next member ([ruby:247d5h9w]b[/ruby:247d5h9w])'s y value, and return the member that resolves to the maximum." The comparison is defined using Ruby's comparison operator, [ruby:247d5h9w]<=>[/ruby:247d5h9w]. Remember that the entire member is returned, so later you still need to ask for just the y value. @johnwmcc said: I wasn't sure if the [ruby:247d5h9w].x[/ruby:247d5h9w] and [ruby:247d5h9w].y[/ruby:247d5h9w] methods would work on arrays, but they seem to in my example code. Because the SketchUp API adds those methods to the Ruby Array class. (It is part of making Ruby arrays compatible with API points and vectors.) @johnwmcc said: I'm unclear about the near-but-not-complete equivalence between SU [ruby:247d5h9w]Point3d(x, y, z)[/ruby:247d5h9w] and [ruby:247d5h9w]Array[x, y, z][/ruby:247d5h9w]- it seems I can use either a lot of the time, but not quite always! Read the API regarding how it adds to Array class: http://www.sketchup.com/intl/en/developer/docs/ourdoc/array

Advertisement