sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    πŸ«› Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download

    Ruby code editor

    Scheduled Pinned Locked Moved Plugins
    3 Posts 2 Posters 1.6k Views 2 Watching
    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

      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

        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

          thank you very much. πŸ‘

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

          Advertisement