Tracé de ligne à partir de coordonnées dans Excel
-
Eternel débutant, je cherche à dessiner un champ de vecteur représentant des flux d'air dans une salle informatique... vaste sujet, n'est-ce pas.
Je suis donc à la recherche d'un script tracant une ligne à partir d'un point, sachant que l'ensembles des points (X1,Y1,Z1,X2,Y2,Z2) sont dans un fichier Excel.J'ai bien un debut avec fr_box.rb, mais je n'ai pas la fonction "Ligne" qui va,
ni la fonction lire un fichier Excel.D'avance merci de votre aide.
-
Je rectifie un peu car pour les points, il y a CLOUD.RB de Didier Bur
Ecole Nationale Supérieure d'Architecture de Nancy (F).
Reste le problème de tracer un trait ou un vecteur. -
Bonjour,
Exemple:
p1=Geom::Point3d.new(1,2,3)
p2=Geom::Point3d.new(4,5,6)
Sketchup.active_model.entities.add_line(p1,p2)Ca c'est pour tracer une ligne entre 2 points dont on a les coordonnées.
Pour ce qui est de lire le contenu d'un fichier, c'est une autre (assez simple) histoire.
Le conseil dans ton cas c'est d'enregistrer le fichier Excel en CSV (forme texte, séparateur point-virgule), sinon bonjour les dégats en binaire.
Ensuite il faut l'ouvrir depuis le script, et le lire pour convertir le contenu des ex-cellules en points 3D.
Si tu es en panne fais-moi signe.
A+ -
Yep Yep Yep !!
trés pédagogue Mrs.Bur, j'ai juste mis tes trois lignes dans fr_box.rb et
Je n'ose pas mettre à disposition mon "vector.rb" sur http://www.crai.archi.fr/RubyLibraryDepot/Ruby/fr_RUBY_Library_Depot.html
ma première création en ruby: restons modeste.
Y-a-t-il moyen de choisir le couleur du trait ? Je crois qu'il y a une fonction style quelque part.
D'autre part, aurais-tu un exemple pour la lecture d'un .csv ?
Enfin où se procurer un catalogue de fonctions ruby ?
tu ne pas tout ça de ton , quel est ton secret Oh grand ! -
Bonjour,
@unknownuser said:
Y-a-t-il moyen de choisir le couleur du trait ? Je crois qu'il y a une fonction style quelque part.
Non, la classe "Edge" n'a pas de méthode "style". Un style est de toute façon une option qui s'applique à tout le modèle à la fois (dans une scène donnée), il est donc logique de ne pas pouvoir avoir des style de trait différents pour chaque ligne.
-
Excuses-moi d'insister pour l'exemple de lecture de fichier .csv ,
Aurais-tu un exemple de code ruby ?D'avance merci
-
Minute, j'étais en train de le faire !
@unknownuser said:
où se procurer un catalogue de fonctions ruby ?
Le mieux c'est d'aller sur LE site de Ruby:
http://www.ruby-doc.org/docs/ProgrammingRuby/html/builtins.html
Pour l'API de Sketchup, la doc est TRES mal faite, pleines d'erreurs, pleines de trous, bref c'est nul. Le problème c'est qu'il n'existe rien d'autre.
Le secret, c'est "essai-erreur", enfin presque.
-
Merci beaucoup pour ton aide.
Je vais m'attacher maintenant à créer mon champ de vecteurs
et je t'enoie une photo. Promis ! -
@unknownuser said:
où se procurer un catalogue de fonctions ruby ?
Perso j'utilise plutot ça, dans LE même site...
Totalement d'ac avec toi Didier, ce site est dément !@unknownuser said:
Le secret, c'est "essai-erreur", enfin presque.
Bien intéressant ce petit post ! Merci ! -
@unknownuser said:
ce site est dément
Normal, c'est le site qui héberge et diffuse Ruby.
Mais j'aime bien aussi ça:
http://www.noobkit.com/show/ruby/ruby/ruby-core.html
et ça:
http://pleac.sourceforge.net/pleac_ruby/
http://www.zenspider.com/Languages/Ruby/QuickRef.html#14
http://www.rubyfrance.org/documentations (en français pour une fois) -
Resultat de "importer_fichier_vecteurs"
Au premier essai : Error de lecture sur le fichier E:\GDCB\Modélisation_Simulation_Thermique\Modélisation_aero\vecteurs.csv
ben oui, ruby n'admet pas les caractère accentué dans un fichier. OK !Mais au deuxième essai, cela ne fonctionnait pas tout de même,
j'ai du modifier un peu ton texte:%(#0000FF)[tableau_lignes.each do |ligne| coordonees=ligne.split(";") #la methode split sépare la ligne en morceaux séparés par des points-virgule et renvoie un tableau (de chaines de caractères) # Ca donne pour la premiere ligne: ["1", "2", "3", "4", "5", "6\n"] # Il reste à transformer ces caractères en chiffres: x1=ligne[0].to_f #les indices de tableau commencent à zéro et non à 1 y1=ligne[1].to_f z1=ligne[2].to_f x2=ligne[3].to_f y2=ligne[4].to_f z2=ligne[5].to_f # N.B.: la methode to_f prend une chaine de caractères et la transforme en nombre, si elle peut # On crée les objets point3d correspondants: p1=Geom::Point3d.new(x1,y1,z1) p2=Geom::Point3d.new(x2,y2,z2)]
par le texte suivant:
%(#0000FF)[tableau_lignes = IO.readlines(fichier) #Ca donne: ["1;2;3;4;5;6\n", "7;8;9;10;11;12\n", "13;14;15;16;17;18\n"] # les \n sont des caractères de fin de ligne # On parcourt le tableau ligne par ligne, et on éclate chaque ligne en un tableau de 3 valeurs X,Y et Z tableau_lignes.each do |ligne| coordonees=ligne.split(";") #la methode split sépare la ligne en morceaux séparés par des points-virgule et renvoie un tableau (de chaines de caractères) # Ca donne pour la premiere ligne: ["1", "2", "3", "4", "5", "6\n"] # Il reste à transformer ces caractères en chiffres: x1=(coordonees[0].to_f)/2.54 #les indices de tableau commencent à zéro et non à 1 y1=(coordonees[1].to_f)/2.54 z1=(coordonees[2].to_f)/2.54 x2=(coordonees[3].to_f)/2.54 y2=(coordonees[4].to_f)/2.54 z2=(coordonees[5].to_f)/2.54 # N.B.: la methode to_f prend une chaine de caractères et la transforme en nombre, si elle peut # On crée les objets point3d correspondants: p1=Geom::Point3d.new(x1,y1,z1) p2=Geom::Point3d.new(x2,y2,z2)]
Alors evidement le 2.54 c'est un petit coup de
ça fonctionne pas mal, j'y retourne imédiatement !!!
Qu'en penses-tu ? j'ai pourtant mis mes préférences en : Centimètre (système métrique)-3D
et quand je rentre les chiffres à la main en précisant ou non "cm" ça marche
J'ai essayer de mettre "570cm" au lieu de "570" dans le fichier csv, mais bernique
En tout cas merci beaucoup, tu es vraiment toujours là ou il faut et quand il faut. -
Chose promise...
Voici une première représentation du flux de pression dans une ébauche de salle informatique.
Reste encore un peu à creuser coté loi de propagation, mais ça me plait déjà bien.
Grand Merci
Ah si je pouvais aussi mettre en couleur les traits suivant chaud ou froid,
là ça serait top
Il n'y a vraiment pas un truc pour ça dans Skechtup ???
-
C'est avec ces couillonnades des différentes unités qu'on fait s'écraser sur Mars des programmes à plusieurs millions de dollars! (125)
Y a des oreilles qui ont dû siffler -
Utilises des calques differents en fonction de "chaud" ou "froid", mets une matière différente sur chacun des calques, et affiches test traits en couleur "matière".
Pour le coup de pouce, c'est une question de transformation de type: on passe d'une chaine de caractère à un chiffre en réel, qui pour SU est exprimé par défaut en pouces.
Donc il faut rajouter un ".cm" en fin de conversion, par exemple: "100".to_f.cm renvoie 39.3700787401575 ce qui fait bien 100 exprimé en cm. -
incollable
par contre je ne comprends pas le : "affiches tes traits en couleur "matière"."
dans la phrase :
Utilises des calques differents en fonction de "chaud" ou "froid", mets une matière différente sur chacun des calques,
et affiches tes traits en couleur "matière".Et puis en fait je ne comprends rien: "mettre une matière sur un calque" me parait un barbarisme,
j'arrive à changer la couleur d'un calque (encore que sa couleur ne m'apporte pas grand chose.)
Evidement cela vient de ces fameux concepts "objet", "attribut", etc,
que je n'appréhende pas qui parle plutot Fortran IV, Cobol et autres languages de 1° génération.
Je viens de parcourir toute la doc SU6_UserGuide_Fr.pdf.. rien pour m'éclairer.
Bon aller c'est week-end, je vais m' un peu. -
@unknownuser said:
par contre je ne comprends pas le : "affiches tes traits en couleur "matière"."
Fenêtres -> Styles, puis:
C'est la liste déroulante en bas qui est importanteDonc tu pourrais créer 3 calques admettons, "chaud, "tiede" et "froid", leur affecter une couleur respectivement rouge, orange et bleue.
Chaque vecteur lu est mis par le script sur un calque en fonction de sa température (il faut donc avoir la donnée dans le fichier CSV), et le tour est joué.Pour mettre un objet quelconque sur un calque, il faut avoir son identificateur et appliquer la méthode "layer" à cet identificateur.
Dans ton cas ça donnerait:ligne_sketchup=Sketchup.active_model.entities.add_line(p1,p2) if temperature < 10 ligne_sketchup.layer = "froid" elsif temperature < 20 and temperature >= 10 ligne_sketchup.layer = "tiede" else ligne_sketchup.layer = "chaud" end
Vite fait sur l'image ci-dessous: chaque cube est sur un calque qui lui-même à une couleur différente, l'affichage des arêtes est en mode "matière", et l'affichage des objets est en mode "couleur par calque".
Advertisement