Aller au contenu

Transformer objet "trace" en "hachure"


Messages recommandés

Posté(e)

Bonjour!

 

Je viens de récupérer un fichier autocad d'un architecte, la moitié des murs du bâtiment sont fait avec des objets "trace".

D'après ce que j'ai pu lire sur le forum, ces objets là sont très vieux et sont en quelques sorte l'ancêtre de la polyligne.

 

Je trouve que ces objets ressemblent aussi aux solides ou aux hachures.

Du coup, existe-t-il un moyen de convertir ces "traces" en "hachures"?

 

Merci d'avance pour votre aide. :D

Posté(e)

Par la même occasion, dans le même style:

J'ai aussi des polyligne avec une largeur globale épaisse. Après avoir choisit le mode "Inactif" de la fonction "Remplir", on peut voir que cette polyligne épaisse est matérialisée par un rectangle.

Du coup, est-il possible de transformer cette polyligne épaisse en un rectangle?

Posté(e)

Hello

 

Et si tu utilisais cette routine "Trace2Poly" de Gilles !?

 

Bye, lecrabe "triste"

 

 
;;
;; Transformer les TRACEs en POLYLIGNEs, voir la routine:
;; http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=9051#pid34308
;; par GC - Commande au clavier : TR2PL
;; La routine precedente "tr2pl" transformait toutes les traces du dessin en autant de segments de lwpolyligne
;;
;; Nouvelle version (05/03/06) possibilité de choisir 
;; entre générer une polyligne unique ou une polyligne par trace pour les traces jointives et de même largeur.
;;
;; Trace2poly Transforme les traces sélectionnées (ou Toutes) en lwpolylignes
;; L'utilsateur choisit si les traces jointives génèrent une seule polyligne ou des segments.
;; Les largeurs sont conservées.
;;

(defun c:trace2poly (/	     dxf     mid     dep_w   end_w   ss
	     opt     n	     cnt_t   cnt_p   tr_lst  sub_lst
	     pt_lst  prec
	    )

;;; ************************ SOUS ROUTINES ************************ ;;;

 ;; DXF retourne la valeur dxf de l'entité pour le code spécifié
 (defun dxf (code ent)
   (cdr (assoc code (entget ent)))
 )

 ;; MID Retourne le milieu de deux points
 (defun mid (pt1 pt2)
   (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2)) pt1 pt2)
 )

 ;; DEP_W Largeur de départ d'une trace
 (defun dep_w (tr / ang)
   (setq ang (- (angle (dxf 10 tr) (dxf 12 tr))
	 (angle (dxf 10 tr) (dxf 11 tr))
      )
   )
   (if	(minusp ang)
     (setq ang (+ (* 2 pi) ang))
   )
   (abs (* (sin ang) (distance (dxf 10 tr) (dxf 11 tr))))
 )

 ;; END_W Largeur de fin d'une trace
 (defun end_w (tr / ang)
   (setq ang (- (angle (dxf 12 tr) (dxf 10 tr))
	 (angle (dxf 12 tr) (dxf 13 tr))
      )
   )
   (if	(minusp ang)
     (setq ang (+ (* 2 pi) ang))
   )
   (abs (* (sin ang) (distance (dxf 12 tr) (dxf 13 tr))))
 )

;;; ************************ FONCTION PRINCIPALE ************************ ;;;

 ;; Sélection des objets
 (prompt
   "\nSélectionnez les traces à transformer < Toutes >: "
 )
 (if (not (setq ss (ssget '((0 . "TRACE")))))
   (setq ss (ssget "_X" '((0 . "TRACE"))))
 )
 ;; Si la sélection existe
 (if ss
   (progn

     ;; Choix du type d'objet à créer
     (initget "Oui Non")
     (setq opt
     (getkword
       "\nJoindre les segments ? [Oui/Non] < O >: "
     )
     )
     (if (not opt)
(setq opt "Oui")
     )

     ;; Création d'une liste (tr_lst) contenant toutes les traces du dessin
     (setq n	  (sslength ss)
    cnt_t n
    cnt_p 0
     )
     (repeat n
(setq n	     (1- n)
      tr_lst (cons (ssname ss n) tr_lst)
)
     ) ;_ Fin de repeat

     ;; Tant que tr_lst n'est pas vide
     (while tr_lst

;; Si option "Oui"
(if (= opt "Oui")
  (progn

    ;; Mise en tête de liste d'une trace non jointive à son extrémité
    (while
      (vl-member-if
	'(lambda (x)
	   (and	(equal (dxf 12 (car tr_lst)) (dxf 10 x) 1e-009)
		(equal (dxf 13 (car tr_lst)) (dxf 11 x) 1e-009)
	   )
	 )
	(cdr tr_lst)
      ) ;_ Fin de vl-member-if
       (setq
	 tr_lst
	  (reverse (cons (car tr_lst) (reverse (cdr tr_lst))))
       )
    ) ;_ Fin de while

    ;; Création d'une liste des traces jointives (sub_lst)
    (setq sub_lst (cons (car tr_lst) sub_lst)
	  tr_lst  (cdr tr_lst)
    )

    ;; Tant qu'il existe une trace jointive à la première de sub_lst
    (while (setq prec
		  (car
		    (vl-member-if
		      '(lambda (x)
			 (and (equal (dxf 10 (car sub_lst))
				     (dxf 12 x)
				     1e-009
			      )
			      (equal (dxf 11 (car sub_lst))
				     (dxf 13 x)
				     1e-009
			      )
			 )
		       )
		      tr_lst
		    ) ;_ Fin de vl-member-if
		  )
	   ) ;_ Fin de setq

      ;; Cette trace est ajoutée à sub_lst et supprimée de tr_lst
      (setq sub_lst (cons prec sub_lst)
	    tr_lst  (vl-remove prec tr_lst)
      )
    ) ;_ Fin de while
  ) ;_ Fin de progn

  ;; Si option "Non"
  (setq	sub_lst	(cons (car tr_lst) sub_lst)
	tr_lst	(cdr tr_lst)
  )
) ;_ Fin de if

;; Création de la liste des sommets de la polyligne et des
;; largeurs aux sommets
(setq pt_lst
       (apply 'append
	      (mapcar '(lambda (x)
			 (list
			   (cons 10 (mid (dxf 10 x) (dxf 11 x)))
			   (cons 40 (dep_w x))
			   (cons 41 (end_w x))
			 )
		       )
		      sub_lst
	      ) ;_ Fin de mapcar
       ) ;_ Fin de apply
) ;_ Fin de setq
(setq
  pt_lst (append pt_lst
		 (list (cons 10
			     (mid (dxf 12 (last sub_lst))
				  (dxf 13 (last sub_lst))
			     )
		       )
		 )
	 ) ;_ Fin de append
) ;_ Fin de setq

;; Création de la polyligne
(entmake (append
	   (list '(0 . "LWPOLYLINE")
		 '(100 . "AcDbEntity")
		 '(100 . "AcDbPolyline")
		 '(70 . 0)
		 (cons 90 (/ (+ 2 (length pt_lst)) 3))
		 (cons 8 (dxf 8 (car sub_lst)))
		 (cons 210 (dxf 210 (car sub_lst)))
		 (cons 39 (dxf 39 (car sub_lst)))
	   )
	   pt_lst
	 )
) ;_ Fin de entmake

;; Suppresion des traces traitées
(mapcar 'entdel sub_lst)
(setq sub_lst nil
      cnt_p   (1+ cnt_p)

)
     ) ;_ Fin de while
     (prompt (strcat "\n\t"
	      (itoa cnt_t)
	      " traces ont été transformées en "
	      (itoa cnt_p)
	      " polylignes."
      )
     )
   ) ;_ Fin de progn
   (prompt "\nLe dessin ne contient pas de trace.")
 ) ;_ Fin de if
 (princ)
) ;_ Fin de defun

Autodesk Expert Elite Team

Posté(e)

Hello

Et si tu utilisais cette routine "Trace2Poly" de Gilles !?

Bye, lecrabe "triste"

 

Salut lecrabe!

Merci, mais je l'ai déjà essayé et du coup on tombe sur ma 2ème problématique : transformer une polyligne épaisse en "rectangle".

je ne peux toujours pas m'accrocher avec ça à par aux extrémités de la polyligne... :(

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é