Aller au contenu

croisillons batis leger??


Messages recommandés

Posté(e)

Bonsoir a tous,

Je souhaite dessiner des croisillons de batis leger, mais vu le nombre de batiment ......pffff y suis

encore en 2006.

Existe t-il un remplissage comme pour les hachures?

Bon en attendant j'continue donc mes polylignes.....

 

Posté(e)

Essayes les "Superhachures" des ExpressTools, je suis sur que cela pourrait faire l'affaire pour ce type de hachures.

 

Il te suffit de faire un bloc d'un extrait de ce que tu as déjà dessiné en t'assurant que la répétition de ton motif ce fasse au bon endroit

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

Posté(e)

revox31,

ayant eu le meme souci j'ai develloppe en lisp cette fonction,

elle ne fonctionne qu'avec des lwpolylignes de 4 sommets çà reduit le travail

à enregistrer sous croix-hangars.lsp

et à charger par appload

 

(defun c:croix-hangars (/ m c1 i)

;recuperation des variables

(setq var-accrobj (getvar "osmode"))

(setq var-cmddia (getvar "cmddia"))

(setq var-cmdecho (getvar "cmdecho"))

 

(setvar "osmode" 0)

(setvar "cmddia" 0)

(setvar "cmdecho" 0)

 

(setq ent (car (entsel "\nChoisir le Hangar : ")))

 

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

(progn

(setq nbr-som (cdr (assoc 90 (entget ent))))

(setq lst-ent (entget ent))

(setq lng-lst (length lst-ent))

(setq i 0)

(setq list-a-remplir '())

(setq lst-pts '())

(while (<= i lng-lst)

(if (= (car (nth i lst-ent)) 10)

(progn

(setq p-en-cours (cdr (nth i lst-ent)))

(setq lst-pts (append (list p-en-cours) lst-pts))

);fin progn

);fin if

(setq i (+ i 1))

); fin while

(setq lst-pts (reverse lst-pts))

(cond

((= nbr-som 4)

(progn

(command "polylign" (nth 0 lst-pts) (nth 2 lst-pts) "")

(command "polylign" (nth 1 lst-pts) (last lst-pts) "")

)

);fin condition 1

(progn

(print "\n Nombre de sommets incompatibles ")

;retour a la normale des variables utilisées

(setvar "cmddia" var-cmddia)

(setvar "osmode" var-accrobj)

(setvar "cmdecho" var-cmdecho)

);fin progn

);fin 1 cond

 

);fin progn

(prompt "\n Cet objet n'est pas une LWPOLYLINE !!! Utilisez CONVERT pour la transformer !!!")

);fin if

 

;retour a la normale des variables utilisées

(setvar "cmddia" var-cmddia)

(setvar "osmode" var-accrobj)

(setvar "cmdecho" var-cmdecho)

(princ)

);fin defun

 

bonne utilisation

fabcad

 

Posté(e)

Salut Fabcad

 

sympa cette routine

 

mais malgré ceci

 

;recuperation des variables

(setq var-accrobj (getvar "osmode"))

(setq var-cmddia (getvar "cmddia"))

(setq var-cmdecho (getvar "cmdecho"))

 

(setvar "osmode" 0)

(setvar "cmddia" 0)

(setvar "cmdecho" 0)

 

;retour a la normale des variables utilisées

(setvar "cmddia" var-cmddia)

(setvar "osmode" var-accrobj)

(setvar "cmdecho" var-cmdecho)

 

les variables ne reviennent pas à la normale.

Pourquoi ?

 

PS : Je suis nul en Lisp bien-sur

 

 

 

Posté(e)

Salut,

 

les variables ne reviennent pas à la normale.

Pourquoi ?

Je me permet de répondre à la place de fabcad

 

La routine ne contient pas de code pour la gestion des erreurs, donc en cas d'erreur ou d'échap les variables système ne sont pas restaurées à leur valeur initiale.

 

Pour remédier à cela, il faudrait charger, avec la routine, un truc du genre

(defun croix-hangars-err	(msg)
 (if (or
(= msg "Fonction annulée")
(= msg "quitter / sortir abandon")
     )
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (setvar "cmddia" var-cmddia)
 (setvar "osmode" var-accrobj)
 (setvar "cmdecho" var-cmdecho)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
) 

Et ajouter ceci au début de la routine -avant la sauvegarde des variables- pour redéfinir la fonction *error* standard :

(setq m:err   *error*
     *error* croix-hangars-err
) 

et ceci à la fin -avant le dernier (princ)- pour restaurer le *error* original :

(setq *error* m:err
     m:err nil
) 

Posté(e)

Merci GILE,

Je ne sais pas comment fonctionne les erreurs mais je vais appronfondir...

mais j'ai modifié mon programme avec tes conseils.

 

(defun croix-hangars-err (msg)

(if (or

(= msg "Fonction annulée")

(= msg "quitter / sortir abandon")

)

(princ)

(princ (strcat "\nErreur: " msg))

)

(setvar "cmddia" var-cmddia)

(setvar "osmode" var-accrobj)

(setvar "cmdecho" var-cmdecho)

(setq *error* m:err

m:err nil

)

(princ)

);fin defun croix-hangars-err

 

(defun c:croix-hangars (/ m c1 i)

 

(setq m:err *error* *error* croix-hangars-err)

 

;recuperation des variables

(setq var-accrobj (getvar "osmode"))

(setq var-cmddia (getvar "cmddia"))

(setq var-cmdecho (getvar "cmdecho"))

 

(setvar "osmode" 0)

(setvar "cmddia" 0)

(setvar "cmdecho" 0)

 

(setq ent (car (entsel "\nChoisir le Hangar : ")))

 

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

(progn

(setq nbr-som (cdr (assoc 90 (entget ent))))

(setq lst-ent (entget ent))

(setq lng-lst (length lst-ent))

(setq i 0)

(setq list-a-remplir '())

(setq lst-pts '())

(while (<= i lng-lst)

(if (= (car (nth i lst-ent)) 10)

(progn

(setq p-en-cours (cdr (nth i lst-ent)))

(setq lst-pts (append (list p-en-cours) lst-pts))

);fin progn

);fin if

(setq i (+ i 1))

); fin while

(setq lst-pts (reverse lst-pts))

(cond

((= nbr-som 4)

(progn

(command "polylign" (nth 0 lst-pts) (nth 2 lst-pts) "")

(command "polylign" (nth 1 lst-pts) (last lst-pts) "")

)

);fin condition 1

(progn

(print "\n Nombre de sommets incompatibles ")

;retour a la normale des variables utilisées

(setvar "cmddia" var-cmddia)

(setvar "osmode" var-accrobj)

(setvar "cmdecho" var-cmdecho)

);fin progn

);fin 1 cond

 

);fin progn

(prompt "\n Cet objet n'est pas une LWPOLYLINE !!! Utilisez CONVERT pour la transformer !!!")

);fin if

 

;retour a la normale des variables utilisées

(setvar "cmddia" var-cmddia)

(setvar "osmode" var-accrobj)

(setvar "cmdecho" var-cmdecho)

(setq *error* m:err m:err nil)

(princ)

);fin defun

Bonne utilisation

fabcad

 

Posté(e)

Scusez-moi je suis celui qui a posé la question (revox31)pas vu que je repondais sous "corail59"

Donc une polyligne oui mais une "lwpolyligne? c quoi?

En fait je bosse sous microstation, et trop peu de connaissance sous autocad

Comment transformer une polyligne fermée en lwpolyligne, par la commande convert?marche pas.....

En attendant je cherche....

Posté(e)

J'ai essayé.... mais pas réussi à faire la manip de gile :P

 

Comme dab... à la barbare, j'ai supprimé les variables et ça marche aussi bien. :D

 

PS: Mais j'ai compris le principe et je suis persuadé de son intérêt.

 

Merci Fabcad pour cette nouvelle version ;)

 

Bon week-end.

Posté(e)

J'me suis complétement planté sur le sens de la question :mad:

 

Maintenant que j'ai vu la routine de Fabcad, j'ai compris :)

 

Il y aurait peut être moyen d'adapter pour une polyligne à + de 4 sommets.

Je ferais le (boundingbox) de celle ci, puis chercherais les 4 sommets les plus proches des 4 coins de cette boite englobante

 

Si j'ai le temps et l'envie....

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

  • 2 semaines après...
Posté(e)

Bon le temps étant morose et l'envie au rendez-vous ;)

 

J'ai planché un peu sur le problème, ce n'est pas aussi simple que je le pensais :casstet:

 

Mais voici déjà une approche qui peut être encore amélioré.

Le résulat sera convenable si les polyligne ont des contours proche de ce qu'on peut trouver comme contour de bati.

Bien sur si on a des contour très tortueux avec des formes en "U" (concave) le résultat ne sera pas celui escompté.

 

Concluant ou pas ?

(defun C:croisillons ( / ent ptlst di_lst pt_sco pt_nxt pt_tmp ptscu p_min p_max pt_box l_near d_near p_near)
 (setvar "cmdecho" 0)
 (while (not ent)
   (setq ent (entsel "\nSélectionner une Polyligne:"))
   (if ent
     (progn
       (setq ent (entget(car ent)))
       (if (/= (cdr(assoc 0 ent)) "LWPOLYLINE")
         (progn
           (prompt "\nEntitée sélectionée n'est pas une Polyligne. Réessayer")
           (setq ent nil)
         )
       )
     )
   (prompt "\nAucune sélection. Réessayer")
   )
 )
 (setq ptlst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) ent)))
 (setq di_lst (mapcar '(lambda (x y) (distance x y)) ptlst (append (cdr ptlst) (list (car ptlst)))))
 (setq pt_sco (nth (- (length di_lst) (length (member (eval (cons 'max di_lst)) di_lst))) ptlst))
 (setq pt_nxt (nth (- (1+ (length di_lst)) (length (member (eval (cons 'max di_lst)) di_lst))) (append ptlst (list (car ptlst)))))
 (setq pt_tmp (polar pt_sco (+ (angle pt_sco pt_nxt) (/ pi 2)) (distance pt_sco pt_nxt)))
 (setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384)))
 (command "_.ucs" "_3point" pt_sco pt_nxt pt_tmp)
 (setq ptscu (mapcar '(lambda (x) (trans x 0 1)) ptlst))
 (setq
p_min 
(list
	(apply 'min (mapcar 'car ptscu))
	(apply 'min (mapcar 'cadr ptscu))
)
p_max
(list
	(apply 'max (mapcar 'car ptscu))
	(apply 'max (mapcar 'cadr ptscu))
)
 )
 (setq pt_box (list p_min (list (car p_max) (cadr p_min)) p_max (list (car p_min) (cadr p_max))))
 (setq l_near '())
 (repeat 4
  (setq d_near (mapcar '(lambda (x) (distance (car pt_box) x)) ptscu))
  (setq p_near (nth (- (length d_near) (length (member (eval (cons 'min d_near)) d_near))) ptscu))
  (cond 
	((not (member p_near l_near))
		  (setq l_near (cons p_near l_near))
  	)
	(T
		  (setq d_near (mapcar '(lambda (x) (distance (car pt_box) x)) (vl-remove p_near ptscu)))
		  (setq p_near (nth (- (length d_near) (length (member (eval (cons 'min d_near)) d_near))) (vl-remove p_near ptscu)))
		  (setq l_near (cons p_near l_near))
	)
  )
  (setq pt_box (cdr pt_box))
 )
 (command "_.line" (car l_near) (caddr l_near) "" "_.line" (cadr l_near) (cadddr l_near) "")
 (command "_.ucs" "_previous")
 (setvar "osmode" (rem (getvar "osmode") 16384))
 (setvar "cmdecho" 1)
 (princ)
)

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

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é