• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

Ruby code editor

Scheduled Pinned Locked Moved Plugins
3 Posts 2 Posters 1.6k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • O Offline
    odowhacker
    last edited by 24 May 2020, 20:14

    hallo all,
    i am trying to get used to ruby again - working with the ruby code editor 4.3 and sketchup pro 2016.
    working with one of the script examples 'using formulas for patterned panels' i'm running into a problem when i try to modify this script slightly.
    the example is about drawing circles in a plane. i'm trying to add faces to these circles and extrude them to cylinders. i'm getting errors that seem impossible to me - so i need your help.

    after much browsing QA articles with helpful responses for instance by TIG i noticed that possibly the error might have to do with the editor.

    script:

    ###############################################

    Script sample from Alexander C. Schreyer's book

    "Architectural Design with SketchUp"

    ###############################################

    Creates a square panel with a sinusoidal hole pattern

    mod = Sketchup.active_model # Open model
    ent = mod.entities # All entities in model
    sel = mod.selection # Current selection

    width = 36 # Width of panel
    n = 10 # Number of circles in each direction
    s = width / (n+1).to_f # Spacing of circles
    w = 50

    Add the square base for the panel

    face = ent.add_face [0,0,0] , [width,0,0] , [width,width,0] , [0,width,0]

    Iterate in the panel plane

    (0..n-1).each { |i|
    (0..n-1).each { |j|
    # Create a group for each circle
    group = ent.add_group()
    ents = group.entities
    # Add the circle
    centerpoint = [s+is,s+js,0]
    vector = [0,0,1]
    radius = Math::sin( i / (n-1).to_f * Math::PI ) * s / 5.0 + Math::sin( j / (n-1).to_f * Math::PI ) * s / 5.0
    edges = ents.add_circle centerpoint , vector , radius , 24

    #various trial and error to get a face inside
    #edges[0].find_faces
    #cface = edges[0].faces[0]
    cface = group.entities.add_face edges

    cface.back_material = [ (255 / (n-1)*i).round , (255 / (n-1)*j).round ,(255 / (n-1)*j).round ]
    #face.pushpull -w
    group.explode
    

    }
    }


    the add_face command is followed by error: not enough edges
    if i omit the command i'll get error: undefined method 'back_materia=' for nil so a face isn't created no matter which approach i use.

    the ruby console tellsme:

    "undefined method back_material=' for nil:NilClass (Line 37)" Error: #<TypeError: no implicit conversion of NoMethodError into String> C:/Users/errfitt/AppData/Roaming/SketchUp/SketchUp 2016/SketchUp/Plugins/as_rubyeditor/as_rubyeditor.rb:346:in +'
    C:/Users/errfitt/AppData/Roaming/SketchUp/SketchUp 2016/SketchUp/Plugins/as_rubyeditor/as_rubyeditor.rb:346:in rescue in block in initialize' C:/Users/errfitt/AppData/Roaming/SketchUp/SketchUp 2016/SketchUp/Plugins/as_rubyeditor/as_rubyeditor.rb:368:in block in initialize'
    SketchUp:1:in `call'

    can someone tell me what's wrong and what i can do to solve this?

    thanks a bunch

    1 Reply Last reply Reply Quote 0
    • M Offline
      McGordon
      last edited by 24 May 2020, 21:06

      The first time your nested i, j loop runs, i and j are both zero, so your radius will be zero as sin(0) = 0.

      The add_circle method is called with:
      add_circle([3.272727272727273, 3.272727272727273, 0], [0, 0, 1], 0.0, 24)
      which has a radius of 0.0 so it will sort of fail and return 2 edges instead of 24. Then you won't be able to find faces when there's only 2 edges and you'll get the errors you saw.

      I haven't used that code editor or read that book. The error is nothing to do with your editor. As I don't have access to the book I don't know which parts you've changed.

      I'm not entirely sure what it's supposed to look like, but here's what I've got.

      https://i.imgur.com/NLjsWml.png

      I put it all in a group so it doesn't stick to existing geometry. I just erase the failed groups where add_circle fails to form a circle with 24 segments. You could check for radius being 0.0 but there's also some cases where it's extremely small e.g. i=9, j=9 where the radius is 1.6e-16. I left in some of puts statements I had for debugging to let you see what's going on.


      Odowhacker.rb

      1 Reply Last reply Reply Quote 0
      • O Offline
        odowhacker
        last edited by 25 May 2020, 03:25

        thank you very much. 👍

        1 Reply Last reply Reply Quote 0
        • 1 / 1
        1 / 1
        • First post
          3/3
          Last post
        Buy SketchPlus
        Buy SUbD
        Buy WrapR
        Buy eBook
        Buy Modelur
        Buy Vertex Tools
        Buy SketchCuisine
        Buy FormFonts

        Advertisement