Group to component

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.

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?

1 Like

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

instance = group.to_component

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

1 Like

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

component_instance = group.to_component

you can get its definition using:

definition = component_instance.definition

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

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

etc


2 Likes


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


instance.name = "The_Loveliest_of_All"
1 Like

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

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.

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

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 

:roll_eyes:

1 Like

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

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'?

??

1 Like

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

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

My earlier code [Mon code précédent]

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 
]

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!
]