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

    State of Observers Redux — 18 August 2011

    已排程 已置頂 已鎖定 已移動 Developers' Forum
    30 貼文 4 Posters 5.3k 瀏覽 4 Watching
    正在載入更多貼文
    • 從舊到新
    • 從新到舊
    • 最多點贊
    回覆
    • 在新貼文中回覆
    登入後回覆
    此主題已被刪除。只有擁有主題管理權限的使用者可以查看。
    • thomthomT 離線
      thomthom
      最後由 編輯

      @dan rathbun said:

      @thomthom said:

      Another issue, I imagine I read some reports on MaterialObserver.onMaterialSetCurrent not working as it should on OSX in some versions of SU?

      YES.. I posted the answer that Scott gave me. He says it's logged as an internal bug.

      See GG post: Materials.current on OS X
      .

      So it's bugged on SU6, SU7.0, SU 7.1?

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

      1 條回覆 最後回覆 回覆 引用 0
      • thomthomT 離線
        thomthom
        最後由 編輯

        @dan rathbun said:

        @thomthom said:

        It's what the API docs said. I've not tested if the events are actually removed, or just aliased to their new names...

        I did test the MaterialObserver's Bulk change method. It has been removed from the superclass, so when you create an instance of a MaterialObserver subclass, it just is not there, and if you were to explicitly call the callback, a NoMethodError exception will be raised. Ie, there is no aliasing to the individual change callback(s).

        So if you wanted to handle events in a bulk manner, you'd need to do it on the Ruby side, perhaps with a Ruby standard Observer class, or a bulkchange boolean flag variable and an Array of changed objects (each individual SU change callback would need to push it's object into the Array.)

        bulk change event? Is that one that has been removed from the API?
        That was a troublesome points when I made this chart - they recently removed some events from the API....

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

        1 條回覆 最後回覆 回覆 引用 0
        • Dan RathbunD 離線
          Dan Rathbun
          最後由 編輯

          @thomthom said:

          So it's bugged on SU6, SU7.0, SU 7.1?

          Careful.. the collection getter method Materials.current IS bugged, the question remains, is the MaterialsObserver bugged as well. You'd need to test versions on the Mac to find out.
          .

          I'm not here much anymore.

          1 條回覆 最後回覆 回覆 引用 0
          • Dan RathbunD 離線
            Dan Rathbun
            最後由 編輯

            @thomthom said:

            bulk change event? Is that one that has been removed from the API?
            That was a troublesome points when I made this chart - they recently removed some events from the API....

            Yes.. the MaterialsObserver.onMaterialRemoveAll callback was removed, as it never worked, and/or never got called. So there was no point in deprecating it.

            I'm not here much anymore.

            1 條回覆 最後回覆 回覆 引用 0
            • thomthomT 離線
              thomthom
              最後由 編輯

              @dan rathbun said:

              @thomthom said:

              bulk change event? Is that one that has been removed from the API?
              That was a troublesome points when I made this chart - they recently removed some events from the API....

              Yes.. the MaterialsObserver.onMaterialRemoveAll callback was removed, as it never worked, and/or never got called. So there was no point in deprecating it.

              I'd like to add it for historic purpose - anyone remembers it parameters?

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

              1 條回覆 最後回覆 回覆 引用 0
              • thomthomT 離線
                thomthom
                最後由 編輯

                @thomthom said:

                @dan rathbun said:

                @thomthom said:

                bulk change event? Is that one that has been removed from the API?
                That was a troublesome points when I made this chart - they recently removed some events from the API....

                Yes.. the MaterialsObserver.onMaterialRemoveAll callback was removed, as it never worked, and/or never got called. So there was no point in deprecating it.

                I'd like to add it for historic purpose - anyone remembers it parameters?

                Ah - already got it. 😄
                Thought there was an event named onBulkChange, like the SelectionObserver has.

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

                1 條回覆 最後回覆 回覆 引用 0
                • thomthomT 離線
                  thomthom
                  最後由 編輯

                  aiaiai... sigh


                  Ugh.png

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

                  1 條回覆 最後回覆 回覆 引用 0
                  • thomthomT 離線
                    thomthom
                    最後由 編輯

                    Update to include SU 8.0 M1
                    http://www.thomthom.net/software/sketchup/observers/

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

                    1 條回覆 最後回覆 回覆 引用 0
                    • Dan RathbunD 離線
                      Dan Rathbun
                      最後由 編輯

                      You have that the AppObserver::onQuit is working...

                      It's is bugged in v8 (at least. And I did report a bug last beta cycle.)

                      It does not wait until the callbacks return, before shutting down the application.
                      Trying to use the callback to save plugin settings, and so forth, often fails for me.

                      Also, trying to dettach the observer itself from within onQuit causes a GPF (if I remember right.)
                      In addition coders should NOT open any "owned" windows (like WebDialogs and messageboxes,) during the callback, until they fix the 'non-blocking' issue.


                      Can't remember if v7 had any of these problems.

                      I'm not here much anymore.

                      1 條回覆 最後回覆 回覆 引用 0
                      • thomthomT 離線
                        thomthom
                        最後由 編輯

                        @dan rathbun said:

                        You have that the AppObserver::onQuit is working...

                        It's is bugged in v8 (at least. And I did report a bug last beta cycle.)

                        Ok - I'll add that. Never used it. All the observers I've not tried and not heard any reports on I assume is working.

                        @dan rathbun said:

                        InstanceObserver

                        @dan rathbun said:

                        what about Groups?

                        Groups and Images all are listed in model.definition.

                        @dan rathbun said:

                        (Note how I changed the example, from UI.messagebox to puts.

                        I wish the docs would do that. Messageboxes are double plus ungood - especially in observer events.

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

                        1 條回覆 最後回覆 回覆 引用 0
                        • thomthomT 離線
                          thomthom
                          最後由 編輯

                          Dan, how do you test AppObserver::onQuit ?

                          If I had a test case that illustrates the symptoms I could quickly run it on SU 6-8.

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

                          1 條回覆 最後回覆 回覆 引用 0
                          • Dan RathbunD 離線
                            Dan Rathbun
                            最後由 編輯

                            @thomthom said:

                            Dan, how do you test AppObserver::onQuit

                            Tough one... as it DOES fire. (It just doesn't wait for the callback to finish.)
                            Well I first found it because I wanted to save the pos & size of several windows using Win32API calls.
                            But it wasn't working.

                            So I tried putting a debug popup messagebox inside onQuit(), thinking the shutdown process should stop, until I clicked "OK". But it DIDN'T stop, the messagebox came up, but everything else shutdown. And when I closed the messagebox, it's owner (the Sketchup App window,) no longer existed, so Windows poped up the VS Just in Time debugger query box (you know.. "DO want Debug now?")

                            So next I tried, to open a WebDialog.. and that made things even worse. (I got a post-shutdown BugSplat!) They were either GPF or "Unhandled Win32 Exception".)

                            I was trying to call a method that saved a whole bunch of data into the Registry, and that method may have called another method as well. Anyway, I even tried "lean" the process way down, putting all statements inside the onQuit(), and removing every extra reference assignment I could. But Sketchup just would not wait. It seemed to be processing all the onQuit callbacks, in the Ruby thread, but at the same time, cleaning up the main App thread, and disposing of all it's child windows.

                            Perhaps it's a unique thing because I want to save window object data, ...that most other plugins would not encounter.

                            I plan to try using Ruby define_finalizer, and see if that works for me.

                            As far as testing.. I'll have to think more on this... perhaps a trace function.

                            I'm not here much anymore.

                            1 條回覆 最後回覆 回覆 引用 0
                            • Dan RathbunD 離線
                              Dan Rathbun
                              最後由 編輯

                              @thomthom said:

                              @dan rathbun said:

                              InstanceObserver

                              @dan rathbun said:

                              what about Groups?

                              Groups and Images all are listed in model.definition.

                              I don't have a Mac to test this InstanceObserver workaround.

                              (And I fixed the example. I don't know why, but every single time I go to write an initialize() method, I forget to put def in front of it!)

                              I'm not here much anymore.

                              1 條回覆 最後回覆 回覆 引用 0
                              • Dan RathbunD 離線
                                Dan Rathbun
                                最後由 編輯

                                InstanceObserver

                                I'm wonding if you can do this

                                #
                                class InstSpy < Sketchup;;InstanceObserver
                                
                                  if RUBY_PLATFORM =~ /(darwin)/
                                    def onQuit()
                                      Sketchup.active_model.definitions.instances.each{|i|
                                        i.remove_observer(self)
                                      }
                                      # what about Groups?
                                    end
                                  end #if
                                
                                  def initialize(*args)
                                    Sketchup.add_observer(self) if RUBY_PLATFORM =~ /(darwin)/
                                  end
                                
                                  # define your Instance callbacks;
                                 
                                  def onOpen(instance)
                                    puts("onOpen; " + instance.to_s)
                                  end
                                
                                  def onClose(instance)
                                    puts("onClose; " + instance.to_s)
                                  end
                                
                                end # class
                                
                                

                                (Note how I changed the example, from UI.messagebox to puts.

                                I'm not here much anymore.

                                1 條回覆 最後回覆 回覆 引用 0
                                • thomthomT 離線
                                  thomthom
                                  最後由 編輯

                                  In TT_Lib2 I got a function TT.debug that outputs a string to any system debugger, like DebugView. That can probably be used to track onQuit.

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

                                  1 條回覆 最後回覆 回覆 引用 0
                                  • thomthomT 離線
                                    thomthom
                                    最後由 編輯

                                    Added public bug tracker to the BitBucket repo:
                                    https://bitbucket.org/thomthom/sketchup-observers/issues?status=new&status=open

                                    People can add reports of broken observer events there.

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

                                    1 條回覆 最後回覆 回覆 引用 0
                                    • 1
                                    • 2
                                    • 2 / 2
                                    • 第一個貼文
                                      最後的貼文
                                    Buy SketchPlus
                                    Buy SUbD
                                    Buy WrapR
                                    Buy eBook
                                    Buy Modelur
                                    Buy Vertex Tools
                                    Buy SketchCuisine
                                    Buy FormFonts

                                    Advertisement