# Group to component

**URL:** <https://forums.sketchup.com/t/group-to-component/100470>\
**Category:** Ruby API\
**Created:** [August 7, 2019, 7:22am UTC](https://forums.sketchup.com/t/group-to-component/100470 "2019-08-07T07:22:18Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![LOUZA](https://avatars.discourse-cdn.com/v4/letter/l/35a633/32.png) [@LOUZA](https://forums.sketchup.com/u/LOUZA)\
**Post date:** [August 7, 2019, 7:22am UTC](https://forums.sketchup.com/t/group-to-component/100470/1 "2019-08-07T07:22:18Z")

</div>

Hello everyone, please, I need to know how, after having transofrm a group by composing, give a specific name to this component newly created following this transformation (group to component) and to access it in order to give him some data techniques.

---

<div class="post-metadata">

**Author:** ![tt\_su](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/tt_su/32/17_2.png) [@tt\_su](https://forums.sketchup.com/u/tt_su)\
**Post date:** [August 7, 2019, 12:37pm UTC](https://forums.sketchup.com/t/group-to-component/100470/2 "2019-08-07T12:37:24Z")

</div>

I’m not sure I fully understand the whole question. (Or multiple questions?)  
Can you show a code snippet of what you have right now? And point out where you are stuck?

---

<div class="post-metadata">

**Author:** ![slbaumgartner](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/slbaumgartner/32/7302_2.png) [@slbaumgartner](https://forums.sketchup.com/u/slbaumgartner)\
**Post date:** [August 7, 2019, 12:48pm UTC](https://forums.sketchup.com/t/group-to-component/100470/3 "2019-08-07T12:48:08Z")

</div>

Group#to\_component converts an existing Group into a ComponentInstance and returns a reference to that ComponentInstance.

```ruby
instance = group.to_component

```

You can then use any of the methods of ComponentInstance to manipulate this new instance.

---

<div class="post-metadata">

**Author:** ![TIG](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/tig/32/198_2.png) [@TIG](https://forums.sketchup.com/u/TIG)\
**Post date:** [August 7, 2019, 1:22pm UTC](https://forums.sketchup.com/t/group-to-component/100470/4 "2019-08-07T13:22:27Z")

</div>

And of course, once you have a reference to this new thing:

```ruby
component_instance = group.to_component

```

you can get its definition using:

```ruby
definition = component_instance.definition

```

Then that can be used to [re]set its name etc, using methods like:

```ruby
definition.name = "My_Lovely_Component"
definition.description = "Made from My Lovely Group..."

```

etc…

---

<div class="post-metadata">

**Author:** ![DanRathbun](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/danrathbun/32/500_2.png) [@DanRathbun](https://forums.sketchup.com/u/DanRathbun)\
**Post date:** [August 7, 2019, 3:46pm UTC](https://forums.sketchup.com/t/group-to-component/100470/5 "2019-08-07T15:46:36Z")

</div>

… and the instance can have it’s own specific name that differs from it’s definition …

```ruby
instance.name = "The_Loveliest_of_All"

```

---

<div class="post-metadata">

**Author:** ![LOUZA](https://avatars.discourse-cdn.com/v4/letter/l/35a633/32.png) [@LOUZA](https://forums.sketchup.com/u/LOUZA)\
**Post date:** [August 8, 2019, 1:01am UTC](https://forums.sketchup.com/t/group-to-component/100470/6 "2019-08-08T01:01:19Z")

</div>

bonjour tout le monde  
je vous remercie énormément pour vos réactivités, la réponse de TIG m’a aidé beaucoup, en dehors de cela, j’ai une question toute simple, c’est quoi la différence concrète et physique entre instance et définition, et si vous aurez un exemple bien concret ça sera bien, je vous remercie d’avance

---

<div class="post-metadata">

**Author:** ![TIG](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/tig/32/198_2.png) [@TIG](https://forums.sketchup.com/u/TIG)\
**Post date:** [August 8, 2019, 11:45am UTC](https://forums.sketchup.com/t/group-to-component/100470/7 "2019-08-08T11:45:26Z")

</div>

An assembly of things in the model is a 'Definition '.  
There are three types of Definition - Images [a rectangular face with a material], Groups [which are ‘unique’ if you copy and edit it] and then Components.  
The Model’s Components are listed in the Components Browser [Groups are not].  
You can place Instances of these Component-Definitions in your model.  
If you edit any one Instance it affects all other Instances of that Definition.  
If you want to edit just one Instance, you use first use make\_unique on it, a copy of the Definition is made, with an incrementing suffix - e.g. “Compo#1”…  
Thus ‘Instances’ are the placed versions of a ‘Definition’.  
Note how Instances [and Groups] can be ‘nested’ inside the entities-collection of other Definitions, as desired.  
If you save the model’s definitions out to an external ‘Collection’, then these become separate SKP files.  
These can then be loaded into another model as desired.

* * *
Un assemblage de choses dans le modèle est une "définition". Il existe trois types de définition: les images [une face rectangulaire avec un matériau], les groupes [qui sont «uniques» si vous les copiez et les modifiez], puis les composants. Les composants du modèle sont répertoriés dans le navigateur de composants [les groupes ne sont pas]. Vous pouvez placer des instances de ces définitions de composants dans votre modèle. Si vous modifiez une instance, cela affecte toutes les autres instances de cette définition. Si vous voulez éditer une seule instance, vous utilisez d'abord make\_unique, une copie de la définition est créée, avec un suffixe incrémentant - par exemple. "Compo#1" ... Ainsi, les "instances" sont les versions placées d'une "définition". Notez que les instances [et les groupes] peuvent être «imbriqués» dans la collection d'entités d'autres définitions, comme vous le souhaitez. Si vous enregistrez les définitions du modèle dans une "Collection" externe, elles deviennent alors des fichiers SKP distincts. Ceux-ci peuvent ensuite être chargés dans un autre modèle à votre guise.

---

<div class="post-metadata">

**Author:** ![LOUZA](https://avatars.discourse-cdn.com/v4/letter/l/35a633/32.png) [@LOUZA](https://forums.sketchup.com/u/LOUZA)\
**Post date:** [August 11, 2019, 8:42pm UTC](https://forums.sketchup.com/t/group-to-component/100470/8 "2019-08-11T20:42:13Z")

</div>

Bonjour tout le monde et merci beaucoup,  
j’ai donné un nom ( vis) à un composant (definition.name = vis ) que j’ai créé, après j’ai essayé de lui donner un attribut avec la commande ( vis.set\_attribute “catalog”,“price”, 4.9 ) mais le console ruby m’affiche une erreur , le nom vis n’est pas reconnu par sketchup, alors je me demande est ce qu’on peut donner des attributs à un composant ?  
autre chose si je créé un groupe que je lui donne des attributs, en transformant le groupe en composant est ce que le composant créé hérite les attributs de groupe?  
Merci beaucoup

---

<div class="post-metadata">

**Author:** ![TIG](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/tig/32/198_2.png) [@TIG](https://forums.sketchup.com/u/TIG)\
**Post date:** [August 11, 2019, 9:14pm UTC](https://forums.sketchup.com/t/group-to-component/100470/9 "2019-08-11T21:14:33Z")

</div>

The syntax is incorrect.  
I assume you did NOT use proper quotation-marks and perhaps your typed code misses out some vital steps…  
It should be like this… assuming that `definition` is a proper reference…  
`definition.name = "vis"`  
Later on, to refer to that definition, you would NOT refer to its name ‘directly’, but use…  
`definition.set_attribute("catalog", "price", 4.9)`  
OR to refer to a particular definition ‘by name’ you need to use…  
`Sketchup.active_model.definitions["vis"].set_attribute("catalog", "price", 4.9)`  
[that is put simply, without trapping for a proper name match etc]

You seems to be jumbling up various things…

* * *

La syntaxe est incorrecte.  
Je suppose que vous n’avez PAS utilisé de guillemets corrects et peut-être que votre code saisi manque des étapes essentielles …  
Ce devrait être comme ça … en supposant que `definition` est une référence appropriée …  
`definition.name = "vis"`  
Plus tard, pour faire référence à cette définition, vous NE ferez PAS référence à son nom “directement”, mais utiliserez …  
`definition.set_attribute("catalog", "prix", 4.9)`  
OU pour faire référence à une définition particulière “par nom”, vous devez utiliser …  
`Sketchup.active_model.definitions["vis"].set_attribute("catalog", "prix", 4.9)`  
[qui est mis simplement, sans piégeage pour une correspondance de nom correcte, etc.]

Vous semblez être en train de brouiller diverses choses …  
🙄

---

<div class="post-metadata">

**Author:** ![LOUZA](https://avatars.discourse-cdn.com/v4/letter/l/35a633/32.png) [@LOUZA](https://forums.sketchup.com/u/LOUZA)\
**Post date:** [August 12, 2019, 8:54pm UTC](https://forums.sketchup.com/t/group-to-component/100470/10 "2019-08-12T20:54:45Z")

</div>

Merci beaucoup TIG  
c’est vrai y a plein de choses qui se mélangent dans ma tête parce que je maîtrise pas assez tout ce qui est “definition”, “component instance”, … alors j’essaye de comprendre à travers les exemples, et j’essaye plusieurs exemples afin de savoir ce qui marche et ce qui marche pas, et du temps en temps je passe sur le forum pour voir ce que les autres font comme solution , alors un autre exemple , si je fais Sketchup.active\_model.selection.definitions[“vis”].set\_attribute(“catalog”,“prix”,4.9) est ce que c’est correcte ?  
merci d’avance

---

<div class="post-metadata">

**Author:** ![TIG](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/tig/32/198_2.png) [@TIG](https://forums.sketchup.com/u/TIG)\
**Post date:** [August 12, 2019, 9:11pm UTC](https://forums.sketchup.com/t/group-to-component/100470/11 "2019-08-12T21:11:22Z")

</div>

`Sketchup.active_model.definitions["vis"].set_attribute("catalog", "prix" ,4.9)`

will work, but only IF there is an existing component-definition named ‘vis’

* * *
cela fonctionnera, mais seulement SI il existe une définition de composant existante nommée 'vis'
* * *
Why do you need to use 'selection'?
* * *
Pourquoi avez-vous besoin d'utiliser 'selection'?

??

---

<div class="post-metadata">

**Author:** ![LOUZA](https://avatars.discourse-cdn.com/v4/letter/l/35a633/32.png) [@LOUZA](https://forums.sketchup.com/u/LOUZA)\
**Post date:** [August 12, 2019, 9:12pm UTC](https://forums.sketchup.com/t/group-to-component/100470/12 "2019-08-12T21:12:44Z")

</div>

merci beaucoup TIG tu m’aide beaucoup , je suis reconnaissant merci

---

<div class="post-metadata">

**Author:** ![LOUZA](https://avatars.discourse-cdn.com/v4/letter/l/35a633/32.png) [@LOUZA](https://forums.sketchup.com/u/LOUZA)\
**Post date:** [August 13, 2019, 10:50pm UTC](https://forums.sketchup.com/t/group-to-component/100470/13 "2019-08-13T22:50:36Z")

</div>

Bonjour ,désolé ,j’ai pas fais attentions à tes questions, au fait j’ai besoin de sélection pour la pure et simple raison que si je dessine plusieurs objets sur le même dessin, je peux donner des attributs seulement à l’objet sélectionné, or si j’utilise “Sketchup.active\_model”, cela va donner les attributs à tous les objets se trouvant dans le dessin

---

<div class="post-metadata">

**Author:** ![TIG](https://sea2.discourse-cdn.com/sketchup/user_avatar/forums.sketchup.com/tig/32/198_2.png) [@TIG](https://forums.sketchup.com/u/TIG)\
**Post date:** [August 14, 2019, 11:41am UTC](https://forums.sketchup.com/t/group-to-component/100470/14 "2019-08-14T11:41:59Z")

</div>

My earlier code [_Mon code précédent_]

```ruby
Sketchup.active_model.definitions["vis"].set_attribute("catalog", "prix", 4.9)

```

Searches the current definitions in the model, and if one is named “vis” it gives its attribute dictionary ‘catalog’ the key ‘prix’ set to 4.9  
[_Recherche dans les définitions actuelles du modèle. Si l’une d’elles s’appelle “vis”, le dictionnaire d’attributs “catalogue” contient la clé “prix” définie sur 4.9._]

If you want to work on a selection you need to filter the selection to find just that component-instance with the component-definition name match, something like… [_Si vous souhaitez travailler sur une sélection, vous devez filtrer la sélection pour rechercher uniquement cette instance de composant avec le nom de définition de composant correspondant, quelque chose comme …_]

```ruby
Sketchup.active_model.selection.grep(Sketchup::ComponentInstance).find_all{|e|
  e.definition.name=="vis" }[0].definition.set_attribute("catalog", "prix", 4.9)

```

Note that you are currently applying the ‘prix’ to the definition NOT the instance.  
To me, it would seem more logical to process the definitions list rather that prise a definition from a selected instance ?  
Also if the ‘vis’ doesn’t exists you’ll get an error !  
[_Notez que vous appliquez actuellement le “prix” à la définition et non à l’instance.  
Pour moi, il semblerait plus logique de traiter la liste de définitions plutôt que de récupérer une définition d’une instance sélectionnée?  
De plus, si le “vis” n’existe pas, vous obtiendrez une erreur!_]
