Aller au contenu

Gradient


bseb67

Messages recommandés

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...

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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éfaut

du 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...

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é