Aller au contenu

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


Messages recommandés

Posté(e)

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

Posté(e)

Salut,

 

 

Intéressant (comme d'habitude).

 

Juste un petit rappel :depuis la version 2012, de nouvelles fonctions LISP sont apparues pour lister et modifier les propriétés des objets, voir ici.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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

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é