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

    View.invalidate vs view.refresh

    Scheduled Pinned Locked Moved Developers' Forum
    12 Posts 5 Posters 2.5k Views 5 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.
    • thomthomT Offline
      thomthom
      last edited by

      @tig said:

      I think that if you are in the middle of a start/commit block the view.invalidate will kick in once it's done,

      Not from my observations. I had a start operation at onLButtonDown, and committed at up. .invalidate would refresh during that time. (The disable_ui argument is set to false.)

      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

        Doesn't invalidate undo anything that's temporary from 'view.draw...' and then geometry outside of the start/commit, but refresh does both inside the start/commit block ?

        TIG

        1 Reply Last reply Reply Quote 0
        • J Offline
          jhauswirth
          last edited by

          Invalidate sends a message (WM_PAINT) requesting the view needs refreshed.
          view.refresh actually calls the view draw method.

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

            @jhauswirth said:

            Invalidate sends a message (WM_PAINT) requesting the view needs refreshed.
            view.refresh actually calls the view draw method.

            Thanks for providing some behind the curtain info! πŸ‘

            Is WM_PAINT not a Windows message? Is it present on both platforms?
            So .invalidate make a request to refresh the view - but how is it determined that it actually will be refreshed? Is that SketchUp or the System?

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

            1 Reply Last reply Reply Quote 0
            • tbdT Offline
              tbd
              last edited by

              @unknownuser said:

              The WM_PAINT message is generated by the system and should not be sent by an application. (source

              @unknownuser said:

              Most drawing carried out during processing of the WM_PAINT message is asynchronous; that is, there is a delay between the time a portion of the window is invalidated and the time WM_PAINT is sent. During the delay, the application typically retrieves messages from the queue and carries out other tasks. The reason for the delay is that the system generally treats drawing in a window as a low-priority operation and works as though user-input messages and messages that may affect the position or size of a window will be processed before WM_PAINT . (source

              so .invalidate pushes WM_PAINT in message queue which will call the draw method from WindowProc sometime later and .refresh will immediately call the draw method.

              too many .refresh will result in a slower workflow due unnecessary redraws instead of mixing all (system + code) in one draw.

              SketchUp Ruby Consultant | Podium 1.x developer
              http://plugins.ro

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

                @tig said:

                I tend to use

                begin
                >   view.refresh
                > rescue
                >  view.invalidate
                > end
                

                to trap for <~v8.

                a one-liner is possible when rescue is used in modifier position, it can take a single argument to return if an exception is raised:

                view.refresh rescue view.invalidate

                I'm not here much anymore.

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

                  @unknownuser said:

                  too many .refresh will result in a slower workflow due unnecessary redraws instead of mixing all (system + code) in one draw.

                  Right - so if I make a wrapper that will refresh after a given max interval - otherwise invalidate - that would be an ok method?

                  <span class="syntaxdefault"><br />def&nbsp;update_view</span><span class="syntaxkeyword">(&nbsp;</span><span class="syntaxdefault">view&nbsp;</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;@</span><span class="syntaxdefault">last_refresh&nbsp;</span><span class="syntaxkeyword">||=&nbsp;</span><span class="syntaxdefault">Time</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">now<br />&nbsp;&nbsp;</span><span class="syntaxkeyword">if&nbsp;</span><span class="syntaxdefault">Time</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">now&nbsp;</span><span class="syntaxkeyword">-&nbsp;@</span><span class="syntaxdefault">last_refresh&nbsp;</span><span class="syntaxkeyword">>&nbsp;</span><span class="syntaxdefault">0.2<br />&nbsp;&nbsp;&nbsp;&nbsp;view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">refresh<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxkeyword">@</span><span class="syntaxdefault">last_refresh&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">Time</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">now<br />&nbsp;&nbsp;</span><span class="syntaxkeyword">else<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">invalidate<br />&nbsp;&nbsp;end<br />end<br /></span>
                  

                  ❓

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

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

                    @unknownuser said:

                    so .invalidate pushes WM_PAINT in message queue which will call the draw method from WindowProc sometime later and .refresh will immediately call the draw method.

                    But isn't this specific to Windows?

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

                    1 Reply Last reply Reply Quote 0
                    • tbdT Offline
                      tbd
                      last edited by

                      @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.

                      WM_PAINT is Windows specific, I didn't delved deeper in OSX internals yet. the main idea is - do not update the whole window if you just modified a small part of it - how we will implement that without Sketchup help, we will see πŸ˜‰

                      SketchUp Ruby Consultant | Podium 1.x developer
                      http://plugins.ro

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

                        @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?

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

                        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