Aller au contenu

Lisp + DCL > Générateur de gabarits


Guigues

Messages recommandés

bonjour,

 

J'ai fabriqué une série de lisp pour formatter un fichier vierge en gabarit A0, A1, 12, 13 ou A4. J'en profite pour initialiser des variables, pour importer des styles de cotes etc etc...

>> Ces lisps fonctionnent trés bien !

 

Afin de lancer mes lisps j'ai décidé d'utiliser un fichier DCL + Lisp et la boite DCL + Le lisp fonctionnent trés bien !

 

Mais.... dés que j'ordonne le lancement du lisp GA0 ou GA1 etc etc via le lisp qui commande la boite DCL ca plante....

 

J'ai essayé de :

- intégrer le contenu du lisp GA1 au lisp Gabarit >> même erreur

- supprimer GA1 et integrer les commandes dans (defun (dobutton (a) .. >> même erreur

- tester les lisps sur un autre poste équipé de autocad 09 version pleine >> même erreur

 

 

voici les codes :

 

LISP GA1

 
(defun c:GA1()
 (command "tilemode" "0")
 (command "_erase" "to" "")
 (command "tilemode" "1")
 (command "_erase" "to" "")
 (command "Purger" "to" "*" "N")
 (command "Purger" "to" "*" "N")
 (command "Purger" "to" "*" "N")
 (command "Purger" "to" "*" "N")
 (command "-inserer" "Cotation" "0,0" "1" "1" "0")
 (command "_erase" "to" "")
 (command "ATTDia" "1")
 (command "INSUNITS" "4")
 (command "RESVUE" "o" "20000")
 (command "ortho" AC)
 (command "Mirrtext" "0")
 (command "LUNITS" "2")
 (command "LUPREC" "2")
 (command "MEASUREINIT" "1")
 (command "MEASUREMENT" "1")
 (command "-unites" "2" "2" "1" "2" "0" "n")
 (command "ECRANGRA")
 (command "-style" "standard" "Simplex.shx" "0" "1" "0" "non" "non" "non")
 (command "-inserer" "FANTOMEA1" "0,0" "1" "1" "0")
 (command "_zoom" "_e")
 (command "-calque" "N" "Neuf,Depose,Existant,Texte,Instrum,Liaison_Instrum" "TL" "CACHE" "Liaison_Instrum" "CO" "Rouge" "Neuf" "CO" "Vert" "Instrum,Liaison_Instrum,Depose" "CH" "Texte" "") 
 (command "ECRANGRA")
 (command "tilemode" "0")
 (command "_erase" "to" "")
 (command "-inserer" "CA1" "0,0" "1" "1" "0")
 (command "_zoom" "_e")
 (command "_-vports" "836,5" "5,589")
 (command "_.MSPACE")
 (command "_zoom" "_w" "0,0" "831,584")
 (command "_.PSPACE")
 (command "-inserer" "CART" "836,5" "1" "1" "0")
 (command "tilemode" "1")
 (command "_zoom" "_e")
)

 

DCL GABARIT

 
GABARIT : dialog { 
         label = "GENERATEUR DE GABARITS ver.1.0"; 
         : column { 

           : boxed_column { 
             : button {
               key = "but1";
               label = "GABARIT A4";
               is_default = false;
             }

             : button {
               key = "but2";
               label = "GABARIT A3";
               is_default = false;
             }

             : button {
               key = "but3";
               label = "GABARIT A2";
               is_default = false;
             }

             : button {
               key = "but4";
               label = "GABARIT A1";
               is_default = false;
             }

             : button {
               key = "but5";
               label = "GABARIT A0";
               is_default = false;
             }

           }

           : boxed_row { 
             : button {
               key = "cancel";
               label = "Close";
               is_default = true;
               is_cancel = true;
             } 
           }   
         } 

}

 

LISP GABARIT

 
(defun doButton(a)
 (cond
   ((= a 1)(c:GA4))
   ((= a 2)(c:GA3)
   ((= a 3)(c:GA2)
   ((= a 4)(c:GA1))
   ((= a 5)(c:GA0))
 )
)

(defun C:Gabarit()

 (setq dcl_id (load_dialog "GABARIT.dcl"))

 (if (not (new_dialog "GABARIT" dcl_id))
   (progn
    (alert "GABARIT.DCL ne peut pas être chargé!")
     (exit)
   )
 )

 (action_tile "but1" "(doButton 1)")
 (action_tile "but2" "(doButton 2)")
 (action_tile "but3" "(doButton 3)")
 (action_tile "but4" "(doButton 4)")
 (action_tile "but5" "(doButton 5)")

 (action_tile "cancel" "(done_dialog)")

 (start_dialog)

 (unload_dialog dcl_id)

 (princ)

)

 

merci du coup de pouce :P

Lien vers le commentaire
Partager sur d’autres sites

Salut Guigues,

 

C'est bien de se lancer dans le lisp :) , maintenant il te faut acquérir l'expérience

et les astuces:

 

- en premier, tu peux réduire les appels à (command ...) => cette fonction est lente, et parmis

la liste de tes appels, les modifications de variables sont plus rapides et stables par un (setvar ..)

 

- pour ton plantage, c'est normal => il faut fermer la dcl puis exécuter ta fonction (dobutton ...)

et au pire à la fin rouvrir la dcl.

 

a+

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Tu fais plutôt comme ceci

 

(defun C:Gabarit()
 (setq dcl_id (load_dialog "GABARIT.dcl"))
 (if (not (new_dialog "GABARIT" dcl_id))
   (progn
    (alert "GABARIT.DCL ne peut pas être chargé!")
     (exit)
   )
 )

 (action_tile "but1"   "(done_dialog 1)")
 (action_tile "but2"   "(done_dialog 2)")
 (action_tile "but3"   "(done_dialog 3)")
 (action_tile "but4"   "(done_dialog 4)")
 (action_tile "but5"   "(done_dialog 5)")
 (action_tile "cancel" "(done_dialog 0)")
 (doButton (start_dialog))
 (unload_dialog dcl_id)
 (princ)

)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

Salut Guigues , il manque 2 parenthèses fermantes ci dessous

((= a 2)(c:GA3)

((= a 3)(c:GA2)

et aussi comment fait tu le chargement de Ga1 etc

 

autrement tu peux éventuellement remplacer

(command "-inserer" "Cotation" "0,0" "1" "1" "0")

(command "_erase" "to" "")

 

par

(command "-inserer" "Cotation") (command)

cela incorpore le bloc à ton dessin sans l'insérer à l'écran.

 

et puis bon courage .

 

Et pour Patrick_35 , j'aimerais savoir à quoi sert le numéro d'ordre à

"(done_dialog 1)" , merci.

 

 

 

 

[Edité le 14/9/2009 par usegomme]

 

[Edité le 14/9/2009 par usegomme]

Lien vers le commentaire
Partager sur d’autres sites

Salut usegomme,

 

la réponse est toute bête:

aide de (start_dialog)

 

Return Values => The start_dialog function returns the optional status passed to done_dialog.

 

donc en faisant (done_dialog x), le (start_dialog) renvoie x. d'où le (doButton (start_dialog))

 

mais c'est vrai que pour ma part, je ne me sert pas du tout de ce principe

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Lien vers le commentaire
Partager sur d’autres sites

merci à vous. Tout fonctionne parfaitement !

 

J'en avais marre de toujours éditer mes styles de cotes et faire les memes manip pour préparer un plan. Maintenant ca marche tout seul !!!

 

Prochain projet : le verrouillage d'un plan dwg avec impossibilité d'éditer l'existant !

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité