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

    Help Understanding Classes and Class objects

    Scheduled Pinned Locked Moved Developers' Forum
    30 Posts 4 Posters 276 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.
    • TIGT Offline
      TIG Moderator
      last edited by

      Can you also add the equivalent 'puts' just after the
      st_ep = EndPulley.new(@group, @st_point)

      puts 'st_tp details...' puts st_tp puts st_tp.class puts st_tp.name puts 'END'

      so we can see what the first part does...

      TIG

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

        Sorry ... I got busy and did not get back to this thread,

        I was going to continue the discussion on why wrapper classes are extremely problematic for Sketchup::Drawingelement subclasses. (One issue is on Mac multiple models could be open, but the API does not yet have a good way to track them, and we know of some bugs on the PC, that causes issues.)


        Anyway... the alternative you REALLY should be using is to create a Sketchup::ComponentDefinition for your pully and conveyor, and then place instances of these (rather than Groups.)

        The definition's instances collection will keep track of them for you.

        The model's DefintionList collection will keep track of your definition(s) for each model that they are inserted into.

        When a model is opened, your plugin can search through it's DefintionList to find those definitions that are "known" to the plugin. And then grab an array of their instances, and iterate it to get references.

        I'm not here much anymore.

        1 Reply Last reply Reply Quote 0
        • P Offline
          pmagans
          last edited by

          Dan you are correct. Adding the .group gave me access to the "group" objects that were created.

          As for my thought process I am not sure that it is valid so let me describe my thoughts.

          I don't want to code "like" things so I assumed that using classes would allow me to inherit class attributes things without having to copy a bunch of code it multiple places. For example classes would be:

          1. FUNCTIONAL AREAS
            [list:11tc2ay1]1. CONVEYOR
          • CONVEYOR_COMPONENTS

          • END_PULLEY

          • DRIVE

          • INTERMEDIATE_BED

          • PAN_GUARD

          • BEARINGS

          • ETC.

          • BUILDING_MODSETC.[/*β“‚11tc2ay1][/listβ­•11tc2ay1]Later I could write Customer specific code for each of the classes and inherit all of the functionality that I wrote in the "General" Classes

          One customer's end_pulley may contain different bearings, pulleys, profiles etc. Also there are many types of end pulleys. That being said they do have some similarities especially attribute definitions, layer structure, basic functionality.

          Am I on the right track or am I way off the rails?

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

            @TIG πŸŽ‰

            Simply put:

            A class constructor returns an instance of IT's class.

            CONVEYOR::EndPully.new() returns an instance of CONVEYOR::EndPully not an instance Sketchup::Group

            This is one of the MAJOR drawbacks of a wrapper class, you have to write wrapper methods for all the methods of the wrapped object that you wish to access "as if" the wrapper "were" the object itself.

            There are some ruby tricks to get a list of only the API methods, and define wrapper methods via an eval loop. But .. it's still can get complicated in other nitty-gritty ways.

            I just do not recommend it.

            I'm not here much anymore.

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

              Dynamic Component definitions can give you a lot of flexibility. A style of pully, were the diameter and width are settable via the Component Options dialog.

              Your code classes and modules... are geometry creators, but not the actual model objects themselves.

              You can also inherit (share) code functionality via mixin module libraries.

              Given a mixin module named BasicPully ...

              module FancyPully
              
                include BasicPully
              
                # now overrride inherited methods if desired
              
                # now add additional methods if desired
              
              end
              

              .. and later ...

              module NiftyPully
              
                include FancyPully
              
                # now overrride inherited methods if desired
              
                # now add additional methods if desired
              
              end
              

              I'm not here much anymore.

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

                β˜€ πŸ˜’ doh!

                TIG

                1 Reply Last reply Reply Quote 0
                • P Offline
                  pmagans
                  last edited by

                  I will check into the mixin module approach also the dynamic components. Are dynamic components "create-able" through Ruby code or only through the Sketchup interface?

                  The only info/tutorial I could find was:
                  http://sketchucation.com/forums/viewtopic.php?f=180&t=17888&p=145120&hilit=dynamic+component+tutorial#p145120

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

                    Both.

                    But of course the coding means is not documented because the Free license users are not supposed to do it. (... or at least use a wizard interface.)

                    A lot has been written about them.

                    I'm not here much anymore.

                    1 Reply Last reply Reply Quote 0
                    • P Offline
                      pmagans
                      last edited by

                      @dan rathbun said:

                      But of course the coding means is not documented because the Free license users are not supposed to do it. (... or at least use a wizard interface.)

                      That's a bummer. I like the concept of dynamic tools for locking up variables and documenting the components, but I hate the user interface! It would just take me too long through traditional means to create a workable library. And of course if I wanted to change something I would have to do it in multiple places. I will do a more active search for creating/modifying dynamic components through Ruby. So far what I have found has not been that helpful besides holding/setting attributes. Any tips on where to start?
                      Thanks!

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

                        In SU Pro.. open the "Component Attributes" wizard.

                        Switch to the "Functions" pane.

                        Click on the "more >>" link, ... a bowser window will open to the DC online reference.

                        Bookmark that page.

                        Notice also the links in the left navigation column.

                        Happy Reading.

                        Basically scripting them is first understanding how to create and access Attribute Dictionary objects.

                        I'm not here much anymore.

                        1 Reply Last reply Reply Quote 0
                        • P Offline
                          pmagans
                          last edited by

                          @dan rathbun said:

                          Bookmark that page.

                          Done, thanks for the link.

                          I remember doing the tutorials when DC's first came out but have forgotton the majority of what I learned so I guess I will be spending some time there first.

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

                          Advertisement