N° | Fonction | Catégorie | Version |
---|---|---|---|
BIB 07 | BBiB_EntGet | Gestion des Objets | 1.0 - Janvier 2007 |
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)) |
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