CoolM@n Posté(e) le 19 octobre 2007 Posté(e) le 19 octobre 2007 Bonjour, je cherche une routine/biblio pour convertir une chaine Hexadecimale en entier base 10pour utiliser cette valeur dans un champ. Pour integrer le tout dans une de mes macros Command: (setq aa (entsel)) Select object: ( (1082.61 197.801 0.0)) Command: (car aa) %<\AcObjProp.16.2 Object(%<\_ObjId 2112553368>%).Area \f "%lu2%ps[,m²]%ct8[0.0001]">% Dans le champ la valeur 2112553368 est la conversion de l'hex 7deb0198. D'avance merci.
bonuscad Posté(e) le 19 octobre 2007 Posté(e) le 19 octobre 2007 Je ne sais plus où j'ai pu glané ces lignes de code, ni qui est l'auteur.. :( ;;;-----------------------------------------------------------------;;; ;;; Convertion Hexadecimal ---> Decimal ;;; ;;;---------------------------------------------------------- ------- (defun hexdec (nb / r i s) (if (= (type nb) 'INT) (setq nb (itoa nb)) ) (setq r 0 i 0) (while (and (= (type nb) 'STR) (< i (strlen nb))) (setq i (1+ i)) (setq s (strcase (substr nb i 1 ))) (setq r (+ (lsh r 4) (- (ascii s) (if (<= s "9") 48 55 ))) ) ) ) (hexdec "7deb0198") -> 2112553368 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 19 octobre 2007 Posté(e) le 19 octobre 2007 Salut, Ce fut l'objet d'un "challenge" ici. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
CoolM@n Posté(e) le 19 octobre 2007 Auteur Posté(e) le 19 octobre 2007 Un grand merci pour l'info. voici ma routine. Elle tourne sous Autocad2008 US. Elle me permet de cliquer sur une entité et d'afficher la surface.L'avantage c'est que la routine insère un champ.Si la surface change, le champ s'adapte. Elle est telle-quelle.Les variables importantes:MonUnite : m² je travaille en cm, mais les surfaces sont en m²MaReduction : 0.0001 pour passer du cm² au m²Prefixe : Sf: Selon votre bon plaisir. Le champ est justifié 'Centre"Il utilise le style de texte actif. ;;;-----------------------------------------------------------------;;; ;;; Convertion Hexadecimal ---> Decimal ;;; ;;;---------------------------------------------------------- ------- (DEFUN hexdec (nb / r i s) (IF (= (TYPE nb) 'INT) (SETQ nb (ITOA nb)) ) ;_ Fin de if (SETQ r 0 i 0 ) ;_ Fin de setq (WHILE (AND (= (TYPE nb) 'STR) (< i (STRLEN nb))) (SETQ i (1+ i)) (SETQ s (STRCASE (SUBSTR nb i 1))) (SETQ r (+ (LSH r 4) (- (ASCII s) (IF (<= s "9") 48 55 ) ;_ Fin de if ) ;_ Fin de - ) ;_ Fin de + ) ;_ Fin de setq ) ;_ Fin de while ) ;_ Fin de defun (DEFUN c:S2F (/ Part1 Part2 Part3 IdObject pp aa zz mm MonUnite MaReduction Prefixe ) ;;; (vl-load-com) (SETVAR "cmdecho" 0) ;desactive l'affichage des opérations (SETQ MonUnite "m²") (SETQ MaReduction "0.0001") (SETQ Prefixe "Sf: ") (SETQ Part1 "%<\\AcObjProp.16.2 Object(%<\\_ObjId ") (SETQ Part3 (STRCAT ">%).Area \\f \"%lu2%ps[," MonUnite "]%ct8[" MaReduction "]\">%" ) ;_ Fin de STRCAT ;_ Fin de strcat ) ;_ Fin de SETQ (SETQ aa (ENTSEL "\nSelectionner votre entité (Polyligne - Cercle - Hachures ...) " ) ;_ Fin de entsel ) ;_ Fin de setq (SETQ pp (GETPOINT "\nPosition du champ: ")) ;;; (princ aa) ;;; (setq aa (car aa)) (SETQ zz (VL-PRINC-TO-STRING aa)) (SETQ mm (SUBSTR zz 16 8)) (PRINC mm) (PRINC) (SETQ Part2 (RTOS (hexdec mm) 2 0)) (PRINC "\n") (SETQ IdObject (STRCAT Prefixe part1 part2 part3)) (PRINC IdObject) (PRINC "\n") (PRINC) (COMMAND "_text" "_j" "_c" pp "0" IdObject) (SETVAR "cmdecho" 1) ;reactive l'affichage des opérations (PRINC) ) ;_ Fin de defun ;|«Visual LISP© Format Options» (72 2 3 2 T "Fin de " 75 9 2 0 0 T T nil T) ;*** DO NOT add text below the comment! ***|; [Edité le 19/10/2007 par CoolMan]
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