BiB_Get

Fonction Catégorie Version
BIB 06 BiB_Get Gestion des Objets 1.0 - Janvier 2007

Description

But Retourne des valeurs associées (qui peuvent être multiples) de paires pointées.
Prototype (BiB_Get Codes Liste_données)
Arguments Codes - Le(s) code(s) associé(s) aux valeurs désirées - tout type -
Liste_données - La liste à traiter (en général liste Entget) - ename -
Retours La ou les valeur(s) associée(s) - tout type -
Var. globales Néant
Description Retourne des valeurs associées de paires pointées (ou listes associatives) dans une liste.
Les clefs d'association peuvent être multiples avec n'importe quelle structure que la routine conservera au retour.
Notes Voir également les fonctions BiB_GetVal, BiB_GetSel, BiB_Get2Dim, BiB_GetType, BiL_EntGet ...
D'après GeT de Vladimir Nesterovsky.
Exemples

(setq L1 (entget(car (entsel)))) 
 
Si on sélectionne un bloc :
Choix des objets:((-1 . <Entity name: 17f0788>)
  (0 . "INSERT")(5 . "71") (100 . "AcDbEntity") 
  (67 . 0) (8 . "0") (100 . "AcDbBlockReference") 
  (2 . "BLOC1") (10 325.832 118.09 0.0) (41 . 0.5) (42 . 0.5) (43 . 0.5)
  (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))

	(BiB_Get 10 L1)	retourne	(325.832 118.09 0.0)
	(BiB_Get 11 L1)	retourne	 nil
	(BiB_Get '(0 2) L1)   retourne      ("INSERT" "BLOC1")
	(BiB_Get '(0 . 2) L1) retourne      ("INSERT" . "BLOC1")

	Command: (BiB_Get '(2 10 (40 41 42)50) L1)  
	retourne
	("BLOC1" (325.832 118.09 0.0) (nil 0.5 0.5) 0.0)

La fonction


  1- (defun BiB_Get (*Key *List1 / SubKey SubList) 

  2-  (if (atom (caar *List1))		
  3-   	(cond	
  4-      ((atom *Key)		
  5-       (cdr (assoc *Key *List1))	
  6-      )		
  7-      ((and (cdr *Key)(atom (cdr *Key)))		
  8-       (cons (BiB_Get (car *Key) *List1) (cdr (assoc (cdr *Key) *List1)))
  9-      )
 10-      ( T 			
 11-        (mapcar '(lambda (SubKey)(BiB_Get SubKey *List1)) *Key)
 12-      )		
 13-     )			
 14-     (mapcar '(lambda (SubList)(BiB_Get *Key SubList)) *List1)
 15-   )	
 16-  )

Ligne 2 :  Si *List1 est une liste associative
Ligne 3 :    Conditions :
Ligne 4 :      si *Key ne comporte qu'un seul élément,
Ligne 5 :         extrait les autres éléments de la liste associée au code *Key - 
Ligne 7 :  Si *Key est une liste associat. type (0 . 8) qui retournera ("ENTITE" . "PLAN")
Ligne 8 :      Construit une liste sous forme de paire pointée comprenant :
             1 - le ou les éléments associé(s) au 1er élément de *Key dans liste *List1,
             2 - le ou les éléments associés au second élément de *Key, dans  *List1.
Ligne 10 :     Dans tous les autres cas ou *List1 est une liste associative 
Ligne 11 :      Pour chaque élément de *Key, utilise fonct. BiB_Get élément_de_*Key *List1
                  Si cet élément est un atome, extrait les éléments associés à cette clé
                      - Voir ligne 4. Si c'est une paire pointée, voir ligne 8.
                      Dans les autres cas, c'est à dire si c'est une liste, prend chaque 
                      élément de cette sous-liste. Si cet élément est un atome... et ainsi
                      de suite, cette fonction est récursive
                   Les résultats sont retournés dans une liste de même structure que *Key.
Ligne 13 :  fin de condition
Ligne 14 :  Si *List1 n'est pas une liste associative, traite chaque sous-liste de 
               *List1 sous la forme  BiB_Get  *Key   sous_liste_de_*List1.

atom : Retourne nil si l'élément est une liste, T dans tous les autres cas
car : 1er élément d'une liste
caar : équivalent à (car (car List1)) : 1er élément d'une liste à 2 niveaux.
cdr : retourne une liste après y avoir enlevé le 1er élément
assoc : recherche dans List1 les éléments associés à Key.
cons : construit ici une liste en structure "paire pointée". Ajoute un atome à un autre atome.
mapcar : retourne une liste correspondant au résultat de la fonction lambda sur chaque élément de Key en ligne 11 ou de List1 en ligne 14
lambda : Ligne 11 - Pour chacun des éléments de Key, effectue la fonction (BiB_Get cet_élément List1) Ligne 14 - Pour chacun des éléments de List1, effectue la fonction (BiB_Get Key cet_élément)