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 14744 topics pour un total de : 174931 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 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

Sondage

Chaine Twitch

[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c1029%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 29% [ 11 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c1011%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 11% [ 4 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c103%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 3% [ 1 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c108%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 8% [ 3 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c108%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 8% [ 3 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c108%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 8% [ 3 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c1029%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 29% [ 11 ]
[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c105%[ Ruby ] Automatisation sketchup grace à excel - Page 2 Poll_c10 5% [ 2 ]

Total des votes : 38

chaine sketchup.tv
Serveur Discord
Le Deal du moment :
Funko POP! Jumbo One Piece Kaido Dragon Form : ...
Voir le deal

[ 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 : 870
Points : 2456
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 : 19795
Points : 34464
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 
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

[ 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 : 19795
Points : 34464
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 
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

[ 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 : 19795
Points : 34464
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 
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

[ 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 : 870
Points : 2456
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 : 19795
Points : 34464
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 
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

[ 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 : 870
Points : 2456
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 : 870
Points : 2456
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 : 870
Points : 2456
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 : 870
Points : 2456
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