BiB_PutLst

Fonction Catégorie Version
BIB 13 BiB_PutLst Gestion des Objets 1.0 - Janvier 2007

Description

But Permet de modifier les valeurs associées de plusieurs paires pointées
Prototype (BiB_PutLst ‘Liste_PP Liste_Données)
Arguments Liste_PP - Liste des paires pointées modifiées - liste -
Liste_Données - La liste de description à traiter - liste -
Retours La liste des données modifiées
Var. globales Néant
Description Permet de modifier les valeurs associées de plusieurs paires pointées dans la liste de définitions d'une entité à partir de cette liste
Notes Il faut une double liste (( )) s’il n’y a qu’une paire à modifier.
(Pour modifier une seule paire, voir BiB_Put.)
Si une paire pointée n’existe pas, elle est ajoutée à la liste de définitions.
Voir BiB_PutSym s'il y a des symboles dans les paires pointées.
Entmod est nécessaire ensuite pour la modification effective. .
Exemples

Commande: (setq a4 (entget a3))

((-1 . <Nom de l'entité: 2590e98>)(0 . "INSERT") (5 . "153")(100 . 
"AcDbEntity") (67 . 0) (8 . "MUREXT") (100 . "AcDbBlockReferen")
(2 . "INSTRU05") (10 279.634 74.844 0.0) (41 . 2.0) (42 . 3.0) 
(43 . 1.0) (50 . 1.91866) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) ...

Commande: (BiB_PutLst '((41 . 3)(42 . 4)) a4)

((-1 . <Nom de l'entité: 2590e98>) (0 . "INSERT") (5 . "153") 
(100 . "AcDbEntity") (67 . 0) (8 . "MUREXT") (100 . "AcDbBlockReferen")
(2 . "INSTRU05") (10 279.634 74.844 0.0) (41 . 3) (42 . 4) (43 . 1.0)
 (50 . 1.91866) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) ...
	Les paires pointées de code 41 et 42 sont modifiées.

Commande: (BiB_PutLst '((41 . 1)(42 . 1)(101 . 1)) a4)

((101 . 1) (-1 . <Nom de l'entité: 2590e98>) (0 . "INSERT") (5 . "153")
(100 . "AcDbEntity") (67 . 0) (8 . "MUREXT") (100 . "AcDbBlockReference")
 (2 . "INSTRU05") (10 279.634 74.844 0.0) (41 . 1) (42 . 1) (43 . 1.0) 
 (50 . 1.91866) (70 . 0) (71 . 0) ...
	
Les paires pointées de code 41 et 42 sont modifiées à nouveau, et la 
paire pointée code 101 qui n'existait pas est rajoutée en début de liste.

La fonction


 1- (defun BiB_PutLst (*ListPP *EntDat / OldPP)

 2-    (cond
 3-      ((not *ListPP) *EntDat)        ;  si ListPP est nul, prendre *EntDat
 4-      (t (BiB_PutLst (cdr *ListPP) 	;  sinon relancer récursivement BiB_PutLst
 5-           (cond	;	en enlevant la 1ère liste de *ListPP
 6-             ((setq OldPP (assoc (caar *ListPP) *EntDat))
 7-                (subst (car *ListPP) OldPP *EntDat)
 8-             ) 
 9-             (t (cons (car *ListPP) *EntDat))
10-           )	         ;   fin de condition ligne 5
11-         )            ;   fin de fonction BiB_PutLst ligne 4
12-      )               ;   fin de condition T   ligne 4
13-    )                 ;   fin de condition ligne 2
14-  )
Explication du programme :

Exemple : Commande: (setq a4 (entget a3))
	
((-1 . <Nom de l'entité: 2590e98>) (0 . "INSERT") (5 . "153") (100 . "AcDbEntity") 
(67 . 0) (8 . "MUREXT") (100 . "AcDbBlockReference") (2 . "INSTRU05") 
(10 279.634 74.844 0.0) (41 . 2.0) (42 . 3.0) (43 . 1.0) (50 . 1.91866) (70 . 0) 	
(71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

Commande: (BiB_PutLst '((41 . 3)(42 . 4)) a4)  >> *ListPP = '((41 . 3)(42 . 4))

1er tour - ligne 4	   BiB_PutLst '(42 . 4) ...
         - ligne 6	   OldPP =  (assoc  41) = (41 . 2.0)
         - ligne 7	   remplace  OldPP par (car de *ListPP) 
		                         soit (41 . 2.0) par (41 . 3) dans *EntDat
         - ligne 9	   passe
		 
2ème tour - ligne 4   BiB_PutLst nil ...
          - ligne 6	   OldPP =  (assoc  42) = (42 . 3.0)
          - ligne 7	   remplace  OldPP par (car de *ListPP) 
		                         soit (42 . 3.0) par (42 . 4) dans *EntDat
          - ligne 9	   passe
		 
3ème tour - ligne 3   Retourne *EntDat
((-1 . <Nom de l'entité: 2590e98>) (0 . "INSERT") (5 . "153")
(100 . "AcDbEntity") (67 . 0) (8 . "MUREXT") (100 . "AcDbBlockReference")
(2 . "INSTRU05") (10 279.634 74.844 0.0) (41 . 3) (42 . 4) (43 . 1.0) 
(50 . 1.91866) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

cdr : renvoie tous les éléments de la liste sauf le premier.
caar : équivalent à (car (car *ListPP)) soit le 1er élément de la 1ère liste de *ListPP.
assoc : recherche dans la base de données *EntDat le ou les éléments associés au 1er élément de la liste.
subst : dans la liste *EntDat, remplace la paire pointée OldPP par la 1ère paire pointée de *ListPP.
cons : ajoute la 1ère paire pointée de *ListPP dans *EntDat.