Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

comment puis-je faire pour ajouter des éléments à une liste.

 

Je voudrais ajouter, par exemple, (10 . 22) à une liste du type

((-1 . ) (0 . "LINE") (330 .

name: 7ee42d18>) (5 . "27292") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8

. "0") (100 . "AcDbLine") (10 535.791 768.439 0.0) (11 1262.6 1016.54 0.0) (210

0.0 0.0 1.0))

 

Donc pour obtenir

 

((-1 . ) (0 . "LINE") (330 .

name: 7ee42d18>) (5 . "27292") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8

. "0") (100 . "AcDbLine") (10 535.791 768.439 0.0) (11 1262.6 1016.54 0.0) (210

0.0 0.0 1.0) ( (10 . 22))

 

D'avance merci

Posté(e)

Salut,

 

Pour ajouter un élément à une liste, regarde les fonctions cons et append.

 

cons ajoute l'élément en début de liste :

(cons 6 '(1 2 3 4)) retourne (6 1 2 3 4)

append fusionne une ou plusieurs liste et peut-être utilisé pour ajouter un élément en fin de liste :

(append '(1 2 3 4 5) (list 6)) retourne (1 2 3 4 5 6).

 

Dans l'exemple que tu donnes, la liste est une liste de données DXF.

Ces listes sont constituées d'éléments (paire pointées ou liste) qu'on appelle les "groupes DXF", chaque groupe DXF se caractérise par un "code groupe" : le nombre entier qui est le premier élément de chaque groupe.

Par exemple, le groupe (0 . "LINE") correspond au type d'entité, (10 535.791 768.439 0.0) au point de départ pour une ligne. La valeur pour le groupe 0 doit être de type chaîne de caractère (STR) et être un type d'entité valide, pour le groupe 10 (quel que soit le type d'entité) la valeur doit être un point 3d.

 

Ton groupe (10 . 22) n'est pas valide et rendra donc ta liste DXF invalide.

 

Regarde dans l'aide aux développeurs d'AutoCAD, la rubrique Reference DXF (en français).

 

PS : inutile de poster plusieurs fois le même message dans le même ou dans dans différents forums. J'ai effacé tous les autres.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Slt Gile,

 

le code dxf que j'avais mis , c'était un exemple.

 

Ce que je veux faire, c'est d'ajouter les codes (90 . 3) (63 . 256) (45 . 1.05) (441 .0) à un code de Mtext pour ajouter un background à mon texte.

Je viens d'essayer uniquement avec (45 . 1.05) et ça ne marche pas

 

(setq b (entget (car (entsel))))

 

Select object: ((-1 . ) (0 . "MTEXT") (330 .

name: 7ee42d18>) (5 . "272B0") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8

. "TEXTE018") (100 . "AcDbMText") (10 1133.75 1672.3 0.0) (40 . 10.0) (41 .

0.0) (46 . 0.0) (71 . 1) (72 . 5) (1 . "FSFS") (7 . "TEXTE-18") (210 0.0 0.0

1.0) (11 1.0 0.0 0.0) (42 . 27.3961) (43 . 13.3333) (50 . 0.0) (73 . 2) (44 .

0.75))

 

(setq a (cons (45 1.05))

 

(append a b)

; error: bad list: 1.05

 

Voilà ce que j'obtiens

 

B à T

Posté(e)

Salut

 

Une routine qui convertit des attributs en texte.

Je la donne comme exemple car elle ajoute aux codes dxf, les codes 0,1 et 73

 

(defun c:atxt(/ ent js n new)
 (and (setq n 0
     js (ssget "x" (list (cons 0 "ATTDEF")))
      )
   (while (setq ent (ssname js n))
     (setq ent (entget ent)
    new (append (list (cons 0  "TEXT")
		      (cons 1  (cdr (assoc 2 ent)))
		      (cons 73 (cdr (assoc 74 ent)))
		)
		(vl-remove-if '(lambda(x)(member (car x) '(-1 0 1 2 3 5 70 73 74 100 280 330))) ent)
	)
     )
     (setq new (entget (entmakex new)))
     (and (not (assoc 6 ent))
   (assoc 6 new)
(setq new (subst (cons 6 "BYLAYER") (assoc 6 new) new))
(entmod new)
     )
     (and (not (assoc 62 ent))
   (assoc 62 new)
(setq new (subst (cons 62 256) (assoc 62 new) new))
(entmod ent)
     )
     (and (not (assoc 370 ent))
   (assoc 370 new)
(setq ent (subst (cons 370 -1) (assoc 370 new) new))
(entmod ent)
     )
     (entdel (cdr (assoc -1 ent)))
     (setq n (1+ n))
   )
 )
 (princ (strcat "\nConvertion de " (itoa n) " attribut(s) en texte(s)."))
 (princ)
)

 

@+

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité