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 14725 topics pour un total de : 174800 posts - le record de membres connectés simultanément :555
Galerie


 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Empty
Ton bloc notes
Derniers sujets
» [ ARCHICAD ] raccourci clavier
par VertiKal Ven 12 Avr 2024 - 17:47

» [ SKETCHUP objets ] aquarium
par vick Ven 12 Avr 2024 - 9:56

» [ SKETCHUP généralité ] sortie officielle de sketchup 2024
par tenrev Ven 12 Avr 2024 - 9:51

» [ ARCHICAD ] Zone - Menu déroulant
par Christophe Fortineau Jeu 11 Avr 2024 - 19:49

» [ MATOS INFORM. ] LICENCES ARCHICAD
par yannickniort Jeu 11 Avr 2024 - 15:00

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

» [ TWINMOTION ] bug d'affichage des textures avec le path tracer
par Gaspard Hauser Ven 5 Avr 2024 - 12:53

» [ TWINMOTION ] eGPU / ralentissement Twinmotion important
par TF3 Mer 3 Avr 2024 - 9:11

» [ TWINMOTION ] twinmotion installée deux fois?
par tenrev Mer 3 Avr 2024 - 8:58

» [ INTELLIGENCE ARTIFICIELLE ] Joyeuses Paques avec sketchup.... diffusion
par tenrev Dim 31 Mar 2024 - 16:32

» [ SKETCHUP plugins ] Vms_up
par tenrev Dim 31 Mar 2024 - 16:20

» [ INTELLIGENCE ARTIFICIELLE ] quelques vidéo de mes tests IA
par simjoubert Ven 29 Mar 2024 - 19:16

» [ SKETCHUP généralité ] Interface réinitialisée totalement suite connexion Trimble
par Shakna Ven 29 Mar 2024 - 15:04

» [ SKETCHUP LIVE COMPONENT ] Importer une liste de points dans son graphe via un input texte
par tenrev Jeu 28 Mar 2024 - 13:30

» [ ARCHICAD-OBJETS GDL ] Sortie de toit TCP (Poujoulat)
par BoTof Lun 25 Mar 2024 - 9:12

» [ SKETCHUP LIVE COMPONENT ] besoin de tuyaux sur les textures random
par tenrev Sam 23 Mar 2024 - 10:35

» [ SKETCHUP composants dynamiques ] Copies de copies
par Manutio Ven 22 Mar 2024 - 12:21

» [ SKETCHUP plugins ] plugin pour les textes
par vick Ven 22 Mar 2024 - 10:34

» [ SKETCHUP généralité ] SÉLECTIONNER - Tuto 4/4 - 2ème TECHNIQUE INÉDITE
par jerryvento Jeu 21 Mar 2024 - 9:08

» [ SKETCHUP tutos ] SÉLECTIONNER - Tuto 4/4 - 2ème TECHNIQUE INÉDITE
par jerryvento Jeu 21 Mar 2024 - 9:07

» [ KEYSHOT ] plugin sketchup
par tenrev Mer 20 Mar 2024 - 8:26

» [ SKETCHUP LIVE COMPONENT ] rendre visible ou invisible un paramètre utilisateur selon des conditions ?
par simjoubert Mar 19 Mar 2024 - 15:38

» [ PRESENTATION ] Manutio
par Manutio Lun 18 Mar 2024 - 9:21

» [ ARTLANTIS ] Ca donne envie !
par fraid Ven 15 Mar 2024 - 7:44

» [ SKETCHUP généralité ] SÉLECTIONNER - Tuto 3/4 - 1ère TECHNIQUE INÉDITE
par JDD Mer 13 Mar 2024 - 10:39

» [ SKETCHUP plugins ] SketchUp et Menuiserie : Rencontre avec Artwood
par art wood concept Mer 13 Mar 2024 - 9:54

» [ SKETCHUP tutos ] SÉLECTIONNER - Tuto 3/4 - 1ère TECHNIQUE INÉDITE
par jerryvento Mar 12 Mar 2024 - 8:48

» [ SKETCHUP LIVE COMPONENT ] table avec chaises
par tenrev Mar 12 Mar 2024 - 8:46

» [ SKETCHUP généralité ] Problème d'ouverture de SKP
par lionel Claude Lun 11 Mar 2024 - 18:14

» [ TWINMOTION ] Rotation des tuiles sur TM 2023 avec fichier issu de Allplan 2015
par Gaspard Hauser Lun 11 Mar 2024 - 13:48

Sondage

Chaine Twitch

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c1029% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 29% [ 11 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c1011% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 11% [ 4 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c103% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 3% [ 1 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c108% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 8% [ 3 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c108% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 8% [ 3 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c108% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 8% [ 3 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c1029% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 29% [ 11 ]
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c105% [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Poll_c10 5% [ 2 ]

Total des votes : 38

chaine sketchup.tv
Serveur Discord
-40%
Le deal à ne pas rater :
Tefal Ingenio Emotion – Batterie de cuisine 10 pièces (induction, ...
59.99 € 99.99 €
Voir le deal

[ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens

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

JDD
JDD
V.I.P.
V.I.P.
Masculin Humeur : Cool, œil de lynx à pattes de velours
Date d'inscription : 21/05/2021
Nombre de messages : 970
Points : 2256
Age : 75
Localisation : Nord (59)
Emploi : Director of Myself

MessageJDD Lun 26 Fév 2024 - 16:24

Bonjour,

Dans un ancien plugin pour SketchUp, qui donc ne fonctionne plus sous SU 2022, et que  je cherche à réutiliser, une définition de fonction utilise une ancienne Class de

réseau ( nitems) ( arr.nitems -> anInteger, Returns the number of non-nil elements in arr. May be zero. ) qui depuis un certain temps (passage à Ruby 2, Su2014 et

+) est obsolète et ne peut plus être utilisé dans les codages actuels .

La petite fonction "rect_face_selected" qui me pose problème vérifie simplement que la face sélectionnée est bien un rectangle.

Pour cela elle vérifie que l'élément sélectionné est : 1 - bien une face, 2 - qu'elle comporte bien 4 arrêtes et - 3 que le ces arrêtes sont bien

perpendiculaires entres elles.

Si ces 3 conditions sont respectées, alors la face sélectionnée est bien un rectangle.

La définition de cette fonction utilise deux fois la Class nitems dans le code "edges.nitems" ( pour la vérification du nombre de coté de la face et pour vérifier que ces cotés

sont bien perpendiculaires entre eux)

Quelqu'un peu t-il me conseiller comment remplacer et par quoi cette Class pour que la définition de la fonction "rect_face_selected" soit compatible avec les derniers API de SketchUp.

J'ai testé de mon coté diverses variantes sans succès, mes connaissances en ruby pour SU sont hélas très limitées

Merci aux spécialistes par avance.

Voici le code de la fonction "rect_face_selected" qui pose problème.

Code:
# Check if rectangular face is selected
        def rect_face_selected

            selset = Sketchup.active_model.selection
            edges = []

            # Check if single object is selected
            if (not selset.single_object?)
                return false
            end

            selset.each {|entity|
                # Check if the object is a face
                if entity.typename != "Face"
                    return false
                else
                    # Check if the face has 4 edges
                    edges = entity.edges
                    if edges.nitems != 4
                        return false
                    end
                end
            }

            #Thus far we have the face with 4 edges, is it a rectangle?
            #Loop and see if each edge is at right angle to the next
            edges[edges.length]=edges[0]
            for i in (0...edges.nitems-1)
                #line[1] is where edge vector object lives
                if (not edges[i].line[1].perpendicular? edges[i+1].line[1])
                    return false
                end
            end

            #Yay, it's a rectangle
            return true
        end

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

Messagetenrev Lun 26 Fév 2024 - 17:31

@JDD

j'ai demandé à chatgpt de le modifier et d'ajouter des boites de dialogues
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Su202411

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

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens 575088biblio3d

JDD 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 : 19777
Points : 34426
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Lun 26 Fév 2024 - 17:34

Code:
module MonNom
  module MonPluginRectangle

    # Vérifie si une face rectangulaire est sélectionnée
    def self.rect_face_selected?
      selset = Sketchup.active_model.selection

      unless selset.size == 1 && selset[0].is_a?(Sketchup::Face)
        UI.messagebox("Aucune face ou plusieurs objets sélectionnés.")
        return false
      end

      edges = selset[0].edges

      unless edges.size == 4
        UI.messagebox("La face sélectionnée n'a pas 4 arêtes.")
        return false
      end

      edges << edges.first

      if edges.each_cons(2).all? { |edge1, edge2| edge1.line[1].perpendicular?(edge2.line[1]) }
        UI.messagebox("La face sélectionnée est un rectangle.")
        true
      else
        UI.messagebox("La face sélectionnée n'est pas un rectangle.")
        false
      end
    end

    # Ajoute une commande au menu pour exécuter la vérification
    unless file_loaded?(__FILE__)
      menu = UI.menu('Plugins')
      menu.add_item('Vérifier Rectangle') {
        self.rect_face_selected?
      }
      file_loaded(__FILE__)
    end

  end # module MonPluginRectangle
end # module MonNom

Dans cette version :

La méthode rect_face_selected? commence par vérifier si un seul objet est sélectionné et si cet objet est une face (Sketchup::Face).
Ensuite, elle récupère les arêtes (edges) de la face sélectionnée et vérifie si la face a exactement 4 arêtes, ce qui est une condition nécessaire pour qu'une face soit un rectangle.
La méthode each_cons(2) est utilisée pour itérer sur chaque paire consécutive d'arêtes dans le tableau edges, qui inclut maintenant la première arête à la fin pour faciliter la vérification de la perpendicularité entre la dernière et la première arête.
Pour chaque paire d'arêtes, la méthode vérifie si elles sont perpendiculaires en utilisant perpendicular? sur les vecteurs directionnels (line[1]) des arêtes.
Si toutes les paires d'arêtes sont perpendiculaires, la méthode retourne true, indiquant que la face sélectionnée est un rectangle. Sinon, elle retourne false.
Cette version complète de la fonction devrait fonctionner correctement dans SketchUp 2022 et au-delà, en respectant les conventions de Ruby modernes et en évitant l'utilisation de méthodes obsolètes.

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

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens 575088biblio3d

JDD aime ce message

JDD
JDD
V.I.P.
V.I.P.
Masculin Humeur : Cool, œil de lynx à pattes de velours
Date d'inscription : 21/05/2021
Nombre de messages : 970
Points : 2256
Age : 75
Localisation : Nord (59)
Emploi : Director of Myself

MessageJDD Lun 26 Fév 2024 - 18:35

Hello,

Merci @tenrev, je vais tester cela.
Je n'avais pas pensé à consulter ton nouvel et redoutable ami virtuel.

Je te tiens informé du résultat.

JDD

tenrev aime ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2819
Points : 6264
Age : 48
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Lun 26 Fév 2024 - 19:29

Hello
On fait du Ruby sans moi ?

Voici une version plus condensée et plus human reading !
Code:


# Check if rectangular face is selected
def rect_face_selected
  # On récupère la sélection
  sel = Sketchup.active_model.selection
  
  # test si la sélection ne contient qu'un seul element
  return false unless sel.length == 1
  
  # Test si l'objet sélectionné est une face
  return false unless sel[0].is_a? Sketchup::Face
  
  # on définit la variable face comme étant la face sélectionnée
  face = sel[0]
  
  # test si la face a 4 arrêtes
  return false unless face.edges.length == 4
  
  # on définit la variables edges contenant les 4 arrêtes
  edges = face. Edges
  
  # Test si les arrêtes consécutives sont perpendiculaires
  # on test les vecteurs des lignes portant les arrêtes
  return false unless edges.each_cons(2).all? { |edge1, edge2| edge1.line[1].perpendicular?(edge2.line[1]) }
  
  # Toutes les conditions sont remplies renvoie vrai
  return true
end

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens IPB_917


Dernière édition par simjoubert le Lun 26 Fév 2024 - 20:06, édité 1 fois

tenrev et JDD aiment ce message

JDD
JDD
V.I.P.
V.I.P.
Masculin Humeur : Cool, œil de lynx à pattes de velours
Date d'inscription : 21/05/2021
Nombre de messages : 970
Points : 2256
Age : 75
Localisation : Nord (59)
Emploi : Director of Myself

MessageJDD Lun 26 Fév 2024 - 19:56

Hello @simjoubert

J'ai fait appel aux spécialistes en pensant que tu serais le premier à répondre.
Eh bien non, le maitre est dépassé par ses élèves.
J'ai testé de rentrer le code transmis par l'ami de @tenrev et avec quelques légères modifications cette définition rentrée dans mon vieux plugin initialement écrit par Jim Foltznommé round_corners semble fonctionner correctement.

Je termine quelques test et si cela intéresse certaines personnes je peux le poster.

C'est un simple plugin permettant de réaliser des rectangles avec des angles arrondis .

Sur un projet en cours ( cockpit d'un simulateur Airbus A320-200) j'en ai une très grande quantité à réaliser.
Et me coltiner un après l'autre ces rectangles pour la mise en place de rayons dans les angles  devenait un calvaire.
Je me suis souvenu avoir disposé de ce vieux plugin que j'ai retrouvé dans mes archives.

Mais il est possible que d'autres plugins que j'ignore peuvent aussi réaliser cela.
Je suis preneur de ces variantes si elles existent.

EDIT :

Il semble bien fonctionné et je le joins à cette conversation pour ceux intéressés.

Nom du plugin : Round Corners
Auteur : Jim Foltz + rev JDD

Usage :

Créer un rectangle avec l'outil "Rectangle" de SketchUp

Sélectionner la face et faire un Clic Droit pour accéder au menu contextuel de SketchUp
Activer le plugin en cliquant sur "Rectangle Arrondi"
Dans la fenêtre qui s'ouvre fixer :

1- La valeur du rayon des arrondis pour remplacer les angles droits du rectangle ( défaut = 25 mm)
2 -Choisir la qualité des rayons en fixant le nombre de segment constituant l'arc des rayons (défaut = 6)
3 -Choisir de supprimer ou de garder les segment des angles droits après mise en place des arrondis (défaut = Oui = supprimer)

JDD
Fichiers joints
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Attachment
Round_Corners_JDD.zip Vous n'avez pas la permission de télécharger les fichiers joints.(3 Ko) Téléchargé 1 fois

tenrev et simjoubert aiment ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2819
Points : 6264
Age : 48
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mar 27 Fév 2024 - 11:16

Hello JDD
Tu aurais pu appeler "Rectangle round corner" pour éviter la confusion avec le plugin de Fredo6 !
je regarde t je te donnerai mon avis
Merci et bravo
JDD
JDD
V.I.P.
V.I.P.
Masculin Humeur : Cool, œil de lynx à pattes de velours
Date d'inscription : 21/05/2021
Nombre de messages : 970
Points : 2256
Age : 75
Localisation : Nord (59)
Emploi : Director of Myself

MessageJDD Mar 27 Fév 2024 - 11:27

Hello @simjoubert,

Oui, mais je n'ai pas voulu changer le nom de la version originale donné par Jim Foltz que j'ai juste mise à jour pour qu'elle fonctionne (et pour un usage perso)

JDD

tenrev et simjoubert 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 : 19777
Points : 34426
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mar 27 Fév 2024 - 12:02

simjoubert a écrit:Hello
On fait du Ruby sans moi ?

Voici une version plus condensée et plus human reading !

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Prier11   oui grand maitre

tu sais @simjoubert que dans ma série de tuto et vidéo sur les plugins que je viens de publier sur youtube ,  il y a une partie :  mini script à l'aide de chatgpt , j'ai précisé  que ca ne remplaçait pas un programmeur ou codeur pro et que ca leurs faisait dresser les cheveux  moqueur mdr1 mdr5 mdr6 mdr2

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

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens 575088biblio3d

simjoubert aime ce message

simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2819
Points : 6264
Age : 48
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 28 Fév 2024 - 11:37

Hello
Voici une petite variante du code qui permet de sélectionner plusieurs faces de n'importe quelle forme, des faces pleines ou perforées.

Le résultat est mis dans un groupe et des sous-groupes si plusieurs faces.

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens SketchUp_k6cj6DcqcY

Code:

#*************************************************************************************************
#     FACES ROUND CORNERS
#     Auteur Simon Joubert
#     Version 1.1 2024/02/28
#
#   Arrondis tous les angles des faces sélectionnées
#   Crée des points de guidage sur le centre de l'arrondi et ses extremités
#*************************************************************************************************
# Paramètres :
#   radius de l'arrondis
#     par défaut 0.5.m
#     le radius sera réduit si est trop grand pour etre accueilli par la moitié du plus petit côté
#
#   Circle_segments Nombre d'arrêtes pour faire 360°
#     le nombres d'arrêtes sera proportionel selon l'angle décrit
#     valeur par défaut 48
#
#   Erase efface la face originale
#     Par défaut true
#*********************************************************************************************
# Retourne le groupe contenant des sous groupes contenant une des faces arrondis.
# S'il n'y a qu'une face de sélectionnée la face arrondie est directement dans le groupe
#
# Exemple new_round_faces = faces_round_corners(0.5.m, 48, true)
#
#**********************************************************************************************

def faces_round_corners(radius = 50.cm, circle_segments = 48, erase = true)

  circle_segments = circle_segments.to_i.to_f
  pi = Math::PI

  model = Sketchup.active_model
  model.start_operation("Faces Round Corners", true)

  entities = model.entities
  faces = model.selection.grep(Sketchup::Face)

  raise "Error No faces selected !" unless faces

  # Groupe qui contiendra le résultat
  super_group = entities.add_group
  super_group.name = "Faces_round_corners"
  super_group_ents = super_group.entities

  # Boucle sur chaque faces
  faces.each do |face|

    # Création d'un sous group pour contenir la face arrondie
    group = super_group_ents.add_group
    ents = group.entities

    normal = face.normal
    loops = face.loops
    # Si la face est ajourée on ordonne les loops [outer, inner1, inner...]
    if loops.size > 1
      inner_loops = loops.filter { |loop| !loop.outer? }
      outer_loops = loops.filter { |loop| loop.outer? }
      loops = outer_loops + inner_loops
      loops.flatten!
    end
    
    # Boucle sur chaque loops
    loops.each_with_index do |loop, index|

      #On récupère les points
      pts = loop.vertices.map{|v|v.position}
      pts_a = pts + pts[0..1]

      arcs = []
      egdes_pts = []
      edges = []

      # Boucle sur chaque triplet de points de la face
      array = pts_a.each_cons(3).map do |p1,p2,p3|      

        pt = p2
        v21 = p2.vector_to(p1).normalize
        v23 = p2.vector_to(p3).normalize
        d21 = p2.distance(p1)
        d23 = p2.distance(p3)
        dmin = [d21,d23].min/2

        # Test si les points sont colineaires
        if v21.parallel?(v23)
          next
        end

        # Calul du centre de l'arc
        v = (v21 + v23).normalize
        l1 = [p2, v21]
        l2 = [p2,v23]
        angle = v21.angle_between(v23)

        # Test si le plus petit coté peux  accueillir l'arrondi sinon réduit le radius
        if radius / Math.tan(angle / 2) > dmin
          angle_complementaire = pi / 2 - angle / 2
          radius_local = dmin / Math.tan(angle_complementaire)
        else
          radius_local = radius
        end      

        # Calcule de la position sur la bisectrice de l'angle
        hypo = radius_local / Math.sin(angle / 2)
        arc_center = p2.offset(v, hypo)
        ents.add_cpoint(arc_center)

        #Calcule des points de tengeance
        arc_start = arc_center.project_to_line(l1)
        ents.add_cpoint(arc_start)      

        arc_end = arc_center.project_to_line(l2)
        ents.add_cpoint(arc_end)      

        xaxis = arc_center.vector_to(arc_start)
        endaxis = arc_center.vector_to(arc_end)

        angle = xaxis.angle_between(endaxis)

        # Test si angle rentrant ou sortant
        v2z = v21.cross(v23)
        sens = Z_AXIS.dot(v2z)      

        if Z_AXIS.dot(normal)>= 0
          if sens > 0
            angle = 0 - angle
          end
        else
          if sens < 0
            angle = 0 - angle
          end
        end

            

        #calcule du nombre de segments suivant l'angle décrit
        angle_a = angle.abs()
        num_segments = ((circle_segments * angle_a) / (2 * pi)).round()      

        # On dessine l'arc
        arc = ents.add_arc( arc_center, xaxis, normal, radius_local, 0, angle, num_segments)
        arcs << arc      

        [arc_start, arc_end]

      end

      

      # Nettoyage des collineaires
      array = array.filter { |a| a != nil }
      array << array[0]

      # dessin des arrêtes
      array.each_cons(2).map do |arc1,arc2|

        pt1 = arc1[1]
        pt2 = arc2[0]

        # Test si les points sont difféerents
        if pt1 != pt2
          edge = ents.add_line(pt1,pt2)
          edges << edge
        end

      end

      # Création de la face
      join = arcs + edges
      newface = ents.add_face(join.flatten)
      
      #Orientation de la face pour être identique à l'originale
      if newface
        newface.reverse! unless newface.normal == normal
      end

      # Effacement de la face pour créer le trou si loop est inner
      if index > 0
        newface.erase! if newface.valid?
      end      

      

    end#Fin loop

  end#Fin face


  # Eclatemt du sous groupe s'il n'y avait qu'une seule face
  if super_group_ents.size ==1
    super_group_ents[0].explode
  end

  

  #Effacement de l'originale
  if erase
    edges = faces.map { |f| f.edges}.flatten.uniq
    edges.each { |e| e.erase! if e.valid? }
  end

  model.commit_operation  

  return super_group

end

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens SketchUp_2c5TtzfsjU

Je créerai l'outil si cela vous intéresse
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens IPB_917

tenrev et JDD 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 : 19777
Points : 34426
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mer 28 Fév 2024 - 15:25

@simjoubert t'es le meilleurs , bien meilleur que chatgpt

mais du coup tu as laissé tombé le plugin composant dynamique ? fou2 waah woah

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

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens 575088biblio3d
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2819
Points : 6264
Age : 48
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 28 Fév 2024 - 15:31

Hello Mais non c'était un challenge de la soirée !
Histoire de changé un peu !

J'ai rajouté deux autres options:
Make group true/false par défaut :true
Extrude épaisseur d'extrusion par défaut 0. Pour 5cm il faut saisir 5.cm

Du coup on peut faire de choses sympas :

La bande de roulement des pneus

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens SketchUp_80oId0oUIk

Une boule de noel
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens SketchUp_ABl76o7VQP

voila le nouveau code

Code:

#*************************************************************************************************
#     FACES ROUND CORNERS
#     Auteur Simon Joubert
#     Version 1.2 2024/02/28
#
#   Arrondis tous les angles des faces sélectionnées
#   Crée des points de guidage sur le centre de l'arrondi et ses extremités
#   Extrude les faces arrondies
#*************************************************************************************************
# Paramètres :
#   radius de l'arrondis
#     par défaut 0.5.m
#     le radius sera réduit si est trop grand pour etre accueilli par la moitié du plus petit côté
#
#   Circle_segments Nombre d'arrêtes pour faire 360°
#     le nombres d'arrêtes sera proportionel selon l'angle décrit
#     valeur par défaut 48
#
#   Erase efface la face originale
#     Par défaut true
#  
#   Make_Group Le résultat est dans un groupe et chaque faces arrondies dans un sous group
#     Par defaut true
#
#   Extrude permet d'extruder les faces arrondies
#     Par défaut 0.cm
#*********************************************************************************************
# Retourne le groupe contenant des sous groupes contenant une des faces arrondis.
# S'il n'y a qu'une face de sélectionnée la face arrondie est directement dans le groupe
#
# Exemple new_round_faces = faces_round_corners(0.5.m, 48, true, true, 3.cm)
#
#**********************************************************************************************

def faces_round_corners(radius = 50.cm, circle_segments = 48, erase = true, make_group = true, extrude = 0)

  circle_segments = circle_segments.to_i.to_f
  pi = Math::PI

  model = Sketchup.active_model
  model.start_operation("Faces Round Corners", true)

  active_path = model.active_path[-1]

  case
  when active_path.class == Sketchup::ComponentInstance
    entities = active_path.definition.entities
  when active_path.class == Sketchup::Group
    entities = active_path.entities
  else
    entities = model.entities
  end  

  
  faces = model.selection.grep(Sketchup::Face)

  raise "Error No faces selected !" unless faces

  # Groupe qui contiendra le résultat
  super_group = entities.add_group
  super_group.name = "Faces_round_corners"
  super_group_ents = super_group.entities

  # Boucle sur chaque faces
  faces.each do |face|

    # Création d'un sous group pour contenir la face arrondie
    group = super_group_ents.add_group
    ents = group.entities

    normal = face.normal
    loops = face.loops
    # Si la face est ajourée on ordonne les loops [outer, inner1, inner...]
    if loops.size > 1
      inner_loops = loops.filter { |loop| !loop.outer? }
      outer_loops = loops.filter { |loop| loop.outer? }
      loops = outer_loops + inner_loops
      loops.flatten!
    end
    
    # Boucle sur chaque loops
    loops.each_with_index do |loop, index|

      #On récupère les points
      pts = loop.vertices.map{|v|v.position}
      pts_a = pts + pts[0..1]

      arcs = []
      egdes_pts = []
      edges = []

      # Boucle sur chaque triplet de points de la face
      array = pts_a.each_cons(3).map do |p1,p2,p3|      

        pt = p2
        v21 = p2.vector_to(p1).normalize
        v23 = p2.vector_to(p3).normalize
        d21 = p2.distance(p1)
        d23 = p2.distance(p3)
        dmin = [d21,d23].min/2

        # Test si les points sont colineaires
        if v21.parallel?(v23)
          next
        end

        # Calul du centre de l'arc
        v = (v21 + v23).normalize
        l1 = [p2, v21]
        l2 = [p2,v23]
        angle = v21.angle_between(v23)

        # Test si le plus petit coté peux  accueillir l'arrondi sinon réduit le radius
        if radius / Math.tan(angle / 2) > dmin
          angle_complementaire = pi / 2 - angle / 2
          radius_local = dmin / Math.tan(angle_complementaire)
        else
          radius_local = radius
        end      

        # Calcule de la position sur la bisectrice de l'angle
        hypo = radius_local / Math.sin(angle / 2)
        arc_center = p2.offset(v, hypo)
        ents.add_cpoint(arc_center)

        #Calcule des points de tengeance
        arc_start = arc_center.project_to_line(l1)
        ents.add_cpoint(arc_start)      

        arc_end = arc_center.project_to_line(l2)
        ents.add_cpoint(arc_end)      

        xaxis = arc_center.vector_to(arc_start)
        endaxis = arc_center.vector_to(arc_end)

        angle = xaxis.angle_between(endaxis)

        # Test si angle rentrant ou sortant
        v2z = v21.cross(v23)
        sens = Z_AXIS.dot(v2z)      

        if Z_AXIS.dot(normal)>= 0
          if sens > 0
            angle = 0 - angle
          end
        else
          if sens < 0
            angle = 0 - angle
          end
        end

            

        #calcule du nombre de segments suivant l'angle décrit
        angle_a = angle.abs()
        num_segments = ((circle_segments * angle_a) / (2 * pi)).round()      

        # On dessine l'arc
        arc = ents.add_arc( arc_center, xaxis, normal, radius_local, 0, angle, num_segments)
        arcs << arc      

        [arc_start, arc_end]

      end

      

      # Nettoyage des collineaires
      array = array.filter { |a| a != nil }
      array << array[0]

      # dessin des arrêtes
      array.each_cons(2).map do |arc1,arc2|

        pt1 = arc1[1]
        pt2 = arc2[0]

        # Test si les points sont difféerents
        if pt1 != pt2
          edge = ents.add_line(pt1,pt2)
          edges << edge
        end

      end

      # Création de la face
      join = arcs + edges
      newface = ents.add_face(join.flatten)
      
      #Orientation de la face pour être identique à l'originale
      if newface
        newface.reverse! unless newface.normal == normal
      end

      # Effacement de la face pour créer le trou si loop est inner
      if index > 0
        newface.erase! if newface.valid?
      end      

      

    end#Fin loop

    if extrude != 0
      new_round_faces = ents.grep(Sketchup::Face)
      new_round_faces.each do |new_round_face|
        new_round_face.pushpull(extrude, true)
      end
    end

  end#Fin face

  #Effacement de l'originale
  if erase
    edges = faces.map { |f| f.edges}.flatten.uniq
    edges.each { |e| e.erase! if e.valid? }
  end

  # Eclatemt du sous groupe s'il n'y avait qu'une seule face
  if super_group_ents.size ==1
    super_group_ents[0].explode
  end

  unless make_group
    sous_groups = super_group_ents.grep(Sketchup::Group)
    sous_groups.each { |g| g.explode if g.valid?  }
    super_group.explode
  end  
  
  model.commit_operation  

  return super_group

end


 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens IPB_917

tenrev, JDD et Miroslav aiment ce message

JDD
JDD
V.I.P.
V.I.P.
Masculin Humeur : Cool, œil de lynx à pattes de velours
Date d'inscription : 21/05/2021
Nombre de messages : 970
Points : 2256
Age : 75
Localisation : Nord (59)
Emploi : Director of Myself

MessageJDD Mer 28 Fév 2024 - 17:36

Hello @simjoubert,

Alors comme cela, le grand maitre se défoule pendant que le big boss piaffe d'impatience!

En tous cas, Super sympa ta nouvelle extension.

Si tu as ou trouves un jour le temps de créer l'outil, je pense que la variable radius devrait être accessible par l'utilisateur via une fenêtre ou autre moyen.

En tout cas je suis preneur.

Encore Bravo

JDD

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 : 19777
Points : 34426
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mer 28 Fév 2024 - 17:41

JDD a écrit:Alors comme cela, le grand maitre se défoule pendant que le big boss piaffe d'impatience!

ouai c'est clair ca fait quinze jours qu'il nous dit que c'est pour demain mdr6 mdr5  bon on attendra le temps qu'il faudra
j'avais déja quelques idées de composants à faire avec la fonction qui va chercher un sous composant externe , mais bon je patiente , je patiente

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Giphy


Dernière édition par tenrev le Mer 28 Fév 2024 - 17:41, édité 1 fois

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

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens 575088biblio3d
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2819
Points : 6264
Age : 48
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 28 Fév 2024 - 17:41

Hello @JDD
C'était un jet pour s'amuser !sourire
Si le challenge de le mettre sous forme d'outils te tente lat's go, sinon il faudra attendre un peu car la liste des doléances s'allonge.
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens IPB_917

tenrev et JDD 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 : 19777
Points : 34426
Age : 61
Localisation : Dans la quatrieme dimension
Emploi : archi d'intérieur salarié
https://www.biblio3d.com

Messagetenrev Mer 28 Fév 2024 - 17:45

simjoubert a écrit:Hello  @JDD
C'était un jet pour s'amuser !sourire
Si le challenge de le mettre sous forme d'outils te tente lat's go, sinon il faudra attendre un peu car la liste des doléances s'allonge.
 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens IPB_917

c'est quand que tu remplaces dan burnes chez sketchup ? en tout cas tu es chaud pour vendre des plugins

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

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens 575088biblio3d
simjoubert
simjoubert
Administrateurs
Administrateurs
Masculin Humeur : Des racines et des rêves !!!
Date d'inscription : 05/08/2012
Nombre de messages : 2819
Points : 6264
Age : 48
Localisation : Val de Marne
Emploi : Paysagiste
https://www.sketchup.simjoubert.com/

Messagesimjoubert Mer 28 Fév 2024 - 17:52

Pour ma défense,
J'ai trouvé une parade avec un observateur pour corriger le bug dans le texte 3d, et je veux implémenter cette idée pour que les opérations booléennes se mettent à jour également, ainsi qu'anticollision.
Mais la bestiole est encore capricieuse. Pour le texte 3d j'ai fait au moins 300 itérations de la fonction pour trouver la bonne ! Je suis lent mais tenace !
L'idée est d'avoir des outils productifs et fiable.

Le plus long même si j'ai presque tout désactivé c'est de redémarrer SU à chaque fois !

 [ SKETCHUP SCRIPTS ] Help ! Par quoi ou comment remplacer l'ancienne methode "nitems" dans plugins anciens Giphy

tenrev et Miroslav aiment ce message

Contenu sponsorisé

MessageContenu sponsorisé

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