bseb67
Membres-
Compteur de contenus
833 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bseb67
-
entmod bloqué dans réacteur
bseb67 a répondu à un(e) sujet de bseb67 dans Pour aller plus loin en LISP
Salut serge, c'est bien ce que je pensais :cool: , et les fonctions vla que j'ai trouvé fonctionnent à merveille. Et pour la commande c'était pareil, je faisait un (command "zoom" "objet" ...) et là le lisp stoppai. Donc mystère résolu, mais d'où en vient la raison? -
message : CALQUES RAPPROCHES 2008 - 2009 !!!!!!!!!!!!!!
bseb67 a répondu à un(e) sujet de rebcao dans AutoCAD LT 2009
salut rebcao! merci pour l'info, car elle arrive souvent sur ma 2008, et c'est vraiment barbant :mad: :mad: :mad: -
Salut, Et la suite de fibonnacci? ou la tour de hanoï ?
-
entmod bloqué dans réacteur
bseb67 a répondu à un(e) sujet de bseb67 dans Pour aller plus loin en LISP
Salut patrick_35! Et bien non, j'ai aussi essayé cela, mais nada. comme le entmod ne marche, le entupd disont fonctionne puisqu'il renvoie l'entité, mais les modif faites par l'entmod ne sont pas présentes . :( Mais comme dit, je ruse avec l'utilisation des vla. -
entmod bloqué dans réacteur
bseb67 a répondu à un(e) sujet de bseb67 dans Pour aller plus loin en LISP
En fait c'est pas vraiment solutionné, mais ici http:// http://discussion.autodesk.com/thread.jspa?threadID=551477 il y a des fonctions qui permettent de modifier les xdata grâce au vla, et ca marche super bien. De même que la modif du code dxf 10 ne marche pas à cause du entmod, un vlax-put-property sur InsertionPoint fonctionne. -
salut, Voulant approfondir mes connaissance, je me suis mis sur les réacteurs. Après les variables systèmes, j'ai voulu m'attaquer au clic droit, dans un dessin j'ai des blocs "etiquette", ceux-si sont liés en fait à des lignes, une ligne = une étiquette. l'étiquette ne sert qu'a afficher une partie des données xdata. Ces xdata contiennent aussi un élément qui dit si on affiche ou non l'étiquette (visible ou non). j'ai fait un réacteur sur le clic droit (petit coucou à patrick_35 pour son exemple), si je le fait sur une étiquette, je lance une dcl avec 2 radio boutons: visible ou invisible. Si je fait ok, je lance une fonction qui modifie les xdata et doit donc faire un entmod pour mettre à jour la ligne. et bien le entmod me renvoi toujours nil. par contre, si je lance la dcl à la main, et je fait ok, le entmod passe et ma ligne est bien à jour. Alors est-ce normal que ca ne marche pas? j'ai même essayé au-lieu de changer les xdata, de modifier le point d'insertion de mon étiquette (code dxf 10), et là, pareil le entmod marche pas. Sinon, j'ai fait des recherches sur le site, mais je n'ai pas vraiment trouver ce que je cherchai et pas trop compris ce que j'ai trouvé. Car j'aimerai ajouter à mon clic droit dans la partie dessin, l'option visible et invisible en plus de dernière commande, couper, coller, options ....
-
Re, J'ai déjà fait des blocs avec des états de visibilité, je n'ai pas eu de problème avec. Il faut juste bien faire les blocs. Par contre si tu sais comment changer d'état de visibilité en lisp, sans passer par la souris et le petit triangle des vues.
-
Salut philphil! Petites fonctions faites en vlisp ;---------------------------------; ; nom: invisible ; ; role: permet de rendre invisible; ; l'entité ent ; ; param: ent => entité ; ; retour: aucun ; ; date: 14/03/2008 ; ; BLAES Sébastien ; ;---------------------------------; (defun invisible( ent / vln) (cond ((= ent nil) (setq res nil) ) ((= (setq vln (vlax-ename->vla-object ent)) nil) (setq res nil) ) (t (vla-put-visible vln :vlax-false) (setq res t) ) ) ; cond ) ; invisible (defun c:invi() (while (/= (invisible (car(entsel "sélectionnez l'entité:"))) nil)) (princ) ) ; c:invi ;-------------------------------; ; nom: visible ; ; role: permet de rendre visible; ; l'entité ent ; ; param: ent => entité ; ; retour: aucun ; ; date: 14/03/2008 ; ; BLAES Sébastien ; ;-------------------------------; (defun visible( ent / vln) (cond ((= ent nil) ) ((= (setq vln (vlax-ename->vla-object ent)) nil) ) (t (vla-put-visible vln :vlax-true) ) ) ; cond (princ) ) ; visible (defun c:visi( / s e) (setq s (ssget "x")) (cond ((= s nil) (print "pas d'entités") ) (t (while (/= (setq e (ssname s 0)) nil) (visible e) ; on supprime e de la sélection (ssdel e s) ) ; while ) ) ; cond (princ) ) ; c:visi visi se lance sur tout, mais si tu as l'entité (car(entsel)) par exemple tu fais visible dessus. a+
-
Réacteur sur variable système
bseb67 a répondu à un(e) sujet de bseb67 dans Pour aller plus loin en LISP
en fait j'ai oublié juste une chose, c'est que je ne met pas la variable à la valeur de forcage :cool: , je corrige cela Ben, après les multi angines, ce sont mes mollets qui s'y mettent. Crampes aux deux un matin, en me levant, donc je suis tombé par terre. Depuis les muscles se crispent régulièrement, et maintenant j'ai les chevilles enflées et des rougeurs sur la moitié de chaque tibia, le pire c'est que le médecin et le neurologue ne savent pas d'où ca vient, malgré les 400€ que je leur ai laché . :mad: A part prendre des médoc qui n'ont pas vraiment effet (ca fait 3 semaines), ca ne va toujours pas mieux. :( Donc comme dit, je corrige ou plutot j'ajoute le setvar qui manque. -
Salut à tous! Pour les besoins d'un lisp, j'ai développé quelques fonctions utilisant les réacteurs, mais uniquement sur les variables système d'autocad. Ayant des petits problème de santé et physique, je n'ai pas pu attaquer mon super challenge :( . Voici le code en complet bien-sûr: ;| CONSEILS D'UTILISATION Les réacteurs créés et testés, ne sont que ceux sur les variables système d'autocad fonctions à utiliser: - force_sysvar (2 arguments) - stop_force_sysvar (1 argument) - stop_all_force_sysvar (0 argument) - liste_force_sysvar (0 argument) Appeler force_sysvar avec le nom de la variable système et la valeur voulue en forcage exemple (setq rr (force_sysvar "osmode" 15039)) Si vous tentez de créer un réacteur sur une variable ayant déjà un réacteur, l'existant sera détruit pour être remplacer par le nouveau. Pour stopper un réacteur (stop_force_sysvar rr) Pour stopper tous les réacteurs (stop_all_force_sysvar) La fonction liste_force_sysvar renvoie le nombre de réacteurs et donc de variables systèmes qui sont forcées sous la forme d'une liste: ((var_name1 var_valeur1) (var_name2 var_valeur2)...) BLAES Sébastien 07/08/2008 |; ;---------------------------------------; ; nom: modif_sysvar ; ; role: callback des réacteurs sur les ; ; variables systèmes ; ; FONCTION A NE PAS MODIFIER ; ; param: a1 => réacteur appelant ; ; a2 => variable système modifiée; ; sous cette forme: : ; (nom bool) => nom = nom de; ; la variable, bool = si la ; ; modification a réussie ; ; retour: aucun ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;---------------------------------------; (defun modif_sysvar( a1 a2) (cond ; on test si la variable modifiée est celle gérer par ce réacteur ; mais aussi si la valeur de cette variable n'est pas celle voulue au forcage ((and (= (car a2) (car (vlr-data a1))) (/= (getvar (car (vlr-data a1))) (cadr (vlr-data a1)))) ; on force la variable à la valeur voulue (setvar (car (vlr-data a1)) (cadr (vlr-data a1))) ) ) ; cond (print) ) ; modif_var ;-------------------------------------; ; nom: force_sysvar_existe ; ; role: test si un réacteur de forcage; ; sur la variable système sysvar; ; existe ou non ; ; param: sysvar => nom de la variable ; ; système forcée ; ; retour: un réacteur ; ; nil sinon ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;-------------------------------------; (defun force_sysvar_existe( sysvar / res) (setq res nil) (cond ; on test s'il y a encore des réacteurs sur des sysvar ((= (setq vlr_sysvar (vlr-reactors :VLR-SysVar-Reactor)) nil) ) (t ; on récupère la liste des réacteurs sur des sysvar (setq vlr_sysvar_liste (car vlr_sysvar) vlr_sysvar_liste (cdr vlr_sysvar_liste)) ; on boucle sur la liste afin de tous les arrêter (foreach elem vlr_sysvar_liste (if (= (car (vlr-data elem)) sysvar) (setq res elem) ) ; if ) ; foreach ) ) ; cond res ) ; force_sysvar_existe ;--------------------------------------; ; nom: force_sysvar ; ; role: créer et renvoi un réacteur qui; ; permet de forcer la variable ; ; système de nom var_name à la ; ; valeur var_value ; ; param: var_name => nom de la variable; ; var_value => valeur voulue ; ; retour: un réacteur ; ; nil si erreur ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;--------------------------------------; (defun force_sysvar( var_name var_value / res) (setq res nil) (cond ((/= (type var_name) 'STR) ) ((= var_value nil) ) ((= (setq var_name (strcase var_name)) nil) ) ; on test si var_name est bien une variable système ((= (getvar var_name) nil) ) ; on test si le type de var_name et bien le même que var_value ((/= (type var_value) (type (getvar var_name))) ) ; on test si un réacteur sur cette variable existe déjà ((/= (setq rr (force_sysvar_existe var_name)) nil) ; on désactive l'ancien réacteur (stop_force_sysvar rr) ; on initialise la variable système (setvar var_name var_value) ; on créer le nouveau réacteur (setq res (vlr-sysvar-reactor (list var_name var_value) '((:vlr-sysvarchanged . modif_sysvar)))) ) (t ; on initialise la variable système (setvar var_name var_value) ; on créer le nouveau réacteur (setq res (vlr-sysvar-reactor (list var_name var_value) '((:vlr-sysvarchanged . modif_sysvar)))) ) ) ; cond res ) ; force_sysvar ;------------------------------; ; nom: stop_force_sysvar ; ; role: stop le réacteur rea ; ; param: rea => réacteur ; ; retour: t si tout c'est passé; ; nil si erreur ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;------------------------------; (defun stop_force_sysvar( rea / res) (setq res nil) (cond ; si rea vaut nil ((= rea nil) ) ; si rea est un réacteur de sysvar ((= (type rea) 'VLR-SysVar-Reactor) (vlr-remove rea) (setq res t) ) ) ; cond res ) ; stop_force_sysvar ;--------------------------------------; ; nom: stop_all_force_sysvar ; ; role: stop tous les réacteurs sur des; ; variables système ; ; param: aucun ; ; retour: t si tout c'est bien passé ; ; nil sinon ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;--------------------------------------; (defun stop_all_force_sysvar( / res vlr_sysvar vlr_sysvar_liste) (setq res t) (cond ; on test s'il y a encore des réacteurs sur des sysvar ((= (setq vlr_sysvar (vlr-reactors :VLR-SysVar-Reactor)) nil) ) (t ; on récupère la liste des réacteurs sur des sysvar (setq vlr_sysvar_liste (car vlr_sysvar) vlr_sysvar_liste (cdr vlr_sysvar_liste)) ; on boucle sur la liste afin de tous les arrêter (foreach elem vlr_sysvar_liste (setq res (and res (stop_force_sysvar elem))) ) ; foreach ) ) ; cond res ) ; stop_all_force_sysvar ;--------------------------------------; ; nom: liste_force_sysvar ; ; role: renvoie le nombre de réacteurs; ; sous la forme d'une liste: ; ; ((var_name1 var_valeur1) ; ; (var_name2 var_valeur2)...) ; ; param: aucun ; ; retour: une liste ; ; nil si aucun réacteur ; ; date: 07/08/2008 ; ; BLAES Sébastien ; ;--------------------------------------; (defun liste_force_sysvar( / res) (setq res nil) (cond ; on test s'il y a encore des réacteurs sur des sysvar ((= (setq vlr_sysvar (vlr-reactors :VLR-SysVar-Reactor)) nil) ) (t ; on récupère la liste des réacteurs sur des sysvar (setq vlr_sysvar_liste (car vlr_sysvar) vlr_sysvar_liste (cdr vlr_sysvar_liste)) ; on boucle sur la liste afin de tous les arrêter (foreach elem vlr_sysvar_liste (setq res (cons (list (car (vlr-data elem)) (cadr (vlr-data elem))) res)) ) ; foreach ) ) ; cond res ) ; liste_force_sysvar [Edité le 7/8/2008 par bseb67] [Edité le 7/8/2008 par bseb67]
-
ssget et filtre sur données étendues
bseb67 a répondu à un(e) sujet de bonuscad dans Pour aller plus loin en LISP
Salut bonuscad, Je voudrai bien t'aider, mais déjà je ne sais pas comment dessiner une polyline, la lwpolyline oui. Si tu me dis comment, je veux bien aussi me pencher sur le problème. Pour la 2009, je ne sais pas. Je l'ai installé sans licence donc pour 30j, j'ai abandonné au bout de 4, trop lourde, les lisps sont plus lent, pour moi c'est devenue une grosse bou.. [Edité le 29/7/2008 par bseb67] -
Chez free ils sont super ch.... Ils ont coupés mes pages persos :mad: :mad: J'ai fait une demande de réactivation pour pouvoir déposer un plan. Le plan n'est pas un super plan, mais devrai aller pour ce que le challenge cherche à faire. Pages persos réactivées: http:// http://bseb67.free.fr/cadxp/challenge/super_challenge/test_bloc.dwg Il me reste plus qu'à réinstaller autocad à la maison et commencer le code. [Edité le 29/7/2008 par bseb67]
-
Ben, chapeau :D, En plus ca tombe super bien, car c'est justement ce que je voulais faire pour un de mes lisps: dcl avec un nombre différent de checkbox. Le plus simple est la dcl avec la liste déroulante, mais celle avec les checkbox me plait beaucoup plus. Il manque juste un truc Gile, tu as mis: (action_tile "none" "(foreach k (mapcar 'car keylab) (set_tile k\"0\"))" ) Une action pour tout désélectionner, mais le bouton n'est pas là. [Edité le 28/7/2008 par bseb67]
-
Salut etude0, Si tu cherches à avoir un lisp, il faut faire la demande dans le forum lisp. Je pense pouvoir t'aider et je ne serai pas le seul.
-
Re, Je m'en doute que la fonction risque de mouliner pas mal. Je pensais partir sur des éléments simples pour les blocs: ligne, polyligne, cercle, arc. Ensuite, nous avons charte de dessin qui demande à ce que les entités d'un bloc soit sur le calque 0, donc on peut avoir le bloc sur des calques différents, mais les entités du bloc seront toujours sur le même calque. (je sais pas si c'est compréhensible) Donc on peut filtrer en travaillant calque par calque. C'est aussi vrai qu'on aura des versions pivotées du bloc, mais on peut partir en premier que les entités seront toujours dans le même sens. De plus, on part du principe que l'on n'a pas appliqué une échelle sur le bloc. Pour limiter la recherche des entités, on pourra utiliser une fenêtre de sélection, càd le bloc a une certaine dimension , donc ce n'est pas la peine de chercher les entités sur tout le dessin. Si cela parait toujours trop chaud (ou trop mouillé d'après bred), pourquoi ne pas faire une fonction qui prend en entrée une liste d'entités (ou sélection) et un nom de bloc, après elle doit vérifier si les entités forme le bloc, si oui on supprime les entités pour insérer le bloc. Bonuscad: en c++ ou arx, est-il possible de créer de processus (càd lancer deux fonctions en parallèle) ? car avec nos machines multicoeurs c'est une peu bête de ne pas pouvoir exploiter cette puissance.
-
ldata et <Selection set: 8f6e>
bseb67 a répondu à un(e) sujet de Bred dans Pour aller plus loin en LISP
Salut bred! J'ai voulu dans un de mes lisp stocker aussi des sélections, mais le hic était que ma liste de sélection est très grande, en tout cas supérieur à 128, limite du nombre de sélection, donc je stocke ceci à la place: ( ( < Nom d'entité: xxxxx > < Nom d'entité: xxxxx > < Nom d'entité: xxxxx > ...) ( < Nom d'entité: xxxxx > < Nom d'entité: xxxxx > < Nom d'entité: xxxxx > ...) ) Mais ceci fait référence à la ram, donc je pense qu'il faudra stocker les handel ou les oid. Par contre je le sauvegardai dans une variable, pas en Ldata, je pense qu'une sélection utilise des références ram, donc si tu fermes le dessin, le rouvre, ben ton fichier aura une autre plage d'adresse mémoire en ram, donc autocad te bloque surement pour cela. Si c'est vraiment le cas, c'est très bien fait :cool: , y a pas que des bourdes dans totocad ;) Purée, il manque des trucs dans les parenthèses!! [Edité le 22/7/2008 par bseb67] -
Salut à tous! :) Bon tout d'abord désolé patrick_35, mais je n'ai pas eu le temps de faire ton challenge 22. Ayant répondu à un post http:// http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=20147#pid83953 Je pense que développer un lisp qui permettrai de remplacer des éléments dans un dessin par un bloc serai : - pas facile à faire (d'où super challenge ;) ) - utile je pense Pour l'utilisation, je pense que l'on demande à l"utilisateur de choisir des entités (dans la même sauce que pour les groupes), qu'il donne un nom au bloc, que le lisp remplace donc ces entités sélectionnées par un bloc et puis qu'il recherche dans l'espace objet s'il y a des répétitions de cet ensemble d'entités afin de les remplacer aussi par le bloc nouvellement créé. Bien-sûr, étant donné la difficulté, ce challenge n'est pas à rendre à la fin de la semaine ;) Je posterai avant la fin de semaine en lien un fichier dwg en version 2004 qui servira d'exemple a+
-
Re, Bfff, en lisp déjà je ne sais pas le faire, mais ce serai une bonne idée pour un challenge :D Donc je pense qu'il ne te reste que tes doigts et du temps. Ton problème de taille me fait penser au fichier que j'ai vu lors de ma formation en lisp l'an dernier mon formateur avait reçu un plan d'un client qui d'après lui était super lourd, il lui fallait 15 min pour l'ouvrir et ça ramait un max. Son fichier faisait 130Mo :o :o Et pourtant il n'y avait presque rien dedans, c'était en plan de structure béton d'un bâtiment avec tous les étages, le fichier ne contenait que des lignes. bon courage, a moins que d'autres ont une astuce. Autre astuce, mais comme toujours, n'utilisant pas la lt je ne sais pas si ca marche: command: wbloc =>dessin entier, tu le sauvegardes dans un autre endroit, ca nettoye pas mal les plans, mais tu perds pas mal de config. [Edité le 22/7/2008 par bseb67]
-
Salut adroul! Ne travaillant pas sur des version LT, donc je dis peut être une bêtise, mais ton fichier contient-il des groupes? command: groupe et coche "inclure sansnom", car chez nous les dessinateurs travaillent pas mal avec les groupes, le hic c'est qu'autocad ne purge pas toujours les groupes malgré qu'ils soient vides. Avec la version pleine j'aurai pu te donner un lisp, mais en version LT je ne sais pas comment le faire en automatique, si les groupes existent il faut faire décomposer sur ceux qui sont vides. J'ai ouvert un fichier d'un dessinateur qui étaient lent, il y avait + de 1.800.000 groupes alors que sur ce nombre il n'y avait que - de 500 qui étaient non vides, gain de place: 2Mo sur 17Mo à l'origine pas grand chose donc, mais c'est plus rapide à l'ouverture et à utiliser. sinon, comme te l'a dit rebcao, faire 3.000 carrés de la même taille prendra plus de place que faire un bloc puis de copier 3.000 fois ce bloc. [Edité le 21/7/2008 par bseb67]
-
Salut autospeed! J'ai la 2008 mep d'installer sur mon poste, j'ai déjà mis des posts sur le forum de mep. Je n'utilise pas la partie mep de mon autocad, car les objets mep ne sont pas visibles sur d'autre version d'autocad avant 2008, et sur la 2008 normal, des gaines circulaires deviennent des solides rectangulaires! :o mais voici un lien sur les tutaux mep, mais ils sont très mal fait: http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=10997114&linkID=9240935 En tout cas chez nous, on ne s'en sert pas.
-
Salut patrick_35! Juste une petite question: pour la fonction sub, on doit utiliser deb et fin?
-
Tiens encore plus bizarre, utilisant la bibliothèque doslib, j'ai regardé dedans, il y a des fonctions pour la BR. Il y a une fonction: dos_reggettype qui renvoi un entier, et la valeur 7 correspond à: Returns An integer identifying the data type if successful. Possible values include: 0 REG_NONE No value type 1 REG_SZ Unicode null terminated string 2 REG_EXPAND_SZ Unicode nul terminated string (with environment variable references) 3 REG_BINARY Free form binary 4 REG_DWORD 32-bit number 4 REG_DWORD_LITTLE_ENDIAN 32-bit number (same as REG_DWORD) 5 REG_DWORD_BIG_ENDIAN 32-bit number 6 REG_LINK Symbolic Link (unicode) 7 REG_MULTI_SZ Multiple Unicode strings 8 REG_RESOURCE_LIST Resource list in the resource map 9 REG_FULL_RESOURCE_DESCRIPTOR Resource list in the hardware description 10 REG_RESOURCE_REQUIREMENTS_LIST Reserved 11 REG_QWORD 64-bit number 11 REG_QWORD_LITTLE_ENDIAN 64-bit number (same as REG_QWORD) Tiens c'est bien une REG_MULTI_SZ. (dos_reggettype "HKEY_CURRENT_USER" "Software\\Test" "liste2") 7 => ok par contre, le get ne marche pas :( (vl-registry-read "HKEY_CURRENT_USER\\Software\\Test" "liste2") (7 "tata" "totot" "titi") => ok (dos_regget "HKEY_CURRENT_USER\\Software\\Test" "liste2") nil => :o Bon, faut que je retourne à mes moutons, sinon gare aux patrons !
-
Re, je pense que la fonction read est plus souple que la write, read peut lire toute forme de clé, mais la write demande forcément un string ou un nombre tiens les réels ca marchent pas: (vl-registry-write "HKEY_CURRENT_USER\\Software\\Test" "liste6" 1.0) ; erreur: valeur d'argument incorrecte: valeur de registre non prise en charge: Si tu veux mettre des suites de string, je pense que la seule solution c'est de faire celle que j'ai donnée avant: faire une liste avec tes string, la convertir en string, la stocker dans la BR. Voilà encore un point qui titille mes neurones de la non sympathie: je déteste quand tu peux faire des choses dans un sens, mais que t'es limité dans l'autre. :mad:
-
Salut (gile), Oupss, disons que les fonctions vl- je n'y fais pas trop attention. Et j'ai toujours tendance à écrire mes propres fonctions. Maintenant je le sais qu'il y a une fonction vl, qui est surement plus rapide que la mienne. Pour bred: vl-registry apparement demande un string, donc normal que (7 "toto" "tata" "titi") ne fonctionne pas. (vl-registry-write reg-key [val-name val-data]) Arguments reg-key A string specifying a Windows registry key. NoteYou cannot use vl-registry-write for HKEY_USERS or KEY_LOCAL_MACHINE. val-name A string containing the value of a registry entry. val-data A string containing registry data.
-
SAlut bred, J'aime pas trop aller mettre des cochonneries dans la base de registres (ce qui m'énervent toujours ce sont les programmes que t'installe, qui bourre la BR mais ne la vide pas lors de la dés-installation) Lorsque j'ai voulu essayer, j'ai plutôt utilisé setenv et getenv, le seul défaut et qu'il faut mettre tes données sous forme de chaine de caractères: (setq data '("tata" "toto" "titi")) (setenv "MES_DONNEES" data) ; erreur: type d'argument incorrect: stringp ("tata" "toto" "titi") (setenv "MES_DONNEES" (to_string data)) la fonction to_string est une fonction perso qui peut être complétée: ;----------------------------------; ; nom: to_string ; ; role: renvoie msg sous forme de ; ; chaine de caractères ; ; param: msg => message à convertir; ; retour: chaine de caractères ; ; date: 26/02/2008 ; ; BLAES Sébastien ; ;----------------------------------; (defun to_string( msg / res cpt lg) (cond ((= msg nil) (setq res "") ) ((= (type msg) 'REAL) (setq res (rtos msg 2 2)) ) ((= (type msg) 'INT) (setq res (itoa msg)) ) ((= (type msg) 'LIST) (setq cpt 0 lg (length msg) res (strcat "(" (to_string (nth cpt msg))) cpt (1+ cpt)) (while (< cpt lg) (setq res (strcat res " " (to_string (nth cpt msg))) cpt (1+ cpt)) ) ; while (setq res (strcat res ")")) ) ((= (type msg) 'STR) (setq res (strcat "\"" msg "\"")) ) ; si autre type on renvoie "" (t (setq res "") ) ) ; cond res ) ; to_string Si je peux, je vais faire un tour du coté de chez swan, pardon de vl-registry :) a+
