Forum Sketchup Artlantis Archicad
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Galerie


[ Ruby ] Automatisation sketchup grace à excel - Page 2 Empty
Ton bloc notes
Derniers sujets
» [ ENSCAPE ] Manette XBox
par simjoubert Aujourd'hui à 21:50

» [ PRESENTATION ] Fanou Peb
par FanouPeb Ven 22 Oct 2021 - 18:19

» [ ENSCAPE ] Accès calques BIM dans le fichier exécutable ou cloud ?
par tenrev Ven 22 Oct 2021 - 16:51

» [ ARCHICAD ] Cotation ouvertures dans mur courbe!?
par freroil Ven 22 Oct 2021 - 15:02

» [ TECHNOLOGIE DU BATIMENT ] Passion architecture
par VertiKal Ven 22 Oct 2021 - 14:59

» [ SKETCHUP plugins ] sj_AddDCFunctions
par tenrev Ven 22 Oct 2021 - 13:20

» [ ARCHICAD-OBJETS GDL ] Bibliothèque de migration archicad 9
par freroil Ven 22 Oct 2021 - 9:11

» [ SKETCHUP composants dynamiques ] OnClick Copie composant
par simjoubert Jeu 21 Oct 2021 - 21:00

» [ ARCHICAD ] Configurer la projection des surfaces sur un maillage ?
par Coulou Jeu 21 Oct 2021 - 17:04

» [AUTRES LOGICIELS] Vectary
par Pilou Mer 20 Oct 2021 - 21:54

» [ SKETCHUP plugins ] Skatter 2 - un exemple d'utilisation
par tenrev Mer 20 Oct 2021 - 11:05

» [ AUTRES LOGICIELS ] Aperçu de Houdini version 19 - sortie prochaine
par Yanosh HRDY Mer 20 Oct 2021 - 9:25

» [ AUTRES LOGICIELS ] davinci resolve
par tenrev Mar 19 Oct 2021 - 12:01

» [ ARCHICAD ] TUTO - Créer un fichier modèle ArchiCad
par Coulou Mar 19 Oct 2021 - 9:25

» [ AUTRES LOGICIELS ] SOUNDLY Une Mine d'Or d'Effets Sonores pour vos animations
par tenrev Lun 18 Oct 2021 - 14:18

» [ BLENDER ] Animation d'une boule de feu
par tenrev Sam 16 Oct 2021 - 15:43

» [ SKETCHUP généralité ] Profils et Contre-Profil Menuiserie
par Pilou Sam 16 Oct 2021 - 11:09

» [ TWINMOTION ] Les 5 jours d'inspiration 2021!
par Pilou Ven 15 Oct 2021 - 19:50

» [ UNREAL ENGINE ] de twinmotion vers unreal engine - vidéo webinar en anglais
par tenrev Ven 15 Oct 2021 - 17:14

» [ SKETCHUP généralité ] SketchUp pour iPad
par REGIS Jeu 14 Oct 2021 - 22:21

» [ AUTRES LOGICIELS ] Nomad Sculpt
par Pilou Mer 13 Oct 2021 - 23:51

» [ SKETCHUP composants dynamiques ] composant dynamique avec proxy 2d pour choix des coloris
par Rascal Mer 13 Oct 2021 - 21:47

» [ AUTRES LOGICIELS ] Verve sous le sapin de Noël!
par Pilou Mer 13 Oct 2021 - 17:04

» [ SKETCHUP généralité ] 3D WAREHOUSE Importer, Télécharger, Exporter avec 2017
par tenrev Mer 13 Oct 2021 - 15:23

» [ SKETCHUP ruby ] Peux-ton réaliser des enregistrement de macro dans SketchUp ?
par JDD Mer 13 Oct 2021 - 14:25

» [ SKETCHUP plugins ] Skatter 2 disponible
par Rascal Mar 12 Oct 2021 - 18:44

» [ OBJETS ET BILLBOARDS ] Création de personnage
par tenrev Mar 12 Oct 2021 - 16:41

» [ SKETCHUP généralité ] Profil Builder
par Rascal Lun 11 Oct 2021 - 19:16

» [ TWINMOTION ] Retour d'expérience sur le challenge n°7
par AK40Cess Lun 11 Oct 2021 - 9:38

» [ ARCHICAD ] Réalisation de chevronnière
par lena29 Ven 8 Oct 2021 - 23:51

» [ SKETCHUP généralité ] Calque et arborescence de groupe
par grayos Ven 8 Oct 2021 - 11:12

» [ PRESENTATION ]
par Fab Jeu 7 Oct 2021 - 17:59

» [ SKETCHUP ruby ] Modification de l'Interface Graphique Utilisateur de SketchUp (GUI)
par tenrev Jeu 7 Oct 2021 - 15:04

» [ UNREAL ENGINE ] pack d'assets free pour Unreal engine 4 , qui comprend 23 paysages et 7 panoramas du ciel
par tenrev Jeu 7 Oct 2021 - 11:00

» [AUTRES LOGICIELS] Moi3D beta 4.0 - 64 bits Mac / PC 27 Octobre 2020
par Pilou Mar 5 Oct 2021 - 22:36

[ 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 : 740
Points : 2123
Age : 35
Localisation : Marseille, France

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 : 18114
Points : 30779
Age : 58
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 MSI TITAN PRO écran 17''|win10 64 bits| i7 Quad core|ram 32go| CG GFORCE GTX1080 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 : 18114
Points : 30779
Age : 58
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 MSI TITAN PRO écran 17''|win10 64 bits| i7 Quad core|ram 32go| CG GFORCE GTX1080 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 : 18114
Points : 30779
Age : 58
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 MSI TITAN PRO écran 17''|win10 64 bits| i7 Quad core|ram 32go| CG GFORCE GTX1080 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 : 740
Points : 2123
Age : 35
Localisation : Marseille, France

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 : 18114
Points : 30779
Age : 58
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 MSI TITAN PRO écran 17''|win10 64 bits| i7 Quad core|ram 32go| CG GFORCE GTX1080 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 : 740
Points : 2123
Age : 35
Localisation : Marseille, France

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 : 740
Points : 2123
Age : 35
Localisation : Marseille, France

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 : 740
Points : 2123
Age : 35
Localisation : Marseille, France

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 : 740
Points : 2123
Age : 35
Localisation : Marseille, France

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

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