How to add multiple groups into one group?
-
Hi guys I know how to add bunch of groups in to one groups inside the one method(). but, I don't know how to add if I have bunch of method() groups in to one groups? anyone have any idea????? here is my sample sudo code
<span class="syntaxdefault"><br /><br />require </span><span class="syntaxstring">'Sketchup.rb'<br /><br /></span><span class="syntaxdefault">class House</span><span class="syntaxkeyword">()<br /><br /></span><span class="syntaxdefault"> def initialize</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault"> model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities<br /> group </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_group<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> group</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br /> <br /> prompt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">[</span><span class="syntaxstring">"gets info"</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault"> num_of_doors </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 3<br /> num_of _windows </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 5<br /> num_of_roof_panel </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 8<br /> <br /> while num_of_roof panel </span><span class="syntaxkeyword">></span><span class="syntaxdefault"> 0<br /> draw_roof</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">pass some roof values</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> num_of_roof_panel </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> num_of_roof_panel </span><span class="syntaxkeyword">-</span><span class="syntaxdefault"> 1<br /> end<br /> <br /> while num_of_doors </span><span class="syntaxkeyword">></span><span class="syntaxdefault"> 0<br /> draw_doors</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">pass some door values</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> num_of_doors </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> num_of_doors </span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1<br /> end<br /> <br /> while num_of _windows </span><span class="syntaxkeyword">></span><span class="syntaxdefault"> 0<br /> draw_windows</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">pass some window values</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> num_of _windows </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> num_of _windows </span><span class="syntaxkeyword">-</span><span class="syntaxdefault">1<br /> end<br /> <br /> end<br /><br /><br /> def draw_roof</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">some values</span><span class="syntaxkeyword">)<br /><br /></span><span class="syntaxdefault"> model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities<br /> group_roof </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_group<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> group_roof</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br /> </span><span class="syntaxstring">" do some drawing jobs"<br /><br /></span><span class="syntaxdefault"> end<br /> <br /> def draw_doors</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">some values</span><span class="syntaxkeyword">)<br /><br /></span><span class="syntaxdefault"> model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities<br /> group_doors </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_group<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> group_doors</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br /> </span><span class="syntaxstring">" do some drawing jobs"<br /></span><span class="syntaxdefault"> end<br /> <br /> def draw_doors</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">some values</span><span class="syntaxkeyword">)<br /><br /></span><span class="syntaxdefault"> model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities<br /> group_windows </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_group<br /> ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> group_windows</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br /> </span><span class="syntaxstring">" do some drawing jobs"<br /><br /></span><span class="syntaxdefault"> end<br /> <br />end</span>
-
Try
container_group.entities.add_instance(group.entities.parent, tr)
where
tr
is the transformation wanted for thegroup
[you specify the point/rotation etc] OR if you are trying to 'move' it into the newcontainer_group
use:tr=group.transformation
If it's a 'move' then use
group.erase!
after theadd_
to tidy up ? -
Hi TIG I need to keep small groups also. I want to do "group of groups" that way, I think, I can add attributes to individual group. isn't it?
thanks for the fast response -
Could you tell anyone what I am doing wrong on this code it does not work here is the code
<span class="syntaxdefault"><br />require </span><span class="syntaxstring">'Sketchup.rb'<br /></span><span class="syntaxdefault">class Cube<br /><br />def initialize</span><span class="syntaxkeyword">()<br /></span><span class="syntaxdefault">list </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">definitions<br />comp_def </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> list</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add </span><span class="syntaxstring">"CUBE BOX"<br /></span><span class="syntaxdefault">comp_def</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">description </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"This is a simple cube component"<br /></span><span class="syntaxdefault">ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> comp_def</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities<br />face </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">24</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">24</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">face</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pushpull 16<br /><br />end<br />end<br /><br />if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">not $Cube_menu_loaded</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> <br /> UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Tools"</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Cube_BOX"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> Cube</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">new </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> <br /> <br /> $Cube_menu_loaded </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> true<br />end<br /></span>
-
It would help if you described what "doesn't work" - because running the code it doesn't produce any errors.
However, did you expect the component definition you added to be visible in the model?
If so then you must add an instance, usingEntities.add_instance
http://www.sketchup.com/intl/en/developer/docs/ourdoc/entities.php#add_instance -
Other notes:
require 'Sketchup.rb'
The require is case sensitive - even though the file is the same if someone usesrequire 'sketchup.rb'
and you later userequire 'Sketchup.rb'
then the file will be loaded twice.
Lower case is the norm forrequire 'sketchup.rb'
.And it's a strange pattern you have there - creating a class to execute a single operation. Normally you will create a class for for instance a Tool or when you have an object to represent - other a module is better suited.
It's also recommended not to use globals - as you might run into conflicts with other plugins.
More information here: http://www.thomthom.net/thoughts/2012/01/golden-rules-of-sketchup-plugin-development/
-
I change to require 'sketchup.rb'. still nothing happening. It's suppose to draw a cube in sketcup model I don't see anything happening
-
@nithi09 said:
I change to require 'sketchup.rb'. still nothing happening. It's suppose to draw a cube in sketcup model I don't see anything happening
See my first reply - about addin an instance of the definition you created.
(Also, when you modify the model you should wrap everything up in model.start_operation and model.commit_operation so it can be undone in one step.)
-
I changed my code still not working here is the code after I changed
<span class="syntaxdefault"><br />require </span><span class="syntaxstring">'sketchup.rb'<br /><br /></span><span class="syntaxdefault">def cube<br />list </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">definitions<br />comp_def </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> list</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add </span><span class="syntaxstring">"CUBE BOX"<br /></span><span class="syntaxdefault">comp_def</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">description </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"This is a simple cube component"<br /></span><span class="syntaxdefault">ents </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> comp_def</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_instance<br />face </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ents</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_face </span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">24</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">24</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">],[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">12</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault">face</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">pushpull 16<br /><br />end<br /><br /><br />if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">not $Cube_menu_loaded</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> <br /> UI</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">menu</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Tools"</span><span class="syntaxkeyword">).</span><span class="syntaxdefault">add_item</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"Cube_BOX"</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> cube </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> <br /> <br /> $Cube_menu_loaded </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> true<br />end<br /></span>
-
Your code only does half the job.
It adds a 'box' [24x12x16"] to the model's definitions.
If you want to add an instance of that definition to the model you need to do more steps...For example...
defn=list[-1]
to get the last added definition
then to add an instance setup:
tr=Geom::Tranfsormation.new(ORIGIN)
OR other transformations like different points or rotations etc.
and use
instance=Sketchup.active_model.active_entities.add_instance(defn, tr)
NOW you have one instance of the cube component place at the 'ORIGIN' [0,0,0] or anywhere else you specify in 'tr'...
-
this is different question.I want add color when OnClick. I try like this
group.set_attribute('dynamic_attributes', 'onclick',"Set("Material","Red","Blue","Green")")
but gives an error How do I do this
thanks -
The best way to ensure you correctly 'phrase' it is to add the working onclick attribute manually to a DC [let's say it's reference is 'group'], then use:
att = group.get_attribute('dynamic_attributes', 'onclick', "???")
This will returnatt
as???
if it's not set, ORatt
as the attribute string, and this is in a form that you know works.
Then reuse that in your 'set'
group.set_attribute('dynamic_attributes', 'onclick', att) to see if the syntax is right...BUT note this: even if the format is right, the way you are using nested " quote-marks WILL cause failures... USING
**"**Set("Material","Red","Blue","Green")**"**
WILL CAUSE AN ERROR - unless you either 'escape' the internal " with a , OR more simply you use a pair of ' to enclose the whole string...
i.e.
"Set(**\**"Material**\**",**\**"Red**\**",**\**"Blue**\**",**\**"Green**\**")"
or
**'**Set("Material","Red","Blue","Green")**'**
You must use a pair of ' to enclose ", or a pair of " to enclose any ' in a string... OR 'escape' the nested quote-marks as " or '
-
@nithi09 said:
but gives an error How do I do this
It really helps if you include the error message when posting questions related to errors.
-
Thanks TIG it's working when I use 'Set("Material","Red","Blue","Green")' but only problem I have to manually change to default color then onClick working fine How do I set to default color.
-
material = nil ?
-
Thanks Jolran It's working now
-
Is it possible to change ItemCode according to the onclick color change if it is how do I can do?
-
Hope this explains my requirement a little better.
I have a sunroom comprised of many groups: corner post, floor channel, door, window etc.
I want the user to select their sunroom color by clicking the model. In order to do this I need to gather all the sunroom groups into a parent group where I will use the onClick function to change the Material attribute. I expect the Material change will automatically cascade to the sub-groups but if not I can easily set the Material of the sub-groups to something like=Parent!Material
The question is how do I wrap all of my groups into this parent group?
Thom Thom thank you for the advice regarding start opertaion, but I do not need undo for this model, the user is starting with a blank canvas and will simply delete top level group if they have to start over
Advertisement