Aller au contenu

Hachures pour Zébras


alf_ze_cat

Messages recommandés

Bonjour,

 

Ma question est simple, je cherche le moyen de faire des hachures qui representeraient des Zébras sachant que ceux ci ont une épaisseur et une gémoetrie constante.

Comme ca :

http://img237.imageshack.us/img237/7205/zebratw8.th.jpg

 

J'ai essayé avec le style ANSI31 mais forcement, ca marche pas. Parce que meme en leur donnant une épaisseur de trait, ben ca sort de la zone de délimitation !

Quelqu'un a t il une idée ?

 

Lisp ? Réseau ? Hachures ?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a un lisp dans Bonuscad (de Bonuscad ) et qui s'appelle zébra mais où ?

C'est vrai le fichier n'est plus actif ; C'est limité dans le temps (21 jours je crois)

Donc le volci :

 

(defun zeberr (ch / )

(cond

((eq ch "Function cancelled") nil)

((eq ch "quit / exit abort") nil)

((eq ch "console break") nil)

(T (princ ch))

)

(command "_.undo" "_end")

(command "_.u")

(if (<= sv_und 3) (command "_.undo" "_control" "_one"))

(setq *error* olderr)

(redraw)

(setvar "cmdecho" oldcmd)

(princ)

)

(defun typ_zeb (ent / vrtx pt1 pt2 cle typ)

(setq vrtx (som_ent ent) typ 0 cle 43)

(if (= (getvar "worlducs") 0)

(setq pt1 (trans (car vrtx) 0 1) pt2 (trans (cadr vrtx) 0 1))

(setq pt1 (car vrtx) pt2 (cadr vrtx))

)

(command "_.ucs" "_3point" pt1 pt2 (polar pt1 (+ (angle pt1 pt2) (/ pi 2.0)) 10.0))

(prompt "\nChoix du type de zébra avec +/- : ")

(while (member cle '(43 45))

(if (= cle 45) (setq typ (+ typ -1)) (setq typ (+ typ 1)))

(if (> typ 4) (setq typ 1))

(if (< typ 1) (setq typ 4))

(redraw)

(cond

((= typ 1)

(grvecs

'(

3 (-0.559017 0.0 0.0) (8.38525 4.47214 0.0)

3 (-0.559017 0.0 0.0) (8.38525 -4.47214 0.0)

3 ( 0.559017 0.0 0.0) (9.50329 4.47214 0.0)

3 ( 0.559017 0.0 0.0) (9.50329 -4.47214 0.0)

)

)

)

((= typ 2)

(grvecs

'(

3 (0.559017 0.0 0.0) (-8.38525 4.47214 0.0)

3 (0.559017 0.0 0.0) (-8.38525 -4.47214 0.0)

3 (-0.559017 0.0 0.0) (-9.50329 -4.47214 0.0)

3 (-0.559017 0.0 0.0) (-9.50329 4.47214 0.0)

)

)

)

((= typ 3)

(grvecs

'(

3 (-8.38525 4.47214 0.0) (9.50329 -4.47214 0.0)

3 (-9.50329 4.47214 0.0) (8.38525 -4.47214 0.0)

)

)

)

((= typ 4)

(grvecs

'(

3 (8.38525 4.47214 0.0) (-9.50329 -4.47214 0.0)

3 (9.50329 4.47214 0.0) (-8.38525 -4.47214 0.0)

)

)

)

)

(setq cle (cadr (grread)))

)

(command "_.ucs" "_previous")

(redraw)

typ

)

(defun som_ent (ent / vx lst_som nbs cnt)

(setq ent (entget ent))

(cond

((= (cdr (assoc 0 ent)) "LINE")

(list (cdr (assoc 11 ent)) (cdr (assoc 10 ent)))

)

((= (cdr (assoc 0 ent)) "ARC")

(list

(polar (cdr (assoc 10 ent)) (cdr (assoc 51 ent)) (cdr (assoc 40 ent)))

(polar (cdr (assoc 10 ent)) (cdr (assoc 50 ent)) (cdr (assoc 40 ent)))

)

)

((= (cdr (assoc 0 ent)) "POLYLINE")

(setq vx (entget (entnext (cdar ent))) lst_som '())

(while (= (cdr (assoc 0 vx)) "VERTEX")

(setq lst_som

(cons (cdr (assoc 10 vx)) lst_som)

)

(setq vx (entget (entnext (cdar vx))))

)

lst_som

)

((= (cdr (assoc 0 ent)) "LWPOLYLINE")

(setq nbs (cdr (assoc 90 ent)) cnt 0 lst_som '())

(while (< cnt nbs)

(if (= (caar ent) 10)

(setq lst_som (cons (cdar ent) lst_som) cnt (+ cnt 1))

)

(setq ent (cdr ent))

)

lst_som

)

(T

(prompt "\nEntitée choisie n'est pas une LIGNE,ARC,LWPOLYLIGNE ou POLYLIGNE.")

(exit)

)

)

)

(defun c:zebra ( / oldcmd oldmd hpat dens entry js ent stk_pt e_axe nw_axe som_po pt

p1_sel p2_sel contour mk test1 test2 nam_bl borne1 borne2

next_e ind lst_pt dxf_e js_tmp ptzone sv_und)

(setq oldcmd (getvar "cmdecho") oldmd (getvar "osmode"))

(setvar "cmdecho" 0)

(setvar "osmode" 0)

(if (<= (setq sv_und (getvar "undoctl")) 3)

(command "_.undo" "_control" "_all")

)

(command "_.undo" "_group")

(setq olderr *error* *error* zeberr)

; (if (not (member T (mapcar '(lambda (x) (wcmatch x "ACADAPP.ARX")) (arx))))

; (arxload "acadapp")

; )

(setq hpat (getvar "hpname"))

(setvar "hpname" "_SOLID")

(while (not val_u)

(initget 6)

(setq entry (getreal "\nDonner la valeur de U en centimètres 7.5/6/5/3 <6>: "))

(cond

((or

(eq entry 7.5)

(eq entry 6)

(eq entry 5)

(eq entry 3)

)

(setq val_u (* 0.01 entry))

)

((not entry)

(setq val_u (* 0.01 6.0))

)

(T

(prompt "\nLa valeur de U doit être de 7.5cm, 6cm, 5cm ou 3cm")

(setq val_u nil)

)

)

)

(setq js (ssadd))

(while (setq ent (entsel "\nChoix des entitées qui délimite la zone du zebra : "))

(cond

((or

(= (cdr (assoc 0 (entget (car ent)))) "LINE")

(= (cdr (assoc 0 (entget (car ent)))) "POLYLINE")

(= (cdr (assoc 0 (entget (car ent)))) "LWPOLYLINE")

(= (cdr (assoc 0 (entget (car ent)))) "ARC")

)

(redraw (car ent) 3) (ssadd (car ent) js) (setq stk_pt (cadr ent))

)

(T

(prompt "\nEntitée choisie n'est pas une LIGNE,ARC,LWPOLYLIGNE ou POLYLIGNE.")

)

)

)

(cond

((zerop (sslength js))

(prompt "\nSélection vide !...")

)

(T

(setvar "osmode" 512)

(setq e_axe (entsel "\nSélectionner l'axe du zébra à l'intérieur de la zone: "))

(setvar "osmode" 0)

(while

(or

(null e_axe)

(and

(/= (cdr (assoc 0 (entget (car e_axe)))) "LINE")

(/= (cdr (assoc 0 (entget (car e_axe)))) "POLYLINE")

(/= (cdr (assoc 0 (entget (car e_axe)))) "LWPOLYLINE")

(/= (cdr (assoc 0 (entget (car e_axe)))) "ARC")

)

)

(prompt "\nEntitée choisie n'est pas une LIGNE,ARC,LWPOLYLIGNE ou POLYLIGNE.")

(setq e_axe (entsel "\nSélectionner l'axe du zébra à l'intérieur de la zone: "))

)

(redraw (car e_axe) 3)

(command "_.copy" e_axe "" "0,0,0" "0,0,0")

(entdel (car e_axe))

(setq nw_axe (list (entlast) (cadr e_axe)))

(redraw (car nw_axe))

(setq som_po (som_ent (car nw_axe)))

(if (= (getvar "worlducs") 0)

(setq pt (trans (cadr nw_axe) 1 0) p1_sel (trans (car som_po) 0 1) p2_sel (trans (last som_po) 0 1))

(setq pt (cadr nw_axe) p1_sel (car som_po) p2_sel (last som_po))

)

(command "_.ucs" "_origin" (cadr nw_axe))

(setq ename_last (entlast))

(command "_.boundary" "_advanced" "_object" "_polyline" "_bound" "_new" js "" "_exit" (trans pt 0 1) "")

(setq contour (entlast))

(if (equal ename_last contour) (setq contour nil)(redraw contour 3))

(setq js nil)

; (if (bherrs)

; (alert (car (bherrs)))

; (redraw contour 3)

; )

(command "_.ucs" "_previous")

)

)

(cond

(contour

(command "._offset" (* 3.5 val_u) (list contour stk_pt) (cadr nw_axe) "")

(entdel contour)

(setq contour (entlast))

(redraw)

(if (= (cdr (assoc 0 (entget (car nw_axe)))) "POLYLINE") (setq mk T)(setq mk nil))

(entmake (list '(0 . "POINT") (cons 10 (car som_po)) '(210 0.0 0.0 1.0)))

(setq test1 (entlast))

(entmake (list '(0 . "POINT") (cons 10 (last som_po)) '(210 0.0 0.0 1.0)))

(setq test2 (entlast))

(setq js (ssget "_wp" (som_ent contour)))

(entdel test1) (entdel test2)

(if (and js (ssmemb test1 js))

(progn

(command "_.extend" contour "" (cons (car nw_axe) (list p1_sel)) "")

)

(progn

(command "_.trim" contour "" (cons (car nw_axe) (list p1_sel)) "")

(if mk (setq nw_axe (list (entlast) (cadr e_axe))))

)

)

(if (and js (ssmemb test2 js))

(progn

(command "_.extend" contour "" (cons (car nw_axe) (list p2_sel)) "")

)

(progn

(command "_.trim" contour "" (cons (car nw_axe) (list p2_sel)) "")

(if mk (setq nw_axe (list (entlast) (cadr e_axe))))

)

)

(if (not (tblsearch "BLOCK" "ZEBRA-V1"))

(progn

(entmake)

(entmake '((0 . "BLOCK") (2 . "ZEBRA-V1") (8 . "0") (70 . 64) (10 0.0 0.0 0.0)))

(entmake '((0 . "LINE") (8 . "0") (10 -0.559017 0.0 0.0) (11 17.3295 8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 -0.559017 0.0 0.0) (11 17.3295 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 0.559017 0.0 0.0) (11 18.4476 8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 0.559017 0.0 0.0) (11 18.4476 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "ENDBLK")))

)

)

(if (not (tblsearch "BLOCK" "ZEBRA-V2"))

(progn

(entmake)

(entmake '((0 . "BLOCK") (2 . "ZEBRA-V2") (8 . "0") (70 . 64) (10 0.0 0.0 0.0)))

(entmake '((0 . "LINE") (8 . "0") (10 0.559017 0.0 0.0) (11 -17.3295 8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 0.559017 0.0 0.0) (11 -17.3295 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 -0.559017 0.0 0.0) (11 -18.4476 8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 -0.559017 0.0 0.0) (11 -18.4476 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "ENDBLK")))

)

)

(if (not (tblsearch "BLOCK" "ZEBRA-I1"))

(progn

(entmake)

(entmake '((0 . "BLOCK") (2 . "ZEBRA-I1") (8 . "0") (70 . 64) (10 0.0 0.0 0.0)))

(entmake '((0 . "LINE") (8 . "0") (10 17.3295 8.94427 0.0) (11 -18.4476 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 18.4476 8.94427 0.0) (11 -17.3295 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "ENDBLK")))

)

)

(if (not (tblsearch "BLOCK" "ZEBRA-I2"))

(progn

(entmake)

(entmake '((0 . "BLOCK") (2 . "ZEBRA-I2") (8 . "0") (70 . 64) (10 0.0 0.0 0.0)))

(entmake '((0 . "LINE") (8 . "0") (10 -18.4476 8.94427 0.0) (11 17.3295 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LINE") (8 . "0") (10 -17.3295 8.94427 0.0) (11 18.4476 -8.94427 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "ENDBLK")))

)

)

(setq nam_bl (typ_zeb (car nw_axe)))

(cond

((= nam_bl 1) (setq nam_bl "ZEBRA-V2"))

((= nam_bl 2) (setq nam_bl "ZEBRA-V1"))

((= nam_bl 3) (setq nam_bl "ZEBRA-I2"))

((= nam_bl 4) (setq nam_bl "ZEBRA-I1"))

)

(setq js nil)

(setq js (ssadd) borne1 (entlast) borne2 borne1)

(command "_.measure" (cadr nw_axe) "_block" nam_bl "_yes" "4.12")

(entdel (car nw_axe)) (entdel (car e_axe))

(while (setq next_e (entnext borne2))

(ssadd next_e js)

(setq borne2 next_e)

)

(setq ind 0 lst_pt '())

(repeat (sslength js)

(setq dxf_e (entget (ssname js ind)))

(if (= (cdr (assoc 0 dxf_e)) "INSERT")

(progn

(setq lst_pt (cons (cdr (assoc 10 dxf_e)) lst_pt))

(command "_.explode" (ssname js ind))

)e

)

(setq ind (1+ ind))

)

 

(setq js nil js (ssadd))

(ssadd contour js)

(while (setq next_e (entnext borne1))

(ssadd next_e js)

(setq borne1 next_e)

)

(command "_.change" js "" "_property" "_layer" (getvar "clayer") "")

(setq js_tmp (ssadd))

(while lst_pt

(if (= (getvar "worlducs") 0)

(command "_.ucs" "_origin" (trans (car lst_pt) 0 1))

(command "_.ucs" "_origin" (car lst_pt))

)

(setq ptzone (trans (car lst_pt) 0 1))

(command "_.boundary" "_advanced" "_object" "_polyline" "_bound" "_new" js "" "_exit" ptzone "")

(setq ent (entlast))

 

(command "_.ucs" "_previous")

; (if (bherrs)

; (prompt (car (bherrs)))

(ssadd ent js_tmp)

; )

(setq lst_pt (cdr lst_pt))

)

(command "._erase" js "")

(setq js nil)

(cond

(js_tmp

(command "_.HATCH" (getvar "HPNAME") "1" "0" js_tmp "")

; (command "_.ERASE" js_tmp "")

)

(T

(prompt "\nSélection vide !")

)

)

)

(T

(prompt "\nEchec de la commande CONTOUR d'AutoCAD. ZEBRA ne peut être poursuivi")

(redraw)

)

)

(setvar "hpname" hpat)

(command "_.undo" "_end")

(if (<= sv_und 3) (command "_.undo" "_control" "_one"))

(setvar "cmdecho" oldcmd)

(setvar "osmode" oldmd)

(setq *error* olderr)

(prin1)

)

 

Lien vers le commentaire
Partager sur d’autres sites

merci beaucoup ...

j'essaye ca, on se rappelle et on s'fait une bouffe :)

 

EDIT :

 

bon ca y est, j'ai essayé ...

j'ai quelques questions ....

 

Est ce que ca a ete testé sur du 2006 ?

Que designe U (valeur demandée au debut) ?

Est ce que ca marche dans tout les cas ?

 

Passke chez moi ca marche pô ! :(

- soit il me hachures en solide TOUTE la zone a "zebraïer" (sic !)

- soit il me fait quelques zebras mais pas sur toute la zone ...

- soit il me fait rien ... Ø ...

 

normal ? / pas normal ?

 

 

[Edité le 17/1/2007 par alf_ze_cat]

Lien vers le commentaire
Partager sur d’autres sites

Est ce que ca a ete testé sur du 2006 ?

Que designe U (valeur demandée au debut) ?

Est ce que ca marche dans tout les cas ?

 

Moi je l'ai testé sur une 2005 maxi, mais étant fait en lisp standard (pas de fonction vl ou vlax ) il devrait se comporter de la même façon.

 

le U est une valeur représente un paramètre tiré de document officiel. La valeur proposée (6cm) correspond à une valeur pour les nationales 7.5 est pour les routes express ou autoroutes 5 pour les départementales

 

Cela devrait fonctionner, malheureusement je reconnais que ça ne fonctionne pas toujours.

Le plus grand souci est déjà la commande contour, si celle ci fonctionne déjà pour ton contour, bonne chance de réussite. puis des fois le hachurage en solide ne fonctionne pas comme il faut.

 

Donc pour le contour essaye d'avoir un contour qui fonctionne, sans avoir d'objets parasites dans celui-ci, des petits arc dans le contour posent parfois problème. Au pire tu fait rapidement un contour simplifié.

 

Si le hachurage se fait en complet fait seulement des "U" pour remonter jusqu'au contour des barres et fait le hachurage solide manuellement

 

Voilà la routine peut avorter, elle est loin d'être parfaite.

 

Ce que je fais aussi des fois quand je n'arrive pas à la faire fonctionner est un copier-coler du contour avec point base à 0,0,0 dans un nouveau dessin et éventuellement un scu origine dans la zone. Enfin de la bidouille quoi

 

- soit il me fait quelques zebras mais pas sur toute la zone ...

Ca vient de l'axe dans la zone, celui ci est mesuré pour mettre en place les contour des barres et forcément il ce peut qu'une zone ne soit pas couverte. Tricher sur le contour, ou quand c'est en nez d'ilot ne pas oublié qu'une surface pleine est mise en peinture ce que le programme ne fait pas.

 

Voilà c'est pas toujours tip-top, mais quand ça fonctionne ça fais gagner un peu de temps.

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

  • 17 ans aprè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 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é