Ton bloc notes
Derniers sujets
» [ SKETCHUP objets ] tiroir cuisine
par vick Hier à 16:48
» [ AUTRES LOGICIELS ] LOGICIEL OFFERT
par jerryvento Ven 17 Mai 2024 - 8:36
» [ LUMION ] 2024 - Importation FBX
par Shakna Jeu 16 Mai 2024 - 10:00
» [ SKETCHUP tutos ] dessiner un dodécaèdre sans plugins
par tenrev Mer 15 Mai 2024 - 14:22
» [ SKETCHUP plugins ] Plugin SOLID INSPECTOR - Nested Instances - Demande de clarification
par tenrev Mer 15 Mai 2024 - 14:13
» [ LUMION ] 2024 - Importation FBX
par Shakna Mer 15 Mai 2024 - 12:16
» [ LUMION ] Lumion 2024
par Shakna Mer 15 Mai 2024 - 11:21
» [ TWINMOTION ] Appliquer un decal avec les outils spacing et area de Twinmotion 2024
par Gaspard Hauser Mar 14 Mai 2024 - 23:12
» [ TWINMOTION ] Nouvelle verion 2024
par Gaspard Hauser Mer 8 Mai 2024 - 10:27
» [ CHAINE TWITCH ] Pas simple de se faire un public
par tenrev Mar 7 Mai 2024 - 19:46
» [ INTELLIGENCE ARTIFICIELLE ] quelques video IA
par tenrev Mar 7 Mai 2024 - 9:47
» [ CHAINE TWITCH ] les replay de mes live sur Twitch
par tenrev Mar 7 Mai 2024 - 9:22
» [ SKETCHUP généralité ] Interpolation progressive entre deux formes le long d'un tracé
par JDD Lun 6 Mai 2024 - 15:19
» [ ARCHICAD ] Création de lucarne en 3D
par VertiKal Lun 6 Mai 2024 - 14:17
» [ SKETCHUP composants dynamiques ]
par simjoubert Lun 6 Mai 2024 - 10:39
» [ SKETCHUP plugins ]
par TIQUETM Dim 5 Mai 2024 - 19:39
» [ ARCHICAD ] raccourci clavier
par Taz Jeu 2 Mai 2024 - 16:04
» [ SKETCHUP Layout ] Layout 2024 probléme de Style
par tenrev Jeu 2 Mai 2024 - 11:58
» [ MATOS INFORM. ] LICENCES ARCHICAD
par yannickniort Mar 30 Avr 2024 - 8:29
» [ SKETCHUP plugins ] Universal Importer
par Samuel Tallet Lun 29 Avr 2024 - 19:18
» [ CHAINE TWITCH ] c'est reparti - pour quelques live
par tenrev Lun 29 Avr 2024 - 14:49
» [ SKETCHUP objets ]
par vick Mar 23 Avr 2024 - 20:52
» [ SKETCHUP vray ]
par furax49 Mar 23 Avr 2024 - 19:52
» [ ARTLANTIS ] Ca donne envie !
par loic46 Dim 21 Avr 2024 - 22:56
» [ SKETCHUP généralité ] sortie officielle de sketchup 2024
par tenrev Ven 19 Avr 2024 - 14:24
» [ ARTLANTIS ] Problème origine se déplace
par loic46 Jeu 18 Avr 2024 - 22:28
» [ SKETCHUP plugins ] Vms_up
par Rascal Jeu 18 Avr 2024 - 14:41
» [ SKETCHUP objets ] aquarium
par JDD Lun 15 Avr 2024 - 22:20
» [ ARCHICAD ] Zone - Menu déroulant
par Christophe Fortineau Jeu 11 Avr 2024 - 19:49
» [ SKETCHUP généralité ] Servimg Premium pour tous les membres
par tenrev Jeu 11 Avr 2024 - 14:31
» [ SKETCHUP plugins ] Move it
par TF3 Mer 10 Avr 2024 - 10:23
» [ SKETCHUP plugins ] curic 2D export
par tenrev Mar 9 Avr 2024 - 17:41
» [ SKETCHUP plugins ] profil builder 4 est disponible
par furax49 Mar 9 Avr 2024 - 17:00
» [ ARCHICAD ] Torsion sur poteaux
par Ti Pack Mar 9 Avr 2024 - 14:59
» [ PRESENTATION ]
par tenrev Lun 8 Avr 2024 - 8:22
par vick Hier à 16:48
» [ AUTRES LOGICIELS ] LOGICIEL OFFERT
par jerryvento Ven 17 Mai 2024 - 8:36
» [ LUMION ] 2024 - Importation FBX
par Shakna Jeu 16 Mai 2024 - 10:00
» [ SKETCHUP tutos ] dessiner un dodécaèdre sans plugins
par tenrev Mer 15 Mai 2024 - 14:22
» [ SKETCHUP plugins ] Plugin SOLID INSPECTOR - Nested Instances - Demande de clarification
par tenrev Mer 15 Mai 2024 - 14:13
» [ LUMION ] 2024 - Importation FBX
par Shakna Mer 15 Mai 2024 - 12:16
» [ LUMION ] Lumion 2024
par Shakna Mer 15 Mai 2024 - 11:21
» [ TWINMOTION ] Appliquer un decal avec les outils spacing et area de Twinmotion 2024
par Gaspard Hauser Mar 14 Mai 2024 - 23:12
» [ TWINMOTION ] Nouvelle verion 2024
par Gaspard Hauser Mer 8 Mai 2024 - 10:27
» [ CHAINE TWITCH ] Pas simple de se faire un public
par tenrev Mar 7 Mai 2024 - 19:46
» [ INTELLIGENCE ARTIFICIELLE ] quelques video IA
par tenrev Mar 7 Mai 2024 - 9:47
» [ CHAINE TWITCH ] les replay de mes live sur Twitch
par tenrev Mar 7 Mai 2024 - 9:22
» [ SKETCHUP généralité ] Interpolation progressive entre deux formes le long d'un tracé
par JDD Lun 6 Mai 2024 - 15:19
» [ ARCHICAD ] Création de lucarne en 3D
par VertiKal Lun 6 Mai 2024 - 14:17
» [ SKETCHUP composants dynamiques ]
par simjoubert Lun 6 Mai 2024 - 10:39
» [ SKETCHUP plugins ]
par TIQUETM Dim 5 Mai 2024 - 19:39
» [ ARCHICAD ] raccourci clavier
par Taz Jeu 2 Mai 2024 - 16:04
» [ SKETCHUP Layout ] Layout 2024 probléme de Style
par tenrev Jeu 2 Mai 2024 - 11:58
» [ MATOS INFORM. ] LICENCES ARCHICAD
par yannickniort Mar 30 Avr 2024 - 8:29
» [ SKETCHUP plugins ] Universal Importer
par Samuel Tallet Lun 29 Avr 2024 - 19:18
» [ CHAINE TWITCH ] c'est reparti - pour quelques live
par tenrev Lun 29 Avr 2024 - 14:49
» [ SKETCHUP objets ]
par vick Mar 23 Avr 2024 - 20:52
» [ SKETCHUP vray ]
par furax49 Mar 23 Avr 2024 - 19:52
» [ ARTLANTIS ] Ca donne envie !
par loic46 Dim 21 Avr 2024 - 22:56
» [ SKETCHUP généralité ] sortie officielle de sketchup 2024
par tenrev Ven 19 Avr 2024 - 14:24
» [ ARTLANTIS ] Problème origine se déplace
par loic46 Jeu 18 Avr 2024 - 22:28
» [ SKETCHUP plugins ] Vms_up
par Rascal Jeu 18 Avr 2024 - 14:41
» [ SKETCHUP objets ] aquarium
par JDD Lun 15 Avr 2024 - 22:20
» [ ARCHICAD ] Zone - Menu déroulant
par Christophe Fortineau Jeu 11 Avr 2024 - 19:49
» [ SKETCHUP généralité ] Servimg Premium pour tous les membres
par tenrev Jeu 11 Avr 2024 - 14:31
» [ SKETCHUP plugins ] Move it
par TF3 Mer 10 Avr 2024 - 10:23
» [ SKETCHUP plugins ] curic 2D export
par tenrev Mar 9 Avr 2024 - 17:41
» [ SKETCHUP plugins ] profil builder 4 est disponible
par furax49 Mar 9 Avr 2024 - 17:00
» [ ARCHICAD ] Torsion sur poteaux
par Ti Pack Mar 9 Avr 2024 - 14:59
» [ PRESENTATION ]
par tenrev Lun 8 Avr 2024 - 8:22
formulaire/diaporama
chaine sketchup.tv
Serveur Discord
[ Ruby ] Automatisation sketchup grace à excel
Page 2 sur 2 • Partagez
Page 2 sur 2 • 1, 2
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Ça marche, je regarde tout ça demain et je reviens vers toi
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Salut Samuel, j'ai regardé ton code et tout est ok, la lecture du fichier excel fonctionne et la fonction déplacer et cloner aussi.
Désolé j'ai mis un peu de temps à répondre mais je voulais bien tout regardée et être sur d'avoir bien tout compris.
Tu as rendu le code super clair avec tes annotations, je t'en remercie.
Je poste un lien ici qu m'a également bien aidé à comprendre : https://ruby-doc.org/docs/beginner-fr/xhtml/ch04.html
Voilà il me reste juste à modifier un peu le code pour cloner et déplacer plusieurs composant. D'ailleurs, lorsque la définition d'une fonction comporte une variable "component" est-ce que je peux utiliser entities[0] ou entities[1] lorsque j'appelle cette fonction pour effectuer ces opérations seulement sur le 1er composant ou sur le 2éme ?
Par exemple
Désolé j'ai mis un peu de temps à répondre mais je voulais bien tout regardée et être sur d'avoir bien tout compris.
Tu as rendu le code super clair avec tes annotations, je t'en remercie.
Je poste un lien ici qu m'a également bien aidé à comprendre : https://ruby-doc.org/docs/beginner-fr/xhtml/ch04.html
Voilà il me reste juste à modifier un peu le code pour cloner et déplacer plusieurs composant. D'ailleurs, lorsque la définition d'une fonction comporte une variable "component" est-ce que je peux utiliser entities[0] ou entities[1] lorsque j'appelle cette fonction pour effectuer ces opérations seulement sur le 1er composant ou sur le 2éme ?
Par exemple
- Code:
move_and_clone(entities[0],3)
- Samuel TalletV.I.P.
- Date d'inscription : 15/04/2018
Nombre de messages : 870
Points : 2456
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web
mgsvinc a écrit:[...] j'ai regardé ton code et tout est ok, la lecture du fichier excel fonctionne et la fonction déplacer et cloner aussi.
C'est une bonne nouvelle !
mgsvinc a écrit:
Tu as rendu le code super clair avec tes annotations, je t'en remercie.
Ravi de t'avoir aidé !
mgsvinc a écrit:
[...] lorsque la définition d'une fonction comporte une variable "component" est-ce que je peux utiliser entities[0] ou entities[1] lorsque j'appelle cette fonction pour effectuer ces opérations seulement sur le 1er composant ou sur le 2éme ?
Oui, à partir du moment où tu passes en paramètre un objet de type Sketchup::ComponentInstance.
mgsvinc a écrit:
Par exemple
- Code:
move_and_clone(entities[0],3)
Ajoute un paramètre `component` dans la définition de la fonction et supprime la boucle `each`...
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Ok je vais faire ça.
Bonne soirée Samuel, encore merci
Bonne soirée Samuel, encore merci
[quote="mgsvinc"]
Je poste un lien ici qu m'a également bien aidé à comprendre : https://ruby-doc.org/docs/beginner-fr/xhtml/ch04.html[/code]
oky , il fait déja partie des liens postés depuis pas mal de temps sur cette page
https://www.biblio3d.com/t11077-sketchup-liens-utiles-pour-debuter-en-ruby
Je poste un lien ici qu m'a également bien aidé à comprendre : https://ruby-doc.org/docs/beginner-fr/xhtml/ch04.html[/code]
oky , il fait déja partie des liens postés depuis pas mal de temps sur cette page
https://www.biblio3d.com/t11077-sketchup-liens-utiles-pour-debuter-en-ruby
-------------------------------------------------------------------------------------------------------------------------
je ne sais pas grand chose , mais le peu que je sache , je le partage
1 PC fixe avec proc Rizen 9 3950X 32 threads - cg nvidia geforce RTX3080 - 64 go de ram DDssd 1To
1 PC portable Lenovo écran 16''|win11 64 bits| i7 Quad core|ram 32go| CG GFORCE RTX3070 avec 8go
1 casque VR Occulus Rift - 1 vieux PC portable Dell sous Linux Ubuntu 18 1 vieux pc portable HP sous chromebook
Modélisation : Sketchup - Rhino - Pconplanner Rendu: Enscape - Keyshot - Unreal Engine - Artlantis - Twinmotion Autres: Photoshop - Illustrator - Indesign - Vidéostudio - After Effect - Première
- DomixV.I.P.
- Date d'inscription : 13/02/2014
Nombre de messages : 894
Points : 1789
Localisation : Proche Dijon
Emploi : Dessinateur
Oula, ça donne mal à la tête votre truc.
Je reste admiratif des personnes qui aiment coder, on dirai que vous vous êtes bien trouvé.
Je reste admiratif des personnes qui aiment coder, on dirai que vous vous êtes bien trouvé.
-------------------------------------------------------------------------------------------------------------------------
Mes objets --> https://3dwarehouse.sketchup.com/user.html?id=u79250929-4d52-4b4a-8c4a-2109f9976ca8
Domix a écrit:Je reste admiratif des personnes qui aiment coder
+1 je suis admiratif également
-------------------------------------------------------------------------------------------------------------------------
je ne sais pas grand chose , mais le peu que je sache , je le partage
1 PC fixe avec proc Rizen 9 3950X 32 threads - cg nvidia geforce RTX3080 - 64 go de ram DDssd 1To
1 PC portable Lenovo écran 16''|win11 64 bits| i7 Quad core|ram 32go| CG GFORCE RTX3070 avec 8go
1 casque VR Occulus Rift - 1 vieux PC portable Dell sous Linux Ubuntu 18 1 vieux pc portable HP sous chromebook
Modélisation : Sketchup - Rhino - Pconplanner Rendu: Enscape - Keyshot - Unreal Engine - Artlantis - Twinmotion Autres: Photoshop - Illustrator - Indesign - Vidéostudio - After Effect - Première
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
tenrev a écrit:mgsvinc a écrit:
Je poste un lien ici qu m'a également bien aidé à comprendre : https://ruby-doc.org/docs/beginner-fr/xhtml/ch04.html[/code]
oky , il fait déja partie des liens postés depuis pas mal de temps sur cette page
https://www.biblio3d.com/t11077-sketchup-liens-utiles-pour-debuter-en-ruby
Ah ok, c'est peut-être là que je l'avais trouvé alors j'ai un dossier avec pas mal de marques pages, donc pour me souvenir d'où ils viennent...
mgsvinc a écrit:Ah ok, c'est peut-être là que je l'avais trouvé alors
certainement , c'est juste pour rendre à césar , ce qui a été posté par césar
-------------------------------------------------------------------------------------------------------------------------
je ne sais pas grand chose , mais le peu que je sache , je le partage
1 PC fixe avec proc Rizen 9 3950X 32 threads - cg nvidia geforce RTX3080 - 64 go de ram DDssd 1To
1 PC portable Lenovo écran 16''|win11 64 bits| i7 Quad core|ram 32go| CG GFORCE RTX3070 avec 8go
1 casque VR Occulus Rift - 1 vieux PC portable Dell sous Linux Ubuntu 18 1 vieux pc portable HP sous chromebook
Modélisation : Sketchup - Rhino - Pconplanner Rendu: Enscape - Keyshot - Unreal Engine - Artlantis - Twinmotion Autres: Photoshop - Illustrator - Indesign - Vidéostudio - After Effect - Première
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Bonsoir Samuel, je reviens une nouvelle fois vers toi car je n'arrive toujours pas à faire marcher le code sur des composants individuels.
J'ai testé pas mal de trucs, mais impossible de sélectionner le composant auquel je désire appliquer les fonction.
Voilà comment j'ai modifier le code :
et ensuite je tente d'appeler cette fonction ainsi :
Saurais tu où se situe mon erreur ?
J'ai testé pas mal de trucs, mais impossible de sélectionner le composant auquel je désire appliquer les fonction.
Voilà comment j'ai modifier le code :
- Code:
def move_and_clone(component, how_many)
model = Sketchup.active_model
entities = model.entities
definitions1 = model.definitions[0] #définition du 1er composant
definitions2 = model.definitions[1] #définition du 2éme composant
Sketchup.active_model.start_operation('Déplacer et cloner', true)
@component = component
how_many.times do
move_component(clone_component(component), @length)
end
Sketchup.active_model.commit_operation
# Note : Cette opération est annulable.
end
et ensuite je tente d'appeler cette fonction ainsi :
- Code:
ExcelComponents.new('test').move_and_clone(entities[0],3)
Saurais tu où se situe mon erreur ?
- Samuel TalletV.I.P.
- Date d'inscription : 15/04/2018
Nombre de messages : 870
Points : 2456
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web
Erreur : Tu utilises une variable (`entities`) qui est définie dans un autre scope (celui de ta méthode `move_and_clone`). De plus, tu n'as pas besoin de `@component` : il y a déjà `component`.
Ce code de "lancement" devrait fonctionner. Tiens-moi au courant !
- Code:
class ExcelComponents
# ...
# Déplace et clone un composant SketchUp.
# en tenant compte de la longueur lue dans le fichier Excel.
#
# @param [Sketchup::ComponentInstance] component Composant.
# @param [Numeric] how_many Combien de fois ? Par défaut : 1.
#
# @return [Boolean] `true` en cas de succès, sinon `false`.
def move_and_clone(component, how_many)
Sketchup.active_model.start_operation('Déplacer et cloner', true)
how_many.times do
move_component(clone_component(component), @length)
end
Sketchup.active_model.commit_operation
# Note : Cette opération est annulable.
end
end
Ce code de "lancement" devrait fonctionner. Tiens-moi au courant !
- Code:
ExcelComponents.new('test').move_and_clone(Sketchup.active_model.entities[0], 3)
tu nous feras un petite présentation et un making of de ton plugin j'espère ?
bon courage a+
bon courage a+
-------------------------------------------------------------------------------------------------------------------------
je ne sais pas grand chose , mais le peu que je sache , je le partage
1 PC fixe avec proc Rizen 9 3950X 32 threads - cg nvidia geforce RTX3080 - 64 go de ram DDssd 1To
1 PC portable Lenovo écran 16''|win11 64 bits| i7 Quad core|ram 32go| CG GFORCE RTX3070 avec 8go
1 casque VR Occulus Rift - 1 vieux PC portable Dell sous Linux Ubuntu 18 1 vieux pc portable HP sous chromebook
Modélisation : Sketchup - Rhino - Pconplanner Rendu: Enscape - Keyshot - Unreal Engine - Artlantis - Twinmotion Autres: Photoshop - Illustrator - Indesign - Vidéostudio - After Effect - Première
- Samuel TalletV.I.P.
- Date d'inscription : 15/04/2018
Nombre de messages : 870
Points : 2456
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web
tenrev a écrit:tu nous feras un petite présentation et un making of de ton plugin j'espère ?
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
C'est bon la première modification que j'avais testé m'avais donné la même définition de fonction que toi, c'est lors de l'appel de la fonction que je pêchais.
J'entrai :
au lieu de :
En revanche, désormais toutes les copies du composant sont déplacé au même endroit et se superpose (auparavant lorsque j'appelai tous les composants, les copies s’espaçaient correctement entre-elles).
Tu pense que je doit testé un autre itérateur ? ou le problème vient d'autre part ?
J'entrai :
- Code:
ExcelComponents.new('test').move_and_clone(entities[0], 3)
au lieu de :
- Code:
ExcelComponents.new('test').move_and_clone(Sketchup.active_model.entities[0], 3)
En revanche, désormais toutes les copies du composant sont déplacé au même endroit et se superpose (auparavant lorsque j'appelai tous les composants, les copies s’espaçaient correctement entre-elles).
Tu pense que je doit testé un autre itérateur ? ou le problème vient d'autre part ?
- Samuel TalletV.I.P.
- Date d'inscription : 15/04/2018
Nombre de messages : 870
Points : 2456
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web
Cela a changé la logique du code. Je te conseille de revenir à une version précédente et de réadapter.
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Bonjour , je reviens avec des nouvelles de mon code, le voici :
afin d'appeler ces fonction j'appelle une fonction situé dans un autre fichier ruby, le voici :
Les problèmes que je n'ai pas encore réussi à résoudre sont les suivants :
_ J'ai du créer plusieurs fonctions length_from_excel_file ce qui alourdi considérablement le code car le fichier excel est ouvert à chaque fois qu'une valeur doit être obtenu dans celui ci. J'avais écrit une fonction length_from_excel_file qui récupérait toutes les données, mais lorsque je les exploitées dans la fonction move_and_clone toutes les copies étaient déplacé au même endroit et ne comprend pas pourquoi.
_Dans la fonction move_and_clone, il y a une valeur @length4, cette valeur correspond au nombre de copies du composant et sers donc de limite à l'itérateur i. Le problème est que ça ne marche pas (j'ai un message d'erreur à cette ligne). J'avais également essayer cette fonction sous cette forme :
mais ici j'ai besoin que le how_many soit pris dans le fichier excel, j'appelais donc cette fonction avec ceci :
Hélas ça n'a pas marché non-plus, car cette valeur @length4 ne peut pas être appelé dans une fonction (ici visu) qui ne se trouve pas dans la classe class ExcelComponents. Je souhaite utilisé cette fonction visu, ainsi lorsque je veux utiliser la totalité du code, j'ai juste à taper visu dans la console ruby de sketchup.
Voilà si quelqu'un a des idées pour me faire avancer je suis preneur. Samuel si tu passes par-là
- Code:
# Import des dépendances.
require 'win32ole'
# TODO: Décrire les tenants et aboutissants de ce script.
class ExcelComponents
# Construit un objet de type `ExcelComponents`.
#
# @param [String] excel_file_path Chemin vers un fichier Excel.
#
# @example
#
# excel_components = ExcelComponents.new(
# 'C:\\Users\\vince\\Desktop\\fichiersrb\\dbvisuclient'
# )
#
# excel_components.move_and_clone(2)
def initialize(excel_file_path)
raise ArgumentError, '`excel_file_path` doit être une chaîne de caractères'\
unless excel_file_path.is_a?(String)
@excel_file_path = excel_file_path
begin
@length1 = length1_from_excel_file #Permet d'indiquer que la valeur va etre trouvé dans la fonction length1_from_excel_file
@length2 = length2_from_excel_file
@length3 = length3_from_excel_file
@length4 = length4_from_excel_file
rescue StandardError => _error
UI.messagebox("Impossible d'obtenir la longueur depuis le fichier Excel.")
# Attention : En cas d'erreur, une longueur par défaut est assignée (1 m).
@length1 = 1.m
@length2 = 1.m
@length3 = 1.m
@length4 = 1
end
end
# Obtient une longueur en centimètres depuis le fichier Excel.
#
# @return [Length] Une longueur convertie de cm vers inch.
def length1_from_excel_file
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.Workbooks.Open(@excel_file_path)
worksheet = workbook.Worksheets(1)
length1 = worksheet.Range('A2').value
#length2 = worksheet.Range('B2').value
#length3 = worksheet.Range('C2').value
#length4 = worksheet.Range('D2').value
excel.Quit
length1.to_i.cm
#length2.to_i.cm
#length3.to_i.cm
#length4.to_i.cm
end
def length2_from_excel_file
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.Workbooks.Open(@excel_file_path)
worksheet = workbook.Worksheets(1)
#length1 = worksheet.Range('A2').value
length2 = worksheet.Range('B2').value
#length3 = worksheet.Range('C2').value
#length4 = worksheet.Range('D2').value
excel.Quit
#length1.to_i.cm
length2.to_i.cm
#length3.to_i.cm
#length4.to_i.cm
end
def length3_from_excel_file
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.Workbooks.Open(@excel_file_path)
worksheet = workbook.Worksheets(1)
#length1 = worksheet.Range('A2').value
#length2 = worksheet.Range('B2').value
length3 = worksheet.Range('C2').value
#length4 = worksheet.Range('D2').value
excel.Quit
#length1.to_i.cm
#length2.to_i.cm
length3.to_i.cm
#length4.to_i.cm
end
def length4_from_excel_file
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.Workbooks.Open(@excel_file_path)
worksheet = workbook.Worksheets(1)
#length1 = worksheet.Range('A2').value
#length2 = worksheet.Range('B2').value
#length3 = worksheet.Range('C2').value
length4 = worksheet.Range('D2').value
excel.Quit
end
# Clone un composant SketchUp.
#
# @note Cette fonction est réutilisable dans d'autres scripts.
#
# @param [Sketchup::ComponentInstance] component Composant original.
#
# @return [Sketchup::ComponentInstance] Un composant-clone.
def clone_component(component)
Sketchup.active_model.entities.add_instance(component.definition, component.transformation)
# La transformation du composant-clone est relative à l'original.
end
# Déplace un composant SketchUp à une distance X.
#
# @note Cette fonction est réutilisable dans d'autres scripts.
#
# @param [Sketchup::ComponentInstance] component Composant.
# @param [Length] x_distance Distance dans l'axe X.
#
# @return [Boolean] `true` en cas de succès, `false` autrement.
def move_component(component, x_distance, y_distance, z_distance)
transformation_values = Geom::Transformation.new.to_a
transformation_values[-4] = x_distance #déplacement axe rouge
transformation_values[-3] = y_distance #déplacement axe vert
transformation_values[-2] = z_distance #déplacement axe vert
Sketchup.active_model.entities.transform_entities(
Geom::Transformation.new(transformation_values),
component)
end
# Déplace un composant SketchUp.
def move_component_1(component)
transformation_values = Geom::Transformation.new.to_a
transformation_values[-4] = @length1 #déplacement axe rouge
transformation_values[-3] = @length2 #déplacement axe vert
transformation_values[-2] = @length3 #déplacement axe vert
Sketchup.active_model.entities.transform_entities(
Geom::Transformation.new(transformation_values),
component)
end
# Déplace et clone un composant SketchUp.
# en tenant compte de la longueur lue dans le fichier Excel.
#
# @param [Sketchup::ComponentInstance] component Composant.
# @param [Numeric] how_many Combien de fois ? Par défaut : 1.
#
# @return [Boolean] `true` en cas de succès, sinon `false`.
def move_and_clone(component)
Sketchup.active_model.start_operation('Déplacer et cloner', true)
for i in 1..@length4 # permet de faire varier la distance de création des clones
move_component(clone_component(component), (i * @length1), 0, 0)
end
Sketchup.active_model.commit_operation
# Note : Cette opération est annulable.
end
end
afin d'appeler ces fonction j'appelle une fonction situé dans un autre fichier ruby, le voici :
- Code:
def visu
ExcelComponents.new('C:\Users\vince\Desktop\fichiersrb\dbvisuclient').move_component_1(Sketchup.active_model.entities[2])
ExcelComponents.new('C:\Users\vince\Desktop\fichiersrb\dbvisuclient').move_and_clone(Sketchup.active_model.entities[2])
end
Les problèmes que je n'ai pas encore réussi à résoudre sont les suivants :
_ J'ai du créer plusieurs fonctions length_from_excel_file ce qui alourdi considérablement le code car le fichier excel est ouvert à chaque fois qu'une valeur doit être obtenu dans celui ci. J'avais écrit une fonction length_from_excel_file qui récupérait toutes les données, mais lorsque je les exploitées dans la fonction move_and_clone toutes les copies étaient déplacé au même endroit et ne comprend pas pourquoi.
_Dans la fonction move_and_clone, il y a une valeur @length4, cette valeur correspond au nombre de copies du composant et sers donc de limite à l'itérateur i. Le problème est que ça ne marche pas (j'ai un message d'erreur à cette ligne). J'avais également essayer cette fonction sous cette forme :
- Code:
def move_and_clone(component, how_many)
Sketchup.active_model.start_operation('Déplacer et cloner', true)
for i in 1..how_many
move_component(clone_component(component), (i * @length1), 0, 0)
end
mais ici j'ai besoin que le how_many soit pris dans le fichier excel, j'appelais donc cette fonction avec ceci :
- Code:
def visu
ExcelComponents.new('C:\Users\vince\Desktop\fichiersrb\dbvisuclient').move_component_1(Sketchup.active_model.entities[2])
ExcelComponents.new('C:\Users\vince\Desktop\fichiersrb\dbvisuclient').move_and_clone(Sketchup.active_model.entities[2], @length4)
end
Hélas ça n'a pas marché non-plus, car cette valeur @length4 ne peut pas être appelé dans une fonction (ici visu) qui ne se trouve pas dans la classe class ExcelComponents. Je souhaite utilisé cette fonction visu, ainsi lorsque je veux utiliser la totalité du code, j'ai juste à taper visu dans la console ruby de sketchup.
Voilà si quelqu'un a des idées pour me faire avancer je suis preneur. Samuel si tu passes par-là
- Samuel TalletV.I.P.
- Date d'inscription : 15/04/2018
Nombre de messages : 870
Points : 2456
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web
Code à placer dans le fichier excel_components.rb :
Code à exécuter dans la console :
Résultat. Les paramètres (Longueurs et Nombre de clones) sont lus depuis le fichier Excel :
- Code:
# Import des dépendances.
require 'win32ole'
# TODO: Décrire les tenants et aboutissants.
class ExcelComponents
# Construit un objet de type `ExcelComponents`.
#
# @param [String] excel_file_path Chemin vers un fichier Excel.
#
# @example
#
# ExcelComponents.new(
# 'C:\\Users\\vince\\Desktop\\fichiersrb\\dbvisuclient'
# ).move_and_clone(Sketchup.active_model.entities[0])
def initialize(excel_file_path)
raise ArgumentError, '`excel_file_path` doit être une chaîne de caractères'\
unless excel_file_path.is_a?(String)
begin
excel = WIN32OLE.new('Excel.Application')
excel.visible = true
workbook = excel.Workbooks.Open(excel_file_path)
worksheet = workbook.Worksheets(1)
# Extraction des données depuis le fichier Excel.
@length1 = worksheet.Range('A2').value.to_i.cm
@length2 = worksheet.Range('B2').value.to_i.cm
@length3 = worksheet.Range('C2').value.to_i.cm
@how_many = worksheet.Range('D2').value.to_i
excel.Quit
rescue StandardError => _error
UI.messagebox("Impossible d'extraire les données depuis le fichier Excel.")
# Attention : En cas de problème, des valeurs par défaut sont assignées !
@length1 = 1.m
@length2 = 1.m
@length3 = 1.m
@how_many = 3
end
end
# Clone un composant SketchUp.
#
# @param [Sketchup::ComponentInstance] component Composant original.
#
# @return [Sketchup::ComponentInstance] Un composant-clone.
def clone_component(component)
Sketchup.active_model.entities.add_instance(component.definition, component.transformation)
# La transformation du composant-clone est relative à l'original.
end
# Déplace un composant SketchUp
# en tenant compte des données lues dans le fichier Excel.
#
# @param [Sketchup::ComponentInstance] component Composant.
#
# @return [Boolean] `true` en cas de succès, `false` autrement.
def move_component(component)
transformation_values = Geom::Transformation.new.to_a
transformation_values[-4] = @length1 # Déplacement axe rouge.
transformation_values[-3] = @length2 # Déplacement axe vert.
transformation_values[-2] = @length3 # Déplacement axe bleu.
Sketchup.active_model.entities.transform_entities(
Geom::Transformation.new(transformation_values),
component
)
# On sauvegarde le dernier composant déplacé par cette fonction.
@last_moved_component = component
end
# Déplace et clone un composant SketchUp
# en tenant compte des données lues dans le fichier Excel.
#
# @param [Sketchup::ComponentInstance] component Composant.
#
# @return [Boolean] `true` en cas de succès, sinon `false`.
def move_and_clone(component)
Sketchup.active_model.start_operation('Déplacer et cloner', true)
@how_many.times do
# S'il existe : alors le dernier composant déplacé est la référence.
component = @last_moved_component unless @last_moved_component.nil?
move_component(clone_component(component))
end
Sketchup.active_model.commit_operation
# Note : Cette opération est annulable.
end
end
Code à exécuter dans la console :
- Code:
ExcelComponents.new(
'C:\\Users\\vince\\Desktop\\fichiersrb\\dbvisuclient'
).move_and_clone(Sketchup.active_model.entities[0])
Résultat. Les paramètres (Longueurs et Nombre de clones) sont lus depuis le fichier Excel :
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Ah super, merci beaucoup Samuel. C'est bien toi le boss du Ruby
Tout marche parfaitement, je vais essayer de comprendre pourquoi mon code ne marchait pas (j'avais essayer un truc très proche de ce que tu avais fait).
Je reviens vers toi si j'ai encore quelques questions qui me taraude, mais je pense que ça devrait aller
Tout marche parfaitement, je vais essayer de comprendre pourquoi mon code ne marchait pas (j'avais essayer un truc très proche de ce que tu avais fait).
Je reviens vers toi si j'ai encore quelques questions qui me taraude, mais je pense que ça devrait aller
- Samuel TalletV.I.P.
- Date d'inscription : 15/04/2018
Nombre de messages : 870
Points : 2456
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web
mgsvinc a écrit:[...] je vais essayer de comprendre pourquoi mon code ne marchait pas (j'avais essayer un truc très proche de ce que tu avais fait).
Tu as confondu variables locales et variables d'instance (ces dernières commencent par un signe @)...
- mgsvincApprenti(e)
- Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72
Ok je vais étudier ça
- Contenu sponsorisé
Page 2 sur 2 • 1, 2
Sujets similaires
» [ SKETCHUP ruby ] Traduction du livre Automatic Sketchup: Creating 3-D Models in Ruby
» [ SKETCHUP ruby ] Ruby sketchup et chatgpt
» [ SKETCHUP composants dynamiques ] Excel to Sketchup
» [ SKETCHUP ruby ] Peux-ton réaliser des enregistrement de macro dans SketchUp ?
» [ SKETCHUP ] Tuto(s) Ruby pour SketchUp depuis le début...
» [ SKETCHUP ruby ] Ruby sketchup et chatgpt
» [ SKETCHUP composants dynamiques ] Excel to Sketchup
» [ SKETCHUP ruby ] Peux-ton réaliser des enregistrement de macro dans SketchUp ?
» [ SKETCHUP ] Tuto(s) Ruby pour SketchUp depuis le début...
Créer un compte ou se connecter pour répondre
Vous devez être membre pour répondre.
Page 2 sur 2
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum