Script help !
-
Hello !
Sorry for my poor englishI try to write a script which texturise a selection.
It works fine but when I save the drawing, all textures created with this script disappear....Can you help me, please ? I don't understand why this script don't rules ! And I'm not a ruby professionnal
Thank you !
Matt.
-
Bjr Matt,
Qu'est ce que le paramètre hcomp ? Il manque du code là-dedans... -
Salut Didier !!
Cool, un français me répond, et quel français
Bon pour tout te dire, je ne sais pas ce qu'est cette variable... J'ai pris ce code ici, et je l'ai mis à ma sauce !
Au passage, merci fredo6 !D'après ma piètre expérience dans le ruby, j'ai l'impression que ça ressemble à une fonction avec des arguments (désolé ce sont des termes du lisp !)
def process_seltxt(entities, hcomp)
Donc le nom du script et ses deux arguments. Par contre je ne sais pas à quoi sert hcomp. Et il n'a pas l'air de servir beaucoup ici. Lorsqu'on voit des trucs comme
def process_at_level(entities, hcomp) process_at_level model.active_entities, {}
def process_at_level(entities, hcomp)
dans le code initial, le deuxième argument hcomp ne sert pas. Ce doit être un filtre, c'est tout.Voilà. Mais là je parle à un pro, donc je parle un peu dans le vent !
Donc voilà, j'ai utilisé un code existant ! Et non, le code est en entier ici.Merci à toi !
A bientot.
Matt.PS : Vite fait, j'ai utilisé le code de fredo6 en ajoutant les faces à révéler... Plus pratique je trouve !
#************************************************************** #Révéler toutes les arêtes def unhide_all_edges model = Sketchup.active_model model.start_operation "Reveler toutes les aretes" process_at_level model.active_entities, {} model.commit_operation end def process_at_level(entities, hcomp) entities.each do |entity| case entity.typename when 'Group' process_at_level entity.entities, hcomp when 'ComponentInstance' edef = entity.definition next if hcomp[edef.to_s] hcomp[edef.to_s] = edef process_at_level edef.entities, hcomp when 'Edge' entity.hidden = false when 'Face' entity.hidden = false end end end
-
Re-Bjr,
Hi again,@unknownuser said:
j'ai l'impression que ça ressemble à une fonction avec des arguments
Exact, c'est la même chose.
Apparement hcomp était un "hash" de tous les composants du modèle. Vu que ça sert à rien dans ton cas, je l'ai enlevé. La sauvegarde des texturage marche (depuis le départ en plus...).
Entre nous, ça sert à quoi cette fonction puisqu'on peut faire la même chose sans script ?
A+Apparently hcomp was a hash table referencing all components in model or something like that. I removed it.
Code works now, including textures saving.
CU
-
@unknownuser said:
Entre nous, ça sert à quoi cette fonction puisqu'on peut faire la même chose sans script
?????????????????????
Merde !!!!
Mais comment ??? J'y suis jamais arrivé moi !!@unknownuser said:
La sauvegarde des texturage marche (depuis le départ en plus...).
Chez moi ça ne fonctionne toujours pas. je sélectionne les objets, la texture et je clique sur l'icone. Les faces deviennent texturées, mais lorsque je sauvegarde, tout se remet en blanc !
Comprends pas....
A bientot !
Matt. -
@unknownuser said:
Mais comment ??? J'y suis jamais arrivé moi !!
Baaahh,
Tu sélectionnes des trucs, tu mets un coup de pot de peinture et basta...@unknownuser said:
Chez moi ça ne fonctionne toujours pas.
Tu charges le script, tu fais une sélection, tu cliques sur l'icône (un icone à toi je suppose ?) ou tu tapes seltxt dans la console Ruby. Tu enregistres, tu sors et tu relances. Les textures sont là, c'est IMPOSSIBLE qu'elles n'y soient pas, vu que les données de texture sont enregistrées en temps réel avec entity.material = mat
Mais j'ai trouvé dans quel cas cela ne marche pas: quand tu sélectionnes un matériau dans la bibliothèque et qu'il n'a jamais été utilisé dans le modèle: la texture est appliquée, mais le matériau ne fais pas partie du modèle (tu peux vérifier dans la palette "matières", onglet "dans le modèle". Il faut donc le créer avec le script pour l'intégrer au modèle. Fastoche:
Sketchup.active_model.materials.add nom #(où nom est la variable contenant le matériau actif.
à mettre juste avant de peindre la sélection.
-
@didier bur said:
Qu'est ce que le paramètre hcomp ? Il manque du code là-dedans...
<hcomp> est effectivement une Hash Table qui sert a enregistrer les composants traitees. En effet, quand on parcourt la selection, on peut tomber sur plusieurs instances du meme composant, et en realite, on ne doit appliquer la modification de texture qu'une seule fois, pour la definition du composant, ce qui modifiera toutes ses instances.
Dans le cas present, cela n'a effectivement pas d'impact (au pire on change plusieurs fois la texture du meme composant!).
Pour le material, il faut utiliser l'objet <model.materials.current> et non son nom
Enfin, il me semble aussi que la ligne "model.commit_operation" est mal placee. Mieux vaut ecrire:
model.start_operation "Texturiser selection" process_seltxt model.selection, {}, active_material model.commit_operation
Ci-joint une version modifiee du script
Fredo
PS1: Didier a raison de dire que la fonction de texturage d'une selection existe en standard dans le user interface de Sketchup. Mais je remarque que ton script texture les deux cotes des faces, ce qui n'est effectivement pas disponible en standard
PS2: il me semble qu'en Sketchup Ruby, on ne peut pas creer un nouveau materiel qui est une copie d'un existant (materials.add cree un nouveau material vide). Si quelqu'un connait une methode, cela me rendra service!
PS3: Sorry for non-French speaking members!
-
Salut !
merci à vous deux pour les réponses !
I will try to translate my answers ! So sorry for my "french accent" ...@unknownuser said:
Tu sélectionnes des trucs, tu mets un coup de pot de peinture et basta...
Ah. Je croyais qu'une méthode de texturisation de sélection était disponible dans SU directement....
I believed that a texture selection technic was possible in SU without ruby....@unknownuser said:
la texture est appliquée, mais le matériau ne fais pas partie du modèle
Ok, je comprends mieux... Va falloir trouver un moyen, ou laisser tomber
Ok that's a big problem..@unknownuser said:
à mettre juste avant de peindre la sélection.
Ta méthode ne fonctionne pas, cela revient au même. Le matériau n'est pas enregistré.
Your technic doesn't work. The material is not recorded into the drawing.@fredo6
Merci pour le script des lignes cachées !! Il est bien utile pour comprendre un peu mieux le ruby pour des débutants comme moi ! Et merci pour le code modifié..
Thank you for the hidden edges script ! It's useful to understand a few ruby language for beginners like me !@unknownuser said:
Didier a raison de dire que la fonction de texturage d'une selection existe en standard dans le user interface de Sketchup.
Ah bon ?? Texturer une sélection ?? C'est exactement ce que je veux faire, mais je ne sais pas comment sans ruby ! C'est pour ça que j'ai voulu écrire un truc comme ça !
Après le texturage des deux faces est pratique mais si une technique existe en natif, je saurais bien m'en passer ! Peux tu me dire comment faire ?
Texturise a selection ??? This is exactly what I want to do, but I don't know why without Ruby !! Can you tell me how to do ?Ceci étant dit, le problème du matériau nouveau est un pavé, j'ai l'impression...
However, the non-recorded new material is a big problem... If someone can tell us how to do that ?Merci !
A bientot.
Matt.
Advertisement