Ton bloc notes
Derniers sujets
» [ TWINMOTION ] Unreal Engine déménage sur Fab - Assets de Megascan
par JDD Hier à 21:52
» [ TWINMOTION ] Unreal Engine déménage sur Fab - DataSmith & Archicad
par Coulou Hier à 9:48
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - AK40Cess - Archicad-Twinmotion
par AK40Cess Sam 5 Oct 2024 - 6:56
» [ ARTLANTIS ] Ca donne envie !
par AK40Cess Sam 5 Oct 2024 - 6:50
» [ CHALLENGE ARCHITECTURE EXTERIEURE OU PAYSAGISTE ] Démarrage du challenge 2024 - les régles
par tenrev Jeu 3 Oct 2024 - 14:58
» [ ARCHICAD ] Cotation d'ouverture sans hauteur
par Titou Jeu 3 Oct 2024 - 11:21
» [ SKETCHUP généralité ] Aide pour SKP 2017
par PEGASE Mer 2 Oct 2024 - 15:05
» [ ARCHICAD ] - Bardage à claire voie paramétrique
par Fred0079 Mer 2 Oct 2024 - 10:53
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - allansens - cinema 4D
par Allansens Lun 30 Sep 2024 - 10:38
» [ SKETCHUP LIVE COMPONENT ] besoin de tuyaux sur les textures random
par simjoubert Lun 30 Sep 2024 - 0:45
» [ D5_RENDER ] Animation visualisation architecturale
par Gaspard Hauser Jeu 26 Sep 2024 - 16:49
» [ ARCHICAD ] Ajouter du lambris sur un mur
par Patrick Superpat Mer 25 Sep 2024 - 18:20
» [ SKETCHUP LIVE COMPONENT ] Importer une liste de points dans son graphe via un input texte
par simjoubert Mer 25 Sep 2024 - 16:32
» [ ARCHICAD ] Extrémités de Poutres
par Coulou Mer 25 Sep 2024 - 9:54
» [ SKETCHUP LIVE COMPONENT ] chemin courbe défini dans sketchup
par simjoubert Ven 20 Sep 2024 - 20:07
» Bonjour à tous !
par tenrev Lun 16 Sep 2024 - 11:49
» Recherche un dessinateur pour mes produits
par tenrev Lun 16 Sep 2024 - 11:48
» [ SKETCHUP composants dynamiques ]
par simjoubert Dim 15 Sep 2024 - 9:37
» [ CHALLENGE 2024 ]Challenge architecture extérieure ou paysagiste - Nicolaco - Sketchup - Blender - Cycles (ABANDON)
par youyou40 Lun 9 Sep 2024 - 19:18
» Des vignettes à la place d'un export Graphique 2D !
par Gaspard Hauser Ven 6 Sep 2024 - 0:01
» [ MATOS INFORM. ] Application Splashtop Wired XDisplay, pour utliser votre tablette iPad ou Android en moniteur supplémentaire
par JDD Jeu 5 Sep 2024 - 10:49
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste- Gaspard Hauser - Sketchup - D5 render
par JDD Mer 4 Sep 2024 - 18:03
» [ SKETCHUP généralité ]
par lionel Claude Mar 3 Sep 2024 - 19:45
» [ D5_RENDER ] Comparatif D5 enhancement vs Krea AI enhancement
par Gaspard Hauser Dim 1 Sep 2024 - 19:40
» [ Challenge 2024] cHallenge archjtexture exterieur ou paysagiste-vick-sketchup-enscape
par Gaspard Hauser Dim 1 Sep 2024 - 12:34
» [ D5_RENDER ] Animation d'objets, Phasing animation D5 render
par AK40Cess Sam 31 Aoû 2024 - 10:33
» [ TWINMOTION ] Appliquer un decal avec les outils spacing et area de Twinmotion 2024
par AK40Cess Ven 30 Aoû 2024 - 4:00
» [ SKETCHUP généralité ]
par Gaspard Hauser Dim 25 Aoû 2024 - 8:58
» [ SKETCHUP plugins ]
par furax49 Ven 23 Aoû 2024 - 15:54
» [ SKETCHUP généralité ] SOS problème avec les arêtes
par vick Jeu 22 Aoû 2024 - 19:15
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - JDD - SketchUp - Enscape
par Gaspard Hauser Jeu 22 Aoû 2024 - 12:10
» [ D5_RENDER ] Images de l'intérieur meublé de de la villa Bauhaus
par Gaspard Hauser Sam 17 Aoû 2024 - 19:24
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - Simjoubert - sketchup Enscape
par simjoubert Sam 17 Aoû 2024 - 15:32
» [ D5_RENDER ] comparaison D5 render Twinmotion
par Gaspard Hauser Jeu 15 Aoû 2024 - 10:08
» [ SKETCHUP généralité ] Objets 3D luminaires
par PEGASE Mar 13 Aoû 2024 - 6:14
par JDD Hier à 21:52
» [ TWINMOTION ] Unreal Engine déménage sur Fab - DataSmith & Archicad
par Coulou Hier à 9:48
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - AK40Cess - Archicad-Twinmotion
par AK40Cess Sam 5 Oct 2024 - 6:56
» [ ARTLANTIS ] Ca donne envie !
par AK40Cess Sam 5 Oct 2024 - 6:50
» [ CHALLENGE ARCHITECTURE EXTERIEURE OU PAYSAGISTE ] Démarrage du challenge 2024 - les régles
par tenrev Jeu 3 Oct 2024 - 14:58
» [ ARCHICAD ] Cotation d'ouverture sans hauteur
par Titou Jeu 3 Oct 2024 - 11:21
» [ SKETCHUP généralité ] Aide pour SKP 2017
par PEGASE Mer 2 Oct 2024 - 15:05
» [ ARCHICAD ] - Bardage à claire voie paramétrique
par Fred0079 Mer 2 Oct 2024 - 10:53
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - allansens - cinema 4D
par Allansens Lun 30 Sep 2024 - 10:38
» [ SKETCHUP LIVE COMPONENT ] besoin de tuyaux sur les textures random
par simjoubert Lun 30 Sep 2024 - 0:45
» [ D5_RENDER ] Animation visualisation architecturale
par Gaspard Hauser Jeu 26 Sep 2024 - 16:49
» [ ARCHICAD ] Ajouter du lambris sur un mur
par Patrick Superpat Mer 25 Sep 2024 - 18:20
» [ SKETCHUP LIVE COMPONENT ] Importer une liste de points dans son graphe via un input texte
par simjoubert Mer 25 Sep 2024 - 16:32
» [ ARCHICAD ] Extrémités de Poutres
par Coulou Mer 25 Sep 2024 - 9:54
» [ SKETCHUP LIVE COMPONENT ] chemin courbe défini dans sketchup
par simjoubert Ven 20 Sep 2024 - 20:07
» Bonjour à tous !
par tenrev Lun 16 Sep 2024 - 11:49
» Recherche un dessinateur pour mes produits
par tenrev Lun 16 Sep 2024 - 11:48
» [ SKETCHUP composants dynamiques ]
par simjoubert Dim 15 Sep 2024 - 9:37
» [ CHALLENGE 2024 ]Challenge architecture extérieure ou paysagiste - Nicolaco - Sketchup - Blender - Cycles (ABANDON)
par youyou40 Lun 9 Sep 2024 - 19:18
» Des vignettes à la place d'un export Graphique 2D !
par Gaspard Hauser Ven 6 Sep 2024 - 0:01
» [ MATOS INFORM. ] Application Splashtop Wired XDisplay, pour utliser votre tablette iPad ou Android en moniteur supplémentaire
par JDD Jeu 5 Sep 2024 - 10:49
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste- Gaspard Hauser - Sketchup - D5 render
par JDD Mer 4 Sep 2024 - 18:03
» [ SKETCHUP généralité ]
par lionel Claude Mar 3 Sep 2024 - 19:45
» [ D5_RENDER ] Comparatif D5 enhancement vs Krea AI enhancement
par Gaspard Hauser Dim 1 Sep 2024 - 19:40
» [ Challenge 2024] cHallenge archjtexture exterieur ou paysagiste-vick-sketchup-enscape
par Gaspard Hauser Dim 1 Sep 2024 - 12:34
» [ D5_RENDER ] Animation d'objets, Phasing animation D5 render
par AK40Cess Sam 31 Aoû 2024 - 10:33
» [ TWINMOTION ] Appliquer un decal avec les outils spacing et area de Twinmotion 2024
par AK40Cess Ven 30 Aoû 2024 - 4:00
» [ SKETCHUP généralité ]
par Gaspard Hauser Dim 25 Aoû 2024 - 8:58
» [ SKETCHUP plugins ]
par furax49 Ven 23 Aoû 2024 - 15:54
» [ SKETCHUP généralité ] SOS problème avec les arêtes
par vick Jeu 22 Aoû 2024 - 19:15
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - JDD - SketchUp - Enscape
par Gaspard Hauser Jeu 22 Aoû 2024 - 12:10
» [ D5_RENDER ] Images de l'intérieur meublé de de la villa Bauhaus
par Gaspard Hauser Sam 17 Aoû 2024 - 19:24
» [ CHALLENGE 2024 ] Challenge architecture extérieure ou paysagiste - Simjoubert - sketchup Enscape
par simjoubert Sam 17 Aoû 2024 - 15:32
» [ D5_RENDER ] comparaison D5 render Twinmotion
par Gaspard Hauser Jeu 15 Aoû 2024 - 10:08
» [ SKETCHUP généralité ] Objets 3D luminaires
par PEGASE Mar 13 Aoû 2024 - 6:14
formulaire/diaporama
chaine sketchup.tv
Serveur Discord
modifier le contenu d'une barre SCF
Page 2 sur 3 • Partagez
Page 2 sur 3 • 1, 2, 3
Cela fonctionne, mais ce n'est pas très pratique pour l'utilsateur la même chose avec une interface utlisateur => un menu
Même manip que d'habitude, maintenant dans le menu "plugins" tu dois trouver deux commandes pour lancer tes deux méthodes...
Voila la conception d'un plugin simple avec son interface utilisateur, il suffira pour chaque plugin du même type, d'identifier le plugin proprement dit et de supprimer l'interface utilsateur, pour l'intégrer à ta barre d'outils
.../...
- Code:
def essai1
UI.messagebox "Lancement de la méthode 1"
end
def essai2
UI.messagebox "Lancement de la méthode 2"
end
if !file_loaded? ("Essai_methode")
add_separator_to_menu("Plugins")
testmenu = UI.menu("Plugins").add_submenu("Essai_methodes")
cmd = []
cmd[0] = UI::Command.new("Methode 1") { essai1 }
cmd[1] = UI::Command.new("Methode 2") { essai2 }
cmd.each do |e| testmenu.add_item(e); end
file_loaded("Essai_methode")
end
Même manip que d'habitude, maintenant dans le menu "plugins" tu dois trouver deux commandes pour lancer tes deux méthodes...
Voila la conception d'un plugin simple avec son interface utilisateur, il suffira pour chaque plugin du même type, d'identifier le plugin proprement dit et de supprimer l'interface utilsateur, pour l'intégrer à ta barre d'outils
.../...
wahoooo, et en plus, ça marche... je suis trop fort !
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Exemple maintenant d'un autre type de plugin, tu peux voir que l'appel de la commande ou de l'outil est différent et passe notamment par la création d'un objet :
Une classe composée de deux méthodes
A sauvegarder sous "essai_classe.rb"
Commande à saisir dans la "Webconsole" =>
UI.messagebox Essai_classe.new.essai3(1)
ou
Essai_classe.new.essai4
../..
Une classe composée de deux méthodes
- Code:
class Essai_classe
def essai3(x)
x = "Lancement de la classe 3"
return x
end
def essai4
UI.messagebox "Lancement de la classe 4"
end
end
A sauvegarder sous "essai_classe.rb"
Commande à saisir dans la "Webconsole" =>
UI.messagebox Essai_classe.new.essai3(1)
ou
Essai_classe.new.essai4
../..
Ok, je viens de faire un lancement de classe
pas de pb pour la première formule
pour la seconde, je viens de voir que majuscule et minuscule ont leur importance.
essai_classe.new.essai4 => me donne droit à une erreur
Essai_classe.new.essai4 => impec
pas de pb pour la première formule
pour la seconde, je viens de voir que majuscule et minuscule ont leur importance.
essai_classe.new.essai4 => me donne droit à une erreur
Essai_classe.new.essai4 => impec
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
ploum a écrit:Ok, je viens de faire un lancement de classe
pas de pb pour la première formule
pour la seconde, je viens de voir que majuscule et minuscule ont leur importance.
essai_classe.new.essai4 => me donne droit à une erreur
Essai_classe.new.essai4 => impec
Bien vu, effectivement le nom d'une méthode commence toujours par une minuscule, un nom de classe ou d'un module commence toujours par une majuscule
Pour en finir avec la partie Classe, voila un autre type de menu
modifier "essai_classe.rb" de la maniere suivante
- Code:
class Essai_classe
def essai3(x)
x = "Lancement de la classe 3"
return x
end
def essai4
UI.messagebox "Lancement de la classe 4"
end
end
if not file_loaded?("Essai_classe")
UI.add_context_menu_handler do |context_menu|
context_menu.add_separator
sous_menu = context_menu.add_submenu("Essai_classe")
sous_menu.add_item("Essai 3") { UI.messagebox Essai_classe.new.essai3(1) }
sous_menu.add_item("Essai 4") { Essai_classe.new.essai4 }
end
file_loaded("Essai_classe")
end
Tu dois trouver, maintenant en faisant un clic droit sur un objet quelconque, dans le menu contextuel deux sous-menu essai3 et essai4
../..
Ok, ça fonctionne.
par contre j'ai du relancer SU, la Ruby Toolbar ne me rechargeait pas ces dernières modif.
par contre j'ai du relancer SU, la Ruby Toolbar ne me rechargeait pas ces dernières modif.
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Nickel
En version rapide la même chose maintenant pour un module et après on attaque la construction de la barre d'outils
Enregistrer sous "essai_module.rb"
Enregistrer et relancer SU
Commandes à exécuter
pour essai5 => Essai_module::Essai5.new.essai5
pour essai6 => Essai_module.essai6
Si cela fonctionne, tu modifies a nouveau le fichier "essai_module.rb"
Enregistrer et relancer SU
Tu devrais avoir un nouveau sous menu maintenant dans le menu "Edition"
../..
En version rapide la même chose maintenant pour un module et après on attaque la construction de la barre d'outils
Enregistrer sous "essai_module.rb"
- Code:
module Essai_module
class Essai5
def essai5
UI.messagebox "Lancement de module 5"
end
end
def self.essai6
UI.messagebox "Lancement de module 6"
end
end
Enregistrer et relancer SU
Commandes à exécuter
pour essai5 => Essai_module::Essai5.new.essai5
pour essai6 => Essai_module.essai6
Si cela fonctionne, tu modifies a nouveau le fichier "essai_module.rb"
- Code:
module Essai_module
class Essai5
def essai5
UI.messagebox "Lancement de module 5"
end
end
def self.essai6
UI.messagebox "Lancement de module 6"
end
end
if !file_loaded? ("Essai_module")
add_separator_to_menu("Edit")
testmenu = UI.menu("Edit").add_item(UI::Command.new("Essai-module 5") { Essai_module::Essai5.new.essai5 })
testmenu = UI.menu("Edit").add_item(UI::Command.new("Essai-module 6") { Essai_module.essai6 })
file_loaded("Essai_module")
end
Enregistrer et relancer SU
Tu devrais avoir un nouveau sous menu maintenant dans le menu "Edition"
../..
Ok, j'ai essai-module 5 et essai-module 6 dans le menu édition, + les messagebox qui vont avec.
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Globalement tu dois avoir donc 3 trois plugins
essai_methode.rb
essai_classe.rb
essai_module.rb
Pour chacun des plugins on va isoler la partie gestion menu, voire les supprimer. je te le deconseille c'est dans cette partie que l'on repere les commandes.
Sinon il y a deux posssibilités ajouter des "#" a chaque debut de ligne ou encadrer le bloc par la commande "=begin"....... et "=end"
du style =>
ou
essai_methode.rb
essai_classe.rb
essai_module.rb
Pour chacun des plugins on va isoler la partie gestion menu, voire les supprimer. je te le deconseille c'est dans cette partie que l'on repere les commandes.
Sinon il y a deux posssibilités ajouter des "#" a chaque debut de ligne ou encadrer le bloc par la commande "=begin"....... et "=end"
du style =>
- Code:
module Essai_module
class Essai5
def essai5
UI.messagebox "Lancement de module 5"
end
end
def self.essai6
UI.messagebox "Lancement de module 6"
end
end
=begin
if !file_loaded? ("Essai_module")
add_separator_to_menu("Edit")
testmenu = UI.menu("Edit").add_item(UI::Command.new("Essai-module 5") { Essai_module::Essai5.new.essai5 })
testmenu = UI.menu("Edit").add_item(UI::Command.new("Essai-module 6") { Essai_module.essai6 })
file_loaded("Essai_module")
end
=end
ou
- Code:
def essai1
UI.messagebox "Lancement de la méthode 1"
end
def essai2
UI.messagebox "Lancement de la méthode 2"
end
#if !file_loaded? ("Essai_methode")
# add_separator_to_menu("Plugins")
# testmenu = UI.menu("Plugins").add_submenu("Essai_methodes")
# cmd = []
# cmd[0] = UI::Command.new("Methode 1") { essai1 }
# cmd[1] = UI::Command.new("Methode 2") { essai2 }
#
# cmd.each do |e| testmenu.add_item(e); end
# file_loaded("Essai_methode")
#end
Ok, donc de cette façon, on neutralise le plugin tout en le conservant, et en ayant une trace des changements effectués, pas à l'arrache comme j'avais essayé, même si j'avais noté au début.....ça c'était fini en chair à plugin.
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Exactement en apparence le plugin n'est pas actif, si tu entres les commandes dans la console il s'execute.
Il est en quelque sorte en latence.
On va pouvoir passer à la construction de la barre d'outils
Premiere chose, il faut construire les icones ou en recuperer.
Elements à respecter il te faut deux tailles d'icones par commande pour s'adapter au choix de l'utilisateur "grands boutons" ou "petits boutons"
1 icone en 16X16 et 1 icone en 24X24 au format .png pour chaque commande
si tu récupères des icones au format .ico il suffit de les renommer en .png
Pour eviter que les 12 icones se balladent dans le répertoire Plugins, on va créer un répertoire Ploum dans le répertoire Plugins et coller les icones dedans
J'en ai préparé quelques unes pour aller plus vite en besogne.....
http://www.box.net/shared/2suuyxzhzl
A decompresser dans le répertoire Plugins
../..
Il est en quelque sorte en latence.
On va pouvoir passer à la construction de la barre d'outils
Premiere chose, il faut construire les icones ou en recuperer.
Elements à respecter il te faut deux tailles d'icones par commande pour s'adapter au choix de l'utilisateur "grands boutons" ou "petits boutons"
1 icone en 16X16 et 1 icone en 24X24 au format .png pour chaque commande
si tu récupères des icones au format .ico il suffit de les renommer en .png
Pour eviter que les 12 icones se balladent dans le répertoire Plugins, on va créer un répertoire Ploum dans le répertoire Plugins et coller les icones dedans
J'en ai préparé quelques unes pour aller plus vite en besogne.....
http://www.box.net/shared/2suuyxzhzl
A decompresser dans le répertoire Plugins
../..
J'ai mis mon super dossier ploum dans les plugin...
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
On passe à la suite alors
maintenant on va construire le plugin qui va "piloter" la barre d'outils"
A enregistrer sous "ma_barre.rb"
enregistrer et relancer, si la barre ne s'affiche pas, l'activer dans le menu "Affichage" => "Barres d'outils"
ligne 1 charge la barre d'outil seulement si elle n'est pas chargée
ligne 11 renseigne le chargement de la barre
ligne 2 création de l'objet barre d'outil "Ma_barre"
ligne 4 affectation de la commande
ligne 5 affectation du chemin et du nom de l'icone de petite taille
ligne 6 affectation du chemin et du nom de l'icone de grande taille
ligne 7 creation d'un message lorsque tu as le focus sur le bouton (non obligatoire)
ligne 8 affichage d'un message dans la zone texte en bas de l'écran à gauche lorsque tu as le focus sur le bouton (non obligatoire)
ligne 9 on ajoute l'item cmd0 à l'objet "Ma_barre"
Tu devrais logiquement avoir une barre avec l'icone "1" qui lance la méthode "Essai 1"
../..
maintenant on va construire le plugin qui va "piloter" la barre d'outils"
A enregistrer sous "ma_barre.rb"
- Code:
unless file_loaded?("Ma_Barre")
toolbar = UI::Toolbar.new("Ma_Barre")
cmd0 = UI::Command.new("Ma_Barre") { essai1 }
cmd0.small_icon = File.join(File.dirname(__FILE__), "Ploum", "1_sm.png")
cmd0.large_icon = File.join(File.dirname(__FILE__), "Ploum", "1_lg.png")
cmd0.tooltip = "Tooltip Essai1"
cmd0.menu_text = "Barre texte Essai1"
toolbar.add_item(cmd0)
file_loaded "Ma_Barre"
end
enregistrer et relancer, si la barre ne s'affiche pas, l'activer dans le menu "Affichage" => "Barres d'outils"
ligne 1 charge la barre d'outil seulement si elle n'est pas chargée
ligne 11 renseigne le chargement de la barre
ligne 2 création de l'objet barre d'outil "Ma_barre"
ligne 4 affectation de la commande
ligne 5 affectation du chemin et du nom de l'icone de petite taille
ligne 6 affectation du chemin et du nom de l'icone de grande taille
ligne 7 creation d'un message lorsque tu as le focus sur le bouton (non obligatoire)
ligne 8 affichage d'un message dans la zone texte en bas de l'écran à gauche lorsque tu as le focus sur le bouton (non obligatoire)
ligne 9 on ajoute l'item cmd0 à l'objet "Ma_barre"
Tu devrais logiquement avoir une barre avec l'icone "1" qui lance la méthode "Essai 1"
../..
Ok, j'y suis.
J'avoue que j'ai fini par faire un copier/coller de ton texte, pas trouvé à quel endroit je merdouillais.
bref !
J'avoue que j'ai fini par faire un copier/coller de ton texte, pas trouvé à quel endroit je merdouillais.
bref !
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Probablement une petite erreur de syntaxe
maintenant il suffit de reperer les lignes de 4 à 9 autant de fois qu'il y a de commandes à gerer en incrementant la variable cmd0 à chaque fois =>
cmd1,cmd2........
modifier le fichier "ma_barre.rb"
Maintenant tu devrais avoir ça
../..
maintenant il suffit de reperer les lignes de 4 à 9 autant de fois qu'il y a de commandes à gerer en incrementant la variable cmd0 à chaque fois =>
cmd1,cmd2........
modifier le fichier "ma_barre.rb"
- Code:
unless file_loaded?("Ma_Barre")
toolbar = UI::Toolbar.new("Ma_Barre")
cmd0 = UI::Command.new("Ma_Barre") { essai1 }
cmd0.small_icon = File.join(File.dirname(__FILE__), "Ploum", "1_sm.png")
cmd0.large_icon = File.join(File.dirname(__FILE__), "Ploum", "1_lg.png")
cmd0.tooltip = "Tooltip Essai1"
cmd0.menu_text = "Barre texte Essai1"
toolbar.add_item(cmd0)
cmd1 = UI::Command.new("Ma_Barre") { essai2 }
cmd1.small_icon = File.join(File.dirname(__FILE__), "Ploum", "2_sm.png")
cmd1.large_icon = File.join(File.dirname(__FILE__), "Ploum", "2_lg.png")
cmd1.tooltip = "Tooltip Essai2"
cmd1.menu_text = "Barre texte Essai2"
toolbar.add_item(cmd1)
cmd2 = UI::Command.new("Ma_Barre") { UI.messagebox Essai_classe.new.essai3(1) }
cmd2.small_icon = File.join(File.dirname(__FILE__), "Ploum", "3_sm.png")
cmd2.large_icon = File.join(File.dirname(__FILE__), "Ploum", "3_lg.png")
cmd2.tooltip = "Tooltip Essai3"
cmd2.menu_text = "Barre texte Essai3"
toolbar .add_item(cmd2)
cmd3 = UI::Command.new("Ma_Barre") { Essai_classe.new.essai4 }
cmd3.small_icon = File.join(File.dirname(__FILE__), "Ploum", "4_sm.png")
cmd3.large_icon = File.join(File.dirname(__FILE__), "Ploum", "4_lg.png")
cmd3.tooltip = "Tooltip Essai4"
cmd3.menu_text = "Barre texte Essai4"
toolbar .add_item(cmd3)
cmd4 = UI::Command.new("Ma_Barre") { Essai_module::Essai5.new.essai5 }
cmd4.small_icon = File.join(File.dirname(__FILE__), "Ploum", "5_sm.png")
cmd4.large_icon = File.join(File.dirname(__FILE__), "Ploum", "5_lg.png")
cmd4.tooltip = "Tooltip Essai5"
cmd4.menu_text = "Barre texte Essai5"
toolbar .add_item(cmd4)
cmd5 = UI::Command.new("Ma_Barre") { Essai_module.essai6 }
cmd5.small_icon = File.join(File.dirname(__FILE__), "Ploum", "6_sm.png")
cmd5.large_icon = File.join(File.dirname(__FILE__), "Ploum", "6_lg.png")
cmd5.tooltip = "Tooltip Essai6"
cmd5.menu_text = "Barre texte Essai6"
toolbar .add_item(cmd5)
file_loaded "Ma_Barre"
end
Maintenant tu devrais avoir ça
../..
Impec, j'ai une jolie barre d'outils.
une question pour mon erreur de syntaxe, dans Notepad++, il y a-t-il un outil à activer qui pourrait vérifier mes erreurs, ou du moins en partie ?
une question pour mon erreur de syntaxe, dans Notepad++, il y a-t-il un outil à activer qui pourrait vérifier mes erreurs, ou du moins en partie ?
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Non tu peux ameliorer la visualisation de ton script en activant la coloration syntaxique, qui te permet de bien reperer les mots clefs et donc d'identifier un certain nombre d'erreur de syntaxe.
Par contre quand tu teste un plugin, active la console ruby qui logiquement identifie les erreurs....
Il ne faudra pas oublier d'effacer les plugins de tests, qui vont surcharger SU pour rien...
Sinon on peut faire un ou deux essai avec des plugins précis
@+
Par contre quand tu teste un plugin, active la console ruby qui logiquement identifie les erreurs....
Il ne faudra pas oublier d'effacer les plugins de tests, qui vont surcharger SU pour rien...
Sinon on peut faire un ou deux essai avec des plugins précis
@+
Ok, donc là, par exemple, j'ai 3d Shapes Tools d'installé.
je vais conserver les 3 composants par défaut, cône, sphère et pyramide.
De la barre SCF Drawtools, j'aimerais prendre le torus, le dome, et la goutte ( tear drop) pour les rajouter à 3d Shapes.
Il faudrait peut-être que je dépose les deux plugins sur le net pour être sur de travailler sur les mêmes ?
Si je n'ai pas fais de blague, les deux plugin se trouvent
ici
je vais conserver les 3 composants par défaut, cône, sphère et pyramide.
De la barre SCF Drawtools, j'aimerais prendre le torus, le dome, et la goutte ( tear drop) pour les rajouter à 3d Shapes.
Il faudrait peut-être que je dépose les deux plugins sur le net pour être sur de travailler sur les mêmes ?
Si je n'ai pas fais de blague, les deux plugin se trouvent
ici
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
voilà qui est fait
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Tu as du oublier le lien
sinon en attendant
Par soucis de clarté :
Tu peux renommer le repertoire "Ploum" en "Icones" et changer tous les "Ploum" en "Icones" du script "ma_barre.rb"
tu pourras ainsi coller toutes tes icones ici et ainsi le chemin sera a chaque fois identique...
Ensuite sur 3dshape.rb tu peux isoler la partie menu et identifier les trois commandes
Les trois commandes à recuperer
Sketchup.active_model.select_tool ConeTool.new
Sketchup.active_model.select_tool SphereTool.new
Sketchup.active_model.select_tool PyramidTool.new
../..
sinon en attendant
Par soucis de clarté :
Tu peux renommer le repertoire "Ploum" en "Icones" et changer tous les "Ploum" en "Icones" du script "ma_barre.rb"
tu pourras ainsi coller toutes tes icones ici et ainsi le chemin sera a chaque fois identique...
Ensuite sur 3dshape.rb tu peux isoler la partie menu et identifier les trois commandes
- Code:
########################################################
#
# 3d Shapes Tool - Designed May 2008 by Macs
#
########################################################
# Copyright 2004-2005, @Last Software, Inc.
# Permission to use, copy, modify, and distribute this software for
# any purpose and without fee is hereby granted, provided that the above
# copyright notice appear in all copies.
# THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#-----------------------------------------------------------------------------
# Name : 3d shapes tool 1.0
# Description : A tool to create varius 3d shapes with the mouse.
# Menu Item : Draw->3D Shapes->...
# Context Menu: NONE
# Date : 8/05/2008
# Type : Tool
#Based on : Rotated Rectangle Tool 1.0
#-----------------------------------------------------------------------------
require 'sketchup.rb'
#=============================================================================
class PyramidTool
@@ltcursor = 0
def initialize
@ip = Sketchup::InputPoint.new
@ip1 = Sketchup::InputPoint.new
@planex = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(1,0,0)]
@planey = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,1,0)]
@planez = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)]
if @@ltcursor == 0
plugins = Sketchup.find_support_file("Plugins")
imgdir = File.join(plugins, "3DShapesToolbar")
c = File.join(imgdir, "3dshapes_cursor.png")
@@ltcursor = UI::create_cursor(c, 1, 30)
end
reset
end
def reset
@moved = false
@pts = []
@pir_pts
@state = 0
@ip1.clear
@drawn = false
Sketchup::set_status_text "", SB_VCB_LABEL
Sketchup::set_status_text "", SB_VCB_VALUE
Sketchup::set_status_text "Click for start point"
@shift_down_time = Time.now
end
def activate
self.reset
end
def deactivate(view)
view.invalidate if @drawn
end
#def resume(view)
# view.invalidate
#end
def onSetCursor
UI::set_cursor(@@ltcursor)
end
def set_current_point(x, y, view)
if( !@ip.pick(view, x, y, @ip1) )
return false
end
need_draw = true
# Set the tooltip that will be displayed
view.tooltip = @ip.tooltip
# Compute points
case @state
when 0
@pts[0] = @ip.position
@pts[4] = @pts[0]
need_draw = @ip.display? || @drawn
when 1
@pts[1] = @ip.position
@width = @pts[0].distance @pts[1]
Sketchup::set_status_text @width.to_s, SB_VCB_VALUE
when 2
pt1 = @ip.position
pt2 = pt1.project_to_line @pts
vec = pt1 - pt2
@deep = vec.length
if( @deep > 0 )
# test for a square
square_point = pt2.offset(vec, @width)
if( view.pick_helper.test_point(square_point, x, y) )
@deep = @width
@pts[2] = @pts[1].offset(vec, @deep)
@pts[3] = @pts[0].offset(vec, @deep)
view.tooltip = "Square"
else
@pts[2] = @pts[1].offset(vec)
@pts[3] = @pts[0].offset(vec)
end
self.temp_apex(@pts, view)
else
@pts[2] = @pts[1]
@pts[3] = @pts[0]
end
Sketchup::set_status_text @deep.to_s, SB_VCB_VALUE
when 3
@pir_pts = self.get_apex(view,@ip,@vect_perp,@center)
@height = @pir_pts.distance @center
Sketchup::set_status_text @height.to_s, SB_VCB_VALUE
end
view.invalidate if need_draw
end
def onMouseMove(flags, x, y, view)
@moved = true
self.set_current_point(x, y, view)
end
def temp_apex( pts, view )
@center = calculate_center(@pts)
@height = view.pixels_to_model 50.cm, @ip.position
vec1 = @pts[0] - @center
vec2 = @center- @pts[1]
@vect_perp = vec1.cross vec2
@pir_pts = @center.offset(@vect_perp, @height)
end
def calculate_center( pts )
middlepoint = Geom::Point3d.linear_combination 0.5, pts[0], 0.5, pts[1]
vec = pts[2] - pts[1]
vec.length = vec.length / 2
return middlepoint.offset(vec)
end
#get apex point
def get_apex(view, ip, vec, origin)
if (ip.degrees_of_freedom != 3 )
return ip.position.project_to_line([origin, vec])
else
@c_orig = view.screen_coords origin
@c_ip = view.screen_coords ip.position
@c_on_normal = view.screen_coords origin.offset( vec )
@c_apex = @c_ip.project_to_line [@c_orig, @c_on_normal]
a = Geom.closest_points [origin, vec], view.pickray(@c_apex.x, @c_apex.y)
return a[0]
end
end
def create_geometry
# check for zero deep
if( @pts[0] != @pts[3] )
model = Sketchup.active_model
model.start_operation $exStrings.GetString("Pyramid")
model.active_entities.add_face @pts
for i in 0..3
Sketchup.active_model.active_entities.add_face @pir_pts,@pts[i], @pts[i+1]
end
model.commit_operation
end
self.reset
end
def increment_state
@moved = false
@state += 1
case @state
when 1
@ip1.copy! @ip
Sketchup::set_status_text "Click for second point"
Sketchup::set_status_text "Length", SB_VCB_LABEL
Sketchup::set_status_text "Move mouse", SB_VCB_VALUE
@pts[1] = @pts[0]
when 2
@ip1.clear
Sketchup::set_status_text "Click for third point"
Sketchup::set_status_text "Width", SB_VCB_LABEL
Sketchup::set_status_text "Move mouse", SB_VCB_VALUE
@pts[2] = @pts[0]
@pts[3] = @pts[0]
when 3
Sketchup::set_status_text "Click for fourth point"
Sketchup::set_status_text "Height", SB_VCB_LABEL
Sketchup::set_status_text "Move mouse", SB_VCB_VALUE
when 4
self.create_geometry
end
end
def onLButtonDown(flags, x, y, view)
if @moved
self.set_current_point(x, y, view)
self.increment_state
view.lock_inference
end
end
def onCancel(flag, view)
view.invalidate if @drawn
self.reset
end
# This is called when the user types a value into the VCB
def onUserText(text, view)
# The user may type in something that we can't parse as a length
# so we set up some exception handling to trap that
begin
value = text.to_l
rescue
# Error parsing the text
UI.beep
value = nil
Sketchup::set_status_text "", SB_VCB_VALUE
end
return if !value
case @state
when 1
# update the width
vec = @pts[1] - @pts[0]
if( vec.length > 0.0 )
vec.length = value
@pts[1] = @pts[0].offset(vec)
view.invalidate
self.increment_state
end
when 2
# update the deep
vec = @pts[3] - @pts[0]
if( vec.length > 0.0 )
vec.length = value
@pts[2] = @pts[1].offset(vec)
@pts[3] = @pts[0].offset(vec)
temp_apex(@pts, view)
self.increment_state
end
when 3
@pir_pts = @center.offset(@vect_perp, value)
self.increment_state
end
end
def getExtents
bb = Sketchup.active_model.bounds
case @state
when 0
# We are getting the first point
if( @ip.valid? )
bb.add @ip.position
end
when 1
bb.add @pts[0]
bb.add @pts[1]
when 2
bb.add @pts
bb.add @pir_pts
when 3
bb.add @pir_pts
end
bb
end
def draw(view)
@drawn = false
# Show the current input point
if( @ip.valid? && @ip.display? )
@ip.draw(view)
@drawn = true
end
# show the rectangle
if( @state == 1 )
# just draw a line from the start to the end point
view.set_color_from_line(@ip1, @ip)
inference_locked = view.inference_locked?
view.line_width = 3 if inference_locked
view.draw(GL_LINE_STRIP, @pts[0], @pts[1])
view.line_width = 1 if inference_locked
@drawn = true
elsif( @state > 1 )
# draw the curve
view.drawing_color = "black"
view.draw(GL_LINE_STRIP, @pts)
view.draw_lines @pir_pts, @pts[0], @pir_pts, @pts[1], @pir_pts, @pts[2], @pir_pts, @pts[3]
view.drawing_color = "gray"
view.line_stipple="_"
view.draw_lines(@pir_pts, @ip.position)
@drawn = true
end
end
def onKeyDown(key, rpt, flags, view)
if( key == CONSTRAIN_MODIFIER_KEY && rpt == 1 )
@shift_down_time = Time.now
# if we already have an inference lock, then unlock it
if( view.inference_locked? )
view.lock_inference
elsif( @state == 0 )
view.lock_inference @ip
elsif( @state == 1 )
view.lock_inference @ip, @ip1
end
end
end
def onKeyUp(key, rpt, flags, view)
if( key == CONSTRAIN_MODIFIER_KEY &&
view.inference_locked? &&
(Time.now - @shift_down_time) > 0.5 )
view.lock_inference
end
end
end # of class PyramidTool
class ConeTool < PyramidTool
def reset
@moved = false
@pts = []
@pir_pts
@state = 0
@ip1.clear
@drawn = false
@sides = 24
Sketchup::set_status_text "Sides > 2", SB_VCB_LABEL
Sketchup::set_status_text @sides, SB_VCB_VALUE
Sketchup::set_status_text "Click for center of cone"
@shift_down_time = Time.now
end
def set_current_point(x, y, view)
if( !@ip.pick(view, x, y, @ip1) )
return false
end
need_draw = true
# Set the tooltip that will be displayed
view.tooltip = @ip.tooltip
# Compute points
case @state
when 0
@pts[0] = @ip.position
need_draw = @ip.valid? || @drawn
when 1
@pts[1] = @ip.position
@radius = @pts[0].distance @pts[1]
Sketchup::set_status_text @radius.to_s, SB_VCB_VALUE
when 2
@pts[2] = self.get_apex(view, @ip, @normal, @pts[0])
@height = @pts[0].distance @pts[2]
Sketchup::set_status_text @height.to_s, SB_VCB_VALUE
end
view.invalidate if need_draw
end
def draw(view)
@drawn = false
# Show the current input point
if( @ip.valid? && @ip.display? )
@ip.draw(view)
@drawn = true
end
return if (!@ip.valid?) #this will eliminate the first draw on selecting the tool.
# show the circle
if( @state == 0 )
point = @ip.position
@radius = view.pixels_to_model 50.cm, @ip.position
@height = @radius*2
if point.on_plane? @planey
@normal = Geom::Vector3d.new(0,1,0)
view.drawing_color = "green"
elsif point.on_plane? @planex
@normal = Geom::Vector3d.new(1,0,0)
view.drawing_color = "red"
else
@normal = Geom::Vector3d.new(0,0,1)
view.drawing_color = "blue"
end
face = @ip.face
if ( face )
@normal = face.normal
end
pts_circle = self.points_on_circle( @ip.position,@normal, @radius, @sides)
apex = point.offset(@normal, @height)
view.draw_lines(point, apex)
for i in 0..@sides
view.draw_lines(apex, pts_circle[i])
end
view.draw(GL_LINE_STRIP, pts_circle)
@drawn = true
elsif( @state == 1 )
# just draw a line from the start to the end point
view.set_color_from_line(@ip1, @ip)
#inference_locked = view.inference_locked?
#view.line_width = 3 if inference_locked
#view.lock_inference @ip1
vector = nil
ptr = @ip.position
v1 = ptr - @pts[0]
if (@normal == nil)
ptr2 = ptr.clone
ptr2.x = ptr.y
ptr2.y = ptr.x
v2 = ptr2 - @pts[0]
@normal = v1.cross v2
else
ptr = ptr.project_to_plane [@pts[0], @normal]
v1 = ptr - @pts[0]
end
pts_circle = self.points_on_circle( @pts[0], @normal, v1.length, @sides)
view.draw(GL_LINE_STRIP, @pts[0], ptr)
apex = @pts[0].offset(@normal, @height)
view.drawing_color = "blue"
view.draw(GL_LINE_STRIP, pts_circle)
for i in 0..@sides
view.draw_lines(apex, pts_circle[i])
end
@drawn = true
elsif( @state > 1 )
# draw the curve
view.drawing_color = "blue"
pts_circle = self.points_on_circle( @pts[0], @normal, @radius, @sides)
for i in 0..@sides
view.draw_lines(@pts[2], pts_circle[i])
end
view.draw(GL_LINE_STRIP, pts_circle)
view.drawing_color = "gray"
view.line_stipple="_"
view.draw_lines(@pts[2], @ip.position)
@drawn = true
#view.line_stipple=""
#view.drawing_color = "red"
#view.draw2d GL_LINES, @c_orig, @c_ip
#view.drawing_color = "green"
#view.draw2d GL_LINES, @c_ip, @c_on_normal
#view.drawing_color = "blue"
#view.draw2d GL_LINES, @c_on_normal, @c_apex
#view.drawing_color = "yellow"
#view.draw2d GL_LINES, @c_apex, @c_orig
end
end
def points_on_circle(center, normal, radius, numseg)
# Get the x and y axes
axes = Geom::Vector3d.new(normal).axes
#center = Geom::Point3d.new(center)
xaxis = axes[0]
yaxis = axes[1]
xaxis.length = radius
yaxis.length = radius
# compute the points
da = (Math::PI * 2) / numseg #/
pts = []
for i in 0..numseg do
angle = i * da
cosa = Math.cos(angle)
sina = Math.sin(angle)
vec = Geom::Vector3d.linear_combination(cosa, xaxis, sina, yaxis)
pts.push(center + vec)
end
# close the circle
#pts.push(pts[0].clone)
pts
end
def increment_state
@moved = false
@state += 1
case @state
when 1
@ip1.copy! @ip
Sketchup::set_status_text "Click to set the radius"
Sketchup::set_status_text "Radius", SB_VCB_LABEL
Sketchup::set_status_text "Move mouse", SB_VCB_VALUE
when 2
@ip1.clear
Sketchup::set_status_text "Click to set the height"
Sketchup::set_status_text "Height", SB_VCB_LABEL
Sketchup::set_status_text "Move mouse", SB_VCB_VALUE
when 3
self.create_geometry
end
end
def getExtents
bb = Sketchup.active_model.bounds
case @state
when 0
# We are getting the first point
if( @ip.valid? )
bb.add @ip.position
end
when 1
bb.add @pts[0]
if (@pts[1] != nil)
bb.add @pts[1]
end
when 2
bb.add @pts
end
bb
end
# This is called when the user types a value into the VCB
def onUserText(text, view)
# The user may type in something that we can't parse as a length
# so we set up some exception handling to trap that
begin
value = text.to_l
rescue
# Error parsing the text
UI.beep
value = nil
Sketchup::set_status_text "", SB_VCB_VALUE
end
return if !value
case @state
when 0
return if ( text.to_i < 3 )
@sides = text.to_i
view.invalidate
when 1
# update the radius
@radius = value
view.invalidate
self.increment_state
when 2
# update the height
@height = value
@pts[2]= @pts[0].offset(@normal, @height)
self.increment_state
end
end
def create_geometry
model = Sketchup.active_model
if @sides > 8
model.start_operation $exStrings.GetString("Cone")
else
model.start_operation $exStrings.GetString("Pyramid")
end
# Create the base
ent = model.active_entities
circle = ent.add_circle @pts[0], @normal, @radius, @sides
numf = circle[0].find_faces #this actually creates a face when needed
if ( numf == 1 && @normal != [0,0,1] )
circle[0].faces[0].reverse!
end
e2 = []
for i in 0...@sides
e2[i] = ent.add_line(circle[i].start.position, @pts[2])
if @sides > 8
e2[i].soft = true
e2[i].smooth = true
end
end
for i in 0...@sides-1
ent.add_face circle[i], e2[i], e2[i+1]
end
ent.add_face circle[@sides-1], e2[@sides-1], e2[0]
model.commit_operation
self.reset
end
end # end ConeTool
class SphereTool < ConeTool
def reset
@moved = false
@pts = []
@state = 0
@ip1.clear
@drawn = false
@sides = 24
Sketchup::set_status_text "Sides > 3", SB_VCB_LABEL
Sketchup::set_status_text @sides, SB_VCB_VALUE
Sketchup::set_status_text "Click for sphere's center"
@shift_down_time = Time.now
end
def increment_state
@moved = false
@state += 1
case @state
when 1
@ip1.copy! @ip
Sketchup::set_status_text "Click to set the radius"
Sketchup::set_status_text "Radius", SB_VCB_LABEL
Sketchup::set_status_text "Move mouse", SB_VCB_VALUE
when 2
self.create_geometry
end
end
def draw(view)
@drawn = false
# Show the current input point
if( @ip.valid? && @ip.display? )
@ip.draw(view)
@drawn = true
end
return if (!@ip.valid?)
# show the circle
if( @state == 0 )
point = @ip.position
@radius = view.pixels_to_model 100.cm, @ip.position
@height = @radius*2
pts_circle = self.points_on_circle( point,Geom::Vector3d.new(0,0,1), @radius, @sides)
view.draw(GL_LINE_STRIP, pts_circle)
base = []
top = []
for i in 0..@sides
va = pts_circle[i] - point
vdot = va.axes[0].reverse!
pts_circle2 = self.points_on_semic( point,vdot, @radius, @sides)
view.draw(GL_LINE_STRIP, pts_circle2)
base.push(pts_circle2[0])
top.push(pts_circle2.pop)
end
view.draw(GL_LINE_STRIP, top)
view.draw(GL_LINE_STRIP, base)
#pts_circle = self.points_on_circle( point,Geom::Vector3d.new(0,1,0), @radius, @sides)
#view.draw(GL_LINE_STRIP, pts_circle)
#pts_circle = self.points_on_circle( point,Geom::Vector3d.new(1,0,0), @radius, @sides)
#view.draw(GL_LINE_STRIP, pts_circle)
@drawn = true
elsif( @state == 1 )
# just draw a line from the start to the end point
view.set_color_from_line(@ip1, @ip)
ptr = @ip.position
return if (ptr == @pts[0])
view.draw(GL_LINE_STRIP, @pts[0], ptr)
view.drawing_color = "blue"
v1 = ptr - @pts[0]
@radius = v1.length
pts_circle = self.points_on_circle( @pts[0],Geom::Vector3d.new(0,0,1), @radius, @sides)
view.draw(GL_LINE_STRIP, pts_circle)
#view.drawing_color = "red"
base = []
top = []
for i in 0..@sides
va = pts_circle[i] - @pts[0]
vdot = va.axes[0].reverse!
#pdot = @pts[0].offset(vdot, 200)
#view.draw_lines(@pts[0], pdot )
pts_circle2 = self.points_on_semic( @pts[0],vdot, @radius, @sides)
view.draw(GL_LINE_STRIP, pts_circle2)
base.push(pts_circle2[0])
top.push(pts_circle2.pop)
#view.drawing_color = "green"
end
view.draw(GL_LINE_STRIP, top)
view.draw(GL_LINE_STRIP, base)
@pts[1] = top[0]
@pts[2] = base[0]
#view.drawing_color = "red"
#pts_circle = self.points_on_circle( @pts[0],Geom::Vector3d.new(0,1,0), @radius, @sides)
#view.draw(GL_LINE_STRIP, pts_circle)
@drawn = true
end
end
def points_on_semic(center, normal, radius, numseg)
# Get the x and y axes
axes = Geom::Vector3d.new(normal).axes
#center = Geom::Point3d.new(center)
xaxis = axes[0]
yaxis = axes[1]
xaxis.length = radius
yaxis.length = radius
#numseg = numseg*2 if (numseg % 2 == 1)
# compute the points
da = (Math::PI * 2) / (numseg)
pts = []
for i in -(numseg/4)..numseg/4 do
angle = i * da
cosa = Math.cos(angle)
sina = Math.sin(angle)
vec = Geom::Vector3d.linear_combination(cosa, xaxis, sina, yaxis)
pts.push(center + vec)
end
pts
end
# This is called when the user types a value into the VCB
def onUserText(text, view)
# The user may type in something that we can't parse as a length
# so we set up some exception handling to trap that
begin
value = text.to_l
rescue
# Error parsing the text
UI.beep
value = nil
Sketchup::set_status_text "", SB_VCB_VALUE
end
return if !value
case @state
when 0
return if ( text.to_i < 4 )
@sides = text.to_i
view.invalidate
when 1
# update the radius
@radius = value
view.invalidate
self.increment_state
end
end
def create_geometry
model = Sketchup.active_model
if @sides > 12
model.start_operation $exStrings.GetString("Sphere")
else
model.start_operation $exStrings.GetString("Polyhedron")
end
# Create the base
ent = model.active_entities
pts_circle = self.points_on_circle( @pts[0],Geom::Vector3d.new(0,0,1), @radius, @sides)
circle = ent.add_circle( @pts[0],Geom::Vector3d.new(0,0,1), @radius, @sides)
base = []
top = []
pts_circle2 = []
for i in 0..@sides
va = pts_circle[i] - @pts[0]
vdot = va.axes[0].reverse!
pts_circle2[i] = self.points_on_semic( @pts[0],vdot, @radius, @sides)
base.push(pts_circle2[i][0])
top.push(pts_circle2[i][pts_circle2[i].size-1])
end
s = pts_circle2[i].size
draw_top = draw_base = true
for x in 0...(s-1)
for i in 0...@sides
a = pts_circle2[i][x]
b = pts_circle2[(i+1)%@sides][x]
c = pts_circle2[(i+1)%@sides][(x+1)%s]
d = pts_circle2[i][(x+1)%s]
if ( a == b )
face = ent.add_face a, c, d
draw_top = false
elsif ( c == d )
face = ent.add_face a, b, d
draw_base = false
else
face = ent.add_face a, b, c, d
end
if (@sides >= 12)
ed = face.edges
ed[0].soft=true
ed[1].soft=true
ed[2].soft=true
ed[0].smooth=true
ed[1].smooth=true
ed[2].smooth=true
end
end
end
ent.add_face(top) if draw_top
ent.add_face(base) if draw_base
model.commit_operation
self.reset
end
def set_current_point(x, y, view)
if( !@ip.pick(view, x, y, @ip1) )
return false
end
need_draw = true
# Set the tooltip that will be displayed
view.tooltip = @ip.tooltip
# Compute points
case @state
when 0
@pts[0] = @ip.position
need_draw = @ip.valid? || @drawn
end
view.invalidate if need_draw
end
def getExtents
bb = Sketchup.active_model.bounds
case @state
when 0
# We are getting the first point
if( @ip.valid? )
bb.add @ip.position
end
when 1
bb.add @pts
if( @ip.valid? )
bb.add @ip.position
end
end
bb
end
end # SphereTool
#=============================================================================
# Add a menu choice
=begin
if( not $shapestool_menu_loaded )
add_separator_to_menu("Draw")
new_menu = UI.menu("Draw").add_submenu("3D Shapes")
new_toolbar = UI::Toolbar.new("3D Shapes Tool")
plugins = Sketchup.find_support_file("Plugins")
imgdir = File.join(plugins, "3DShapesToolbar")
cmd = UI::Command.new("Cone or Pyramid") {Sketchup.active_model.select_tool ConeTool.new }
cmd.small_icon = cmd.large_icon = File.join(imgdir, "cone_icon.png")
cmd.tooltip = "Cone or Pyramid"
cmd.menu_text = "Cone or Pyramid"
new_menu.add_item(cmd)
new_toolbar.add_item(cmd)
cmd = UI::Command.new("Sphere") {Sketchup.active_model.select_tool SphereTool.new }
cmd.small_icon = cmd.large_icon = File.join(imgdir, "sphere_icon.png")
cmd.tooltip = "Sphere"
cmd.menu_text = "sphere"
new_menu.add_item(cmd)
new_toolbar.add_item(cmd)
cmd = UI::Command.new("Rotated Pyramid") {Sketchup.active_model.select_tool PyramidTool.new }
cmd.small_icon = cmd.large_icon = File.join(imgdir, "rot_pyramid_icon.png")
cmd.tooltip = "Rotated Pyramid"
cmd.menu_text = "Rotated Pyramid"
new_menu.add_item(cmd)
new_toolbar.add_item(cmd)
new_toolbar.show
$shapestool_menu_loaded = true
end
=end
Les trois commandes à recuperer
Sketchup.active_model.select_tool ConeTool.new
Sketchup.active_model.select_tool SphereTool.new
Sketchup.active_model.select_tool PyramidTool.new
../..
oups ICI
je pensais les avoir déposé dans le même dossier
je vais regarder ce dont tu me parles.
je pensais les avoir déposé dans le même dossier
je vais regarder ce dont tu me parles.
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Je suis dans le dossier icons de DRAW, et j'y trouve des icones que je n'avais jamais vu auparavant
si quelqu'un passant par là peut m'en dire d'avantage
Qu' est-ce qui est le plus logique en manipulation,
- ôter les éléments de SCF DRAW qui ne m'intéressent pas,
- ou bien prendre ceux qui m'intéressent pour les envoyer sur la 3DShapesTools.
si quelqu'un passant par là peut m'en dire d'avantage
Qu' est-ce qui est le plus logique en manipulation,
- ôter les éléments de SCF DRAW qui ne m'intéressent pas,
- ou bien prendre ceux qui m'intéressent pour les envoyer sur la 3DShapesTools.
-------------------------------------------------------------------------------------------------------------------------
" heureux les fêlés car ils laissent passer la lumière "
Les icones correspondent aux programmes=>
Torus
Horn
Torus2
Le + simple, c'est de ne pas pas toucher aux scripts et de construire ta barre d'outils....
Je te prepare un exemple concret sur la base de ce l'on a vu avant
Torus
Horn
Torus2
Le + simple, c'est de ne pas pas toucher aux scripts et de construire ta barre d'outils....
Je te prepare un exemple concret sur la base de ce l'on a vu avant
Dernière édition par c.plassais le Jeu 14 Oct 2010 - 8:17, édité 1 fois
- Contenu sponsorisé
Page 2 sur 3 • 1, 2, 3
Sujets similaires
Créer un compte ou se connecter pour répondre
Vous devez être membre pour répondre.
Page 2 sur 3
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum