bseb67 Posté(e) le 17 septembre 2007 Posté(e) le 17 septembre 2007 Salut! Je cherche a retraiter des plans qui contiennent des hachures avec des gradients.Le but est de retirer le "forcage" de la couleur, je m'explique:la hachure est bien en couleur ducalque, mais comme il y a un gradient, celui-ci peut être dans une couleur différente. (setq vln (vlax-ename->vla-object (car (entsel)))) ; on récupère les données du gradient 1 (vla-get-gradientcolor1 vln ) on a alors 8 propriétés:Blue (Int), BookName (Str), ColorIndex (Int), ColorMethod (Int), ColorName (Str), EntityColor (Int), Green (Int), Red (Int) Je peux tester la valeur de chacune d'elles, avec un get-property,mais j'ai essayé un put-property pour l'écraser j'obtiens alors: (vlax-put-property (vlax-get-property vln 'GradientColor1) 'Blue); erreur: Le serveur ActiveX a renvoyé une erreur: Le type ne correspond pas Apparemment il faut utiliser (vla-put-gradientcolor1 vln "variant"). Mais je fais comment alors pour créer un variant combinant des entiers et des chaines de caractères? Je suis preneur de toutes infos :D Merci et bonne soirée! ;) Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
(gile) Posté(e) le 17 septembre 2007 Posté(e) le 17 septembre 2007 Salut, La gestion des couleurs depuis le passage aux couleurs vraies (2004) est assez complexe. Les couleurs sont des objets AcCmColor qui peuvent être définis suivant l'index (255 couleurs), en Red/Green/Blue ou d'après un carnet de couleur (ColorName et ColorBook). Il te faut donc récupérer l'objet AcCmColor de la hachure, lui affecter une couleur et le réaffecter à la hachure. Pour affecter une couleur à un objet AcCmColor on peut utiliser soit les couleurs de l'index (entiers de 1 à 255) soit des valeurs de rouge, vert et bleu, soit un nom de couleur issu d'un carnet. Pour illustrer ce propos, deux petits exemples. D'abord en couleurs de l'index. Si la couleur du calque n'est pas une couleur de l'index, vla-get-Color retourne la couleur de l'index la plus proche sous la forme d'un entier. ;; Récupérer l'objet couleur de l'index (la plus proche) du calque de l'objet "vln" (setq lay-ind-col (vla-get-Color (vla-item (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) (vla-get-Layer vln) ) ) ) ;; Récupérer l'objet couleur 1 du gradiant (setq col1 (vla-get-GradientColor1 vln)) ;; affecter la couleur du calque à la couleur 1 du gradiant (vla-put-ColorIndex col1 lay-ind-col) ;; réaffecter l'objet couleur au gradiant (vla-put-GradientColor1 vln col1) La même chose en couleurs vraies (RGB) avec la couleur 2 du gradient ;; Récupérer l'objet couleur vraie du calque de l'objet "vln" (setq lay-true-col (vla-get-TrueColor (vla-item (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) (vla-get-Layer vln) ) ) ) ;; Récupérer l'objet couleur 2 du gradiant (setq col2 (vla-get-GradientColor2 vln)) ;; affecter la couleur du calque à la couleur 2 du gradiant (vla-setRGB col2 (vla-get-Red lay-true-col) (vla-get-Green lay-true-col) (vla-get-Blue lay-true-col) ) ;; réaffecter l'objet couleur au gradiant (vla-put-GradientColor2 vln col2) [Edité le 17/9/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bseb67 Posté(e) le 18 septembre 2007 Auteur Posté(e) le 18 septembre 2007 Salut Gile! Ok merci, mais j'ai aussi compris que lorsque l'on a des gradients on est coincé:Il faut lui mettre les couleurs du calque absolument, mais si on change la couleur par défautdu calque, et bien là le gradient reste, il faut donc refaire une màj du gradient.Sinon il me reste plus qu'à remplacer les gradients par des hachures solides. Pour les fonctions vla(x), j'ai un pdf avec la liste des fonctions, mais sans exemple et explications.Alors c'est pas toujours facile de trouver. Merci encore pour l'info :) Un jour peut-être je pourrai t'aider ;) A+. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
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