ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info
  • Selection order

    2
    0 Votes
    2 Posts
    193 Views
    TIGT
    The native 'select' tool will often return its array in the order of picking, BUT this is not guaranteed, and of course if you pick a curve, then all of its edges are added in the curves edges' order... You can make a Tool class... where the selection is initially cleared and the user is prompted to select things - these can be added to the model.selection, and also in that case each selected object can be pushed into your own array, so you can be sure of the order of that array's order of picking... What is it exactly your seek to achieve ?
  • Load text file and assign to variables

    7
    0 Votes
    7 Posts
    895 Views
    artmusicstudioA
    hi tig, that's it . my logic was ok, your tip for the conversion of string to float was the point. basicly it works like this: i have menues for parameters then the geometry is created before the end of the ruby i save all parameters to a text file (by the way still looking for the syntax to save more of them line by line) then the user can recall the ruby and select -my last parameters -defaults and so on and so on again another step!!!! regards stan ( i'll report , when i get further)
  • PROBLEM WITH PUSHPULL VECTOR

    3
    0 Votes
    3 Posts
    277 Views
    artmusicstudioA
    hi tig, you are the greatest, as always. it works. it's funny, that "my" wrong syntax works at the beginning of the ruby...god knows....will correct all of them. again a step nearer to my first ruby (for everyone then, of course) regards and thax stan
  • Creating revenue from plugins

    9
    0 Votes
    9 Posts
    660 Views
    renderizaR
    Hi, With the introduction of 'PluginStore' and 'Extension Warehouse' it has become more accessible for developers to share plugins and maybe in the near future these platforms will allow authors to sell them as well. (fingers crossed) As of right now donations are a welcome addition to 'PluginStore' and even though there are people who have generously donated, this kind of appreciation is considered a rare event. Most of them will thank you by leaving a nice comment and this can be very rewarding as well. Selling plugins will hopefully inspire developer to increase the production value of their plugins so they can have an edge vs competitors. Not only the code should improve but also the interface, graphics, documentation, ect... On the other hand I am afraid to see the dark side of competition which I am sure you guys can think of a few. Cheers!
  • Angles to vector

    4
    0 Votes
    4 Posts
    273 Views
    TIGT
    There is no inbuilt method... but this will do it [flattened to Z-plane] def flat_angle(vector) vec=Geom;;Vector3d.new(vector.x, vector.y, 0) if vec.y < 0 return (2*Math;;PI)-(vec.angle_between(X_AXIS)) elsif vec.y > 0 return vec.angle_between(X_AXIS) elsif vec.y == 0 if vec.samedirection?(X_AXIS) return 0 else return Math;;PI end end end it's easy to make methods for X & Y planes - just adjust vec= to suit those other planes and adjust the tests from vec.y & _AXIS etc...
  • What's the :: symbol on Geom::....

    3
    0 Votes
    3 Posts
    315 Views
    Dan RathbunD
    @abakobo said: what's behind the :: symbol in Geom ? It is called the scope operator. :: with nothing to the left of it means the top level scope (aka TOPLEVEL_BINDING,) which is "a particular instance of Object called 'main'". But it's use that way is optional. Ruby always checks the current scope first, then the top level scope if it needs to. But this is also why you should always be executing YOUR code inside a toplevel module, with some unique name that you invent. like module Abakobo So Geom::Point3d is referring to the Point3d class, within the Geom module scope. @abakobo said: and when do we use :: and/or . to call a method It's style, but many people only use the . for ALL methods. Some people use :: for calling module functions and class methods (which the new constructor is,) and then use . to call only instance methods. (Some of the older examples, from the days when SketchUp was owned by Google or @Last Software, use this latter convention. I guess they wanted to emphasize the calling of class methods or module functions.)
  • Mac Scrambler for 2013

    11
    0 Votes
    11 Posts
    921 Views
    tt_suT
    Can you send me the RB and RBS file you are working with? I'd like to hook this up to our own debugger.
  • Remove_observer bug?

    3
    0 Votes
    3 Posts
    277 Views
    fuzzybroF
    It's a pseudo-code. The actual code implies that observer object is a class instance variable: class Scene attr_accessor(;observer) def initialize @observer = MyEntitiesObserver.new end def observe Sketchup;;active_model.definitions.each do |definition| definition.entities.add_observer @observer end end def unobservre Sketchup;;active_model.definitions.each do |definition| definition.entities.remove_observer @observer end end end
  • Is it possible to reset a transformation in loop?

    5
    0 Votes
    5 Posts
    318 Views
    2
    Oups! you're right. that's the problem! I am trying to make a dragon curve.
  • Rotation unexepected result

    3
    0 Votes
    3 Posts
    230 Views
    jolranJ
    Transform! executes/calls the method wheras transformation = is assigning it. tested your code and transformation = , did give me a same result as transform! The principle still is call method with object.method. Oh, and to answer the question. In this case were dealing with Geom::Transformation object. So were not calling a method directly(I think..).So its more like Group.Geom::Transformation = myspecial.Geom::Transformation I hope I explained it correctly.. If you test t0.class you will see it's a Geom::Transformation.object
  • How to store web-dialog parameters/settings?

    5
    0 Votes
    5 Posts
    704 Views
    renderizaR
    It works! Did simple test that saved some of the web-dialog settings. def activate @@check = "start" end def deactivate(view) @@check = "end" end def push_frame(dialog,data) params = query_to_hash(data) ################ ## START ## ################ if @@check == "start" @@check = "no" saved = Sketchup.read_default("canvas_panel", "store_dlg") UI.messagebox saved #Will prompt last selected value before closing from web-dialog end ################ ## END ## ################ if @@check == "end" @@check = "no" inp = params['sel_ip'].to_s #This is value from web-dialog Sketchup.write_default("canvas_panel", "store_dlg", inp) end end Need to do what TIG suggested which was to make array into string to store multiple web-dialog settings. After that will have to use that data to make web-dialog use the settings last used when it was last closed.
  • [code] ruby-dxf-reader

    15
    0 Votes
    15 Posts
    4k Views
    DavidBoulderD
    @jim said: Hi David, I put it up on GitHub. Thanks!! I'll check it out this weekend. David
  • SketchUp Dev Camp 2013 - A Developer Conference

    3
    0 Votes
    3 Posts
    531 Views
    G
    See you at Lisbon
  • Rotate and Intersect a plane

    7
    0 Votes
    7 Posts
    462 Views
    TIGT
    Please stop calling them 'lines' - I know that's the CAD name but in SketchUp Ruby code they are best called 'edges' - I know some SketchUp tools refer to drawing 'lines' and there's even an API method add_line() that adds an edge BUT when we are talking code - especially if we are taking about edge.line - it's a recipe for confusion to muddle up the two terms... I tried to explain the difference between an edge and a line [edge.line]... The two perpendicular edges you drew will only return a point with the intersect_line_line() IF they intersect - i.e. they are 'coplanar'... looking down 'in plan' does not mean they do intersect if their 'z' values not equal... Assuming they do return a point, then my previous post explains how you can then tell if that point falls 'in space', or either of the edges' vertices, or on an edge in between its start/end... It'd be quite possible to slide your example edges around so that they then return a point 'in space' that is on neither edge...
  • Passing arguments on command line using Sketchup Bridge

    3
    0 Votes
    3 Posts
    851 Views
    P
    Hi Dan, Thanks a lot for the reply! Having the Java program write to a file and then having the Sketchup script read it in is a good idea. I'm going to try that. Can I use the 'File' object to accomplish this in a Sketchup script? Having said that, for me latency is an issue, and I don't know if the time for writing and reading from the disk will slow me down - but I guess I'll only know after I try. Actually what I am trying to accomplish is have a controller control the camera in the Sketchup model. The controller has APIs in a bunch of languages (Java, C++, Javascript), but none in Ruby. There is one interface created by a third party that uses SWIG to wrap the C++ functions and make it accessible in Ruby, but those are 'listeners', and I don't know if they would work within Sketchup Ruby. Do you know if it is possible to have the a .rb script, run via the Sketchup Bridge from within an IDE, that acts as a listener? (Sorry if this is a bit vague - I'm don't have much experience integrating a scripting language like Ruby with something like Java or C++. Let me know if I can clarify this further).
  • How to hide the maximize &amp; minimize web-dialog button?

    12
    0 Votes
    12 Posts
    896 Views
    tt_suT
    Didn't try. Then you'd have to hook into the windows messages. yuck
  • Group only edges from a face yet selectcted ?

    10
    0 Votes
    10 Posts
    558 Views
    pingpinkP
    Hi , The process : Store Data - Components , Patterns , Panels of original data from Architect's Model Tag Part Number - Select Panels ,and distinguish different panels type Auto Open Patterns - To recheck the original design Re-Tag Part Number - The users have to change after checking Patterns , Different patterns have different tag numbers even though they are the same sizes. My expectation needs to " Store Data and Recheck Patterns later for a RE-TAG Number correctly " as a facade designer wants.
  • How to know if user has stopped orbiting camera?

    8
    0 Votes
    8 Posts
    333 Views
    Dan RathbunD
    @chris fullmer said: ... suspend will tell you if the user has started using orbit or pan, ... Really? That is news to me. (The API docs do not say this.) AFAIK, a tool's suspend callback is called JUST BEFORE the tool becomes inactive, (so you can save stuff like your tool's state etc.,) and BEFORE the interruptor tool becomes active. Also.. because the Sketchup::Tools collection does not have Enumerable mixed in (and an each method defined,) there is no way to non-destructively read the last tool on the stack, nor even iterate the stack.
  • Find (3d point) intersection of 2 lines?

    2
    0 Votes
    2 Posts
    434 Views
    TIGT
    Try point = Geom.intersect_line_line(edge1.line, edge2.line) You either get a point or nil if the two 'lines' don't intersect. Unlike an 'edge', a 'line' is infinite, so two 'edges' might not physically intersect even though their 'lines' do. If you get a point you can then test if it actually falls on an end point of an edge point == edge1.start.position point == edge2.end.position point == edge1.start.position point == edge2.end.position where true shows it is at a vertex AND if the point falls between the start/end of each edge, the test is... point.vector_to(edge1.start.position) == point.vector_to(edge1.end.position) point.vector_to(edge2.start.position) == point.vector_to(edge2.end.position) Note that getting true means that the point is not physically on the edge because the vectors are both in the same direction, and false means that the point is on the edge and between the start/end...
  • Display Schematic Models

    3
    0 Votes
    3 Posts
    245 Views
    pingpinkP
    Thanks Dan ! , I never realized about this method. My supervisor wants me to switch schemes for " DESIGN COMPARE " at the same position to open and hide layers , then show all schemes by coding. The layers now are overlapped.If I can't do at the end I will do only Switch One by One. http://www.youtube.com/watch?v=ZffmxlB5dbk&feature=youtu.be

Advertisement