Aller au contenu

Hachure avec couleurs differentes


Cyrchap

Messages recommandés

Bonjour à tous,

 

je souhaiterais hachurer automatiquement des polylignes fermés (300 env.) mais avec une couleur et/ou un motif différent sur chaque contour.

 

- L’idéal serait de donner une série de couleurs et/ou de motif à utiliser.

 

- Que des couleurs ou des motifs identiques ne se retrouvent pas côte à côte pour éviter la confusion.

 

Si quelqu’un à une solution à me proposer, même partielle.

 

Merci.

 

Cyrchap

 

 

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

DONC si maximum 6 contours voisins d'un quelconque contour alors il te faut 7 couleurs !?

 

As tu une idee de ce nombre fatidique ??

 

Cela me parait etre un challenge interessant pour Gilles / Bruno / Patrick et autres "PROs" de la programmation !?

 

Cela a peut etre ete deja publie sur TheSwamp !?

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

J'ai fais un assemblage rapide de 2 routines que j'avais.Cela semblerait répondre à la demande des couleurs (enfin presque), à essayer...Commande MHATCH

(defun ACI2RGB (n / l1 l3)
 (cond
( (or(> n 255)(< n 1))nil)
( (> 7 n 0)(aci2rgb(+ 10(* 40(1- n)))))
( (> 250 n 9)
 	(setq l1
  	'(0 1 2 3 4 4 4 4 4 4 4 4 4 3 2 1 0 0 0 0 0 0 0 0)
 	)
 	(setq l3 '(1 0.8 0.6 0.5 0.3))
 	(mapcar
  	'(lambda(v w / )
     	(fix
       	(* 255
         	(+
           	(*
             	0.25
             	(nth(rem(+(1-(/ n 10))v)24)l1)
             	(nth(/(rem n 10)2)l3)
           	)
           	(*
             	(rem n 2)
             	0.125
             	(nth(rem(+(1-(/ n 10))w)24)l1)
             	(nth(/(rem n 10)2)l3)
           	)
         	)
       	)
     	)
   	)
  	'(8 0 16)
  	'(20 12 4)
 	)
)
(1
 	(apply
  	'(lambda(v w / )(list w w w))
   	(assoc n
     	'((7 255)(8 128)(9 192)(250 51)(251 91)(252 132)
                        	(253 173)(254 214)(255 255)))
 	)
)
 )
)
(defun randnum (/ modulus multiplier increment random);retourne valeur entre 0 et 1
 (if (not seed)
(setq seed (getvar "DATE"))
 )
 (setq modulus	65536
   	multiplier 25173
   	increment  13849
   	seed (rem (+ (* multiplier seed) increment) modulus)
   	random (/ seed modulus)
 )
)
(defun getrandnum (minNum maxNum / tmp);fourchette du nombre aleatoire
 (if (not (< minNum maxNum))
(progn
 	(setq tmp	minNum
       	minNum maxNum
       	maxNum tmp
 	)
)
 )
 (setq random (+ (* (randnum) (- maxNum minNum)) minNum))
)
(defun c:mhatch (/ cmdecho mod_hatch ang_hatch esp_hatch dbl_hatch ss i ss1 n obj ncol oColor RGBcolor pt)
 (setq cmdecho (getvar "CMDECHO"))
 (setvar "CMDECHO" 0)
 (command "_.UNDO" "_Group")
 (initget "Solide Utilisateur Courant _Solid User Current")
 (setq mod_hatch (getkword (strcat "\nUtiliser le motif [solide/Utilisateur/Courant]? <" (getvar "HPNAME") ">: ")))
 (cond
((eq mod_hatch "Solid") (setvar "HPNAME" "_SOLID"))
((eq mod_hatch "User") (setvar "HPNAME" "_USER"))
 )
 (if (and (/= (getvar "HPNAME") "_SOLID") (/= (getvar "HPNAME") "SOLID"))
(if (or (wcmatch (getvar "hpname") "_U*") (wcmatch (getvar "hpname") "U*"))
 	(progn
   	(setq ang_hatch (getangle (strcat "\nSpécifiez l'angle des lignes de hachures <" (angtos (getvar "HPANG")) ">: ")))
   	(if ang_hatch (setvar "HPANG" ang_hatch))
   	(initget 6)
   	(setq esp_hatch (getdist (strcat "\nSpécifiez l'espacement entre les lignes <" (rtos (getvar "HPSPACE")) ">: ")))
   	(if esp_hatch (setvar "HPSPACE" esp_hatch))
   	(initget "Oui Non _Yes No")
   	(setq dbl_hatch (getkword (strcat "\nDouble hachures? [Oui/Non] <" (if (zerop (getvar "HPDOUBLE")) "N" "O") ">: ")))
   	(cond ((eq dbl_hatch "Yes") (setvar "HPDOUBLE" 1)) ((eq dbl_hatch "No") (setvar "HPDOUBLE" 0)))
 	)
 	(progn
   	(initget 6)
   	(setq esp_hatch (getdist (strcat "\nSpécifiez l'échelle du modèle <" (rtos (getvar "HPSCALE")) ">: ")))
   	(if esp_hatch (setvar "HPSCALE" esp_hatch))
   	(setq ang_hatch (getangle (strcat "\nSpécifiez l'angle du modèle <" (angtos (getvar "HPANG")) ">: ")))
   	(if ang_hatch (setvar "HPANG" ang_hatch))
 	)
)
 )
 (princ "\nChoisir des objet ou <Entrée> pour point interne.")
 (setq
ss (ssget
 	'((-4 . "<OR")
   	(-4 . "<AND")
     	(0 . "POLYLINE")
     	(-4 . "<AND")
       	(-4 . "&") (70 . 1)
       	(-4 . "<NOT")
         	(-4 . "&") (70 . 16)
       	(-4 . "NOT>")
     	(-4 . "AND>")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "LWPOLYLINE")
     	(-4 . "<AND")
       	(-4 . "&") (70 . 1)
     	(-4 . "AND>")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "MLINE")
     	(-4 . "<AND")
       	(-4 . "=") (71 . 3)
     	(-4 . "AND>")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "CIRCLE")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "3DFACE")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "ELLIPSE")
     	(-4 . "<AND")
       	(-4 . "=") (41 . 0)
       	(-4 . "=") (42 . 6.283185307179586)
     	(-4 . "AND>")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "SPLINE")
     	(-4 . "<AND")
       	(-4 . "&") (70 . 1)
     	(-4 . "AND>")
   	(-4 . "AND>")
   	(-4 . "<AND")
     	(0 . "REGION")
   	(-4 . "AND>")
 	(-4 . "OR>"))
)
i -1
ss1 (ssadd)
 )
 (cond
(ss
 	(repeat (sslength ss)
   	(command "_.-bhatch" "_select" (ssname ss (setq i (1+ i))) "" "")
   	(ssadd (entlast) ss1)
 	)
)
(T
 	(while (setq pt (getpoint "\nSpécifiez un point interne: "))
   	(command "_.-bhatch" pt "")
   	(ssadd (entlast) ss1)
 	)
)
 )
 (cond
(ss1
 	(repeat (setq n (sslength ss1))
   	(setq obj (vlax-ename->vla-object (ssname ss1 (setq n (1- n)))))
   	(while (not (eq (rem (setq ncol (fix (getrandnum 11 241))) 10) 1)))
   	(setq
     	oColor (vlax-get-property obj 'TrueColor)
     	RGBcolor (ACI2RGB ncol)
   	)
   	(vlax-invoke-method oColor 'SetRGB (car RGBcolor) (cadr RGBcolor) (caddr RGBcolor))
   	(vla-put-TrueColor obj oColor)
 	)
 	(command "_.draworder" ss1 "" "_back")
)
 )
 (if (not (zerop (sslength ss1))) (command "_.draworder" ss1 "" "_back"))
 (command "_.UNDO" "_End")
 (setvar "CMDECHO" cmdecho)
 (princ)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Trop bien ! Cela répond à une partie du problème et me suffit pour le moment.

 

Je vais gérer manuellement les quelques couleurs quasi similaires qui sont trop proches et cela ira bien.

 

Merci bonuscad

 

Le sujet reste quand même ouvert et en réponse à LeCrabe,

 

une dizaine de couleurs choisies ( perso j'utilise souvent les pastels 11,31,61,91,etc) et avec une dizaine de motifs hachures choisis ( Ansi ou autres prédéfinis) cela devrait faire l'affaire.

 

Merci

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é