sketchucation logo sketchucation
    • Login
    πŸ€‘ SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

    Observers WhishList

    Scheduled Pinned Locked Moved Developers' Forum
    59 Posts 18 Posters 110.2k Views 18 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

      Before, Styles where called Rendering Options. So look at the RenderingOptions class. You have a RenderingOptionsObserver class: http://code.google.com/intl/nb/apis/sketchup/docs/ourdoc/renderingoptionsobserver.html

      Same thing as Scenes in the SU UI is Pages in the API.

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

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

        @thomthom said:

        Before, Styles where called Rendering Options. So look at the RenderingOptions class. You have a RenderingOptionsObserver class: http://code.google.com/intl/nb/apis/sketchup/docs/ourdoc/renderingoptionsobserver.html

        OK looked at that... seems like the RenderingOptionsObserver class needs an overhaul:

        • Need to alias (rename) as: StyleOptionsObserver* Need to deprecate the old name.
          @unknownuser said:

        The type is an internal number that indicates what was changed. You will need to watch the observer for numbers you are interested in.

        • That is clumsy! (or lazy programming.) Ruby is a high-level language, lets have the same identifier keys as used in the RenderingOptions collection class.* RenderingOptions also needs to be aliased or renamed StyleOptions.* Need to deprecate the old name.
          This only covers the onStyleEdit method I proposed in the previous post, which is actually named onRenderingOptionsChanged, however, it fails to send any detail, it only tells (by ordinal,) what options WAS changed. I think it should pass oldValue and newValue as well.

        So reproposing the method as:
        onStyleOptionsEdit(styleOptionsCollection, optionKeyname, oldValue, newValue)
        Could still have old method that sends ordinal number, as:
        onStyleOptionsChange(styleOptionsCollection, optionNum)

        • Need to deprecate the old name.

        STILL, need as in previous post, a 'higher' level StylesObserver for triggering events when Styles are manipulated as a whole set (saved to, or loaded from files.) We can call these a StyleSet.

        • It is possible that those methods could go in the AppObserver rather than create a new observer class.

        I'm not here much anymore.

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

          I think you are missing a practical point - you can change a "Rendering Option" without changing the current Scene's "Style" - e.g. switching Xray-mode on won't affect the "Style" BUT it will affect what is displayed on screen [i.e. "Rendered"]. Therefore shouldn't there be two sorts of Observer - one to watch for changes to the "Rendering Options Settings" and another to watch for "Style Changes" ❓

          TIG

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

            @tig said:

            I think you are missing a practical point - you can change a "Rendering Option" without changing the current Scene's "Style" - e.g. switching Xray-mode on won't affect the "Style" BUT it will affect what is displayed on screen [i.e. "Rendered"]. Therefore shouldn't there be two sorts of Observer - one to watch for changes to the "Rendering Options Settings" and another to watch for "Style Changes" ❓

            If you enable X-Ray mode you change the current Style.

            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

              Ah. Gotcha!

              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

                @thomthom said:

                @tig said:

                I think you are missing a practical point - you can change a "Rendering Option" without changing the current Scene's "Style" - e.g. switching Xray-mode on won't affect the "Style" BUT it will affect what is displayed on screen [i.e. "Rendered"]. Therefore shouldn't there be two sorts of Observer - one to watch for changes to the "Rendering Options Settings" and another to watch for "Style Changes" ❓

                If you enable X-Ray mode you change the current Style.

                That way you don't change an existing Scene's Style per se - the current Render Settings are temporary changes in that View not the Scene's defined Style - if you change back to that Scene tab the Style should be refreshed back as it was until you save its changes - I know that Xray mode is perhaps a bad example in that it transcends Style settings.

                My point is that what is being Rendered in a View and a Scene's Style are different things. One is transient, one is fixed. Changing the Style changes the Render Setting it uses, but you can change the Render Settings without changing a 'named' Style - the confusion is that changing the Render Settings makes a 'temporary' Style that is used in that View from then on until you change settings again or go back to another saved Style - you can the save this temp-style as a new Style or use it to update another already defined Style...

                My point was that Styles and Render Settings are linked but different as any Style's settings are not necessarily equal to the current Render Options ?

                TIG

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

                  @tig said:

                  Therefore shouldn't there be two sorts of Observer - one to watch for changes to the "Rendering Options Settings" and another to watch for "Style Changes" ❓

                  Yes possibly. The API is WAY out of date on this subject and not very clear.

                  Likely that Rendering Options came first (before Scene Styles were 'invented'?)

                  @unknownuser said:

                  (in regard to Rendering Options) The majority of the rendering information returned exists in the Model Info > Display section of SketchUp
                  But that is no longer true!
                  There is no 'Display' section in the Model Info dialog in 7.x!

                  I'm not here much anymore.

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

                    Don't think I've ever seen a Display section. But I've only used SU since v6.x.

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

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

                      @tig said:

                      • the current Render Settings are temporary changes in that View not the Scene's defined Style - if you change back to that Scene tab the Style should be refreshed back as it was until you save its changes - I know that Xray mode is perhaps a bad example in that it transcends Style settings.

                      My point is that what is being Rendered in a View and a Scene's Style are different things. One is transient, one is fixed.

                      I don't see any difference in practice.
                      I have 4 scenes tabs defined and have the Style dialog open in the edit pane.

                      Whatever I change in the Style dialog changes on the App toolbars or menus.

                      Whatever I change on the menus (ie Hidden Geometery,) or toolbars (shaded, xray, wireframe etc.,) is immediately echoed in the Style dialog Edit pane.

                      After making changes, switching between Scenes makes no changes, however I suppose all scenes are set to the same Style.

                      If I purposely try to set one scene to a different style, it changes, then I switch to another scene it switches back; returning to the previous scene (which I had changed does not change the Style.) It seems there is a default Model Style.

                      This is confusing.

                      I'm not here much anymore.

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

                        @dan rathbun said:

                        there is NO **Sketchup::StylesObserver**

                        Made a few edits to proposed methods.
                        see original post: StylesObserver

                        I'm not here much anymore.

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

                          @thomthom said:

                          @whaat said:

                          ... For example, OnEntityChanged, what constitutes a 'change'?

                          Yea - I spent some time on this because I was setting attributes - which seems to be a change. Not sure if I want that to trigger. At least not most of the times. attributes are like meta data.
                          maybe onChange for geometric changes, and onAttribChange(dict, key, oldVal, newVal) for the attribute meta data?

                          Do changes to an Attribute currently fire onEntityChanged events?
                          What about adding or deleting an attribute from a Dictionary?
                          What about adding or deleting a Dictionary from an Entity?

                          I'm not here much anymore.

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

                            there is NO **Sketchup::StylesObserver**

                            But the Styles class has a few 'observer-like' methods:
                            Styles.update_selected_style
                            This method is a boolean method (which should have a '?' at the end of it's name.) The use of this method is confusing (partly as the example does not show the style being selected.)
                            Styles.active_style_changed
                            (again, should have a '?' at the end of it's name.)
                            This is a session boolean, changes anytime after saving; but no way to trigger an event.

                            Would it be better to create a StylesObserver class?
                            That had methods such as:
                            --- (edit) names changed
                            onStyleSetAdd(styles, newStyle)
                            onStyleSetCreate(styles, newStyle, fromStyle)
                            onStyleSetChosen(styles, oldStyle, newStyle)
                            --- (edit) name added
                            onStyleSetRename(styles, style, oldName, newName)
                            onStyleSetRedescribe(styles, style, oldText, newText)
                            onStyleSetEdited(styles, style, styleOptions, optionsChangedHash)
                            (for Bulk handling instead of single option handling.)

                            Purge methods
                            (as in previous post (Suggested) onBeforePurge & onAfterPurge)
                            onBeforePurge(styles, stylesUnusedObjectArray)
                            onAfterPurge(styles, removedStylesArray, purgeResult)

                            --- (edit) the following withdrawn
                            onStyleEdit(styles, style, option, oldValue, newValue)*****

                            • probably will need to implement a "StylesOptions" OptionsProvider
                              -- in favor of updates to
                              RenderingOptionsObserver as in post:
                              Re: StyleOptions / StyleOptionsObserver

                            I'm not here much anymore.

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

                              @dan rathbun said:

                              @thomthom said:

                              @whaat said:

                              ... For example, OnEntityChanged, what constitutes a 'change'?

                              Yea - I spent some time on this because I was setting attributes - which seems to be a change. Not sure if I want that to trigger. At least not most of the times. attributes are like meta data.
                              maybe onChange for geometric changes, and onAttribChange(dict, key, oldVal, newVal) for the attribute meta data?

                              Do changes to an Attribute currently fire onEntityChanged events?
                              What about adding or deleting an attribute from a Dictionary?
                              What about adding or deleting a Dictionary from an Entity?

                              EDIT
                              I asked this because, it would lead to whether we need EntityObserver methods:
                              %(#BF0000)[onBeforeAttributeAdd(entity, dict, key, value)
                              onAfterAttributeAdd(entity, dict, key, value,]result%(#BF0000)[)
                              onBeforeAttributeDelete(entity, dict, key, value)
                              onAfterAttributeDelete(entity, dict, oldKey, oldVal,]result)
                              Also, ThomThom's example needs the entity handle passed.
                              onAttribChange(entity, dict, key, oldVal, newVal)%(#004000)[*

                              • would assume change result was 'true' (successful)]%(#BF0000)[onBeforeDictionaryAdd(entity, newDict)
                                onAfterDictionaryAdd(entity, dict,]result%(#BF0000)[)
                                onBeforeDictionaryDelete(entity, dict)
                                onAfterDictionaryDelete(entity, oldDict,]result)

                              Also would a DictionaryObserver be necessary?
                              (I'd think not as most Attribute and Dictionary functions are available thru the Entity object.)

                              I'm not here much anymore.

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

                                So what's the latest gossip from the Google camp on this topic?

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

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

                                  need AppObserver.onCloseModel

                                  @unknownuser said:

                                  It is often used to attach other observers to each model as it is opened or started. This ensures that your observers are watching all open models.
                                  http://code.google.com/apis/sketchup/docs/ourdoc/appobserver.html

                                  In an MDI application (as the Mac is now, and hopefully the PC will be in upcoming versions,) there needs to be a way to detect that an MDI child window has been closed, so scripts can do cleanup, such as unattaching observers that may have been attached using onNewModel or onOpenModel.

                                  Of course on the PC, at the current time, Sketchup is not yet an MDI application; and to close the active model, a user would either open a new model (firing the onNewModel event,) open another model from a file (firing the onOpenModel event,) OR shut down Sketchup (firing the onQuit event.)
                                  _

                                  I'm not here much anymore.

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

                                    _
                                    I've noticed there does not seem to be Observers for classes:

                                    • Importer* Exporter* TextureWriter
                                      Anyone think there's any need here?
                                      _

                                    I'm not here much anymore.

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

                                      Can't see any reason.
                                      It's the changes in the model that we need to be aware of. Importer, Exporter, and TextureWriter doesn't affect the model.
                                      ..well, the importer imports geometry, but the EntitiesObserver and DefinitionObserver and InstanceObserver should take care of that.

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

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

                                        _
                                        Sketchup::SelectionObserver

                                        This observer needs fixing! I would put this in the high priority group.

                                        Per ThomThom's Observer Review "State of Observers"
                                        http://forums.sketchucation.com/viewtopic.php?f=180&t=20676&start=0#p173630

                                        Sketchup::SelectionObserver

                                        .onSelectionAddednever triggers
                                        .onSelectionRemovednever triggers.

                                        Instead,
                                        .onSelectionBulkChangeand .onSelectionClearedalways triggers.
                                        _

                                        I'm not here much anymore.

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

                                          Why doesn't this observer have its own class documented as the other observers? http://code.google.com/intl/nb/apis/sketchup/docs/ourdoc/pages.html#add_frame_change_observer

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

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

                                            FrameChangeObserver

                                            @thomthom said:

                                            Why doesn't this observer have its own class documented as the other observers? http://code.google.com/intl/nb/apis/sketchup/docs/ourdoc/pages.html#add_frame_change_observer

                                            I would guess that this was a pre-version 6 observer implementation, added before they 'set a standard' in version 6 for true observer prototypes defined under the Sketchup module. And that when they did add those formally defined Observer classes in version 6, this one fell through the cracks.

                                            I checked the Object list... and there is no observer prototype named 'FrameChangeObserver' defined.
                                            I checked the Sketchup::Pages class for it's methods:

                                            pages.public_methods(false).sort
                                            ["[]", "add", "add_matchphoto_page", "add_observer", "count", "each", "erase", "parent", "remove_observer", "selected_page", "selected_page=", "show_frame_at", "size", "slideshow_time"]
                                            

                                            There are NO methods:

                                            • add_frame_change_observer* remove_frame_change_observer
                                              This information is OBSOLETE in the API, and should be removed.

                                            A coder (currently) would have to use the Sketchup::ViewObserver, onViewChanged method to detect when the change of view finished.

                                            IF there is a need (for the functionality of a FrameChangeObserver,) you might propose a Sketchup::AnimationObserver class that has this callback function and perhaps others?

                                            Jim might want to weigh in on this, as he has been working on Animation lately.

                                            @Jim : Questions:

                                            • Would an attached AnimationObserver be expected to slow the framerates?* Would an AnimationObserver even be necessary? (As really the Animation interface, is somewhat like an observer itself. The pause, resume and stop methods act like observer callbacks.)
                                              _

                                            I'm not here much anymore.

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

                                            Advertisement