Identifier entité active
-
Bonjour à tous
A la recherche du Graal, je butine à gauche à droite. Comme tout débutant qui se respecte!
La difficulté, après avoir compris le principe, est d’intégré un code à sa propre réalisation.
En effet, si le code contient entities [n] sur le modèle. Cette entité n'a pas forcément le même index sur la nouvelle réalisation.J'ai trouvé un début de solution sur ce topic http://forums.sketchucation.com/viewtopic.php?f=180&t=9849&start=0&hilit=active_model.entities . Je fais N-1, N-2 ... sur la console Ruby. Réalisable sur un petit modèle, mais devient une galère sur un sujet plus élaboré.
Existe il un plugin ou autre solution qui affiche l'index de l'entité active?
Je ne suis pas encore assez calé pour ce genre de réalisation
Merci de votre attention
Cordialement
Laurent -
By "active entities" I think you mean "selected entities" ?
ss=Sketchup.active_model.selection
gives you the current selection and
ssa=ss.to_a
makes a "snapshot" of it as an array of entities.
ss0=ssa[0]
is the first element in the array - this might not be the first entity selected; but if there's only one entity select that will be it...
Then you can do something with it, like this...
puts ss0.class
to print the type of thing it is in the Console.
ss0.erase!
to erase it.
ss0.layer=Sketchup.active_model.layers("NewLayer")
to put it onto a layer named "NewLayer".
ss0.hidden=true
to hide it...
Par "entités actif", je pense que vous voulez "entités sélectionnées" ?
ss=Sketchup.active_model.selection
vous donne la sélection actuelle et
ssa=ss.to_a
vous donne un "instantané" de celui-ci comme un tableau d'entités.
ss0=ssa[0]
est le premier élément du tableau - pourrait-ce pas la première entité sélectionnée; s'il ya seulement une entité but de sélectionner celui qui l'a...
Ensuite, vous faites quelque chose avec elle, comme ceci...
puts ss0.class
pour imprimer sa type outre dans la console.
ss0.erase!
pour l'effacer.
ss0.layer=Sketchup.active_model.layers("NewLayer")
pourriez il place sur layer nommé "NewLayer".
ss0.hidden=true
pour le cacher...BUT if you mean the last added entity then the code you found, basically -
Sketchup.active_model.entities.to_a[-1]
- should give you a reference to it...MAIS si vous voulez dire la dernière entité ajouté, alors, vous avez trouvé le code, fond -
Sketchup.active_model.entities.to_a[-1]
- devrait vous donner une référence à elle... -
Merci TIG
Quand il y a la barrière de la langue. Il reste les exemples.
http://sketchup.google.com/3dwarehouse/details?mid=5ba1ae7b0ddf79e61e92c96cacf18623&prevstart=0
Je cherche à faire réagir la sphère comme le cercle au sol
Pour cela j'ai trouvé le script sous la caméra (deuxième box)
Sketchup.active_model.entities[11].material=nil
$detected = false
else
Sketchup.active_model.entities[11].material="red"Je veux donc remplacer 11 dans le script
Si j'applique
model = Sketchup.active_model
#Sketchup::Model:0x98da9c4
sel = model.active_entities
#Sketchup::Entities:0x9874a5c
ss = model.selection
#Sketchup::Selection:0x966390c
n = sel.length - 1
11
ss.add(sel[10])
1
ss.add(sel[8])
0
ss.add(sel[9])
1
Je fini par sélectionner le bon élément [9]ss=Sketchup.active_model.selection
#Sketchup::Selection:0x966390c
ssa=ss.to_a
[#Sketchup::Group:0x96737d0]
ss0=ssa[0]
#Sketchup::Group:0x96737d0
puts ss0.class
Sketchup::Group
nilBy "active entities" I think you mean "selected entities" ? Yes
Je souhaite trouver cet index (numéro de la formule)plus rapidement en "selected entities"
A+
Laurent -
It is virtually impossible to keep track of an entity by index in the order it appears in
model.entities
, even in a session it will vary as entities are deleted and added etc.
It's even worse when a model is reopened. It's entities will almost certainly not be ordered in any useful way.If you must keep track of a specific entity give it a unique attribute which will exists across sessions and can be found later... For example,
entity.set_attribute("IDdeLaurent", "tid", Time.now.to_f)
Later on useentity.get_attribute("IDdeLaurent", "tid", nil)
.
You iterate the entities until you find the one you want with the matching 'tid'...........
*C'est pratiquement impossible de garder une trace de l'indice dans le périmètre année par jeu de mots qu'il apparaît dansmodel.entities
, même dans une session les entités changés quand elles sont supprimés et etc ajouté.
C'est encore plus mauvais quand a le modèle est rouvert. Ses entités presque ne sera certainement pas ordonnées de quelque manière utiles.Si vous devez maintenir une entité spécifique puis donnez-lui un attribut unique, qui existe entre les sessions et peut être retrouvé plus tard... Par exemple,
entity.set_attribute("IDdeLaurent", "tid", Time.now.to_f)
Plus tard, vous sur l'utilisationentity.get_attribute("IDdeLaurent", "tid", nil)
.
Vous parcourir les entités jusqu'à ce que vous trouviez celui que vous voulez avec "tid" l'appariement...........*
Advertisement