Check out Febhouse | New extensions for Shadow Analysis in SketchUp Download

Subcategories

  • No decscription available

    20 Topics
    462 Posts
    HornOxxH
    @pilou said: More appetizing in chocolate! Eggs are good as well - but only very fragile when falling down in SketchyPhysics
  • View.invalidate vs view.refresh

    12
    0 Votes
    12 Posts
    3k Views
    thomthomT
    @unknownuser said: @unknownuser said: Right - so if I make a wrapper that will refresh after a given max interval - otherwise invalidate - that would be an ok method? by using that you dont address the problem because you dont take in account system draw. but it can be used as workaround. So skip the view.invalidate all together?
  • UDP Socket and Threading in API

    3
    0 Votes
    3 Posts
    1k Views
    M
    As Dan pointed out UI.start_timer works pretty good with UDP. Here's how I'd write it: require 'socket' serverSocket = UDPSocket.new serverSocket.bind("127.0.0.1", 3157) timer_id = UI.start_timer(0.1, true) { begin data = socket.recvfrom_nonblock(100) new_message = true rescue Errno;;EWOULDBLOCK new_message = false rescue Errno;;ECONNRESET new_message = false UI.stop_timer @timer_id break end if new_message == true UI.messagebox(data) end } The major different is the UI.start_timer in place of the "Thread" and "Loop" in your example. You'll also see that it uses .recvfrom_nonblock with some error catching instead of just .recvfrom. This is because sketchup will hang if nothing is sent to the socket. If you're sure that there will be a constant stream of data you might be able to get it to work with blocking.
  • Ruby API Bugtracker?

    10
    0 Votes
    10 Posts
    1k Views
    tbdT
    of course this forum
  • Trying to retrieve face using ComponentInstance.glued_to

    5
    0 Votes
    5 Posts
    406 Views
    Dan RathbunD
    @lothcat said: @dan rathbun said: FYI: There is a missing ) in line 5 of the snippet. D'oh! Thank you! I was so sure I was using this wrong that I didn't even look for actual coding errors. Usually the Ruby error tells you what line of the code that the error is in, and echos that erroneous line. Also it may print an extra line beneath the erroneous line with a caret symbol pointing at where it thinks the error is. Not always helpful, as it may just point at the end of the code line if the parser doesn't really know, for instance, where the missing ")" symbol should go. And.. a syntax error IS a coding error, most often missing delimiters, brackets, etc.
  • How to store an Entity between sessions?

    8
    0 Votes
    8 Posts
    592 Views
    D
    Thanks TIG
  • Ruby plugin?

    16
    0 Votes
    16 Posts
    2k Views
    TIGT
    Thomas You really need to learn to crawl before you walk... You expect 'random lines of code' to be interpreted for you ! Please structure your questions a little more friendly... width, height = results presumably this follows a UI.inputbox that results= ? There were two answers... width & height ?? pts = tl[0].vertices sets an array called 'pts' to be the vertices related to the first element in the array tl - as it's not named logically that couls be a list of faces OR edges... i = 0 sets a reference called 'i' to be 0 [this is used later in the '.each do' loop ??? pts2 = [] Makes an empty array called 'pts2' - presumably this will be filled with elements later... pts.each do |pt| pts2[i] = pt.position + [0 , 0 , results[1]] i = i +1 end This process the vertices in 'pts' [it would've been better to call it 'verts' ??] And for each vertex [pt !!!] it returns its position as a 3d-point BUT swaps its z-value for whatever the results[1] was = probably the 'height' so why wasn't 'height' used ?? line_copy = entities.add_line pts2 Tis makes a line in [whatever] 'entities' [is] using the array 'pts2' as the 2 points - these have had their z values set to 'height'... pts_copy = line_copy.vertices This sets the array 'pts_copy' to be the vertices used by the edge 'line_copy' ??? i = 0 j = 0 sets the references 'i' and 'j' to 0 new_face = entities.add_face(pts[0], pts_copy[0], pts_copy[1], pts[1]) This sets the reference 'new_face' to be the face [if any] that is made using the 4 points listed [if they are not coplanar it will fail!] new_face.pushpull (width / 2) It pushpulls the 'new_face' by half of the 'width [i.e. results[0] set earlier] Do NOT leave a gap between the 'pushpull' and its argument in parentheses [i.e face.pushpull(xxx) NEVER face.pushpull (xxx)] model.commit_operation end This closes the 'operation' and 'end's something - presumably the ' def zid' ? You must have a model.start_operation("MyTool") to 'close' it later... [ruby:1dtqmkst]if( not file_loaded?("zid.rb") ) UI.menu("Plugins").add_item("Zid") { zid } end file_loaded("zid.rb")[/ruby:1dtqmkst] This makes the Plugins menu item a called '[ruby:1dtqmkst]Zid[/ruby:1dtqmkst]' which in turn runs the [ruby:1dtqmkst]def[/ruby:1dtqmkst] called '[ruby:1dtqmkst]zid[/ruby:1dtqmkst]' ??? The [ruby:1dtqmkst]file_loaded[/ruby:1dtqmkst] parts need you to have a [ruby:1dtqmkst]require 'sketchup.rb'[/ruby:1dtqmkst] earlier and ensure that only one menu item appears even if you manually reload the script into the same SKP session...
  • Makes a stair with component steps

    2
    0 Votes
    2 Posts
    295 Views
    sdmitchS
    Is this what you wanted revised stairsfms2.rb
  • Create a new line

    3
    0 Votes
    3 Posts
    292 Views
    TIGT
    You're making it too complex... pt0=[0,0,0] pt1=[1,0,0] Sketchup.active_model.active_entities.add_line(pt0,pt1) Adds a new line from the origin 1" long, to the right [i.e. X/red axis] The entities.add_... methods are listed in the API guides and cover many aspects of adding lines, arcs, circles, polygons, clines, cpoints, faces, text etc... please read them and have a mess around...
  • Open SKP in VB.NET Application

    9
    0 Votes
    9 Posts
    2k Views
    Dan RathbunD
    If you look in the SDK folder (where "SDK" is whatever name you gave it,): SDK\SkpWriter\Headers\source\sketchup\skpwriter\sapi and the specific file: applicationfactory.h you will see the following source line that declares an exported DLL function: %(#4040BF)[extern _declspec(dllexport) IApplication* GetApplication();] I believe you must first get a handle to the Sketchup Application Interface, by calling %(#4040BF)[GetApplication()]... then you can call that object's methods, such as getting the handle on the current document, or creating a new document (meaning a SKP model file.) All of the API classes and methods are listed in the "documentation" folders, but be sure to reference both of them. (There is a "documentation" folder under both the "SKPWriter" and "SKPReader" folders.) The files are html, and can be opened locally with your browser. (Click the "index.html" file to start off.) There are a few simple examples in the help docs for SKPReader. There are also a couple of VS project examples under the "Examples" folders.
  • AutoHotKey shortcuts for the Ruby Console

    7
    0 Votes
    7 Posts
    3k Views
    thomthomT
    @kwalkerman said: Hi Jim, This looks awesome. Sorry for the newbie question, but I can't figure out how to activate it. Where do I put the file? How do I start it from the ruby console? Thanks so much, -- Karen This is not a SketchUp Ruby, but an AutoHotKey file - follow the link in the OP.
  • Tracking changes of component definitions with observers

    9
    0 Votes
    9 Posts
    789 Views
    Dan RathbunD
    @adamb said: you may want this as a singleton that is shared amongst all instances (as you've almost written by mistake). Like so: # class definition inside module AC3D_Raven_Exporter class DefinitionsObserver < Sketchup;;DefinitionsObserver @@entities_observer = nil # ref to the singleton instance attr_reader( ;entities_observer ) def initialize() if @@entities_observer.nil? # ref'ing the class ref @@entities_observer = AC3D_Raven_Exporter;;EntitiesObserver.new() # otherwise the instance to the observer is valid and just reuse it. end @entities_observer = @@entities_observer end def onComponentAdded(definitions, definition) definition.entities.add_observer(@entities_observer) end end ADD: and you can do the same thing 1 level up (in your custom AppOserver,) by creating a singleton instance of the DefinitionsObserver, and attaching it to all the component definitions that you wish to "watch". I usually also write a detach_from() method, that uses an array or hash of "watched" items, in order to detach observers when I no longer need to watch them.
  • Resize DC with ruby

    6
    0 Votes
    6 Posts
    738 Views
    M
    Hello, I wrote a small code to add a DC at a specific position and resize it. So when Sketchup add an instance of a DC its position is 0,0,0. You need to define a transformation to place it where you want. t1 = Geom;;Transformation.axes(...,...,...) newDC = Sketchup.active_model.entities.add_instance(Sketchup.active_model.definitions["MyDC"],t1) To set the length I used the set_attribute method of the DC definition len = 13 len2 = 12 newDC.definition.set_attribute "dynamic_attributes","_lenx_nominal",len.to_s newDC.definition.set_attribute "dynamic_attributes","_lenz_nominal",len2.to_s
  • Group.volume

    11
    0 Votes
    11 Posts
    861 Views
    M
    i think i know where the problem is.. it only works in SketchUp 8. i just tried it really sorry about that. i was using 7 before that
  • Help with Japanese Kanji in file name.

    10
    0 Votes
    10 Posts
    1k Views
    honoluludesktopH
    Sorry Dan, Guess this is over my head, but thanks anyway.
  • Calculate button in a messagebox?

    7
    0 Votes
    7 Posts
    489 Views
    T
    Thanks Jeff! Let me look at it a bit, I'm not used to dynamic components. It look pretty cool. Thanks again! s
  • Access to Dimension Line text?

    17
    0 Votes
    17 Posts
    2k Views
    Dan RathbunD
    post removed. (Too tired, low confidence in what I wrote.)
  • Back face front face?

    3
    0 Votes
    3 Posts
    471 Views
    T
    Your importer will have to handle faces on the world plane as SU always reflips these on import. http://forums.sketchucation.com/viewtopic.php?f=180&t=31887
  • Video textures possible in SketchUp

    29
    0 Votes
    29 Posts
    14k Views
    B
    very good ruby reminds me of a software called PHYTA it has same ability (direct video ,sound ,lighting and direct rendering plus shadows) all in one package 3d modelling (a voir)
  • RegEx fun.... not.... :(

    7
    0 Votes
    7 Posts
    574 Views
    Dan RathbunD
    @thomthom said: But I just wanted to understand Regexp better - to why I could not do what I tried to do. I thot I explained it. Your first example, returns the position of a match, IF it occurs using =~ /(foo|bar)/ ... which is an integer index. In contrast, both match() methods return a MatchData object. @thomthom said: So it's not possible to do what I intended with Regexp? ... BUT you then went on to say what you wished was to have the matched numerical string returned, so let me simplify the code (the secret is the $+ global pattern matching variable): # define a Regexp rx = /(\*\s*(d+)|(d+)\s*\*)/ rx.match('* 15') $+.to_i >> 15 rx.match('15 *') $+.to_i >> 15
  • Making identical groups into a shared component.

    4
    0 Votes
    4 Posts
    922 Views
    Al HartA
    I see you have addressed the "Definition of a group" in another thread: http://forums.sketchucation.com/viewtopic.php?f=180&t=19765 It looks like I may have some luck using: definition = group.entities.parent to get the definition, and definition.instances to locate the groups which use the same definition. My client mentioned there was already a ruby to convert groups to components. Did you write it, or do you, (or anyone), know where it is? [Edit: It looks like I am looking for: Selection Toys. I will try to find it]

Advertisement