bruno_l
Membres-
Compteur de contenus
41 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bruno_l
-
conversion hexadecimal -> base 10
bruno_l a répondu à un(e) sujet de bruno_l dans Pour aller plus loin en LISP
j'ai trouvé dans l'aide d'autocad ceci (defun BASE ( bas int / ret yyy zot ) (defun zot ( i1 i2 / xxx ) (if (> (setq xxx (rem i2 i1)) 9) (chr (+ 55 xxx)) (itoa xxx) ) ) (setq ret (zot bas int) yyy (/ int bas)) (while (>= yyy bas) (setq ret (strcat (zot bas yyy) ret)) (setq yyy (/ yyy bas)) ) (strcat (zot bas yyy) ret) ) ca transforme un entier decimale dans une autre base comme ca (base 16 586) j'ai fait un truc bien bourin du style (defun hex2dec(hex) (setq cx 0) (while (/= hex (base 16 cx)) (setq cx (1+ cx))) ) et ca marche, m'ouais mais c'est vraiment trés bourrin !!! -
quelqu'un connait une manip pour convertir un nombre hexadecimal en base 10 le tout sur visual lisp ?
-
Redéfinir une commande
bruno_l a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
ca c'est une eventualité qui ne m'avais meme pas efleuré !!! bonne remarque, je note, merci -
Exe auto à chaque activation d\'un plan
bruno_l a répondu à un(e) sujet de dr.loveless dans Pour aller plus loin en LISP
c'est juste l'editeur visual lisp qui ajoute ses lignes, quand je met a jour la mise en page du code en faii il fait des ajouts sur tous le code lisp du style ;_ Fin de defun ;_ Fin de if ... c'est l'option formater le code dans l'editeur du menu outils c'est super utile pour la lisibilité du code -
Redéfinir une commande
bruno_l a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
exemple de code ;;;initialisation ;;; (vl-load-com) (vlr-remove-all) ;;; fonction cleanreac ;;; nettoyage de tous les reacteurs (defun CLEANREAC () (mapcar 'vlr-remove-all '(:vlr-acdb-reactor :vlr-editor-reactor :vlr-linker-reactor :vlr-object-reactor ) ) ;_ Fin de mapcar ) ;_ Fin de defun ;;; ;;;fin initialisation ;;;definition des actions pour les reacteurs ;;; (defun CHOIX_REAC (A B) (setq test b) (if (= "PLOT" (car b)) (alert "tu veut vraiment imprimer ? ")) ) ;_ Fin de defun (defun CHOIX_REAC2 (A B) (setq test b) (if (= "PLOT" (car b)) (alert "tu ne sait vraiment pas ce que tu veut toi !!")) ) ;;nettoyage d'eventuels reacteurs residuels (CLEANREAC) ;;;initialisation des reacteurs (vlr-command-reactor NIL '((:vlr-commandwillstart . CHOIX_REAC))) (vlr-command-reactor nil '((:vlr-commandcancelled . CHOIX_REAC2))) ;|«Visual LISP© Format Options» (72 2 40 2 T "Fin de " 80 9 1 2 1 T T nil T) ;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|; si on invoque la commande plot une case de dialogue apparait avant le dialogue d'impression ensuite si on annule le dialogue d'impression une autre case apparait -
Redéfinir une commande
bruno_l a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
encore moi avec les reacteurs, decidement c'est une obsetion !! mais avec eux on peut executer une action avant le lancement d'une commande avec vlr-vommand-reactor :vlr-commandwilstart -
Exe auto à chaque activation d\'un plan
bruno_l a répondu à un(e) sujet de dr.loveless dans Pour aller plus loin en LISP
j'ai lu trop vite la file de discussion en fait j'execute une action a chaque fois qu'un calque (couche de plan est changé) variable clayer mais bon voila toujours le code la partie classique ------------------------------------------------------------- (vl-load-com) (vlr-remove-all) ;;; fonction cleanreac ;;; nettoyage de tous les reacteurs (defun CLEANREAC () (mapcar 'vlr-remove-all '(:vlr-acdb-reactor :vlr-editor-reactor :vlr-linker-reactor :vlr-object-reactor ) ) ;_ Fin de mapcar ) ;_ Fin de defun ;;; ;;;fin de la partie classique ------------------------------------------------------------------ ;;;;la focntion appelé par le reacteur (defun CHOIX_REAC (A B) (setq CALQUE_1 (getvar "clayer") VARIABLE (car B) ETAT (cdr B) ) ;_ Fin de setq (if (and (= VARIABLE "CLAYER") (/= CALQUE_0 CALQUE_1)) (progn (alert "le calque à été changé") ;ou n'importe quoi d'autre ... (setq CALQUE_0 CALQUE_1) ; ne pas enlever!!! ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de defun ;;; fin de la focntion appelé par le reacteur ;; appel de cleanreac (CLEANREAC) (setq CALQUE_0 (getvar "clayer")) (vlr-editor-reactor NIL '((:vlr-sysvarchanged . CHOIX_REAC))) ;|«Visual LISP© Format Options» (72 2 40 2 T "Fin de " 80 9 1 2 1 T T nil T) ;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|; bon d'accord je suis hors sujet, mais ... si il n'y a pas de solution c'est qu'il n'y a pas de problème. (devise shadok) -
Exe auto à chaque activation d\'un plan
bruno_l a répondu à un(e) sujet de dr.loveless dans Pour aller plus loin en LISP
c'est possible en lisp avec le reacteur 'vlr-editor-reactor' ca interresse du monde ? -
ca se fait en lisp, ca doit se faire en VBA il existe adolisp de fleming group qui permet de se connecter via odbc sur tous type de base de donnée (ca marche même avec MySQL !) http://www.fleming-group.com ensuite une simple requete sql du style select count(monchamp) from mabase where monchamp = mavaleur
-
Comment vérifier que la valeur que l\'on rentre dans une edit_box est bien une réel ?
bruno_l a répondu à un(e) sujet de GGB dans Pour aller plus loin en LISP
un (type(read variable)) devrait faire l'affaire non ? (type(read "01")) retourne INT (type (read "ab")) retourne SYM (type (read "10.1")) retourne REAL pour etre plus clair : ---------------------------------- le dcl ----------------------------------- test : dialog { label = "test de differentes actions"; :column{ :text {key = "text"; value= "entrez un reel";} :edit_box {key = "quoi"; } :edit_box {key = "ou"; } } ok_cancel_help; } ------------------------------------- le lisp : --------------------------------------- (setq DIAL (load_dialog "test-act")) (cond ((null DIAL) (exit))) (new_dialog "test" DIAL) (action_tile "quoi" "(setq quoi (type (read $value))) (if (= quoi 'REAL) (set_tile \"text\" \"valeur correct\") (set_tile \"text\" \"vous devez rentrer un reel\") ) " ) ;_ Fin de action_tile (start_dialog) ----------------------------------------- -
Impossible de trouver l\'interpréteur de commandes
bruno_l a répondu à un(e) sujet de AMAR dans AutoCAD 2000 à 2002
c'est parce que le chemin de l'editeur de texte externe et mauvais dans outils / option / fichier / nom de l'editeur de texte mettre "interne" -
c'est vrais je doit admetre que ce n'est pas trés clair, bon j'ais le temps je vais tenter d'etre plus clair. c'est la que ca se passe (vlr-command-reactor NIL '((:vlr-commandended . choix_reac))) comme c'est dit dans autolisp reference (vlr-command-reactor data callback) data = nil, car aucune donées associées callback = une liste de paire pointée de la forme ((event-name . callback_function)(event-name....) ...) event-name peut etre :vlr-unknowcommand :vlr-commandwillstart :vlr-commandended :vlr-commandcancelled :vlr-commandfailed donc :vlr-commandended quand une commande autocad est terminé exécuter la fonction choix_reac quand le reacteur execute choix_reac, il place le nom de la commande dans ma variable "commande" sou forme de paire pointée "reacteur" lui je crois que c'est le type de reacteur qui est retourné ? je ne l'ai pas utilisé, mais comme il y a un ordre bien determiné dans le passage des variable, il faut qu'il soit la ! (defun CHOIX_REAC (REACTEUR COMMANDE); je n'est besoin que de "commande" (setq reaction "rien") ; ce n'est qu'une variable de test que j'aurais du enlever ! (setq NOM_CDE (car COMMANDE)) ; donc la je reccupere ma commande (cond ((= "ROTATE" NOM_CDE) (REDRESSE)); si la commande est rotate j'execute la fonction redresse ;((= "DDATTE" NOM_CDE) (chgbloc)); action si la commande est ddatte (mis en commentaire) donc desactivé ) ) la fonction "redresse" elle n'a plus rien a voir avec le reacteur sinon qu'elle est lancé par lui! c'est le seul reacteur que j'ais utilisé, mais les autre doivent suivre la même logique de fonctionnement, enfin ... sinon encore attention au reacteurs, il peuvent vous pourir vos dessins, la vie ... etc ... en esperant etre lisible.
-
pour les reacteurs voici un petit lisp qui redresse l' attribut "REF" aprés un commande rotation d'un bloc (defun REDRESSE () (setq JEU_BLOC NIL CX NIL DEF_LE_BLOC NIL FILS NIL DEF_FILS NIL TYPE_ENTITE NIL ) ;_ Fin de setq (setq JEU_BLOC (ssget "p")) (setq CX 0) (while (setq LE_BLOC (ssname JEU_BLOC CX)) (setq CX (1+ CX) DEF_LE_BLOC (entget LE_BLOC) ) ;_ Fin de setq (if (= "INSERT" (cdr (assoc 0 DEF_LE_BLOC))) (progn (setq FILS LE_BLOC) (while (/= "SEQEND" (setq TYPE_ENTITE (cdr (assoc 0 (setq DEF_FILS (entget (setq FILS (entnext FILS)))) ) ;_ Fin de assoc ) ;_ Fin de cdr ) ;_ Fin de setq ) ;_ Fin de /= (if (and (= "ATTRIB" TYPE_ENTITE) (= "REF" (cdr (assoc 2 (entget FILS)))) ) ;_ Fin de and (progn (setq P41 (cdr (assoc 41 DEF_LE_BLOC)) P42 (cdr (assoc 42 DEF_LE_BLOC)) ) ;_ Fin de setq (cond ((= 0 (- P41 P42)) (setq F41 1.0) ) (t (setq F41 -1.0)) ) ;_ Fin de cond (setq DEF_FILS (subst (cons 41 F41) (assoc 41 DEF_FILS) DEF_FILS ) ;_ Fin de subst ) ;_ Fin de setq (setq DEF_FILS (subst '(50 . 0.0) (assoc 50 DEF_FILS) DEF_FILS ) ;_ Fin de subst ) ;_ Fin de setq (entmod DEF_FILS) (entupd LE_BLOC) ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de while ) et le lisp initialisant le reacteur ;;; chargement des extensions lisp (vl-load-com) (vlr-remove-all) ;;; fonction cleanreac ;;; nettoyage de tous les reacteurs (defun CLEANREAC () (mapcar 'vlr-remove-all '(:vlr-acdb-reactor :vlr-editor-reactor :vlr-linker-reactor :vlr-object-reactor ) ) ) ;;; (defun CHOIX_REAC (REACTEUR COMMANDE) (setq reaction "rien") (setq NOM_CDE (car COMMANDE)) (cond ((= "ROTATE" NOM_CDE) (REDRESSE)) ;((= "DDATTE" NOM_CDE) (chgbloc)) ) ) ;; appel de cleanreac (CLEANREAC) ;;; initialisation des reacteurs ;;; quand on execute une commande appel de la fonction de redressement des attributs (vlr-command-reactor NIL '((:vlr-commandended . choix_reac))) ;;; les reacteurs sont a manier avec precaution, ils sont trés puissants, et il peuvent même faire planter autocad.
-
justement au sujet des aperçus de fichiers autocad il y a une manip pour récupérer le dit aperçu afin de l'enregistrer dans un fichier séparé ?
-
si c'est pour verifier la valeur d'une variable il suffit d'utliser l'espion, la petite icone avec des lunettes. double clicquer sur la variable (ou l'expression) et l'ajouter a l'espion grace a l'icone a lunettes en haut a gauche de la fenetre espion.
-
une petite fonction qui efface les textes vide ;;; efface les textes blancs "" & " " (defun EFF_BLANC (/ JEUX_TEXTE E_TEXTE DEF_TEXTE) (setq JEUX_TEXTE (ssget "x" '((0 . "TEXT"))) CX 0 EFF_TEXTE 0 ) ;_ Fin de setq (while (setq E_TEXTE (ssname JEUX_TEXTE CX)) (setq CX (1+ CX) DEF_TEXTE (cdr (assoc 1 (entget E_TEXTE))) ) ;_ Fin de setq (cond ((= "" DEF_TEXTE) (entdel E_TEXTE) (setq EFF_TEXTE (1+ EFF_TEXTE)) ) ((= " " DEF_TEXTE) (entdel E_TEXTE) (setq EFF_TEXTE (1+ EFF_TEXTE)) ) ) ;_ Fin de cond ) ;_ Fin de while (setq EFF_TEXTE (itoa EFF_TEXTE)) (prompt "\n") (prompt EFF_TEXTE) (prompt " texte(s) vide effacé(s)") ) ;_ Fin de defun
