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

    How to apply attributes through code? and how do they work?

    Scheduled Pinned Locked Moved Developers' Forum
    21 Posts 4 Posters 567 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.
    • M Offline
      meeta
      last edited by

      entity1 = entities[0] status = entity1.set_attribute "Dimensions", "Length", "#{@h} mm" status = entity1.set_attribute "Dimensions", "Width", "#{@b} mm" status = entity1.set_attribute "Dimensions", "Effective Length", "#{@d} mm"

      Hi I have an entity which is a beam. It has the dimensions @h, @b and @d. How Can I make it appear onto my group when I right-click and click show attributes.

      I don't have pro, but I use at the university. does having the free version have anything to do with why its not working?

      Meet A

      1 Reply Last reply Reply Quote 0
      • Chris FullmerC Offline
        Chris Fullmer
        last edited by

        "show attributes" is not listed on my right click menu. Is that something you want to make? Or is it a plugin that you have installed?

        Chris

        Lately you've been tan, suspicious for the winter.
        All my Plugins I've written

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

          I believe he has the Attribute Manager plugin installed: http://code.google.com/p/sketchupattributemanager/

          That adds such a context menu,

          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

            Google's Attribs.rb loads Attributes into the context-menu BUT it simply reports /manipulates the attributes associated with the selected object.

            Please rephrase your question as it is unclear what you are trying to achieve.
            You have a beam that has length/height/width as attributes.
            It should be a component_instance/group ?
            What do you want to do with it by right-clicking ?

            TIG

            1 Reply Last reply Reply Quote 0
            • M Offline
              meeta
              last edited by

              I am sorry about that, With so many plugins installed, I lost track of what is really sketchup and what is the plugin. Let me rephrase:::

              Say I create a box, with the help of a plugin and group it. I want to be able to see information about the group, by selecting 'Show attributes'. But I want the attributes to be made automatic. i.e. I want see, that it is a box, it has height h, width w, etc. How can I do this?

              Meet A

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

                You pretty much have it there in your first post. To add attributes to an entity you use .set_attribute.

                As your plugin creates the group with the box, you attach the data you want to that group.

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

                1 Reply Last reply Reply Quote 0
                • M Offline
                  meeta
                  last edited by

                  Yes it all goes well without any errors to debug. But When I right-click and click 'Show Attributes' there is nothing there but this in the dialog box:::

                  %(#8080FF)[**Add Category...

                  You can create/delete categories of Attributes and add/edit and delete individual attributes within a category.
                  To get started, click on the Add Category... link above.

                  Tip: You can create standard categories by clicking here.

                  Add an attribute Delete Category Cancel Accept**]

                  Is there another way of access the attributes I applied? And say I save this box, will the attributes be saved too?

                  Meet A

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

                    I sounds like you haven't added the attributes to the correct entity then.

                    I take it the first post included parts of the code you used - question is: where does the entities[0] variable come from?

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

                    1 Reply Last reply Reply Quote 0
                    • M Offline
                      meeta
                      last edited by

                      I think the different entities are stored in an array format right? I copied the exact thing from the Google API.
                      [url]
                      http://code.google.com/apis/sketchup/docs/ourdoc/entity.html#set_attribute[/url]

                      Meet A

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

                        I really sound like you are attaching it to some random entity. Without seeing the rest of the code I can't tell you specifically what you're doing wrong - but I'm pretty sure that entities[0] does not refer to the group you want to add the attributes to.
                        I ask you again: where are you getting the entities variable from? What entities collection does it refer to?

                        When you create a group for your box. You're using the .add_group method somewhere. That method returns a reference to the group you created. This is the entity you need to attach the attribute data to.

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

                        1 Reply Last reply Reply Quote 0
                        • M Offline
                          meeta
                          last edited by

                          here is the code i think its fine..

                          
                          def draw_beam
                          		
                          		model = Sketchup.active_model
                          		entities = model.entities
                          		group = entities.add_group
                          		entities = group.entities
                          	
                          			pt = []
                          			pt[0] = [0, 0, 0]
                          			pt[1] = [@b, 0, 0]
                          			pt[2] = [@b, 0, @h]
                          			pt[3] = [0, 0, @h]
                          	   
                          		c_section = entities.add_face pt
                          		 
                          		@length = -@length if( c_section.normal.dot(Y_AXIS) < 0 )
                          		
                          		c_section.pushpull @length
                          
                          	entity1 = entities[1]
                          	status = entity1.set_attribute "Dimensions", "Length", "#{@h} mm"
                          	status = entity1.set_attribute "Dimensions", "Width", "#{@b} mm"
                          	status = entity1.set_attribute "Dimensions", "Effective Length", "#{@d} mm"
                              end
                          

                          Meet A

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

                            "Well, there you're problem!" 😉

                            You are assigning the attributes to a random entity inside your group.

                            group = entities.add_group
                            Here: you have your group assigned the the variable group. This is the value you want to attach your attributes to.

                            p.s.

                            
                            entities = model.entities
                            group = entities.add_group
                            
                            

                            This will always create the group at the top level of the model. If the user opens a group or component when this method is run, the user might expect the group to be created in this context - but your code will not do that. model.active_entities always refer to the current context.

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

                            1 Reply Last reply Reply Quote 0
                            • M Offline
                              meeta
                              last edited by

                              Ahh there is my mistake! I love finding mistakes..

                              I thought group is a method and not a variable!

                              Meet A

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

                                .add_group is a method. But it returns a variable - reference to the newly created group. http://code.google.com/intl/nb/apis/sketchup/docs/ourdoc/entities.html#add_group

                                You created the variable group and assigned it to the return value of .add_group.

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

                                1 Reply Last reply Reply Quote 0
                                • M Offline
                                  meeta
                                  last edited by

                                  @beam = Sketchup.active_model.selection[0] bbox = @beam.bounds point1 = bbox.max point2 = bbox.min b = (point1[0] - point2[0]).abs.to_mm.to_i length = (point1[1] - point2[1]).abs.to_mm.to_i h = (point1[2] - point2[2]).abs.to_mm.to_i @beam.set_attribute "Beam Information", "1. Type of Concrete", "#{@cstrength}"

                                  Ok one problem now, I have selected active_model as either ComponentInstance or Group. When its a group I can apply the attributes with no problem! But when its a component I am not able to add the information. Is there a way I can add all this information to it? and Is there a way to apply the same attributes to all the ComponentInstances in the active_model?

                                  Meet A

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

                                    @meeta said:

                                    @beam = Sketchup.active_model.selection[0] bbox = @beam.bounds point1 = bbox.max point2 = bbox.min b = (point1[0] - point2[0]).abs.to_mm.to_i length = (point1[1] - point2[1]).abs.to_mm.to_i h = (point1[2] - point2[2]).abs.to_mm.to_i @beam.set_attribute "Beam Information", "1. Type of Concrete", "#{@cstrength}"

                                    Ok one problem now, I have selected active_model as either ComponentInstance or Group. When its a group I can apply the attributes with no problem! But when its a component I am not able to add the information. Is there a way I can add all this information to it? and Is there a way to apply the same attributes to all the ComponentInstances in the active_model?

                                    active_model IS the model NEVER anything else like a ComponentInstance or a Group.
                                    You must specify either the ComponentInstance or the Group, and then set_attributes for them.
                                    If you want to set_attributes for them, you must first specify them clearly...
                                    IF the first thing in a selection is a Group you can apply attributes to it.
                                    IF the first thing in a selection is a ComponentInstance you can apply attributes to it.
                                    [You can even get the instance.definition of it and set_attributes for that]
                                    I see no problems... except that you a not selecting the right type of thing to set_attributes to ?

                                    IF @beam = Sketchup.active_model.selection[0] IS the beam then it works... BUT is it the beam first thing in the selection ? You don't tell us enough to see what the @beam = Sketchup.active_model.selection[0] might be ! 😒

                                    TIG

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

                                      apply the attibs to the definition.

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

                                      1 Reply Last reply Reply Quote 0
                                      • M Offline
                                        meeta
                                        last edited by

                                        what exactly is a component definition?

                                        Meet A

                                        1 Reply Last reply Reply Quote 0
                                        • M Offline
                                          meeta
                                          last edited by

                                          	if (Sketchup.active_model.selection[0].typename == "Group" or Sketchup.active_model.selection[0].typename == "ComponentDefinition")
                                          			menu.add_separator
                                          			menu.add_item("Beam Analyser") {
                                          	                b = Beam.new
                                          			b.bbox
                                          			b.prompts
                                          .
                                          .
                                          .
                                          .
                                          .
                                          .
                                          
                                          def bbox 
                                          		@beam = Sketchup.active_model.selection[0]
                                          		bbox = @beam.bounds
                                          		point1 = bbox.max
                                          		point2 = bbox.min
                                          		b = (point1[0] - point2[0]).abs.to_mm.to_i
                                          		length = (point1[1] - point2[1]).abs.to_mm.to_i
                                          		h = (point1[2] - point2[2]).abs.to_mm.to_i	
                                          end	
                                          

                                          does this make it more clear? If I choose a group, there is not problem. But if I choose a componentinstance, The attributes are applied without any problems. Unfortunately its not being applied to @beam.

                                          Meet A

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

                                            Would it be that your use of or instead of || makes this lines not evaluate correctly?
                                            if (Sketchup.active_model.selection[0].typename == "Group" or Sketchup.active_model.selection[0].typename == "ComponentDefinition")

                                            or has a lower precedence than ||
                                            http://www.techotopia.com/index.php/Ruby_Operator_Precedence

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

                                            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