vinz34 Posté(e) le 16 avril 2008 Posté(e) le 16 avril 2008 Bonjour, Existe-t-il une méthode pour comparer les propriétés de 2 entités sans faires des tests par type d'entité avec des vla-get* pour chaque propriété sur les deux : (defun va (prop /) (vlax-safearray->list (vlax-variant-value prop)) ) (setq lst (list (cons "AcDbCircle" (list '(va (vla-get-center n)) '(vla-get-radius n))) (cons "AcDbPolyline" (list '(va (vla-get-coordinates n)))) (cons "AcDbLine" (list '(va (vla-get-startpoint n)) '(va (vla-get-endpoint n)))) (cons "AcDbArc" (list '(va (vla-get-center n)) '(vla-get-radius n) '(vla-get-startangle n) '(vla-get-endangle n))) (cons "AcDbEllipse" (list '(va(vla-get-center n)) '(va(vla-get-majoraxis n)) '(vla-get-radiusratio n))) (cons "AcDbSolid" (list '(va (vla-get-coordinates n)))) (cons "AcDbText" (list '(vla-get-textstring n) '(va(vla-get-insertionpoint n)) '(vla-get-height n))) (cons "AcDbMText" (list '(va(vla-get-insertionpoint n)) '(vla-get-width n) '(vla-get-textstring n))) ))
(gile) Posté(e) le 16 avril 2008 Posté(e) le 16 avril 2008 Salut, On est bien obligé de comparer chaque propriété sur les deux objets, mais on peut faire une routine "générique" qui ne compare les propriétés que si elles sont accessibles pour le type d'objet : (defun equal-objects (obj1 obj2) (vl-every (function (lambda (p) (or (not (vlax-property-available-p obj1 p)) (equal (vlax-get obj1 p) (vlax-get obj2 p) 1e-9 ) ) ) ) '(ObjectName Center Radius Coordinates StartPoint EndPoint StartAngle EndAngle MajorAxis RadiusRatio TextString InsertionPoint Width Height ) ) ) [Edité le 16/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
vinz34 Posté(e) le 17 avril 2008 Auteur Posté(e) le 17 avril 2008 Salut, Merci, ça va franchement me raccourcir le code j'étais en train de lister les propriétés pour chaque type d'entité.Je test ça.
vinz34 Posté(e) le 17 avril 2008 Auteur Posté(e) le 17 avril 2008 Merci beaucoup encore une fois pour ta rapidité et surtout ton efficacité. J'ai placé ici la routine pour laquelle j'avais besoin de ces précision.
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant