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


[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 2 Empty
Ton bloc notes
Derniers sujets
» [ TWINMOTION ] Decals et plus !
par GUIZMO Aujourd'hui à 10:05

» [ SKETCHUP tutos ] tuto sketchup , enscape , up for sketchup
par tenrev Hier à 20:28

» [AUTRES LOGICIELS] MagicaVoxel!
par Pilou Hier à 12:15

» [ SKETCHUP généralité ] Animation comme une gamme de montage, d'assemblage...
par tenrev Hier à 9:15

» [ SKETCHUP composants dynamiques ] Animation d'un balancier de pendule
par JDD Lun 20 Sep 2021 - 18:51

» [ TWINMOTION ] BUGS textures ? en direct link avec Archicad
par tenrev Jeu 16 Sep 2021 - 21:40

» [ SKETCHUP généralité ] mise à jour de sketchup 2021.1.332
par JDD Jeu 16 Sep 2021 - 21:18

» [AUTRES LOGICIELS] Moi3D beta 4.0 - 64 bits Mac / PC 27 Octobre 2020
par Pilou Mer 15 Sep 2021 - 21:57

» [ SKETCHUP plugins ] Accédez à tous les attributs d'un Composant Dynamique avec "Attribute Helper"
par JDD Mer 15 Sep 2021 - 18:01

» [ TWINMOTION ] plugin archicad 25
par Coulou Mer 15 Sep 2021 - 17:11

» [SKETCHUP GENERALITES] COMMENT FAIRE UN EFFET MIROIR SUR SKETCHUP AVEC TWILIGHT RENDER
par tenrev Mar 14 Sep 2021 - 11:52

» [ UNREAL ENGINE ] l'héroine de "Valley of the Ancient" disponible free comme personnage autonome pour Unreal Engine 4 et 5.
par tenrev Mar 14 Sep 2021 - 11:02

» [ ARCHICAD ] [TUTO] Création et gestion des modules liés
par Archi43 Mar 14 Sep 2021 - 10:55

» [ TWINMOTION ] Licence Archicad25/Twinmotion
par tenrev Mar 14 Sep 2021 - 10:09

» [ SKETCHUP plugins ] le plugin "up for sketchup" pour les décorateurs et archi d'intérieur
par tenrev Mar 14 Sep 2021 - 10:04

» [ MATOS INFORM. ] Station de travail / Que choisir ?
par freroil Lun 13 Sep 2021 - 11:28

» [ SKETCHUP généralité ] Problème de calques / scènes
par tenrev Dim 12 Sep 2021 - 10:19

» [ SKETCHUP tutos ] ASTUCE Faire apparaître les Ouvertures dans un mur entre 2 scènes
par tenrev Sam 11 Sep 2021 - 9:42

» [ UNREAL ENGINE ] Live Link VCAM, une application iOS gratuite pour le travail de production virtuelle qui permet de contrôler une caméra virtuelle dans une scène Unreal Engine
par tenrev Jeu 9 Sep 2021 - 20:55

» [ SKETCHUP généralité ] Rapport et unité
par Christophe Fortineau Jeu 9 Sep 2021 - 12:08

» [ SKETCHUP généralité ] BIM IFC en français
par Archi43 Jeu 9 Sep 2021 - 11:55

» [ UNREAL ENGINE ] Un de mes premiers essais avec Unreal 5 sur un petit projet
par tenrev Jeu 9 Sep 2021 - 10:47

» [ SKETCHUP composants dynamiques ] Plusieurs animations en un seul clic ?
par tist Mer 8 Sep 2021 - 16:45

» [ SKETCHUP plugins ] Sketch Plus : 30 plugs en un!
par tenrev Mer 8 Sep 2021 - 15:57

» [ UNREAL ENGINE ] un essai avec un asset gratuit ce mois ci (septembre 2021)
par tenrev Mer 8 Sep 2021 - 15:33

» [ SKETCHUP tutos ] Changer la Couleur des Arêtes, des traits d'un plan ou autre dessin très facilement
par JDD Mer 8 Sep 2021 - 11:18

» [ SKETCHUP généralité ] Changer la Couleur des Arêtes, des traits d'un plan ou autre dessin très facilement
par jerryvento Mar 7 Sep 2021 - 7:24

» [ AUTRES LOGICIELS ] Technologie SDF sortie! MagicaCSG!
par Pilou Lun 6 Sep 2021 - 11:00

» [ TWINMOTION ] Twinmotion 2021.1.4 est maintenant disponible
par tenrev Sam 4 Sep 2021 - 21:39

» [ ENSCAPE ] scintillement lors d'animations
par REGIS Sam 4 Sep 2021 - 14:25

» [ TWINMOTION ] Développer davantage les projets Twinmotion dans Unreal Engine | weninar en ligne
par tenrev Sam 4 Sep 2021 - 12:07

» [ UNREAL ENGINE ] de twinmotion vers unreal engine - vidéo webinar en anglais
par tenrev Sam 4 Sep 2021 - 12:05

» [ SKETCHUP généralité ] Calque, Balise LA MÉTHODE préconisée par Sketchup
par jerryvento Jeu 2 Sep 2021 - 18:51

» [ SKETCHUP généralité ] Autre problème d'impression
par jerryvento Mer 1 Sep 2021 - 18:01

» [ PRESENTATION ]
par freroil Mer 1 Sep 2021 - 9:54

[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel

Page 2 sur 4 Précédent  1, 2, 3, 4  Suivant

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

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Jeu 6 Mai 2021 - 14:51

Super, ca marche bien ! Maintenant j'ouvre mes neurones !

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Jeu 6 Mai 2021 - 15:12

Samuel Tallet-Sabathé a écrit:Par exemple : Quand tu instancies un objet LanguageHandler avec la chaîne de caractères plugin.translation, tu obtiens un objet avec une méthode crochet-crochet. Cette méthode te permet d'accéder aux chaines de caractères traduites pour la langue courante. Le fichier de traduction (plugin.translation) de la langue courante est automatiquement sélectionné. Tu trouveras des exemples de fichiers de traduction ici.

Merci dans ton fichier j'ai pas vu ou tu déclarait le chemin pour ponter vers le bon repertoire
Code:
# Charger la traduction si elle est disponible pour les paramètres régionaux actuels.
    TRANSLATE  =  LanguageHandler . nouveau ( 'pmg.translation' )
    # Voir: "parametric_modeling / Resources / # {Sketchup.get_locale} /pmg.translation"

Ta dernière ligne est cotée et je ne vois pas où dans ton code tu l'a définit

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
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 6 Mai 2021 - 15:48

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:
Samuel Tallet-Sabathé a écrit:Par exemple : Quand tu instancies un objet LanguageHandler avec la chaîne de caractères plugin.translation, tu obtiens un objet avec une méthode crochet-crochet. Cette méthode te permet d'accéder aux chaines de caractères traduites pour la langue courante. Le fichier de traduction (plugin.translation) de la langue courante est automatiquement sélectionné. Tu trouveras des exemples de fichiers de traduction ici.

dans ton fichier j'ai pas vu ou tu déclarait le chemin pour ponter vers le bon repertoire

Car c'est implicite. LanguageHandler ouvre le dossier Resources puis le sous-dossier correspondant au code de la langue courante (exemples : fr, es) pour charger le fichier de traduction...

-------------------------------------------------------------------------------------------------------------------------
Galerie Plugins

simjoubert aime ce message

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Jeu 6 Mai 2021 - 15:52

Ok je cherchais mais ne trouvais pas !
et la référence initiale est forcement l'anglais ou l'on peut inverser et dire recherche l'anglais depuis le français ?
Indiquer si pas trouver alors par défaut c'est GB

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
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 6 Mai 2021 - 16:09

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:
et la référence initiale est forcement l'anglais ou l'on peut inverser et dire recherche l'anglais depuis le français ?

En principe : tu peux définir tes chaînes de caractères de référence en français et ajouter une traduction en-US mais cela risque de compliquer le travail d'un traducteur espagnol, par exemple, qui sera contraint de traduire le français en espagnol... Et si SketchUp est en espagnol et que ton plugin n'est pas traduit en espagnol, alors il sera en français ! mdr5

-------------------------------------------------------------------------------------------------------------------------
Galerie Plugins

simjoubert aime ce message

Rascal
Rascal
Administrateurs
Administrateurs
Masculin Humeur : Bonne en général, sauf quand ça ne va pas!
Date d'inscription : 28/08/2018
Nombre de messages : 1927
Points : 4210
Age : 42
Localisation : Pays Gallo
Emploi : Beaucoup trop en ce moment!!

MessageRascal Jeu 6 Mai 2021 - 19:12

fou2 Super Simon! Je rentre encore d'une session sans aucun contact avec le monde extérieur et je découvre ce beau nouveau joujou! Félicitation Simon bravo2 bravo2

Je passe un peu de temps en Famille et je regarde ça! fouet2

-------------------------------------------------------------------------------------------------------------------------
Il vaut mieux fermer sa gueule et passer pour un con,...
..... que l'ouvrir et ne laisser aucun doute à ce sujet [Vous devez être inscrit et connecté pour voir cette image]

simjoubert aime ce message

tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 18037
Points : 30598
Age : 58
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Jeu 6 Mai 2021 - 20:08

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:Je passe un peu de temps en Famille et je regarde ça!

comment ça Pascal ? tu fais passer ta famille avant le plugin de maitre Simon ?

bon, profites bien de ta famille ya que ça de vrai

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

[Vous devez être inscrit et connecté pour voir cette image]

simjoubert et Rascal aiment ce message

Rascal
Rascal
Administrateurs
Administrateurs
Masculin Humeur : Bonne en général, sauf quand ça ne va pas!
Date d'inscription : 28/08/2018
Nombre de messages : 1927
Points : 4210
Age : 42
Localisation : Pays Gallo
Emploi : Beaucoup trop en ce moment!!

MessageRascal Jeu 6 Mai 2021 - 21:10

Tu as raison Jack! Quel égoïste je fais !

-------------------------------------------------------------------------------------------------------------------------
Il vaut mieux fermer sa gueule et passer pour un con,...
..... que l'ouvrir et ne laisser aucun doute à ce sujet [Vous devez être inscrit et connecté pour voir cette image]
simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Sam 8 Mai 2021 - 11:26

Hello Samuel


J'arrive à retrouver toutes les instances de composants du modèle ayant dans leur définitions l'attribut "ra_0" du dictionnaire "dynamic_attribues" après plusieurs itérations et filtrages depuis dliste_modele,  qui liste toutes les définitions de composants du modèle. Après filtrage j’obtiens un aray inst_rapport_modele qui contient tout les composant avec l'attribut "ra_0" dans le modèle

Code:
dliste= Sketchup.active_model.definitions

Je voudrai faire la même chose mais uniquement pour la sélection active et pas uniquement le premier rang mais à travers toutes les branches du dom

et avoir  array inst_rapport_selection

Comment je dois faire ? je n'arrive pas à utiliser Sketchup::instancePath. C'est bien dommage qu'il n'existe pas un selection.instances qui ferait le bouleau en deux mots ! rage

L'idée est de proposer le rapport uniquement pour la sélection. donc il faut que je récupère les instances et non les définitions car pour une définition il peut y avoir des instances non contenu dans a sélection.

Voicima méthode de filtrage. Pour info DCDICT est une constante qui renvoi lenom du dictionnaire "dynamic_attributes"
Code:

         def self.filtrage_selection (collection=nil)
                  # fitrage de la selection selon la collection passée en référence
                  
                  #Si la collection est vide ( aucune séléction)
                  if collection.nil?
                     #alors toutes les définitions du modèle
                     dlist = Sketchup::active_model.definitions
                     #on rejette les images (le ! indique sur la collection elle même)
                     dlist.reject! {|d| d.image? }
                     
                     # sinon si la collection n'est pas vide alors le contenu de la collection auquel on retire les images
                  elsif collection.all? {|o| o.is_a?(Sketchup::ComponentDefinition) }
                     dlist = collection.reject {|d| d.image? }
                     
                  else
                     insts = collection.grep(Sketchup::ComponentInstance)
                     groups = collection.grep(Sketchup::Group)
                     
                     #dlist = insts.map{|i| i.definition } + groups#.map{|g| g.definition }
                     dlist = insts.map{|i| i.definition } + groups.map{|g| g.definition }
                  
                     dlist.uniq!
                  end
                  
                  dcs = dlist.select {|d| d.attribute_dictionary(DCDICT,false) }
                  # selection uniquement des composant possédant l'attribut dynamique "ra_0_" dans le dictionnaire dynamic_attribut
                  dcrapport = dcs.select {|d| d.get_attribute(DCDICT,"ra_0_",false) }
               end

Je l’appel en passant dliste_modele en paramètre

Code:

modele = Sketchup.active_model
dliste_modele = model.definitions
dcrapport = Rapport.filtrage_selection (dlist_modele)

après je peu faire mes extractions d'attribut en faisant les itérations sur les définitions puis sur les instances pour chaque définition

Code:

# 2. Collecte des données par itération pour chaque composants trouvés
            dcrapport_modele.each {|d|
               #Pour chaque définiition on récupère le jeux d'instances
               insts = d.instances
               #Itération pour chaque instance
               insts.each {|inst|
                  #On récupère la définition de l'instance
                  inst_d = inst.definition
                  
                  #On récupère l'identifiant unique de l'instance il ne change jamais
                  id = inst.guid
                  
                  # sauf si l'attribut est abscent de l'instance
                  unless inst.get_attribute(DCDICT,"ra_1_poste",false)
                  #on prend celui de la définition
                     poste = inst_d.get_attribute(DCDICT,"ra_1_poste","")
                  else

                                              
                                                 ....


                  
               }#fin de l'itération des instances de la définition
            }#fin de l'itération des définitions


Un petit coupe de main ne serait pas de refus ! gentleman


Dernière édition par simjoubert le Sam 8 Mai 2021 - 14:49, édité 1 fois

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 18037
Points : 30598
Age : 58
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Sam 8 Mai 2021 - 13:53

[Vous devez être inscrit et connecté pour voir ce lien] a écrit: C'est bien dommage qu'il n'existe pas un selection.instances qui ferait le bouleau en deux mots !

sinon tu sais ce qui te reste à faire , en plus de Ruby te mettre au C++ rigole p-clin

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

[Vous devez être inscrit et connecté pour voir cette image]
simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Sam 8 Mai 2021 - 14:42

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:
[Vous devez être inscrit et connecté pour voir ce lien] a écrit: C'est bien dommage qu'il n'existe pas un selection.instances qui ferait le bouleau en deux mots !

sinon tu sais ce qui te reste à faire , en plus de Ruby te mettre au C++  rigole p-clin

C'est un peu le problème quand tu commence à mettre les mains dans l'engrenage !
Aujourdh'ui pour une simple boite de dialogue dans Sketchup il faut que tu touches aux codes Ruby, Html, Css, Javascript !
...
Mais le résultat est sympa !
Après l'exemple de Samuel j'ai réussi à sortir inside sketchup un tableau avec les attributs rapport.
Un clic sur les entêtes et tu fait le tri sur la colonne un champ de filtrage.
Il me reste à trouver pour faire des regroupements par poste ou fournisseur ou article avec le même nom et prix unitaire et elle sera pleinement fonctionnelle.
Temps de chargement 3 secondes pour extirper du modèle les 90 composants avec leur attributs et la somme du tout sourire

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

tenrev et Samuel Tallet aiment ce message

tenrev
tenrev
FONDATEUR DE BIBLIO3D
FONDATEUR DE BIBLIO3D
Masculin Humeur : excellente comme toujours
Date d'inscription : 19/01/2008
Nombre de messages : 18037
Points : 30598
Age : 58
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Sam 8 Mai 2021 - 15:10

bravo Simon

pour l'instant j'ai pas trop de temps , mais dés que je peux je testerai tes prochaines versions , promis

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

[Vous devez être inscrit et connecté pour voir cette image]
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 Sam 8 Mai 2021 - 18:30

Bonjour Simon,

Pour résoudre ce genre de problème, on peut utiliser une fonction récursive. C'est-à-dire une fonction qui s'appelle elle-même.

Tu trouveras ci-dessous une classe Ruby qui permet en principe* de récupérer tous les composants et sous-composants sélectionnés dans la fenêtre SketchUp.

Code:

# selection.rb
require 'sketchup'

module SimJoubert
    
  module AttributRapport
        
    class Selection
            
      def initialize

        @selection = Sketchup.active_model.selection
        @instances = []

      end
            
      def collecter_sous_instances(instance)

        @instances.push(instance)

        sous_instances = instance.definition.entities.grep(Sketchup::ComponentInstance)

        sous_instances.each do |sous_instance|
          collecter_sous_instances(sous_instance)
        end

      end

      def instances
        
        instances_a_la_racine = @selection.grep(Sketchup::ComponentInstance)

        instances_a_la_racine.each do |instance_a_la_racine|
          collecter_sous_instances(instance_a_la_racine)
        end

        @instances

      end
        
    end

  end
    
end

Une fois le code ci-dessus chargé, tu peux récupérer un tableau des (sous-)instances de la sélection comme ceci :

Code:

# Quelque part dans un sous-module du module AttributRapport...
selection = Selection.new
selection.instances

A partir de là, il ne te reste plus qu'à filtrer les instances qui ont l'attribut de dictionnaire qui t'intéresse.

(*) En principe, car j'ai écrit ce code sur mon téléphone portable et je ne l'ai pas testé sur mon ordinateur mdr5

-------------------------------------------------------------------------------------------------------------------------
Galerie Plugins

tenrev et simjoubert aiment ce message

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Sam 8 Mai 2021 - 23:45

Merci Samuel
Je vais tester et essayer de comprendre !
waah

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Dim 9 Mai 2021 - 12:47

Hello Samuel
Bon j'ai réussi à compilé ton code avec le mien
La class que as codée fonctionne mais elle ne rentre pas dans les groupes elle ne fouille que dans l'arbre composant >composant >...>composant
pas dans groupe>composant>
Si tu as un moment pour modifier le code ce serai super

Bon Dimanche
respect

Voici mon module
Code:

# encoding: UTF-8
#
# file "sj_attribut_rapport/RapportWeb.rb"

module SimJoubert
  module AttributRapport
    module RapportWeb

            #include SharedConstants # mixin the constant module
            DCDICT = "dynamic_attributes"
            extend self




            def self.rapport_dialogue_cmd

               model = Sketchup.active_model

               # #On indique le début de l'opération pour une éventuelle annulation
               model.start_operation('créer rapport attributs', true,true,false)
               
               sel = model.selection
               
               #si la selection est vide ?
               if sel.empty?
               
                  #afficher un message et demander si le rapport doit être fait sur tout le modèle
                  message = UI.messagebox("La sélection est vide ! Voulez-vous étendre le rapport à l'ensemble du modèle ?",MB_OKCANCEL)
                  
                  #Si l'utilisateur à cliqué sur le bouton ok =1
                  if message == 1
                  
                     RapportWeb.tableau_attribut_rapport()
                  
                  end
                  
               else
               
                  RapportWeb.tableau_attribut_rapport(sel)
                  
               end # fin if selection empty ?   
               
            end #fin commande rapport
            
            
            
            def self.filtrage_modele
               
               model = Sketchup.active_model
            
               dlist = model.definitions
               #on rejette les images (le ! indique sur la collection elle même)
               #dlist.reject! {|d| d.image? }
               dcs = dlist.select {|d| d.attribute_dictionary(DCDICT,false) }
               # selection uniquement des composant possédant l'attribut dynamique "ra_0_" dans le dictionnaire dynamic_attribut
               dcrapport = dcs.select {|d| d.get_attribute(DCDICT,"ra_0_",false) }
               
               instrapport = []
               i = 0
               
               dcrapport.each {|d|
                  #Pour chaque définiition on récupère le jeux d'instances
                  insts = d.instances
                  #Itération pour chaque instance
                  insts.each {|inst|
                     
                     instrapport[i] = inst
                     
                     i += 1
                     
                  }#itération instance de la définition
               }#fin itération sur les définitions
               
               return instrapport
               
            end#fin de filtrage_modele(collection)
            
            
            
            
            def self.filtrage_selection
            
               #On creer un objet de class Selection qui est un array de toutes les instantances dans la sélection
               selection = Selection.new
               sel_intances = selection.instances
                  
               dcs = sel_intances.select {|inst| inst.definition.attribute_dictionary(DCDICT,false) }
                  
               instrapport = dcs.select {|inst| inst.definition.get_attribute(DCDICT,"ra_0_",false) }
            
            end#fin de filtrage_selection(collection)
            
            
            
            
            def self.tableau_attribut_rapport(collection=nil)
               
               model = Sketchup.active_model
            
               if collection.nil?
                  textsel = "Le modèle"
                  instrapport = filtrage_modele
               else
                  textsel = "La séléction"
                  instrapport = filtrage_selection
               end
               
               if instrapport.empty?
                  message = UI.messagebox("#{textsel} ne contient pas de composants avec des attributs rapport",MB_OK)
               else
               
                  ### INITIIALISATION CODE HTML
            
                  # Préparation du code CSS (syntaxe HEREDOC).
                  css = <<-CSS
                     body,td,th {
                        font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", Verdana, sans-serif;
                        color: #000000;
                     }                  
                     body {
                        background-color: #FFFFFF;
                     }   
                     h3 span {
                     font-size: 22px;
                     color: #ff5400;
                     }
                     h3 input.search-input {
                        width: 300px;
                        margin-left: auto;
                        float: right
                     }
                     span.regroupement{
                        margin-left: 20%;
                        padding-bottom: 20px;
                        margin-bottom: 30px;
                     }
                     table{
                        margin-top: 20px;
                     }
                     .tableau_entete{
                        background-color: #0D437C;
                        font-weight: bold;
                        color: #FFFFFF;
                        font-size: 12px;
                     }
                     .tableau_data{
                        font-size: 12px;                  
                     }
                     .tableau_pied{
                        background-color: #6E8DAD;
                        font-weight: bold;
                        color: #F7F7F7;
                     }                  
                     .numerique,.devise{
                        text-align: right;   
                     }
                     .unite{
                        text-align: center;   
                     }
                     .tableau_pied+.devise{            
                     font-size: 18px;
                     }            
                  CSS
                  #fin heredoc CSS
                  
                  # Préparation du code JS (syntaxe HEREDOC).
                  js = <<-JS
                     const compare = function(ids, asc){
                        return function(row1, row2){
                           const tdValue = function(row, ids){
                              return row.children[ids].textContent;
                           }
                           const tri = function(v1, v2){
                              if (v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2)){
                                 return v1 - v2;
                              }
                              else {
                                 return v1.toString().localeCompare(v2);
                              }
                              return v1 !== '' && v2 !== '' && !isNaN(v1) && !isNaN(v2) ? v1 - v2 : v1.toString().localeCompare(v2);
                           };
                           return tri(tdValue(asc ? row1 : row2, ids), tdValue(asc ? row2 : row1, ids));
                        }
                     }

                     const tbody = document.querySelector('tbody');
                     const thx = document.querySelectorAll('th');
                     const trxb = tbody.querySelectorAll('tr');
                     thx.forEach(function(th){
                        th.addEventListener('click', function(){
                           let classe = Array.from(trxb).sort(compare(Array.from(thx).indexOf(th), this.asc = !this.asc));
                           classe.forEach(function(tr){
                               tbody.appendChild(tr)
                           });
                        })
                     });   

                     (function(document) {
                           'use strict';

                           var TableFilter = (function(myArray) {
                                 var search_input;

                                 function _onInputSearch(e) {
                                       search_input = e.target;
                                       var tables = document.getElementsByClassName(search_input.getAttribute('data-table'));
                                       myArray.forEach.call(tables, function(table) {
                                             myArray.forEach.call(table.tBodies, function(tbody) {
                                                   myArray.forEach.call(tbody.rows, function(row) {
                                                         var text_content = row.textContent.toLowerCase();
                                                         var search_val = search_input.value.toLowerCase();
                                                         row.style.display = text_content.indexOf(search_val) > -1 ? '' : 'none';
                                                   });
                                             });
                                       });
                                 }

                                 return {
                                       init: function() {
                                             var inputs = document.getElementsByClassName('search-input');
                                             myArray.forEach.call(inputs, function(input) {
                                                   input.oninput = _onInputSearch;
                                             });
                                       }
                                 };
                           })(Array.prototype);

                           document.addEventListener('readystatechange', function() {
                                 if (document.readyState === 'complete') {
                                       TableFilter.init();
                                 }
                           });

                     })(document);                  
            
               JS
                  #fin heredoc JS javascript
               
               
               
                  #On declare l'array vide html_a qui va collecter tous le code generer entete boucle et pied
                  html_a = []
            
            
                  ### ENTETE
            
            
                  #On crer le code HTML Ouverture des balises parentes html +le css+les entete du tableau
                  html_a[0] = <<-HTML
                        <html>

                           <head>
                              <!-- Le CSS est inclus dans le HTML -->
                              <style>#{css}</style>
                              
                              
                              
                           </head>

                           <body>
                                 <div class="container">
                                    <h3>
                                       <span>Attribut <span style="color: #03369C">Rapport</span></span>
                                       <input type="search" placeholder="Rechercher..." class="form-control search-input" data-table="articles_liste"/>
                                    </h3>
                                    <span class="regroupement">Regroupement par
                                    <select id="Regroupement" name="Regroupement">
                                       <option value="ID" selected>ID</option>
                                       <option value="Article">Article</option>
                                       <option value="Poste">Poste</option>
                                       <option value="Fournisseur">Fournisseur</option>
                                    </select></span>
                              <table width="100%" border="1" cellspacing="0" cellpadding="5" class="table table-striped mt32 articles_liste">
                                 <thead>
                                    <tr>
                                       <th width="12%" scope="col" class="tableau_entete">Poste ↑↓</th>
                                       <th width="12%" scope="col"class="tableau_entete">Article ↑↓</th>
                                       <th width="9%" scope="col"class="tableau_entete">QTT ↑↓</th>
                                       <th width="9%" scope="col"class="tableau_entete">Unité ↑↓</th>
                                       <th width="12%" scope="col"class="tableau_entete">Prix Unitaire ↑↓</th>
                                       <th width="12%" scope="col"class="tableau_entete">Sous total ↑↓</th>
                                       <th width="12%" scope="col"class="tableau_entete">Fournisseur ↑↓</th>
                                       <th scope="col"class="tableau_entete">Commentaire ↑↓</th>
                                    </tr>
                                 </thead><tbody>
                  
                     HTML
                  #fin heredoc HTML
            
            
                  ### DATA
            
                  #on initialise une boucle
                  i = 1 #Compteur de boucle
                  st = 0 #Sous total
                  
                  #Itération pour chaque instance
                  instrapport.each {|inst|
                     #On récupère la définition de l'instance
                     inst_d = inst.definition
                     
                     #On récupère l'identifiant unique de l'instance il ne change jamais
                     id = inst.guid
                     
                     # sauf si l'attribut est abscent de l'instance
                     unless inst.get_attribute(DCDICT,"ra_1_poste",false)
                     #on prend celui de la définition
                        poste = inst_d.get_attribute(DCDICT,"ra_1_poste","")
                     else
                     #sinon celui de l'instance
                        poste = inst.get_attribute(DCDICT,"ra_1_poste","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_1_article",false)
                        article = inst_d.get_attribute(DCDICT,"ra_1_article","")
                     else
                        article = inst.get_attribute(DCDICT,"ra_1_article","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_4_qtt",false)
                        qtt = inst_d.get_attribute(DCDICT,"ra_4_qtt",0.0)
                     else
                        qtt = inst.get_attribute(DCDICT,"ra_4_qtt",0.0)
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_4_unite",false)
                        unite = inst_d.get_attribute(DCDICT,"ra_4_unite","")
                     else
                        unite = inst.get_attribute(DCDICT,"ra_4_unite","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_5_prix_unitaire",false)
                        prix_unitaire = inst_d.get_attribute(DCDICT,"ra_5_prix_unitaire",0.0)
                     else
                        prix_unitaire = inst.get_attribute(DCDICT,"ra_5_prix_unitaire",0.0)
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_5_sous_total",false)
                        sous_total = inst_d.get_attribute(DCDICT,"ra_5_sous_total",0.0)
                     else
                        sous_total = inst.get_attribute(DCDICT,"ra_5_sous_total",0.0)
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_1_fournisseur",false)
                        fournisseur = inst_d.get_attribute(DCDICT,"ra_1_fournisseur","")
                     else
                        fournisseur = inst.get_attribute(DCDICT,"ra_1_fournisseur","")
                     end
                     
                     unless inst.get_attribute(DCDICT,"ra_1_commentaire",false)
                        commentaire = inst_d.get_attribute(DCDICT,"ra_1_commentaire","")
                     else
                        commentaire = inst.get_attribute(DCDICT,"ra_1_commentaire","")
                     end
                  
                     #On ajoute la ligne numéro i au tableau html avec les valeur définit dans l'odre défini dans l'entête
                     pu = sprintf('%.2f', prix_unitaire)
                     soust = sprintf('%.2f',   sous_total)               
                     html_a[i] = <<-HTML
                           <tr>
                              <td class="tableau_data">#{poste}</td>
                              <td class="tableau_data">#{article}</td>
                              <td class="tableau_data numerique">#{qtt.to_f}</td>
                              <td class="tableau_data unite">#{unite}</td>
                              <td class="tableau_data devise">#{pu}</td>
                              <td class="tableau_data devise">#{soust}</td>
                              <td class="tableau_data">#{fournisseur}</td>
                              <td class="tableau_data">#{commentaire}</td>
                           </tr>                  
                        HTML
                     #fin heredoc HTML
                     
                     #On ajoute le sous total à la variable st
                     st = st + sous_total.to_f
                     #On incrémente le compteur i
                     i += 1
                  
                  }#fin de l'itération des instances instrapport
                  
                  ### PIED DE PAGE
            
               j = i-1   
               st = sprintf('%.2f',st)
               #On creer la suite du html Pied de tableau et fermeture balise HTML
               html_a[i] = <<-HTML
                           </tbody><tfoot>   
                              <tr>
                                 <td class="tableau_pied">Total</td>
                                 <td colspan="5"class="tableau_pied devise">#{st}</td>
                                 <td class="tableau_pied"> </td>
                                 <td class="tableau_pied numerique">#{j}</td>
                              </tr>
                           </tfoot>
                        </table>
                        </div>
                        <!-- Le JS aussi -->
                           <script>#{js}</script>
                     </body>
                  </html>
                  HTML
               #fin heredoc HTML
               
               
               ### COMPILATION PAGE WEB
               
               #On assemble l'array html_a en une seule chaine séparé par un retour de chariot
               html = html_a.join("\n")
               
               # Initialisation de la boîte de dialogue.
               dialog = UI::HtmlDialog.new(

                     dialog_title: "Tableau des attributs rapport du modèle",
                     preferences_key: "my_name_my_extension_my_dialog",
                     scrollable: true,
                     resizable: true,
                     width: 600,
                     height: 400,
                     left: 100,
                     top: 100,
                     min_width: 50,
                     min_height: 50,
                     max_width: 1000,
                     max_height: 1000,
                     style: UI::HtmlDialog::STYLE_UTILITY

               )
               
               # Remplissage de la boîte de dialogue.
               dialog.set_html(html)

               # Affichage de la boîte de dialogue.
               dialog.show_modal
                  
               # On indique la fin de l'opération pour l'annulation
               status = model.commit_operation
               
               
               
               end      
            
            end#fin de tableau_attribut_rapport(collection)
            
            
    end#fin sous module
  end#fin module plugin
end#fin module espace de nom

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Dim 9 Mai 2021 - 19:23

Hello
J'ai mis les mains de le cambouis de ta class
et j'ai rajouté un étage
voici le code de la class qui fouille la sélection à la recherche d'instances qu'elles soient à la racine de la sélection dans un groupe ou dans un composant !

Je suis très fier de moi ! fier
Merci Samuel de vérifier si c'est assez propre comme modification, en tout cas il fait le taf

Voici le code
Code:

# encoding: UTF-8
#
# file "sj_attribut_rapport/Selection.rb"
#
require 'sketchup'

module SimJoubert
        
  module AttributRapport
            
    class Selection
                
      def initialize

        @selection = Sketchup.active_model.selection
        @instances = []

      end # fin initialize
         
         
                
      def collecter_sous_instances(instance)
                  
        @instances.push(instance)
               
        sous_instances = instance.definition.entities.grep(Sketchup::ComponentInstance)

        sous_instances.each do |sous_instance|
               collecter_sous_instances(sous_instance)
            end   
                  
            sous_groups = instance.definition.entities.grep(Sketchup::Group)
            sous_groups.each do |sous_group|
               collecter_contenu_group(sous_group)
            end

      end # fin collecter_sous_instances
         
         
               
         def collecter_contenu_group(group)
            contenu_group = group.entities
                  
            sous_instances = contenu_group.grep(Sketchup::ComponentInstance)
            sous_instances.each do |sous_instance|
                collecter_sous_instances(sous_instance)
            end
                  
            sous_groups = contenu_group.grep(Sketchup::Group)
            sous_groups.each do |sous_group|                  
               collecter_contenu_group(sous_group)
            end   
            
         end#fin de collecter_contenu_group
         
         

      def instances
            
        instances_a_la_racine = @selection.grep(Sketchup::ComponentInstance)
            instances_a_la_racine.each do |instance_a_la_racine|
               collecter_sous_instances(instance_a_la_racine)
            end   
                  
            group_a_la_racine  = @selection.grep(Sketchup::Group)
            group_a_la_racine.each do |group_a_la_racine|                  
               collecter_contenu_group(group_a_la_racine)
        end

        @instances

      end #Fin de instances
            
    end # Fin Class

  end#fin module plugin
end#fin module espace de nom

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
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 Dim 9 Mai 2021 - 20:12

Bonsoir Simon.

J'avais un code plus court en tête mais c'est déjà bien si le tien fonctionne sourire Félicitations !

-------------------------------------------------------------------------------------------------------------------------
Galerie Plugins
simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Dim 9 Mai 2021 - 21:51

Hello Samuel

Il vaut mieux créer le tableau avec ruby ou avec javascript !
j'ai construit ma table par itération ruby

Mais j'aimerai créer des regroupements dynamiques !

chaque row représente une instance
Je voudrais faire un regroupent par article
fusionner les instances ayant le même nom d'article et même prix unitaire avec la somme dynamique des quantités et  calcule dynamique du sous total

puis un regroupement par poste avec la somme des sous totaux

Que me conseilles tu ?

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
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 10 Mai 2021 - 19:32

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:Hello Samuel

Il vaut mieux créer le tableau avec ruby ou avec javascript !
j'ai construit ma table par itération ruby

Mais j'aimerai créer des regroupements dynamiques !

chaque row représente une instance
Je voudrais faire un regroupent par article
fusionner les instances ayant le même nom d'article et même prix unitaire avec la somme dynamique des quantités et  calcule dynamique du sous total

puis un regroupement par poste avec la somme des sous totaux

Que me conseilles tu ?

Bonsoir Simon,

Des fois aussi, j'hésite entre coder un truc en Ruby ou en JavaScript... Tu peux :

- Prendre la solution de facilité, choisir le langage avec lequel tu es le plus à l'aise ou disposant des bibliothèques qui te permettront d'atteindre plus rapidement ton objectif.

- Chercher la performance peu importe le temps de développement nécessaire.

-------------------------------------------------------------------------------------------------------------------------
Galerie Plugins
simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Lun 10 Mai 2021 - 20:39

Salut Samuel
Il y a des librairie jquerry qui ont l'air sympa pour générer et jouer avec les tableaux HTML. on leur donne l'array des datas et zoup ! deux trois paramètres pour activer des options de filtres ou de tris.
Jquerry et les fenêtres sketchup c'est bien ? c'est compatible ?
Comme je pars de zéro en javascript autant me former sur un truc qui marche bien !
j'ai vu aussi Vu.js content
pour un débutant tes pistes ? l'idée c'est un truc fignoler mais simple à mettre en œuvre !

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2
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 10 Mai 2021 - 22:36

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:Salut Samuel
Il y a des librairie jquerry qui ont l'air sympa pour générer et jouer avec les tableaux HTML. on leur donne l'array des datas et zoup ! deux trois paramètres pour activer des options de filtres ou de tris.
Jquerry et les fenêtres sketchup c'est bien ? c'est compatible ?
Comme je pars de zéro en javascript autant me former sur un truc qui marche bien !
j'ai vu aussi Vu.js content
pour un débutant tes pistes ? l'idée c'est un truc fignoler mais simple à mettre en œuvre !

jQuery est compatible avec la classe Ruby UI::HtmlDialog mais il vaut mieux apprendre le JavaScript pur avant d'apprendre jQuery. En terme de performances, jQuery est mauvais. Je te conseille de rechercher en priorité dans Google "filtrable table pure javascript library" ou "filtrable table vanilla javascript library". Vanilla JS = Pure JS.

-------------------------------------------------------------------------------------------------------------------------
Galerie Plugins
Pilou
Pilou
V.I.P.
V.I.P.
Masculin Date d'inscription : 30/05/2014
Nombre de messages : 6423
Points : 14446
http://moiscript.weebly.com/

MessagePilou Lun 10 Mai 2021 - 23:32

Où se trouve la dernière version ?

Peut-on tester sans ouvrir Excel ?

Y a-t-il un fichier de données d'exemple ?

Je testerais si c'est possible dans la 2017 Make! (sur PC)

Bravo pour être passé de l'autre côté!
J'avais essayé avec l'aide de TIG & Thomthom mais j'ai lâchement lâché l'affaire!

J'ai vite compris que ce langage n'était pas fait pour moi!  timide
C'est beaucoup plus facile d'être "testeur" sourire

Je pourrais corriger le texte en français! sourire

-------------------------------------------------------------------------------------------------------------------------
Petit site Galerie
Est beau ce qui plaît sans concept!
simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Mar 11 Mai 2021 - 0:18

[Vous devez être inscrit et connecté pour voir ce lien] a écrit:Où se trouve la dernière version ?

Peut-on tester sans ouvrir Excel ?

Y a-t-il un fichier de données d'exemple ?

Je testerais si c'est possible dans la 2017 Make! (sur PC)

Bravo pour être passé de l'autre côté!
J'avais essayé avec l'aide de TIG & Thomthom mais j'ai lâchement lâché l'affaire!

J'ai vite compris que ce langage n'était pas fait pour moi!  timide
C'est beaucoup plus facile d'être "testeur" sourire

Je pourrais corriger le texte en français! sourire

Hello Pilou
Je suis en train de mettre la touche javascript pour réaliser les regroupement en mode webdialogue à l’intérieur de Sketchup pour une preview rapide sans Excel.
L'export vers Excel génère un fichier csv exploitable par d'autre logicielle comme OpenCalc .
J'ai pas encore implémenter le fichier de traduction.
Il reste encore du travail en plus du mien.
Cette après midi j'ai fais 70% de mon devis avec.

Restes à l’écoute je vous proposerai la version 6.6 bientôt ! et merci pour les encouragement.

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Mar 11 Mai 2021 - 0:23

Samuel Tallet-Sabathé a écrit:

jQuery est compatible avec la classe Ruby UI::HtmlDialog mais il vaut mieux apprendre le JavaScript pur avant d'apprendre jQuery. En terme de performances, jQuery est mauvais. Je te conseille de rechercher en priorité dans Google "filtrable table pure javascript library" ou "filtrable table vanilla javascript library". Vanilla JS = Pure JS.

Ok chef ! je vais regarder de plus prés le code javascript ! j'espère que cela ne fait pas mal ! arf

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

tenrev aime ce message

simjoubert
simjoubert
V.I.P.
V.I.P.
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 1504
Points : 3442
Age : 46
Localisation : Val de Marne
Emploi : Paysagiste

Messagesimjoubert Mar 11 Mai 2021 - 22:57

Hello
Voici la version 0.6.5 d'Attribut Rapport

Pour une plus grande compatibilité :
Icônes en .pdf pour SU MAC
Fichiers .Skp pour l'insertion de composant au format SU2014

Optimisation du code par découpe en plusieurs fichiers.

Nouvelles fonctionnalités :
Preview rapide dans une boite de dialogue du tableau des attributs rapport, avec colonnes triables par clic sur l'entête et un champ de recherche sur toutes les colonnes.

Export d'un fichier csv et ouverture dans Excel
Import de modifications depuis Excel dans sketchup

Rapport Excel ou preview rapide sur sélection uniquement ou tout le modèle si aucune sélection

Testé uniquement sur SU windows 2021!
J'attends vos retours et vos configurations (Mac PC)  et la version de Sketchup
Merci aux beta-testeurs
[Vous devez être inscrit et connecté pour voir cette image]
Fichiers joints
[ SKETCHUP plugins ] Attribut_rapport : Rapport quantitatif et estimatif d'un modèle dans Excel - Page 2 Attachment
sj_attribut_rapport.v0.6.5.zip Vous n'avez pas la permission de télécharger les fichiers joints.(1 Mo) Téléchargé 1 fois

-------------------------------------------------------------------------------------------------------------------------
"Les voici en foule : élargis l'espace de ta tente,
Allonge tes cordages ! Renforce tes piquets !
Déploie pour l'autre la toile qui t'abrite !"
ISAÏE 54-2

Samuel Tallet aime ce message

Page 2 sur 4 Précédent  1, 2, 3, 4  Suivant

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