Forum Sketchup Artlantis Archicad
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Annonces
Bonjour Invité Bienvenue sur le forum biblio3d - le forum a été créé le Sam 19 Jan 2008 - 14:26- Nous avons enregistrés 14833 topics pour un total de : 175853 posts - le record de membres connectés simultanément :555
Galerie


[ Ruby ] Automatisation sketchup grace à excel - Page 2 Empty
Ton bloc notes
Derniers sujets
» [ SKETCHUP généralité ] Tête de pilastre
par jerryvento Aujourd'hui à 9:01

» [ CHALLENGE 2024 ] résultats du challenge
par AK40Cess Hier à 13:27

» [ FORUM ] astuce pour insérer facilement un tableau sur le forum
par tenrev Hier à 9:12

» [ SKETCHUP plugins ] une barre d’outils perso
par tenrev Lun 18 Nov 2024 - 15:05

» [ SKETCHUP généralité ] Orienter 1 Face, 1 Profil Normal (Perpendiculaire) à 1 Arête, 1 Trajectoire
par jerryvento Lun 18 Nov 2024 - 14:47

» [ SKETCHUP généralité ] Modéliser facilement 1 spirale en moins de 40 secondes
par jerryvento Lun 18 Nov 2024 - 14:47

» [ SKETCHUP généralité ] Modélise 1 Forme Hélicoïdale, en forme de spirale : main courante, rampe d'accès voitures...
par jerryvento Lun 18 Nov 2024 - 14:46

» [ SKETCHUP tutos ] Orienter 1 Face, 1 Profil Normal (Perpendiculaire) à 1 Arête, 1 Trajectoire
par jerryvento Lun 18 Nov 2024 - 14:45

» [ SKETCHUP tutos ] Modéliser facilement 1 spirale en moins de 40 secondes
par jerryvento Lun 18 Nov 2024 - 14:44

» [ SKETCHUP tutos ] Modélise 1 Forme Hélicoïdale, en forme de spirale : main courante, rampe d'accès voitures...
par jerryvento Lun 18 Nov 2024 - 14:43

» ColorMaker par Didier Bur[ SKETCHUP plugins ]
par JDD Dim 17 Nov 2024 - 20:56

» [ ARCHICAD ] Plus de format *atl dans Archicad
par Coulou Jeu 14 Nov 2024 - 8:26

» [ SKETCHUP tutos ] Créer des Bibliothèques et des livres aléatoires Facilement (2 Méthodes!)
par tenrev Mar 12 Nov 2024 - 11:31

» [ CHALLENGE 2024 ] les images finales du challenge
par tenrev Lun 11 Nov 2024 - 15:35

» [ SKETCHUP composants dynamiques ] Formule IF
par Samuel MATHIEU Jeu 7 Nov 2024 - 21:12

» [ Challenge 2024] cHallenge archjtexture exterieur ou paysagiste-vick-sketchup-enscape
par vick Jeu 7 Nov 2024 - 10:23

» [ SKETCHUP vray ]
par tenrev Mar 5 Nov 2024 - 21:19

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste- Gaspard Hauser - Sketchup - D5 render
par tenrev Mar 5 Nov 2024 - 10:22

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - JDD - SketchUp - Enscape
par tenrev Mar 5 Nov 2024 - 10:10

» [ ARCHICAD ] Murs paramétriques
par Coulou Lun 28 Oct 2024 - 10:28

» [ SKETCHUP généralité ] Aide pour SKP 2017
par PEGASE Sam 26 Oct 2024 - 18:36

» [ ARCHICAD ] Ajouter du lambris sur un mur
par Coulou Jeu 24 Oct 2024 - 10:43

» [ SKETCHUP généralité ] 1 Citrouille à imprimer pour Halloween
par jerryvento Jeu 24 Oct 2024 - 8:13

» [ SKETCHUP tutos ] 1 Citrouille à imprimer pour Halloween
par jerryvento Jeu 24 Oct 2024 - 8:11

» [ D5_RENDER] Petit exemple "hors sujet" ... D5
par Gaspard Hauser Mar 22 Oct 2024 - 19:59

» [ MATOS INFORM. ] [WINDOWS] Miniatures de prévisualisation pour les fichiers de modèle 3D au format .OBJ, .FBX, .STL, .3DS et +
par Gaspard Hauser Mar 22 Oct 2024 - 19:49

» [ SKETCHUP Layout ] Symboles Électriques sur Layout
par JDD Jeu 17 Oct 2024 - 9:44

» [ ARCHICAD ] gardes corps et profils complexe ?
par Christophe Fortineau Lun 14 Oct 2024 - 12:10

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - allansens - cinema 4D
par Allansens Sam 12 Oct 2024 - 13:53

» [ ARTLANTIS ] Ca donne envie !
par Gaspard Hauser Jeu 10 Oct 2024 - 10:00

» [ TWINMOTION ] Unreal Engine déménage sur Fab - DataSmith & Archicad
par Coulou Jeu 10 Oct 2024 - 9:03

» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - AK40Cess - Archicad-Twinmotion
par Coulou Mar 8 Oct 2024 - 11:53

» [ TWINMOTION ] Unreal Engine déménage sur Fab - Assets de Megascan
par JDD Lun 7 Oct 2024 - 21:52

» [ CHALLENGE ARCHITECTURE EXTERIEURE OU PAYSAGISTE ] Démarrage du challenge 2024 - les régles
par tenrev Jeu 3 Oct 2024 - 14:58

» [ ARCHICAD ] Cotation d'ouverture sans hauteur
par Titou Jeu 3 Oct 2024 - 11:21

Sondage

êtes vous intéressé et prêt à participer à un challenge ?

[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c1015%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 15% [ 2 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c1031%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 31% [ 4 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c1046%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 46% [ 6 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c108%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 8% [ 1 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c100%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 0% [ 0 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c100%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 0% [ 0 ]

Total des votes : 13

chaine sketchup.tv
Serveur Discord
Le Deal du moment : -50%
Friteuse sans huile – PHILIPS – Airfryer ...
Voir le deal
54.99 €

[ Ruby ] Automatisation sketchup grace à excel

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Aller en bas

mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Mer 23 Mai 2018 - 0:27

Ça marche, je regarde tout ça demain et je reviens vers toi sourire
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Lun 28 Mai 2018 - 22:42

Salut Samuel, j'ai regardé ton code et tout est ok, la lecture du fichier excel fonctionne bien 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. bravo
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 Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Lun 28 Mai 2018 - 23:08

mgsvinc a écrit:[...] j'ai regardé ton code et tout est ok, la lecture du fichier excel fonctionne bien 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.  bravo

Ravi de t'avoir aidé ! sourire ange2

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`... clindoeil
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Lun 28 Mai 2018 - 23:31

Ok je vais faire ça.
Bonne soirée Samuel, encore merci aurevoir
tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 19943
Points : 34784
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mar 29 Mai 2018 - 10:04

[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 rigole p-clin

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/Salut Invité merci de consulter mon profil/PC fixe Rizen 9 3950 cg RTX3080-64 go de ram DDssd 1To/1 PC portable Lenovo  16'' w11 i7 32go-CG  RTX3070 8go/1casque meta Quest 3/1 casque VR Occulus Rift /1 PC portable Dell sous Linux Ubuntu-1 pc portable HP sous chromebook/Raspberry Pi - Arduino /  Modélisation :Sketchup-Rhino-Pconplanner-Rendu:Enscape-Keyshot-Unreal Engine-Twinmotion-Autres:Photoshop-Indesign-After Effect-Première pro-Intelligence artificielle -Chatgpt+-Midjourney-Suno-Elevenlabs-Canva
[ Ruby ] Automatisation sketchup grace à excel - Page 2 575088biblio3d
Domix
Domix
V.I.P.
V.I.P.
Masculin Date d'inscription : 13/02/2014
Nombre de messages : 894
Points : 1789
Localisation : Proche Dijon
Emploi : Dessinateur

MessageDomix Mar 29 Mai 2018 - 12:16

Oula, ça donne mal à la tête votre truc. chaud2

Je reste admiratif des personnes qui aiment coder, on dirai que vous vous êtes bien trouvé. clindoeil

-------------------------------------------------------------------------------------------------------------------------
Mes objets --> https://3dwarehouse.sketchup.com/user.html?id=u79250929-4d52-4b4a-8c4a-2109f9976ca8
tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 19943
Points : 34784
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mar 29 Mai 2018 - 13:06

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/Salut Invité merci de consulter mon profil/PC fixe Rizen 9 3950 cg RTX3080-64 go de ram DDssd 1To/1 PC portable Lenovo  16'' w11 i7 32go-CG  RTX3070 8go/1casque meta Quest 3/1 casque VR Occulus Rift /1 PC portable Dell sous Linux Ubuntu-1 pc portable HP sous chromebook/Raspberry Pi - Arduino /  Modélisation :Sketchup-Rhino-Pconplanner-Rendu:Enscape-Keyshot-Unreal Engine-Twinmotion-Autres:Photoshop-Indesign-After Effect-Première pro-Intelligence artificielle -Chatgpt+-Midjourney-Suno-Elevenlabs-Canva
[ Ruby ] Automatisation sketchup grace à excel - Page 2 575088biblio3d
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Mar 29 Mai 2018 - 15:05

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 rigole p-clin

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 mdr5 j'ai un dossier avec pas mal de marques pages, donc pour me souvenir d'où ils viennent... fou2
tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 19943
Points : 34784
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mar 29 Mai 2018 - 15:09

mgsvinc a écrit:Ah ok, c'est peut-être là que je l'avais trouvé alors

mdr5 moqueur certainement , c'est juste pour rendre à césar , ce qui a été posté par césar mdr6

-------------------------------------------------------------------------------------------------------------------------
je ne sais pas grand chose , mais le peu que je sache , je le partage/Salut Invité merci de consulter mon profil/PC fixe Rizen 9 3950 cg RTX3080-64 go de ram DDssd 1To/1 PC portable Lenovo  16'' w11 i7 32go-CG  RTX3070 8go/1casque meta Quest 3/1 casque VR Occulus Rift /1 PC portable Dell sous Linux Ubuntu-1 pc portable HP sous chromebook/Raspberry Pi - Arduino /  Modélisation :Sketchup-Rhino-Pconplanner-Rendu:Enscape-Keyshot-Unreal Engine-Twinmotion-Autres:Photoshop-Indesign-After Effect-Première pro-Intelligence artificielle -Chatgpt+-Midjourney-Suno-Elevenlabs-Canva
[ Ruby ] Automatisation sketchup grace à excel - Page 2 575088biblio3d
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Lun 4 Juin 2018 - 22:56

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 :
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 Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Mar 5 Juin 2018 - 0:01

Erreur : Tu utilises une variable (`entities`) qui est définie dans un autre scope (celui de ta méthode `move_and_clone`). non De plus, tu n'as pas besoin de `@component` : il y a déjà `component`.

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

Code:

ExcelComponents.new('test').move_and_clone(Sketchup.active_model.entities[0], 3)
tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 19943
Points : 34784
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mar 5 Juin 2018 - 10:40

tu nous feras un petite présentation et un making of de ton plugin j'espère ?

bon courage a+ bravo

-------------------------------------------------------------------------------------------------------------------------
je ne sais pas grand chose , mais le peu que je sache , je le partage/Salut Invité merci de consulter mon profil/PC fixe Rizen 9 3950 cg RTX3080-64 go de ram DDssd 1To/1 PC portable Lenovo  16'' w11 i7 32go-CG  RTX3070 8go/1casque meta Quest 3/1 casque VR Occulus Rift /1 PC portable Dell sous Linux Ubuntu-1 pc portable HP sous chromebook/Raspberry Pi - Arduino /  Modélisation :Sketchup-Rhino-Pconplanner-Rendu:Enscape-Keyshot-Unreal Engine-Twinmotion-Autres:Photoshop-Indesign-After Effect-Première pro-Intelligence artificielle -Chatgpt+-Midjourney-Suno-Elevenlabs-Canva
[ Ruby ] Automatisation sketchup grace à excel - Page 2 575088biblio3d
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Mar 5 Juin 2018 - 11:45

tenrev a écrit:tu nous feras un petite présentation et un making of de ton plugin j'espère  ?

rigole
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Mar 5 Juin 2018 - 17:49

C'est bon  rigole  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 :

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)

marteau

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 Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Mar 5 Juin 2018 - 18:16

Cela a changé la logique du code. Je te conseille de revenir à une version précédente et de réadapter.
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Mar 31 Juil 2018 - 17:06

Bonjour aurevoir , je reviens avec des nouvelles de mon code, le voici :

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à rigole
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Mer 1 Aoû 2018 - 2:24

Code à placer dans le fichier excel_components.rb :

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 :
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Clonag10

clindoeil
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Jeu 2 Aoû 2018 - 19:10

Ah super, merci beaucoup Samuel. C'est bien toi le boss du Ruby respect

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 bien
Samuel Tallet
Samuel Tallet
V.I.P.
V.I.P.
Masculin Date d'inscription : 15/04/2018
Nombre de messages : 873
Points : 2465
Age : 38
Localisation : Marseille, France
Emploi : Développeur Web

MessageSamuel Tallet Jeu 2 Aoû 2018 - 20:30

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 @)...
mgsvinc
mgsvinc
Apprenti(e)
Apprenti(e)
Masculin Date d'inscription : 01/02/2018
Nombre de messages : 22
Points : 72

Messagemgsvinc Ven 3 Aoû 2018 - 17:48

Ok je vais étudier ça
Contenu sponsorisé

MessageContenu sponsorisé

Page 2 sur 2 Précédent  1, 2

Voir le sujet précédent Voir le sujet suivant Revenir en haut

Créer un compte ou se connecter pour répondre

Vous devez être membre pour répondre.

S'enregistrer

Rejoignez notre communauté ! C'est facile !


S'enregistrer

Connexion

Vous êtes déjà membre ? Aucun soucis, cliquez ici pour vous connecter.


Connexion

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum