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

    How to draw an edge with an angle and distance

    Scheduled Pinned Locked Moved Developers' Forum
    25 Posts 4 Posters 1.6k Views 4 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.
    • M Offline
      morci429
      last edited by

      Tig it isn't working.
      guys could u have a look at the code and tell me what do you think?

      
      require 'sketchup.rb'
      
      UI.menu("PlugIns").add_item("Fire Arrows") {
      
      ents = Sketchup.active_model.entities
      
      Sketchup.active_model.selection.each do |e|
      if e.is_a? Sketchup;;Face
      
      ce=e.bounds.center
      
      en=ce.offset(e.normal, 100000.mm)
      
      cl90=ents.add_cline(ce, en)   #a vertical line
      
      tr=Geom;;Transformation.rotation(ce, Z_AXIS, 45.degrees)
      en.transform!(tr)
      cl45=ents.add_line(ce, en)   #a 45 deg line
      
      
      vec=ce.vector_to(en)
      dist=ce.distance(en)
      
      hits=[]
      pt = Geom;;Point3d.new  
      pe=ce.clone ### set up a copy of the point to raytest from
      goon=true
      while goon
        rayt= Sketchup.active_model.raytest(pe, vec)
        goon=false if not rayt
        pt=rayt[0]
        hit=rayt[1][0]
        goon=false if ce.distance(pt) > dist
        hits << [pt, hit]
        pe=pt ### look from last hit point...
      end#while
      
      
      hits.each do |s|
      if s[1][0].is_a? Sketchup;;Face
      hit_face = s.bounds
      zmin = hit_face.min.z
      zmax = hit_face.max.z
      h = zmax - zmin
      h = h.to_m
      UI.messagebox s[1][0]
      UI.messagebox h
      end
      end
      
      
      tr=Geom;;Transformation.rotation(ce, Z_AXIS, -90.degrees)
      en.transform!(tr)
      cl135=ents.add_cline(ce, en)  #a 135 deg line
      
      #en=ce.offset(Z_AXIS, 5000.mm)
      
      #tr=Geom;;Transformation.rotation(ce, X_AXIS, -45.degrees)
      #en.transform!(tr)
      #cl135=ents.add_cline(ce, en)  #a 135 deg line
      
      #tr=Geom;;Transformation.rotation(ce, X_AXIS, 90.degrees)
      #en.transform!(tr)
      #cl135=ents.add_cline(ce, en)  #a 135 deg line
      
      
      
      end
      end
      }
      

      Thanks Dan,
      i added the two end statements. but the complier doesn't like line 31 ]

      pt=rayt[0]
      

      thanks again Dan

      1 Reply Last reply Reply Quote 0
      • thomthomT Offline
        thomthom
        last edited by

        @morci429 said:

        Tig it isn't working.

        Error messages?
        Unexpected behaviour?

        It always help to be specific to what isn't working.

        Thomas Thomassen β€” SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

        1 Reply Last reply Reply Quote 0
        • M Offline
          morci429
          last edited by

          Error: #<NoMethodError: undefined method []' for nil:NilClass> C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:31 C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:7:in each'
          C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:7
          C:/PROGRA~1/Google/GOOGLE~3/Plugins/Fire Arrows.rb:3:in `call'

          Sorry if i wasn't clear enough

          1 Reply Last reply Reply Quote 0
          • TIGT Offline
            TIG Moderator
            last edited by

            Try adding a test after the goon=false if not rayt like
            next if not rayt that way it will jump.

            I notice that your 'line' creation is a bit muddled - you a make one then transform the end_point [en] BUT doing so around the Z_AXIS leaves it where it is - do it around the X_AXIS or Y_AXIS...

            TIG

            1 Reply Last reply Reply Quote 0
            • Dan RathbunD Offline
              Dan Rathbun
              last edited by

              morc..

              EDIT:The problem is that the API doc does not say that if the ray does not hit anything, the raytest method just returns nil.

              rayt= Sketchup.active_model.raytest(pe, vec)

              If you read the API for Model.raytest(), you'll see that the first argument must be an Array; the second optional argument (added in SU8.0M1,) is the wysiwyg_flag that sets whether to hit hidden geometry.

              EDIT:Actually the method is smart enough to know what you mean... you don't really need an Array arg, unless you want to use the wysiwyg_flag %(#BF4000)[argument.

              So you can to call it this way:]
              rayt= Sketchup.active_model.raytest( **[**pe, vec**]** )

              I'm not here much anymore.

              1 Reply Last reply Reply Quote 0
              • M Offline
                morci429
                last edited by

                Tig it isn't working.
                guys could u have a look at the code and tell me what do you think?

                ...*[snip]*... reposted [in later post](http://forums.sketchucation.com/viewtopic.php?f)
                
                1 Reply Last reply Reply Quote 0
                • Dan RathbunD Offline
                  Dan Rathbun
                  last edited by

                  Added a note at the bottom of the API doc page for Model.raytest() informing readers of the nil return value, when no geometry is "hit."

                  I'm not here much anymore.

                  1 Reply Last reply Reply Quote 0
                  • M Offline
                    morci429
                    last edited by

                    guys i think you are right, the hits array is empty. the ray isn't hitting any geometry. Still trying to find out why though

                    1 Reply Last reply Reply Quote 0
                    • TIGT Offline
                      TIG Moderator
                      last edited by

                      Rather than start with convoluted code try a simple 'one-liner' pasted into the Ruby Console...
                      Draw two rectangular faces place them one above the other, above the origin.

                      rt=true;p=ORIGIN;while rt;p rt=Sketchup.active_model.raytest(p,Z_AXIS);p=rt[0]if rt;end
                      

                      it should produce something like this
                      [Point3d(0, 0, 16.9685), [#<Sketchup::Face:0xbea3ae8>]] [Point3d(0, 0, 39.3701), [#<Sketchup::Face:0xbea3ad4>]] nil
                      NOW you know it's working........

                      TIG

                      1 Reply Last reply Reply Quote 0
                      • M Offline
                        morci429
                        last edited by

                        Mission accomplished
                        Thanks to you all Geniuses

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

                        Advertisement