Bred Posté(e) le 22 juillet 2008 Posté(e) le 22 juillet 2008 Salut,Ce n'est pas la première fois que cela m'arrive :J'enregistre une liste dans les ldata sous la forme (< Selection set: 8fe8 > < Selection set: 8f6e > < Selection set: 8f12 >) Et bien on dirait qu'Acad aime pas du tout le fait que j'enregistre des "Selection set" comme ça.Si je fais appel à d'autre lisp (qui n'ont rien a voir avec le lisp qui utilise le liste de ldata enregistré), j'ai des messages du genre : ; erreur: impossible de numéroter les données Lisp: < Selection set: 8fe8 > *Avertissement*: objet en propriété multiple, maintien "1184E" http://images.imagup.com/04/1216734843_yyyy.jpg Cela vous est déjà arrivé ????Vous avez trouvé une solution (à part enregistrer le liste des handle ou de vla-object) ?merci d'avance Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bseb67 Posté(e) le 22 juillet 2008 Posté(e) le 22 juillet 2008 Salut bred! J'ai voulu dans un de mes lisp stocker aussi des sélections, mais lehic é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 utilisedes références ram, donc si tu fermes le dessin, le rouvre, ben ton fichier aura une autre plaged'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] Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 22 juillet 2008 Posté(e) le 22 juillet 2008 Salut, Pourquoi des ldatas ? Les jeux de sélection ne seront pas conservés à la fermeture du dessin. Si c'est bien pour être utiliser dans la même session, des variables globales devraient suffire. Quand au ldatas, j'ai lu à plusieurs endroits qu'ils étaient déconseillés (données uniquement récupérable en LISP et passage douteux d'une version à une autre) et qu'il fallait leur préférer les dictionnaires, xrecords et xdatas. De mon côté je les utilise et n'ai jamais eu de problème... Mais j'ai un peu décortiqué les ldatas qui ressemblent beaucoup aux dictionnaires et je n'ai jamais réussi à mette un jeu de sélection dans un xrecord. Je m'étais même essayé à faire l'équivalent des fonctions vlax-ldata ;; gc:DictDataPut ;; ;; Stocke une liste de données dans un dictionnaire ;; ;; Arguments : ;; dict : le nom du dictionnaire (chaine) ou de l'object (ename) ;; key : la clé de l'entée du dictionnaire (chaine) ;; data : la liste de données (chaine, entier, réel, point) (defun gc:DictDataPut (name key data / dict lst xrec typ) (if (or (and (= (type name) 'STR) (snvalid name) (or (and (dictsearch (namedobjdict) name) (setq dict (cdr (assoc -1 (dictsearch (namedobjdict) name))) ) ) (setq dict (dictadd (namedobjdict) name (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary"))) ) ) ) ) (and (or (= (type name) 'ENAME) (and (= (type name) 'VLA-OBJECT) (setq name (vlax-vla-object->ename name)) ) ) (or (setq dict (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") (entget name) ) ) ) ) (and (setq dict (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary")) ) ) (entmod (append (entget name) (list '(102 . "{ACAD_XDICTIONARY") (cons 360 dict) '(102 . "}") ) ) ) ) ) ) ) (if (snvalid key) (progn (or (listp data) (setq data (list data))) (foreach d data (setq typ (type d)) (cond ((= typ 'STR) (setq lst (cons (cons 1 d) lst))) ((= typ 'INT) (setq lst (cons (cons 70 d) lst))) ((= typ 'REAL) (setq lst (cons (cons 40 d) lst))) ((and (listp d) (<= 2 (length d) 3) (vl-every 'numberp d)) (setq lst (cons (cons 10 d) lst)) ) ) ) (and (setq xrec (dictsearch dict key)) (entdel (cdr (assoc -1 xrec))) ) (if lst (progn (dictadd dict key (entmakex (append (list '(0 . "XRECORD") '(100 . "AcDbXrecord") ) (reverse lst) ) ) ) (reverse (mapcar 'cdr lst)) ) ) ) (princ (strcat "\nClé non valide: " key)) ) (princ "\nNom ou objet non valide.") ) ) ;; gc:DictDataList ;; ;; Liste les données des entrées d'un dictionnaire ;; Arguments : ;; dict : le nom du dictionnaire (chaine) ou de l'object (ename) (defun gc:DictDataList (name / dict elst lst) (if (or (and (= (type name) 'STR) (dictsearch (namedobjdict) name) (setq dict (dictsearch (namedobjdict) name)) ) (and (or (= (type name) 'ENAME) (and (= (type name) 'VLA-OBJECT) (setq name (vlax-vla-object->ename name)) ) ) (setq dict (entget (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") (entget name) ) ) ) ) ) ) ) (progn (setq elst (vl-member-if (function (lambda (x) (= (car x) 3))) dict ) ) (while elst (setq lst (cons (cons (cdar elst) (mapcar 'cdr (cdr (vl-member-if (function (lambda (x) (= (car x) 280))) (entget (cdadr elst)) ) ) ) ) lst ) elst (cddr elst) ) ) (reverse lst) ) ) ) ;; gc:DictDataDelete ;; ;; Supprime une entée dans un dictionnaire ;; Arguments : ;; dict : le nom du dictionnaire (chaine) ou de l'object (ename) ;; key : la clé de l'entée du dictionnaire (chaine) (defun gc:DictDataDelete (name key / dict xrec) (if (or (and (= (type name) 'STR) (dictsearch (namedobjdict) name) (setq dict (cdr (assoc -1 (dictsearch (namedobjdict) name)))) ) (and (or (= (type name) 'ENAME) (and (= (type name) 'VLA-OBJECT) (setq name (vlax-vla-object->ename name)) ) ) (setq dict (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") (entget name) ) ) ) ) ) ) (if (setq xrec (dictsearch dict key)) (entdel (cdr (assoc -1 xrec))) ) ) ) ;; gc:DictDataGet ;; ;; Retourne la liste de données de l'entrée du dictionnaire ;; Arguments : ;; dict : le nom du dictionnaire (chaine) ou de l'object (ename) ;; key : la clé de l'entée du dictionnaire (chaine) (defun gc:DictDataGet (name key / dict xrec) (if (or (and (= (type name) 'STR) (dictsearch (namedobjdict) name) (setq dict (cdr (assoc -1 (dictsearch (namedobjdict) name)))) ) (and (or (= (type name) 'ENAME) (and (= (type name) 'VLA-OBJECT) (setq name (vlax-vla-object->ename name)) ) ) (setq dict (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") (entget name) ) ) ) ) ) ) (if (setq xrec (dictsearch dict key)) (mapcar 'cdr (cdr (vl-member-if (function (lambda (x) (= (car x) 280))) xrec) ) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 22 juillet 2008 Posté(e) le 22 juillet 2008 Salut (gile), on dirait que tu vas réécrire toutes les fonctions vlisp ;) @+ [Edité le 22/7/2008 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 23 juillet 2008 Auteur Posté(e) le 23 juillet 2008 Salut,Merci pour vos conseils ! Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
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