CADxp: Sommaire automatique LISP - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Sommaire automatique LISP

#1 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 22 octobre 2009 - 10:34

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]
0

#2 L'utilisateur est hors-ligne   G_rome 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 1
  • Inscrit(e) : 24-septembre 09

Posté 22 octobre 2009 - 19:34

Bonsoir
je 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 automatiquement
bonne chance
Jérôme
0

#3 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 22 octobre 2009 - 19:51

J'ai essayé rapidement, mais j'ai eu du mal: les attributs se mettent dans l'ordre alphabétique...
0

#4 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 23 octobre 2009 - 11:11

Salut

Avec un exemple, ce serait plus facile

@+
Les Lisps de Patrick
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.
Joseph Joubert, 1754-1824
0

#5 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 23 octobre 2009 - 11:50

Bonjour.
On peut poster des fichier ici?
0

#6 L'utilisateur est hors-ligne   lili2006 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 12007
  • Inscrit(e) : 21-décembre 05

Posté 23 octobre 2009 - 12:13

Bonjour à toutes et tous,

Citation

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,...
0

#7 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 23 octobre 2009 - 12:17

Alors le voilà:
http://dl.free.fr/qGZWzuKqH
0

#8 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 23 octobre 2009 - 12:27

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 Patrick
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.
Joseph Joubert, 1754-1824
0

#9 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 23 octobre 2009 - 12:47

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.
0

#10 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 23 octobre 2009 - 15:18

Oui, mais ton bloc est décomposé et en espace Objet
Donc, 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 Patrick
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.
Joseph Joubert, 1754-1824
0

#11 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 23 octobre 2009 - 17:07

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...
0

#12 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 27 octobre 2009 - 10:48

Salut

Voici un 1er jet

@+
Les Lisps de Patrick
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.
Joseph Joubert, 1754-1824
0

#13 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 27 octobre 2009 - 11:06

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.
0

#14 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 27 octobre 2009 - 11:44

Le sommaire est créé une première fois s'il n'existe pas.
Après, il est modifié.

@+
Les Lisps de Patrick
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.
Joseph Joubert, 1754-1824
0

#15 L'utilisateur est hors-ligne   gras_s 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 16
  • Inscrit(e) : 10-mai 06

Posté 27 octobre 2009 - 11:56

Yes
C'est ce que j'ai vu en la testant plus en pofondeur.
Encore merci.
0

#16 L'utilisateur est hors-ligne   Dominique974 

  • Advanced Member
  • PipPipPip
  • Groupe : Membres
  • Messages : 32
  • Inscrit(e) : 09-septembre 10
  • LocationToulouse

Posté 10 avril 2017 - 18:37

Bonsoir,

Citation

Posté 27 octobre 2009 - 11:48
Salut

Voici un 1er jet

@+


Le lien est expiré serait-il possible de le mettre à jour ?

Peace !
2

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)