SF.Designer Posté(e) le 6 août 2014 Posté(e) le 6 août 2014 Bonjour a tout le monde, Question du jour : Comment améliorer encore cette routine ? Version 1: (defun c:SF_Ligne_Pose () (command "filedia" "0") (command "-style" "iso" "es_isocp.shx" "" "" "" "" "") (command "_linetype" "ch" "DISCONTINU" "SF.Designer.lin" "") (command "filedia" "1") (command "-calque" "N" "POSE" "CO" "1" "POSE" "TL" "DISCONTINU" "POSE" "") (command "_clayer" "pose") (command "_color" "bylayer") (command "-typeligne" "A" "bylayer" "") (command "resol" "0.50") (command "ortho" "AC") (command "-accrobj" "aucun") (command "ligne") ) Version 2: (defun c:Ligne_Pose () ;Désactiver boite de dialogue (if(not (= (getvar "FILEDIA") 0))(setvar "FILEDIA" 0)) ;Creer STYLE de texte "iso" avec Type de texte "es_isocp.shx" (if (not (tblsearch "STYLE" "ISO"))(command "-STYLE" "iso" "es_isocp.shx" "" "" "" "" "")) ;Charger type de ligne "Discontinu" (if (not (tblsearch "LTYPE" "DISCONTINU"))(command "_LINETYPE" "CH" "DISCONTINU" "TYPES_LIGNES.lin" "")) ;Creer calque "Pose", couleur "Rouge", type de ligne "Discontinu" (if (not (tblsearch "LAYER" "POSE"))(command "-CALQUE" "N" "POSE" "CO" "1" "POSE" "TL" "DISCONTINU" "POSE" "")) ;Activer boite de dialogue (if (not (= (getvar "FILEDIA") 1))(setvar "FILEDIA" 1)) ;Declarer calque "Pose" courant (if (not (= (getvar "CLAYER") "POSE"))(setvar "CLAYER" "POSE")) ;Declarer couleur "DuCalque" courant (if (not (= (getvar "CECOLOR") "BYLAYER"))(setvar "CECOLOR" "BYLAYER")) ;Declarer type de ligne "DuCalque" courant (if (not (= (getvar "CELTYPE") "BYLAYER"))(setvar "CELTYPE" "BYLAYER")) ;Active l'accrochage a la grille (if (not (= (getvar "SNAPMODE") 1))(setvar "SNAPMODE" 1)) ;Definir la résolution a 0.50x0.50 (if (not (= (getvar "SNAPUNIT") '(0.5 0.5)))(setvar "SNAPUNIT" '(0.5 0.5))) ;Activer Modo Ortho (if (not (= (getvar "ORTHOMODE") 1))(setvar "ORTHOMODE" 1)) ;Desactiver accrochage aux objets (if (not (= (getvar "OSMODE") 1024))(setvar "OSMODE" 1024)) ;Lancer fonction ligne (command "LIGNE") ) Je sais deja que je peux remplacer : Ca: (command "-STYLE" "iso" "es_isocp.shx" "" "" "" "" "") Par: (entmake (list '(0 . "STYLE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbTextStyleTableRecord") '(2 . "ISO") '(70 . 0) '(40 . 0.0) '(41 . 1.0) '(50 . 0.0) '(71 . 0) '(42 . 2.5) '(3 . "es_isocp.shx") '(4 . ""))) Mais est ce plus rapide en exécution ou autocad le comprend il mieux ? Et si vous avez des conseils et bien je prend, je garde et j'y cogite hehehe
Patrick_35 Posté(e) le 6 août 2014 Posté(e) le 6 août 2014 Salut Le principal est que tu sois content de ton lisp Comme tu demandes quelques améliorations ;) 1) Pas besoin de redéfinir filedia car c'est inutile en lisp ou en script. Ce n'est pas comme quand on teste sur la ligne de commande.2) Tu peux simplifier (if (not ...)) par (or ...) car la valeur recherchée est nil et l'astuce avec le or est qu'il va évaluer le 1er argument. s'il est nil, il va évaluer le suivant et etc...Par exemple (or nil nil nil nil (alert "Test réussi")) fonctionnePar exemple (or nil T nil nil (alert "Test réussi")) s'arrêtera à la 2em évaluationPar exemple (or (= (getvar "OSMODE") 1024) (setvar "OSMODE" 1024))3) Si tu souhaites savoir quel est la fonction la plus rapide (command, entmake, etc...), utilise le Benchmark @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
SF.Designer Posté(e) le 7 août 2014 Auteur Posté(e) le 7 août 2014 Je me disais bien que "if", appelait a être utilisé pour des conditions multiples, merci pour le "or", je me met cela a jour de suite ... Et merci pour le bench, je vais me tester ca !
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant