Aller au contenu

Lister les propriétés et les méthodes applicables à un objet


VDH-Bruno

Messages recommandés

Bonjour,

 

Pour faire suite à une discussion qui date un peu, http://cadxp.com/topic/36853-faire-une-liste-des-proprietes-dun-object/page__p__201435__fromsearch__1#entry201435

Voici 2 petites fonctions qui devrait éviter l’emploi de listes de propriétées pour obtenir un équivalent à la fonction vlax-dump-object.

 

;; (bv:property obj check-modify)                                   VDH-Bruno 
;; ---------------------------------------------------------------------------
;; Retourne la liste des propriétées de l'objet. Si check-modify est non nil, 
;; les propriétées en lecture seules sont omises.         
;; Exemples:
;;   (bv:property (vlax-ename->vla-object (car(entsel))) nil)
;;       --> Retourne la liste de toutes les propriétés consultable de l'objet. 
;;   (bv:property (vlax-ename->vla-object (car(entsel))) T)
;;       --> Retourne la liste de toutes les propriétés modifiable de l'objet. 

(defun bv:property (obj check-modify)
 (vl-sort (apply 'append
                 (mapcar '(lambda (x)
                            (if (and (/= x (setq x (vl-string-subst "" "VLA-GET-" x)))
                                     (vlax-property-available-p obj x check-modify)
                                )
                              (list x)
                            )
                          )
                         (atoms-family 1)
                 )
          )
          '<
 )
)

 

 

;; (bv:method obj)                                                  VDH-Bruno 
;; ---------------------------------------------------------------------------
;; Retourne la liste des méthodes applicable à l'objet. 
;; Exemples:
;;   (bv:method (vlax-ename->vla-object (car(entsel))))

(defun bv:method (obj)
 (vl-sort (apply 'append
                 (mapcar '(lambda (x)
                            (if (and (/= x (setq x (vl-string-subst "" "VLA-" x)))
                                     (vlax-method-applicable-p obj x)
                                )
                              (list x)
                            )
                          )
                         (atoms-family 1)
                 )
          )
          '<
 )
)

 

Exemples d’applications sur une entité cercle :

$ (setq objCircle (vlax-ename->vla-object (entmakex '((0 . "CIRCLE") (62 . 1) (10 4.0 4.0 0.0) (40 . 1.0)))))
#<VLA-OBJECT IAcadCircle 22f58a84>

 

Pour lister toutes les propriétés accessibles en lecture :

_$ (bv:property objCircle nil)
("APPLICATION" "AREA" "CENTER" "CIRCUMFERENCE" "COLOR" "DATABASE" "DIAMETER" "DOCUMENT" 
"HANDLE" "HASEXTENSIONDICTIONARY" "HYPERLINKS" "LAYER" "LINETYPE" "LINETYPESCALE" 
"LINEWEIGHT" "MATERIAL" "NORMAL" "OBJECTID" "OBJECTNAME" "OWNERID" "PLOTSTYLENAME" 
"RADIUS" "THICKNESS" "TRUECOLOR" "VISIBLE")

 

Pour lister les seules propriétés accessibles en écriture :

_$ (bv:property objCircle T)
("AREA" "CENTER" "CIRCUMFERENCE" "COLOR" "DIAMETER" "LAYER" "LINETYPE" "LINETYPESCALE" "LINEWEIGHT" "MATERIAL" "NORMAL" "PLOTSTYLENAME" "RADIUS" "THICKNESS" "TRUECOLOR" "VISIBLE")

 

Pour obtenir la liste de toutes les méthodes applicable à l’objet cercle :

_$ (bv:method objCircle)
("ARRAYPOLAR"
 "ARRAYRECTANGULAR"                  "COPY"            "DELETE"          "ERASE"           "GETBOUNDINGBOX"  "GETEXTENSIONDICTIONARY"
 "GETXDATA"        "HIGHLIGHT"       "INTERSECTWITH"   "MIRROR"          "MIRROR3D"        "MOVE"            "OFFSET"          "ROTATE"
 "ROTATE3D"        "SCALEENTITY"     "SETXDATA"        "TRANSFORMBY"     "UPDATE"
)

 

 

A comparer avec l’emploie d’un appel à la fonction vlax-dump-object

_$ (vlax-dump-object objCircle T)
; IAcadCircle: Interface AutoCAD Circle
; Valeurs de propriétés:
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d098b4>
;   Area = 3.14159
;   Center = (4.0 4.0 0.0)
;   Circumference = 6.28319
;   Diameter = 2.0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 0b4dcc20>
;   Handle (RO) = "11A"
;   HasExtensionDictionary (RO) = 0
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 22f58894>
;   Layer = "0"
;   Linetype = "ByLayer"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Material = "ByLayer"
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 2130256016
;   ObjectName (RO) = "AcDbCircle"
;   OwnerID (RO) = 2130251000
;   PlotStyleName = "Couleur_ 1"
;   Radius = 1.0
;   Thickness = 0.0
;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 22f5a6e0>
;   Visible = -1
; Méthodes prises en charge:
;   ArrayPolar (3)
;   ArrayRectangular (6)
;   Copy ()
;   Delete ()
;   GetBoundingBox (2)
;   GetExtensionDictionary ()
;   GetXData (3)
;   Highlight (1)
;   IntersectWith (2)
;   Mirror (2)
;   Mirror3D (3)
;   Move (2)
;   Offset (1)
;   Rotate (2)
;   Rotate3D (3)
;   ScaleEntity (2)
;   SetXData (2)
;   TransformBy (1)
;   Update ()
T

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour (gile),

 

Merci beaucoup pour la piqure de rappel, car j’avais réagie sur le post…

A ma décharge niveau version, j’ai toujours plusieurs trains de retard et si je n’applique pas, je ne mémorise pas...

 

A+

Ps : Tes interventions sur ce forum sont toujours très appréciés.

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é