-
Compteur de contenus
45 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Giropode
-
Bonjour à tous, Au bureau, nous nous sommes mis à REVIT il y a peu. Avec mes deux collègues galériens, nous sommes en train d'établir les fondement de notre gabarit pour ensuite transmettre à nos autres collègues. A l'heure actuelle, je suis sur le sujet des exports DWG, cher à notre direction (conservation de l'interopérabilité avec nos collègues encore sous AutoCAD). J'arrive donc à générer un fichier DWG correspondant "graphiquement" à ce que je voudrais. Cependant, une fois le fichier généré, il manque quelques petites manipulations à faire dans le fichier pour être en phase avec les habitudes du BE (éléments dans les bons calques, bonnes échelles de traits, de hachures, etc.) J'ai pondu un LISP qui créé les calques manquants de notre charte. Ce même LISP est censé déplacer les éléments d'un claque à un autre en fonction d'un filtre de sélection. Mais c'est à ce moment là que ça bloque. Petit déroulé du fonctionnement du LISP: Changement des variables MEASUREMENT, PSLTSCALE et LTSCALEImport des types de ligne CACHE et AXES2Création des calques manquantsDéplacement des éléments d'un calque à un autre (par exemple éléments magenta dans le calque BA-murs vers le calque BA-md) Code que j'ai pondu: (defun c:XPORTRVT (/ *error*) (setq XPORTRVT_CMDECHO (getvar 'CMDECHO) ) (setq XPORTRVT_MEASUREMENT (getvar 'MEASUREMENT) ) (setq XPORTRVT_PSLTSCALE (getvar 'PSLTSCALE) ) (setq XPORTRVT_LTSCALE (getvar 'LTSCALE) ) (defun *error* (MsgErreur) (setvar 'CMDECHO XPORTRVT_CMDECHO) (setvar 'MEASUREMENT XPORTRVT_MEASUREMENT) (setvar 'PSLTSCALE XPORTRVT_PSLTSCALE) (setvar 'LTSCALE XPORTRVT_LTSCALE) (princ "\nErreur : ") (princ MsgErreur) (princ "\nLa finalisation de l'export a échouée.") (princ) ); Fin de defun (setvar 'CMDECHO 0) ; Modification des variables selon gabarit BETREC (setvar 'MEASUREMENT 0) (setvar 'PSLTSCALE 0) (setvar 'LTSCALE 50) ; Importation des styles de ligne CACHE et AXES2 (command-s "_LINETYPE" "_LO" "CACHE" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "") (command-s "_LINETYPE" "_LO" "AXES2" "B:/Gabarits/STR/acad.lin" "" "" "" "" "" "" "" "") ; Création de la liste des calques BETREC (XPORTRVT_CreationCalque "BA-axes" "AXES2" "0.20" "110") (XPORTRVT_CreationCalque "BA-cartouche" "Continuous" "0.35" "254") (XPORTRVT_CreationCalque "BA-charpente" "Continuous" "0.25" "13") (XPORTRVT_CreationCalque "BA-cot" "Continuous" "0.20" "2") (XPORTRVT_CreationCalque "BA-cot impact" "Continuous" "0.15" "220") (XPORTRVT_CreationCalque "BA-cot reservations" "Continuous" "0.15" "191") (XPORTRVT_CreationCalque "BA-cot dalles escaliers" "Continuous" "0.35" "10") (XPORTRVT_CreationCalque "BA-existant" "CACHE" "0.25" "155") (XPORTRVT_CreationCalque "BA-fenetres" "Continuous" "0.20" "141") (XPORTRVT_CreationCalque "BA-hach" "Continuous" "0.15" "211") (XPORTRVT_CreationCalque "BA-hach dalles" "Continuous" "0.05" "133") (XPORTRVT_CreationCalque "BA-hach pot et cv" "Continuous" "0.15" "9") (XPORTRVT_CreationCalque "BA-md" "CACHE" "0.15" "6") (XPORTRVT_CreationCalque "BA-murs" "Continuous" "0.70" "7") (XPORTRVT_CreationCalque "BA-non porteur" "Continuous" "0.35" "253") (XPORTRVT_CreationCalque "BA-pieux puits" "Continuous" "0.35" "40") (XPORTRVT_CreationCalque "BA-pointillés" "CACHE" "0.15" "4") (XPORTRVT_CreationCalque "BA-poutres" "Continuous" "0.35" "1") (XPORTRVT_CreationCalque "BA-rep arma" "Continuous" "0.20" "82") (XPORTRVT_CreationCalque "BA-reservations" "Continuous" "0.15" "201") (XPORTRVT_CreationCalque "BA-reservations dalle" "Continuous" "0.15" "201") (XPORTRVT_CreationCalque "BA-semelles" "Continuous" "0.35" "30") (XPORTRVT_CreationCalque "BA-textes" "Continuous" "0.20" "3") (XPORTRVT_CreationCalque "BA-xrefs" "Continuous" "0.05" "7") ; Réatribution des élèments dans les bons calques (XPORTRVT_DeplacementElements "BA-murs" "BA-md" "LINE" "6" "CACHE") (setvar 'CMDECHO XPORTRVT_CMDECHO) (alert "Modification de l'export terminé !") (princ) ); Fin de la commande XPORTRVT ; -------------------------------------------------- ; Fonction permettant de créer les calques manquants (defun XPORTRVT_CreationCalque ( XPORTRVT_NomCalque XPORTRVT_TypeLigne XPORTRVT_EpLigne XPORTRVT_CouleurCalque / *error*) (defun *error* (MsgErreur) (princ "\nErreur : ") (princ MsgErreur) (princ) ); Fin de defun (if (not (tblsearch "LAYER" XPORTRVT_NomCalque) ) (entmakex (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") '(70 . 0) (cons 2 XPORTRVT_NomCalque) (cons 62 (atoi XPORTRVT_CouleurCalque) ) (cons 6 XPORTRVT_TypeLigne) (cons 370 (atoi XPORTRVT_EpLigne) ) ); Fin de list ); Fin de entmake ); Fin de if ); Fin de la fonction XPORTRVT_CreationCalque ; -------------------------------------------------- ; ---------------------------------------------------------- ; Fonction permettant de les éléments d'un calque à un autre (defun XPORTRVT_DeplacementElements ( XPORTRVT_CalqueOrigine XPORTRVT_CalqueDestination XPORTRVT_TypeElement XPORTRVT_CouleurElement XPORTRVT_TypeLigneElement / *error*) (defun *error* (MsgErreur) (princ "\nErreur : ") (princ MsgErreur) (princ) ); Fin de defun (ssget "X" (list '(-4 . "<AND") '(0 . "LINE") '(8 . "BA-murs") '(62 . 6) '(6 . "CACHE") '(-4 . "AND>") ) ) (command "CHPROP" "CA" XPORTRVT_CalqueDestination) (command "CHPROP" "CO" "DuCalque") (command "CHPROP" "T" "DuCalque") ); Fin de la fonction XPORTRVT_DeplacementElements ; ---------------------------------------------------------- Je reste à votre disposition pour toute précision. Bonne journée à tous.
-
Ahhh ! Cool ! C'est parfait ! Merci beaucoup !
-
Bonjour, C'est parfait, la compilation se déroule sans erreur. Maintenant, dernière question, liée à mon manque de connaissance, comment utilise-t-on dans un projet cette macro ? :(rires forts): Bonne journée à tous.
-
Bonjour à tous, Désolé de ne pas avoir donné signe de vie, j'étais en congé :(rires forts): . J'ai donc appliqué les petites modifications préconisées par @Goldorak44. Cependant, j'ai toujours une erreur qui s'affiche dans le compilateur : Voici le code tel que je l'ai dans mon éditeur (peut être que j'ai fait une boulette !): /* * Created by SharpDevelop. * User: GuillaumeO * Date: 05/11/2015 * Time: 18:28 * * To change this template use Tools | Options | Coding | Edit Standard Headers. */ using System; using Autodesk.Revit.Exceptions; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace ModuleBetrec { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("735454FC-813B-42BB-9E79-7D6569BC811C")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { } private void Module_Shutdown(object sender, EventArgs e) { } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion public void CenterTxt() { UIDocument uiDoc = Application.ActiveUIDocument; Document doc = uiDoc.Document; Selection selection = uiDoc.Selection; ICollection<ElementId> ids = selection.GetElementIds(); using (var tr = new Transaction(doc, "CenterTxt")) { if (tr.Start() == TransactionStatus.Started) { foreach (ElementId id in ids) { Element element = doc.GetElement(id); var tn = element as TextNote; if (tn == null) continue; XYZ p1 = selection.PickPoint("First point"); XYZ p2 = selection.PickPoint("Second point"); tn.Coord = (p1 + p2) / 2; tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_HORZ).Set((int) TextAlignFlags.TEF_ALIGN_CENTER); tn.get_Parameter(BuiltInParameter.TEXT_ALIGN_VERT).Set((int) TextAlignFlags.TEF_ALIGN_MIDDLE); } tr.Commit(); } else { throw new Exception("Transaction can not be started."); } } } } } Merci à tous et bonne journée !
-
Bonjour, Merci de la réponse. Je m'en doutais que cette fonction de confort n'était pas implémentée directement. Aaaah les ricains ! Sinon, je pense avoir a peu près bien suivi l'article du premier numéro d'AroBIM: Création d'un module C# Création d'une Macro Collage du code que tu m'as donné Compilation ... Ah... j'ai un souci au point 5 Le compilateur me mets deux erreur: Le nom 'commandData' n'existe pas dans le contexte actuel (CS0103) Le type ou le nom d'espace de noms 'UserException' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?) (CS0246) As-tu une piste ? Merci par avance de ta précieuse aide !
-
Bonjour à tous, Nouvelle question sur Revit. J'ai l'impression d'être un psychopathe de la mise en forme, car je n'ai trouvé aucun sujet parlant de ce problème. Existe-t-il un moyen pour aligner un texte/libellé par rapport à un point de justification ? Par exemple le milieu-centre d'une zone de texte par rapport au centre d'une "case" ? Pour l'instant je fais de la mise en place à l’œil, mais mon côté psychorigide est excessivement agacé par cette mise en forme approximative ! Du coup, si vous avez l'astuce je suis tout ouïe ! Bonne journée à tous !
-
Bonjour, J'ai finalement réussi à faire fonctionner la bestiole. Elle n'apporte pas la solution escomptée, mais bon, sait-on jamais à l'avenir ! Bonne journée à tous.
-
Bonjour à tous, Est-ce que certains parmis vous ont déjà utilisés REVIT DB Link ? Si oui, pouvez-vous me rediriger vers une aide/tutoriel explicite sur le fonctionnement de cette petite bêbête ? Merci par avance !
-
Bonjour à tous, En fait j'ai compris d'où venait le "bug". Il suffit de passer à un espace de travail différent et de revenir sur celui souhaité... Bref, faut pas chercher à comprendre ! Bonne journée à tous !
-
Salut ! Les deux mon capitaine... (c'est pour cela que je comprends pas trop ^^)
-
Désactiver les accrochages 2 (le retour)
Giropode a répondu à un(e) sujet de (gile) dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour bonjour, Voila des années que je cherche le moyen de désactiver les accrochages objets sur les xrefs et enfin j'ai trouvé ! Merci mille fois ! Cependant, je suis sous AutoCAD 2016 et lorsque je passe à un autre dessin, que j'utilise aussi la commande XROS et que je reviens au premier dessin j'ai le message d'erreur suivant: En cliquant sur Ignorer tout rentre dans l'ordre. Bonne journée et merci encore ! -
Bonjour à tous, Je me suis créé un onglet personnalisé dans le ruban et j'ai mis cet onglet en premier. Cependant, de temps en temps (sans raison particulière) l'onglet se met à la fin. Avez-vous une idée de la raison pour laquelle il change de place ? Merci par avance et bonne journée.
-
[Résolu] Création de plusieurs présentations
Giropode a répondu à un(e) sujet de Giropode dans LISP et Visual LISP
Re, J'avoue que je n'ai jamais était trop confronté au problème. En effet, dans les carnets de ferraillage, les feuillets dépassent rarement la cinquantaine de pages ^^. En plus généralement, on fait notre mise en page à la fin. Mais l'idée est bonne et me donne un autre défi : dessiner un rectangle et jouer avec pour le modifier ^^ -
[Résolu] Création de plusieurs présentations
Giropode a répondu à un(e) sujet de Giropode dans LISP et Visual LISP
Un cadre qui sert uniquement à dire : "Eh coco ! T'as fait les présentations de seuelement ces pages ?" ^^ -
[Résolu] Création de plusieurs présentations
Giropode a répondu à un(e) sujet de Giropode dans LISP et Visual LISP
Parfait ! A ce sujet, j'étais partis avec cette solution de base, mais en faisant un test en mettant juste o en minuscule, ça ne fonctionnait pas... Erreur de ma part, j'avais mis getstring au lieu de getkword... Il va falloir que je me penche sur le sujet. J'en ai un peu abusé. Il faut que je me relise. Petite question à ce sujet, je peux imbriqué un if dans un autre if sans utiliser progn ? Je pense que c'est une mauvaise compréhension de ma part de ces fonctions... -
Hello, Si j'ai bien compris, en fait on est pas obligé de faire un LISP... Dans le gestionnaire de mise en page: http://www.guillaume-ojardias.fr/wp-content/uploads/2015/08/150824-Gestionnaire-de-mise-en-page.png Tu créés une mise en page de référence: http://www.guillaume-ojardias.fr/wp-content/uploads/2015/08/150824-Gestionnaire-de-mise-en-page-Nouveau.png Que tu nommes comme bon te semble: http://www.guillaume-ojardias.fr/wp-content/uploads/2015/08/150824-Gestionnaire-de-mise-en-page-Nouvelle-mise-en-page.png Que tu paramètres aussi comme bon te semble: http://www.guillaume-ojardias.fr/wp-content/uploads/2015/08/150824-Gestionnaire-de-mise-en-page-Param%C3%A9trage.png Et que tu appliques à chaque présentation: http://www.guillaume-ojardias.fr/wp-content/uploads/2015/08/150824-Gestionnaire-de-mise-en-page-D%C3%A9finir-courant.png Par contre, pour celà, il faut le faire dès le début ^^. L'avantage, aprés tu peux changer ta mise en page, l'ensemble des présentations est mise à jour.
-
[Résolu] Création de plusieurs présentations
Giropode a répondu à un(e) sujet de Giropode dans LISP et Visual LISP
Re-bonjour, En fait c'est bon, en lisant l'aide développeur d'autocad, ils disent qu'il faut mettre un "_" devant le nom de la commande en anglais et aussi devant le nom de l'option. Ci-joint le code final. ; Ce LISP permet de copier une présentation dans le cadre de la réalisation d'un carnet ; Fonctionnement : Copie de la présentation -> Décalage dans la fenêtre d'une valeur donnée -> Itération selon le nombre de page souhaitée ;----------------------------------------------------------------------------- ; Début de la commande permettant de réaliser un duplication des présentations (defun c:FEUILLET () (setq FEUILLET_NomOriginal (getstring "\nDonnez le nom de la présentation à dupliquer : ") ); Nom de la présentation dupliquée (initget 1 "Oui Non") (setq FEUILLET_TypeOriginal (getstring "\nS'agit-il de la première page du carnet ? [Oui/Non] : ") ) (setq FEUILLET_NumPlan (getstring "\nNuméro du plan (facultatif) ? ") ) (initget 1) (setq FEUILLET_Nb (getint "\nDonnez le nombre de présentations à créer : ") ) ; Nombre de feuillets que l'on veut créer (initget 1) (setq FEUILLET_DecalageX (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant X : ") ) ; Distance entre les feuillets dans l'espace objet suivant X (initget 1) (setq FEUILLET_DecalageY (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant Y : ") ) ; Distance entre les feuillets dans l'espace objet suivant X (setq FEUILLET_NomPrecedent (eval FEUILLET_NomOriginal) ) (setq FEUILLET_DecalageX (- FEUILLET_DecalageX) ) (setq FEUILLET_DecalageY (- FEUILLET_DecalageY) ) (setq FEUILLET_Pan (list (eval FEUILLET_DecalageX) (eval FEUILLET_DecalageY) ) ) (cond ( (= FEUILLET_TypeOriginal "N") (setq FEUILLET_TypeOriginal 1) ) ( (= FEUILLET_TypeOriginal "n") (setq FEUILLET_TypeOriginal 1) ) ( (= FEUILLET_TypeOriginal "Non") (setq FEUILLET_TypeOriginal 1) ) ( (= FEUILLET_TypeOriginal "O") (setq FEUILLET_TypeOriginal 0) ) ( (= FEUILLET_TypeOriginal "o") (setq FEUILLET_TypeOriginal 0) ) ( (= FEUILLET_TypeOriginal "Oui") (setq FEUILLET_TypeOriginal 0) ) ); fin de cond (if (= FEUILLET_TypeOriginal 1) (progn (if (/= FEUILLET_NumPlan "") (progn (setq FEUILLET_PrefixePresentation (strcat FEUILLET_NumPlan "-") ) (setq FEUILLET_NumOriginal (vl-string-left-trim (eval FEUILLET_PrefixePresentation) (eval FEUILLET_NomOriginal) ) ) (setq FEUILLET_Num (rtos (read FEUILLET_NumOriginal) 2 0) ) (setq FEUILLET_Num (eval (read FEUILLET_Num ) ) ) (setq FEUILLET_Nb (+ FEUILLET_Num FEUILLET_Nb) ) (setq FEUILLET_Num (eval (1+ FEUILLET_Num) ) ) ); fin de progn (progn (setq FEUILLET_Num (rtos (read FEUILLET_NomOriginal) 2 0) ) (setq FEUILLET_Num (eval (read FEUILLET_Num ) ) ) (setq FEUILLET_Num (eval (1+ FEUILLET_Num) )) (setq FEUILLET_Nb (+ FEUILLET_Num FEUILLET_Nb) ) ); fin de progn ); fin de if ); fin de progn (progn (setq FEUILLET_Num 1) ); fin de progn ) (while (<= FEUILLET_Num FEUILLET_Nb) (if (= FEUILLET_NomPrecedent FEUILLET_NomOriginal) (progn ; On vérifie le nom du feuillet (setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) ) ; On "crée" le feuillet (FEUILLET_Duplique FEUILLET_NomOriginal FEUILLET_NomFinal FEUILLET_Pan) ); fin de progn (progn ; On vérifie le nom du feuillet (setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) ) (FEUILLET_Duplique FEUILLET_NomPrecedent FEUILLET_NomFinal FEUILLET_Pan) );fin de progn ); fin de if (setq FEUILLET_NomPrecedent (eval FEUILLET_NomFinal)) (setq FEUILLET_Num (eval (1+ FEUILLET_Num))) ); fin de while ); fin de defun ;----------------------------------------------------------------------------- ;--------------------------------------------------------------------------------------------- ; Fonction pour vérifier et corriger, si nécessaire, la disponibilité d'un nom de présentation (defun FEUILLET_Verif (FEUILLET_Verif_Num / FEUILLET_Verif_Nom FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations FEUILLET_Verif_Msg FEUILLET_Verif_Reponse FEUILLET_Verif_n) ; Dans un premier temps on corrige le nom de la présentation (setq FEUILLET_Verif_Nom (FEUILLET_CorrectionInf10 FEUILLET_Verif_Num) ) (if (/= FEUILLET_NumPlan "") (progn (if (= (type FEUILLET_Verif_Nom) 'STR ) (progn (setq FEUILLET_Verif_Nom (strcat FEUILLET_NumPlan "-" FEUILLET_Verif_Nom) ) ); fin de progn (progn (setq FEUILLET_Verif_Nom (strcat FEUILLET_NumPlan "-" (rtos FEUILLET_Verif_Nom 2 0) ) ) ); fin de progn ); fin de if ); fin de progn ); fin de if ; On récupère la liste de présentations existantes (setq FEUILLET_Verif_ListePresentations (layoutlist) ) (if (member FEUILLET_Verif_Nom FEUILLET_Verif_ListePresentations) (progn (setq FEUILLET_Verif_Msg (strcat "La présentation " FEUILLET_Verif_Nom " existe déjà. Souhaitez-vous effacer l'existante ? [Oui/Non]: ") ) (initget 1 "Oui Non") (setq FEUILLET_Verif_Reponse (getkword FEUILLET_Verif_Msg)) ; On propose d'effacer la présentation existante (if (= FEUILLET_Verif_Reponse "Oui") (progn ; Si l'utilisateur accepte, on efface la présentation existante et on la remplace par la nouvelle (command "_layout" "_d" FEUILLET_Verif_Nom) (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) ); fin de progn (progn ; Sinon on cherche un nom de substitution (setq FEUILLET_Verif_n 0) (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) (while (member FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations) (setq FEUILLET_Verif_n (1+ FEUILLET_Verif_n) ) (setq FEUILLET_Verif_NomFinal (eval (strcat FEUILLET_Verif_Nom " (" (rtos FEUILLET_Verif_n 2 0) ")") ) ) ); fin du while ) ); fin du if ); fin de progn (progn (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) ); fin de progn ) ); fin de defun ;--------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------ ; Fonction pour ajouter un zéro devant les présentations inférieures à 10 (defun FEUILLET_CorrectionInf10 (FEUILLET_CorrectionInf10_Num / FEUILLET_CorrectionInf10_Nom) ; Si le numéro de la présentation que l'on va créer est inférieure à 10, on ajoute un 0 devant (if (< FEUILLET_CorrectionInf10_Num 10) (progn (setq FEUILLET_CorrectionInf10_Nom (strcat "0" (rtos FEUILLET_CorrectionInf10_Num 2 0) ) ) ); fin de progn (progn (setq FEUILLET_CorrectionInf10_Nom (eval FEUILLET_CorrectionInf10_Num)) ); fin de progn ); fin de if ); fin de defun ;------------------------------------------------------------------------ ;-------------------------------------------------------------------------------------------- ; Fonction servant à dupliquer les présentation est à déplacer l'espace objet dans la fenêtre (defun FEUILLET_Duplique (FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal FEUILLET_Duplique_Pan) (command "_layout" "_c" FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal) (command "_ctab" FEUILLET_Duplique_NomFinal) (command "_mspace") (command "_pan" FEUILLET_Duplique_Pan "") (command "_pspace") ); fin de defun ;-------------------------------------------------------------------------------------------- -
[Résolu] Création de plusieurs présentations
Giropode a répondu à un(e) sujet de Giropode dans LISP et Visual LISP
Bonjourà tous, Petite mise à jour : Maintenant on peut ajouter des pages à la suite d'un carnet On peut donner un numéro du plan (facultatif) Normalement (à vérifier) le script est international (mais j'en suis pas du tout sûr) Au sujet de l'internationalisation, j'ai compris comment faire pour appeler la commande, mais pour l'option de la commande (dans mon cas "Copier"), lorsque je met "Copy", sur AutoCAD en français cela ne fonctionne pas. Y'a-t-il quelque chose de particulier à faire ? ; Ce LISP permet de copier une présentation dans le cadre de la réalisation d'un carnet ; Fonctionnement : Copie de la présentation -> Décalage dans la fenêtre d'une valeur donnée -> Itération selon le nombre de page souhaitée ;----------------------------------------------------------------------------- ; Début de la commande permettant de réaliser un duplication des présentations (defun c:FEUILLET () (setq FEUILLET_NomOriginal (getstring "\nDonnez le nom de la présentation à dupliquer : ") ); Nom de la présentation dupliquée (initget 1 "Oui Non") (setq FEUILLET_TypeOriginal (getstring "\nS'agit-il de la première page du carnet ? [Oui/Non] : ") ) (setq FEUILLET_NumPlan (getstring "\nNuméro du plan (facultatif) ? ") ) (initget 1) (setq FEUILLET_Nb (getint "\nDonnez le nombre de présentations à créer : ") ) ; Nombre de feuillets que l'on veut créer (initget 1) (setq FEUILLET_DecalageX (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant X : ") ) ; Distance entre les feuillets dans l'espace objet suivant X (initget 1) (setq FEUILLET_DecalageY (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant Y : ") ) ; Distance entre les feuillets dans l'espace objet suivant X (setq FEUILLET_NomPrecedent (eval FEUILLET_NomOriginal) ) (setq FEUILLET_DecalageX (- FEUILLET_DecalageX) ) (setq FEUILLET_DecalageY (- FEUILLET_DecalageY) ) (setq FEUILLET_Pan (list (eval FEUILLET_DecalageX) (eval FEUILLET_DecalageY) ) ) (cond ( (= FEUILLET_TypeOriginal "N") (setq FEUILLET_TypeOriginal 1) ) ( (= FEUILLET_TypeOriginal "n") (setq FEUILLET_TypeOriginal 1) ) ( (= FEUILLET_TypeOriginal "Non") (setq FEUILLET_TypeOriginal 1) ) ( (= FEUILLET_TypeOriginal "O") (setq FEUILLET_TypeOriginal 0) ) ( (= FEUILLET_TypeOriginal "o") (setq FEUILLET_TypeOriginal 0) ) ( (= FEUILLET_TypeOriginal "Oui") (setq FEUILLET_TypeOriginal 0) ) ); fin de cond (if (= FEUILLET_TypeOriginal 1) (progn (if (/= FEUILLET_NumPlan "") (progn (setq FEUILLET_PrefixePresentation (strcat FEUILLET_NumPlan "-") ) (setq FEUILLET_NumOriginal (vl-string-left-trim (eval FEUILLET_PrefixePresentation) (eval FEUILLET_NomOriginal) ) ) (setq FEUILLET_Num (rtos (read FEUILLET_NumOriginal) 2 0) ) (setq FEUILLET_Num (eval (read FEUILLET_Num ) ) ) (setq FEUILLET_Nb (+ FEUILLET_Num FEUILLET_Nb) ) (setq FEUILLET_Num (eval (1+ FEUILLET_Num) ) ) ); fin de progn (progn (setq FEUILLET_Num (rtos (read FEUILLET_NomOriginal) 2 0) ) (setq FEUILLET_Num (eval (read FEUILLET_Num ) ) ) (setq FEUILLET_Num (eval (1+ FEUILLET_Num) )) (setq FEUILLET_Nb (+ FEUILLET_Num FEUILLET_Nb) ) ); fin de progn ); fin de if ); fin de progn (progn (setq FEUILLET_Num 1) ); fin de progn ) (while (<= FEUILLET_Num FEUILLET_Nb) (if (= FEUILLET_NomPrecedent FEUILLET_NomOriginal) (progn ; On vérifie le nom du feuillet (setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) ) ; On "crée" le feuillet (FEUILLET_Duplique FEUILLET_NomOriginal FEUILLET_NomFinal FEUILLET_Pan) ); fin de progn (progn ; On vérifie le nom du feuillet (setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) ) (FEUILLET_Duplique FEUILLET_NomPrecedent FEUILLET_NomFinal FEUILLET_Pan) );fin de progn ); fin de if (setq FEUILLET_NomPrecedent (eval FEUILLET_NomFinal)) (setq FEUILLET_Num (eval (1+ FEUILLET_Num))) ); fin de while ); fin de defun ;----------------------------------------------------------------------------- ;--------------------------------------------------------------------------------------------- ; Fonction pour vérifier et corriger, si nécessaire, la disponibilité d'un nom de présentation (defun FEUILLET_Verif (FEUILLET_Verif_Num / FEUILLET_Verif_Nom FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations FEUILLET_Verif_Msg FEUILLET_Verif_Reponse FEUILLET_Verif_n) ; Dans un premier temps on corrige le nom de la présentation (setq FEUILLET_Verif_Nom (FEUILLET_CorrectionInf10 FEUILLET_Verif_Num) ) (if (/= FEUILLET_NumPlan "") (progn (if (= (type FEUILLET_Verif_Nom) 'STR ) (progn (setq FEUILLET_Verif_Nom (strcat FEUILLET_NumPlan "-" FEUILLET_Verif_Nom) ) ); fin de progn (progn (setq FEUILLET_Verif_Nom (strcat FEUILLET_NumPlan "-" (rtos FEUILLET_Verif_Nom 2 0) ) ) ); fin de progn ); fin de if ); fin de progn ); fin de if ; On récupère la liste de présentations existantes (setq FEUILLET_Verif_ListePresentations (layoutlist) ) (if (member FEUILLET_Verif_Nom FEUILLET_Verif_ListePresentations) (progn (setq FEUILLET_Verif_Msg (strcat "La présentation " FEUILLET_Verif_Nom " existe déjà. Souhaitez-vous effacer l'existante ? [Oui/Non]: ") ) (initget 1 "Oui Non") (setq FEUILLET_Verif_Reponse (getkword FEUILLET_Verif_Msg)) ; On propose d'effacer la présentation existante (if (= FEUILLET_Verif_Reponse "Oui") (progn ; Si l'utilisateur accepte, on efface la présentation existante et on la remplace par la nouvelle (command "_.layout" "delete" FEUILLET_Verif_Nom) (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) ); fin de progn (progn ; Sinon on cherche un nom de substitution (setq FEUILLET_Verif_n 0) (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) (while (member FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations) (setq FEUILLET_Verif_n (1+ FEUILLET_Verif_n) ) (setq FEUILLET_Verif_NomFinal (eval (strcat FEUILLET_Verif_Nom " (" (rtos FEUILLET_Verif_n 2 0) ")") ) ) ); fin du while ) ); fin du if ); fin de progn (progn (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) ); fin de progn ) ); fin de defun ;--------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------ ; Fonction pour ajouter un zéro devant les présentations inférieures à 10 (defun FEUILLET_CorrectionInf10 (FEUILLET_CorrectionInf10_Num / FEUILLET_CorrectionInf10_Nom) ; Si le numéro de la présentation que l'on va créer est inférieure à 10, on ajoute un 0 devant (if (< FEUILLET_CorrectionInf10_Num 10) (progn (setq FEUILLET_CorrectionInf10_Nom (strcat "0" (rtos FEUILLET_CorrectionInf10_Num 2 0) ) ) ); fin de progn (progn (setq FEUILLET_CorrectionInf10_Nom (eval FEUILLET_CorrectionInf10_Num)) ); fin de progn ); fin de if ); fin de defun ;------------------------------------------------------------------------ ;-------------------------------------------------------------------------------------------- ; Fonction servant à dupliquer les présentation est à déplacer l'espace objet dans la fenêtre (defun FEUILLET_Duplique (FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal FEUILLET_Duplique_Pan) (command "_.layout" "c" FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal) (command "ctab" FEUILLET_Duplique_NomFinal) (command "_.mspace") (command "_.pan" FEUILLET_Duplique_Pan "") (command "_.pspace") ); fin de defun ;-------------------------------------------------------------------------------------------- -
[Résolu] Création de plusieurs présentations
Giropode a répondu à un(e) sujet de Giropode dans LISP et Visual LISP
Re-bonjour, Petite question à 5 balle. Comment faire pour que cette routine fonctionne sur tous les AutoCAD quelques soient la langue système ? Il me semble qu'il ne manque pas grand chose, mais j'ai du faire un peu des mélanges dans les noms de commande. Merci et bon WE à tous ! -
Bonjour à tous ! Ayant marre de me cogner toutes les présentations d'un plan sous forme de plusieurs feuillets, je me suis lancé dans la création d'une routine (la première de ma vie !) qui le fasse à ma place (duplication d'une présentation, attribution d'un nom sous la forme d'un nombre, décalage de l'espace objet dans la fenêtre de présentation). J'ai réussi à sortir quelque chose de potable (pour moi). Je vous la soumets pour que vous me fassiez des remarques/suggestions. Déjà quelques pistes d'évolution auxquelles j'ai pensé: Reprendre à la suite d'un feuillet (ajout de feuillets) Ajouter dans le nom de la présentation le numéro de plan (par exemple) ; Ce LISP permet de copier une présentation dans le cadre de la réalisation d'un carnet ; Fonctionnement : Copie de la présentation -> Décalage dans la fenêtre d'une valeur donnée -> Itération selon le nombre de page souhaitée ;----------------------------------------------------------------------------- ; Début de la commande permettant de réaliser un duplication des présentations (defun c:FEUILLET () (setq FEUILLET_NomOriginal (getstring "\nDonnez le nom de la présentation à dupliquer :") ) ; Nom de la présentation dupliquée (initget 1) (setq FEUILLET_Nb (getint "\nDonnez le nombre de feuillets à créer :") ) ; Nombre de feuillets que l'on veut créer (initget 1) (setq FEUILLET_DecalageX (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant X :") ) ; Distance entre les feuillets dans l'espace objet suivant X (initget 1) (setq FEUILLET_DecalageY (getreal "\nDonnez la valeur de décalage entre chaque feuillet suivant Y :") ) ; Distance entre les feuillets dans l'espace objet suivant X (setq FEUILLET_Num 1) (setq FEUILLET_NomPrecedent (eval FEUILLET_NomOriginal) ) (setq FEUILLET_DecalageX (- FEUILLET_DecalageX) ) (setq FEUILLET_DecalageY (- FEUILLET_DecalageY) ) (setq FEUILLET_Pan (list (eval FEUILLET_DecalageX) (eval FEUILLET_DecalageY) ) ) (while (<= FEUILLET_Num FEUILLET_Nb) (if (= FEUILLET_NomPrecedent FEUILLET_NomOriginal) (progn ; On vérifie le nom du feuillet (setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) ) ; On "crée" le feuillet (FEUILLET_Duplique FEUILLET_NomOriginal FEUILLET_NomFinal FEUILLET_Pan) ); fin de progn (progn ; On vérifie le nom du feuillet (setq FEUILLET_NomFinal (FEUILLET_Verif FEUILLET_Num) ) (FEUILLET_Duplique FEUILLET_NomPrecedent FEUILLET_NomFinal FEUILLET_Pan) );fin de progn ); fin de if (setq FEUILLET_NomPrecedent (eval FEUILLET_NomFinal)) (setq FEUILLET_Num (eval (1+ FEUILLET_Num))) ); fin de while (command) ); fin de defun ;----------------------------------------------------------------------------- ;--------------------------------------------------------------------------------------------- ; Fonction pour vérifier et corriger, si nécessaire, la disponibilité d'un nom de présentation (defun FEUILLET_Verif (FEUILLET_Verif_Num / FEUILLET_Verif_Nom FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations FEUILLET_Verif_Msg FEUILLET_Verif_Reponse FEUILLET_Verif_n) ; Dans un premier temps on corrige le nom de la présentation (setq FEUILLET_Verif_Nom (FEUILLET_CorrectionInf10 FEUILLET_Verif_Num) ) ; On récupère la liste de présentations existantes (setq FEUILLET_Verif_ListePresentations (layoutlist) ) (if (member FEUILLET_Verif_Nom FEUILLET_Verif_ListePresentations) (progn (setq FEUILLET_Verif_Msg (strcat "La présentation " FEUILLET_Verif_Nom " existe déjà. Souhaitez-vous effacer l'existante ? [Oui/Non]: ") ) (initget 1 "Oui Non") (setq FEUILLET_Verif_Reponse (getkword FEUILLET_Verif_Msg)) ; On propose d'effacer la présentation existante (if (= FEUILLET_Verif_Reponse "Oui") (progn ; Si l'utilisateur accepte, on efface la présentation existante et on la remplace par la nouvelle (command "_layout" "effacer" FEUILLET_Verif_Nom) (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) ); fin de progn (progn ; Sinon on cherche un nom de substitution (setq FEUILLET_Verif_n 0) (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) (while (member FEUILLET_Verif_NomFinal FEUILLET_Verif_ListePresentations) (setq FEUILLET_Verif_n (1+ FEUILLET_Verif_n) ) (setq FEUILLET_Verif_NomFinal (eval (strcat FEUILLET_Verif_Nom " (" (rtos FEUILLET_Verif_n 2 0) ")") ) ) ); fin du while ) ); fin du if ); fin de progn (progn (setq FEUILLET_Verif_NomFinal (eval FEUILLET_Verif_Nom) ) ); fin de progn ) ); fin de defun ;--------------------------------------------------------------------------------------------- ;------------------------------------------------------------------------ ; Fonction pour ajouter un zéro devant les présentations inférieures à 10 (defun FEUILLET_CorrectionInf10 (FEUILLET_CorrectionInf10_Num / FEUILLET_CorrectionInf10_Nom) ; Si le numéro de la présentation que l'on va créer est inférieure à 10, on ajoute un 0 devant (if (< FEUILLET_CorrectionInf10_Num 10) (progn (setq FEUILLET_CorrectionInf10_Nom (strcat "0" (rtos FEUILLET_CorrectionInf10_Num 2 0) ) ) ); fin de progn (progn (setq FEUILLET_CorrectionInf10_Nom (eval FEUILLET_CorrectionInf10_Num)) ); fin de progn ); fin de if ); fin de defun ;------------------------------------------------------------------------ ;-------------------------------------------------------------------------------------------- ; Fonction servant à dupliquer les présentation est à déplacer l'espace objet dans la fenêtre (defun FEUILLET_Duplique (FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal FEUILLET_Duplique_Pan) (command "_layout" "copier" FEUILLET_Duplique_NomPrecedent FEUILLET_Duplique_NomFinal) (command "_ctab" FEUILLET_Duplique_NomFinal) (command "_mspace") (command "-pan" FEUILLET_Duplique_Pan "") (command "_pspace") ); fin de defun ;-------------------------------------------------------------------------------------------- Bonne journée à tous ! P.S: merci à (gile) pour son cours d'introduction à AutoLISP, ça ma bien aidé (en plus du manuel fournis par Autodesk.
