gras_s Posté(e) le 22 octobre 2009 Posté(e) le 22 octobre 2009 PLANET-NICOLAS m'a gentiement donné une LISP sur le forum officiel Autodesk.Cette LISP récupère, dans plusieurs présentations, le contenu des cartouches (titres et indices), et dessine un sommaire en implantant des lignes et des textes remplis avec le contenu des cartouches.J'ai essayé de l'adapter à mon cartouche, mais j'ai du mal.J'ai essayé de supprimer la récupération d'un attribut que je n'ai pas (numplan) et de supprimer la partie de l'indice (qui est un attribut constant dans son exemple, je ne sais pas l'utilité du constant). Je suis novice en LISP, et ça me dit "erreur: type d'argument incorrect: stringp nil". Si je peux la simplifier côté indice en récupérant simplement le contenu de l'attribut comme pour les titres, ça me suffira bien.Si quelqu'un peut me commenter un peu cette LISP pour que j'apprenne à la modifier, ça me sera d'un grand secours. Ci-dessous la LISP d'origine.En surligné, ce que je pense supprimer ou modifier pour l'adapter à mon bloc. (defun c:som(/ att doc ent fol ind js ef lay lign lst n old rec rect saut y) (defun rect(x y pas) (entmake (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 1) (cons 10 (list x y 0.0)) (cons 10 (list (+ x 130) y 0.0)) (cons 10 (list (+ x 130) (- y pas) 0.0)) (cons 10 (list x (- y pas ) 0.0)) (cons 6 "BYLAYER") (cons 8 "CARTOUCHES") (cons 62 256) (cons 67 1) (cons 370 -1) (cons 410 "000-1") ) ) ) (defun text(x y txt att) (entmake (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 1 txt) (cons 6 "BYLAYER") (cons 7 "ROMAND") (cons 8 "CARTOUCHES") (cons 10 (list x y 0.0)) (cons 11 (list 0.0 0.0 0.0)) (cons 40 2.0) (cons 50 0.0) (cons 62 256) (cons 67 1) (cons 71 att) (cons 72 1) (cons 370 -1) (cons 410 "000-1") ) ) ) (defun lign(x x1 y y1) (entmake (list (cons 0 "LINE") (cons 100 "AcDbEntity") (cons 100 "AcDbLine") (cons 10 (list x y 0.0)) (cons 11 (list (+ x x1) (+ y y1) 0.0)) (cons 6 "BYLAYER") (cons 8 "CARTOUCHES") (cons 62 256) (cons 67 1) (cons 370 -1) (cons 410 "000-1") ) ) ) (if (setq js (ssget "x" (list (cons 0 "INSERT") (cons 2 " [surligneur] cartouche[/surligneur]")))) (progn (setq ef (ssget "x" (list (cons 410 "000-1") ) ) doc (vla-get-activedocument (vlax-get-acad-object)) lay (vla-item (vla-get-layers doc) "CARTOUCHES") old (vla-get-lock lay) n 0 ) (vla-startundomark doc) (vla-put-lock lay :vlax-false) (if ef (while (setq ent (ssname ef n)) (if (not (eq (cdr (assoc 2 (entget ent))) " [surligneur] cartouche[/surligneur]")) (entdel ent) (setq ind (vlax-ename->vla-object ent)) ) (setq n (1+ n)) ) ) [surligneur] (if ind (foreach n (vlax-invoke ind 'getconstantattributes) (if (eq (vla-get-tagstring n) "IND") (setq ind (vla-get-textstring n)) ) ) )[/surligneur] (setq n 0 lst '()) (while (setq ent (ssname js n)) (setq fol '()) (foreach att (vlax-invoke (vlax-ename->vla-object ent) 'getattributes) (cond [surligneur] ((eq (vla-get-tagstring att) "NUMPLAN") (setq rec (cons 0 (vla-get-textstring att))) )[/surligneur] ((eq (vla-get-tagstring att) "NUMFOLIO") (setq rec (cons 1 (vla-get-textstring att))) ) ((eq (vla-get-tagstring att) "TITRE1") (setq rec (cons 2 (vla-get-textstring att))) ) ((eq (vla-get-tagstring att) "TITRE2") (setq rec (cons 3 (vla-get-textstring att))) ) ) (setq fol (cons rec fol)) ) (setq fol (list [surligneur] (cdr (assoc 0 fol))[/surligneur] (cdr (assoc 1 fol)) (cdr (assoc 2 fol)) (cdr (assoc 3 fol)) ) ) (if (not (member fol lst)) (setq lst (cons fol lst)) ) (setq n (1+ n)) ) (setq lst (vl-sort lst '(lambda (a b) (if (= (car a) (car b)) (< (cadr a) (cadr b)) (< (car a) (car b)) ) ) ) x 137.0 y (+ (/ (- (* (+ (length lst) 3) 4) 236) 2) 279) ) (rect x y 8) (foreach n (list 86 98 106) (lign (+ x n) 0 y -8) ) (text (+ x 2.5) (- y 4) "LISTE DES DOCUMENTS" 4) (text (+ x 92) (- y 4) "N° PLAN" 5) (text (+ x 102) (- y 4) "FOLIO" 5) (text (+ x 118) (- y 2) "INDICE" 5) (foreach n (list 1 2 3 4 5 6) (text (+ x 104 (* n 4)) (- y 6) (itoa n) 5) ) (setq y (- y 12)) (rect x y (* (length lst) 4)) (foreach n (list 86 98 106 110 114 118 122 126) (lign (+ x n) 0 y (- (* (length lst) 4))) ) (foreach txt lst (text (+ x 2.5) (- y 2) (if (not (member (cadddr txt) (list "" "-"))) (strcat (caddr txt) " - " (cadddr txt)) (caddr txt) ) 4 ) (text (+ x 92) (- y 2) (car txt) 5) (text (+ x 102) (- y 2) (cadr txt) 5) [surligneur] (text (+ x 104 (* (atoi ind) 4)) (- y 2) "X" 5)[/surligneur] (if saut (lign x 130 y 0) ) (setq y (- y 4) saut T) ) (vla-put-lock lay old) (vla-endundomark doc) (princ "\nSommaire effectué.") ) (princ "\nPas de plans.") ) (princ)) (setq nom_lisp "SOM")(if (/= app nil) (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp) (princ (strcat "..." nom_lisp " chargé.")) (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter."))) (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter.")))(setq nom_lisp nil)(princ) [Edité le 22/10/2009 par gras_s]
G_rome Posté(e) le 22 octobre 2009 Posté(e) le 22 octobre 2009 Bonsoirje vais pas pouvoir t' aider pour modifier ce lisp mais pourquoi n'utilise tu pas l'extrateur d'attribues tu pourra faire un sommaire et il se mettra a jour automatiquementbonne chance Jérôme
gras_s Posté(e) le 22 octobre 2009 Auteur Posté(e) le 22 octobre 2009 J'ai essayé rapidement, mais j'ai eu du mal: les attributs se mettent dans l'ordre alphabétique...
Patrick_35 Posté(e) le 23 octobre 2009 Posté(e) le 23 octobre 2009 Salut Avec un exemple, ce serait plus facile @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
gras_s Posté(e) le 23 octobre 2009 Auteur Posté(e) le 23 octobre 2009 Bonjour.On peut poster des fichier ici?
lili2006 Posté(e) le 23 octobre 2009 Posté(e) le 23 octobre 2009 Bonjour à toutes et tous, On peut poster des fichier ici? Oui, via un hébergeur comme celui-ci, par exemple,... Il te suffit ensuite de coller le lien ainsi créé dans ton message,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
gras_s Posté(e) le 23 octobre 2009 Auteur Posté(e) le 23 octobre 2009 Alors le voilà: http:// http://dl.free.fr/qGZWzuKqH
Patrick_35 Posté(e) le 23 octobre 2009 Posté(e) le 23 octobre 2009 Re L'exemple donné fonctionne bien avec le lisp.Tu aurais pas plutôt un exemple avec tes propres cartouches (avec 4/5 feuilles pas exemple) et un exemple du résultat que tu souhaites @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
gras_s Posté(e) le 23 octobre 2009 Auteur Posté(e) le 23 octobre 2009 En fait, dans le zip il y a un répertoire avec l'exemple, et un répertoire contenant mon cartouche pour lequel je veux adapter le lisp.Mon cartouche contient un attribut de moins (numplan), et l'attribut "IND" n'est pas constant par rapport à l'exemple.
Patrick_35 Posté(e) le 23 octobre 2009 Posté(e) le 23 octobre 2009 Oui, mais ton bloc est décomposé et en espace ObjetDonc, je ne sais pas si le sommaire doit se dessiner en EP, sur quel onglet (si EP), à partir de quel élément (nom cartouche), des infos à récupérer (sommaire exemple car certains veulent un indice par folio, d'autres pas) ni dans quel espace sont les éléments (EO ou EP).Cela commence à faire beaucoup de questions, d'où l'intérêt d'un exemple. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
gras_s Posté(e) le 23 octobre 2009 Auteur Posté(e) le 23 octobre 2009 Ah et bien en fait il suffit de créer plusieurs onglet présentation en insérantmon fichier en tant que bloc.La LISP d'origine dessine sur la présentation active, ça me convient.Quand je fais un carnet, je fais comme dans l'exemple: une présentation par folio, aucun cartouche dans l'espace objet.C'est vrai que j'aurais pu poster un fichier avec les présentations toutes faites...
Patrick_35 Posté(e) le 27 octobre 2009 Posté(e) le 27 octobre 2009 Salut Voici un 1er jet @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
gras_s Posté(e) le 27 octobre 2009 Auteur Posté(e) le 27 octobre 2009 Wonderfull !!! Je vais ptêt voir si je peux remplacer le contenu du sommaire à la place d'en créer un mais sinon c'est exactement ce que je cherche. Mille mercis.
Patrick_35 Posté(e) le 27 octobre 2009 Posté(e) le 27 octobre 2009 Le sommaire est créé une première fois s'il n'existe pas.Après, il est modifié. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
gras_s Posté(e) le 27 octobre 2009 Auteur Posté(e) le 27 octobre 2009 YesC'est ce que j'ai vu en la testant plus en pofondeur.Encore merci.
Dominique974 Posté(e) le 10 avril 2017 Posté(e) le 10 avril 2017 Bonsoir, Posté 27 octobre 2009 - 11:48Salut Voici un 1er jet @+ Le lien est expiré serait-il possible de le mettre à jour ? Peace ! 3
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