BiB_EntGet

Fonction Catégorie Version
BIB 07 BBiB_EntGet Gestion des Objets 1.0 - Janvier 2007

Description

But Retourne toutes les définitions d'une entité et de toutes ses sous-entités.
Prototype (BiB_EntGet Nom_Entité)
Argument Nom_Entité - Le nom de l'entité (ename) - ename -
Retours La liste des données
Var. globales Néant
Description Retourne toutes les définitions d'une entité et de toutes ses sous-entités.
L'entité à traiter doit être désignée par son "ename".
Notes Version très amèliorée de EntGet puisqu'elle retourne également les caractéristiques des sous-entités. L'entité "SEQEND" n'est pas ajoutée.
D'après EDLGETENT de Vladimir Nesterovsky.
Exemples

Command: (setq Ent1 (entlast))	On venait de créer une polyligne.
<Entity name: 17f1538>

Command: (setq Data1 (entget Ent1))
((-1 . <Entity name: 17f1538>) (0 . "POLYLINE") (5 . "207") (100 . 
"AcDbEntity") (67 . 0) (8 . "MURS") (100 . "AcDb2dPolyline") (66 . 1) 
(10 0.0 0.0 0.0) (70 . 1) (40 . 1.5) (41 . 1.5) (210 0.0 0.0 1.0) (71 . 0)
(72 . 0) (73 . 0) (74 . 0) (75 . 0))

Command: (setq data2 (BiB_EntGet Ent1))
(((-1 . <Entity name: 17f1538>) (0 . "POLYLINE") (5 . "207") (100 . 
"AcDbEntity") (67 . 0) (8 . "MURS") (100 . "AcDb2dPolyline") (66 . 1) 
(10 0.0 0.0 0.0) (70. 1) (40 . 1.5) (41 . 1.5) (210 0.0 0.0 1.0) (71 . 0)
(72 . 0) (73 . 0) (74 . 0) (75 . 0)) ((-1 . <Entity name: 17f1540>)
(0 . "VERTEX") (5 . "208") (100 . "AcDbEntity") (67 . 0) (8 . "MURS") 
(100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 280.0 150.0 0.0)
(40 . 1.5) (41 . 1.5) (42 . 0.0) (70 . 0) (50 . 0.0)) ((-1 . <Entity name:
17f1548>) (0 . "VERTEX") (5 . "209") (100 . "AcDbEntity") (67 . 0) 
(8 . "MURS") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 280.0 85.0 
0.0) (40 . 1.5) (41 . 1.5) (42 . 0.0) (70 . 0) (50 . 0.0)) ((-1 . <Entity
name: 17f1550>) (0 . "VERTEX") (5 . "20A") (100 . "AcDbEntity") (67 . 0)
(8 . "MURS") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 330.0 85.0 
0.0) (40 . 1.5) (41 . 1.5) (42 . 0.0) (70 . 0) (50 . 0.0)) ((-1 . <Entity
name: 17f1558>) (0 . "VERTEX") (5 . "20B") (100 . "AcDbEntity") (67 . 0)
(8 . "MURS") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 330.0 115.0 
0.0) (40 . 2.0) (41 . 2.0) (42 . 0.0) (70 . 0) (50 . 0.0)) ((-1 . <Entity
name: 17f1560>) (0 . "VERTEX") (5 . "20C") (100 . "AcDbEntity") (67 . 0)
(8 . "MURS") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 360.0 115.0
0.0) (40 . 2.0) (41 . 2.0) (42 . 0.0) (70 . 0) (50 . 0.0))
((-1 . <Entity name: 17f1568>) (0 . "VERTEX") (5 . "20D") 
(100 . "AcDbEntity") (67 . 0) (8 . "MURS") (100 . "AcDbVertex") 
(100 . "AcDb2dVertex") (10 360.0 150.0 0.0) (40 . 2.0) (41 . 2.0) 
(42 . 1.0) (70 . 0) (50 . 0.0)))

On peut constater la différence entre Entget et BiB_EntGet ! 
BiB_EntGet rajoute à la suite les 6 éléments qui composent cette polyligne.
   -  Pour obtenir la liste des 6 sommets de cette polyligne (fermée) :
   
(setq s1 (BiB_Get 10 (cdr (BiB_EntGet Ent1))))	retourne

((280.0 150.0 0.0) (280.0 85.0 0.0) (330.0 85.0 0.0) (330.0 115.0 0.0) 
(360.0 115.0 0.0) (360.0 150.0 0.0))
	
  Pour obtenir à la fois, les sommets, l'épaisseur de départ et 
  l'épaisseur d'arrivée :	
  
(setq L2 (BiB_Get '(10 40 41) (cdr (BiB_EntGet Ent1)))) retourne	

(((280.0 150.0 0.0) 1.5 1.5) ((280.0 85.0 0.0) 1.5 	1.5) 
((330.0 85.0 0.0) 1.5 1.5) ((330.0 115.0 0.0) 2.0 2.0) 	
((360.0 115.0 0.0) 2.0 2.0) ((360.0 150.0 0.0) 2.0 2.0))

La fonction


 1- (defun BiB_EntGet (*Ent_Name / EntDat AllDat) 

 2-     (setq EntDat (Entget *Ent_Name)			 			
 3-           AllDat (list EntDat)				 
 4-     )		
 5-     (if (= 1 (BiB_Get 66 EntDat))		
 6-         (while (/= "SEQEND" (BiB_Get 0 (setq Entdat
 7-  	                            (entget (setq *Ent_Name (Entnext *Ent_Name)))))
 8-                )
 9-                (setq AllDat (cons EntDat AllDat))	
10-         )	
11-     )	
12-     (reverse AllDat)			.
13- )
Ligne 2 :  Stocke dans EntDat la liste des définitions de l'entité principale *Ent_Name
Ligne 3 :  Imbrique cette liste dans une autre liste AllDat. Ce qui permet que la fonction 
           reverse (ligne 12) n'a aucun effet dans EntDat, en cas d'entité simple.
Ligne 5 :    Si, dans la liste de données EntDat, il existe un code 66 et que sa valeur 
             associée soit 1, (ce qui veut dire que c'est une entité complexe et que des 
			 entités secondaires suivent)
Lignes 6 -7:	Tant que l'entité secondaire est différente de SEQEND (marque de fin)
		1-  Donne à *Ent_Name le nom de l'entité suivante.
		2 - Stocke dans EntDat la liste des données de cette nouvelle entité.
		3 - A l'aide de la fonction BiB_Get, compare le texte associé au code 0 
		     (type d'entité) dans cette nouvelle liste de données.
Ligne 9 :      Ajoute comme nouveau premier élément de AllDat, les données de cette 
                  nouvelle entité qui sont stockées dans EntDat.
Ligne 10 :     Si le type d'entité est "SEQEND", sort de la boucle while, sinon va ligne 6	
Ligne 12 :  La fonction cons  construit une nouvelle liste en rajoutant le nouvel élément; 
            en début de liste. Il est donc nécessaire de renverser la liste pour préserver 
            l'ordre habituel. C'est le but de cette ligne


Entget : Retourne sous forme de liste associative, les données de l'entité de nom *Ent_Name
List : Ici, la variable EntDat étant déjà une liste, elle devient le 1er élément d'une liste ALLDAT.
BiB_Get : Fonction BiRaRR qui retourne les valeurs associées d'une paire pointée.
Entnext : Ici, retourne le nom de l'entité suivante de *Ent_Name.
Cons : Constructeur de liste. Ici ajoute en début de AllDat, la liste EntDat.
Reverse : Retourne AllDat en inversant les éléments de cette liste.