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

    [code] Is there a way to know if cursor on top of shadow?

    Scheduled Pinned Locked Moved Developers' Forum
    12 Posts 4 Posters 293 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.
    • renderizaR Offline
      renderiza
      last edited by renderiza

      Is there a way to know if cursor on top of shadow?

      This might be useful for an idea I have. Also it will be cool to select only faces that have shadow.

      thanks

      Here is final answer thanks to TIG...

      
      @@model = Sketchup.active_model ;
      
      def onLButtonDown(flags,x,y,view)
      
         ip1 = view.inputpoint x,y ;
         point = ip1.position ;
         svec = @@model.shadow_info["SunDirection"] ;
         hit_path = Sketchup.active_model.raytest [point,svec]
      
         if hit_path
      
             UI.messagebox("On Shadow") ;
                  
         end #if
      
      end #def
      

      [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

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

        Not directly...
        BUT you could devise some convoluted way...
        Use a model.raytest from your cursor's 'best picked point' using the sun.direction.reverse to determine its vector. Use the shadow-info to get data like that...
        If the raytest returns nil there's nothing between the point and the sun [i.e. no shadow], BUT it it returns something else then the sun is casting a shadow on that point...

        TIG

        1 Reply Last reply Reply Quote 0
        • renderizaR Offline
          renderiza
          last edited by

          Thanks TIG for the fast replay!

          Your suggestion seems like the right way so I will try to make it work...again thanks!

          [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

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

            If you do manage to get a working method perhaps you could share just that part of your new tool on the open forum ?

            TIG

            1 Reply Last reply Reply Quote 0
            • renderizaR Offline
              renderiza
              last edited by

              @tig said:

              If you do manage to get a working method perhaps you could share just that part of your new tool on the open forum ?

              Hi, I am currently doing some little research before making the final code and I stumbled on a post you made that might be useful to understand.

              Here is what you coded on this thread...http://sketchucation.com/forums/viewtopic.php?f=323&t=35887&start=0

              @tig said:

              model=Sketchup.active_model
              svec=model.shadow_info["SunDirection"]
              peye=model.active_view.camera.eye
              clin=model.active_entities.add_cline(peye, svec)
              clin.end=nil
              clin.start=peye

              Of course if I am able to make working code I will share it with forum. πŸ‘

              By the way the basic idea for this was to add a feature to a plugin I am making called "Canvas" where you make a group or component plane that has material opacity to about 5% and this will allow you to "paint" groups or comp to only faces that have shadow on them.

              But thinking of others ideas on how else this can be useful is fun...cheers!

              [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

              1 Reply Last reply Reply Quote 0
              • renderizaR Offline
                renderiza
                last edited by

                WIP

                Hi, here is a what I have done so far...

                
                @@model = Sketchup.active_model ;
                
                def onLButtonDown(flags,x,y,view)
                
                   ip1 = view.inputpoint x,y ;
                   point = ip1.position ;
                   svec = @@model.shadow_info["SunDirection"] ;
                   peye = @@model.active_view.camera.eye ;
                   clin = @@model.active_entities.add_cline(point, svec) ;
                
                   clin.end = peye ;
                   clin.start = point ;
                
                end #def
                

                I started with add_cline to test but soon I will add the model.raytest to evaluate if it returns nill or not.

                Again thanks and will keep you posted on the progress

                Note: Here is the Canvas Plugin just in case someone is interested...
                http://sketchucation.com/forums/viewtopic.php?f=323&t=51655

                [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                1 Reply Last reply Reply Quote 0
                • renderizaR Offline
                  renderiza
                  last edited by

                  Here is the final code to detect if the cursor is on a shadow...

                  @@model = Sketchup.active_model ;
                  
                  def onLButtonDown(flags,x,y,view)
                  
                     ip1 = view.inputpoint x,y ;
                     point = ip1.position ;
                     svec = @@model.shadow_info["SunDirection"] ;
                     hit_path = Sketchup.active_model.raytest [point,svec] 
                  
                     if hit_path != nil
                  
                         UI.messagebox("On Shadow") ;
                  				
                     end #if
                  
                  end #def
                  

                  Thanks TIG!

                  [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

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

                    Is sun direction pointing to the sun? Not from the sun?

                    Btw, no need to compare against nil. ( != nil or == nil )

                    if hit_path != nil

                    is the same as

                    if hit_path

                    If you want to check if an value is nil - then you can use .nil?

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

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

                      The 'SunDirection' gives something like:
                      Vector3d(-0.424437, -0.772256, 0.47273)
                      When the sun is 'in the south' so that suggests the returned vector is towards the sun.
                      Otherwise its Z would be negative - i.e. downwards ??

                      TIG

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

                        True that. Just didn't expect it.

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

                        1 Reply Last reply Reply Quote 0
                        • renderizaR Offline
                          renderiza
                          last edited by

                          Thanks thomthom for pointing out that "!= nil" was not needed.

                          cheers!

                          [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

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

                            ... because in a boolean expression nil (and false,) eval falsely.

                            Everything else including true, [] (an empty array), and 0 (the integer zero,) evaluate truthfully.

                            I'm not here much anymore.

                            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