CADxp: Transformer objet "trace" en "hachure" - CADxp

Aller au contenu

Page 1 sur 1

Transformer objet "trace" en "hachure"

#1 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 320
  • Inscrit(e) : 09-février 12

Posté 12 septembre 2019 - 07:55

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
0

#2 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 320
  • Inscrit(e) : 09-février 12

Posté 12 septembre 2019 - 08:03

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?
0

#3 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8549
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 12 septembre 2019 - 10:03

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
0

#4 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 320
  • Inscrit(e) : 09-février 12

Posté 12 septembre 2019 - 13:23

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... :(
0

#5 L'utilisateur est hors-ligne   fabcad 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 806
  • Inscrit(e) : 23-décembre 02

Posté 12 septembre 2019 - 15:24

Bonjour fiesta13310,

Voici une réponse pour ta problématique numéro 2 :

http://www.lee-mac.c...olyoutline.html

d'autres pépites sont sur le site de Lee Mac.

Fabcad
Le Rennais Métropolitain



0

#6 L'utilisateur est hors-ligne   fiesta13310 

  • ceinture noire
  • Groupe : Membres
  • Messages : 320
  • Inscrit(e) : 09-février 12

Posté 12 septembre 2019 - 16:26

Voir le messagefabcad, le 12 septembre 2019 - 15:24 , dit :

Bonjour fiesta13310,

Voici une réponse pour ta problématique numéro 2 :

http://www.lee-mac.c...olyoutline.html

d'autres pépites sont sur le site de Lee Mac.

Fabcad
Le Rennais Métropolitain


Bonjour fabcad,

Merci beaucoup c'est exactement ce que je cherche!
Merci à tous aussi! :D :D

Bonne fin de journée et à bientôt B)
0

#7 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8549
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 12 septembre 2019 - 19:46

Hello

Que ne ferait on pas pour la charmante Miss F... !?

Bye, lecrabe "triste"
Autodesk Expert Elite Team
0

#8 L'utilisateur est hors-ligne   x_all 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3523
  • Inscrit(e) : 27-juin 06
  • Location04190

Posté 13 septembre 2019 - 14:35

comme quoi, les CV anonymes et sans photo, c'est pas toujours un avantage...
"La possibilité d'expliquer m'a toujours paru comme la seule excuse à l’existence de la parole"
JL Godard

quelques trucs sur autocad
0

Partager ce sujet :


Page 1 sur 1


Réponse rapide

  

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)