Aller au contenu

Commande TRACE


Clément.a

Messages recommandés

Salut,

 

Je ne comprends pas l'intérêt d'utiliser encore aujourd'hui cette entité antédiluvienne. Les traces sont les ancêtres lointains des actuelles polylignes avec épaisseur bien plus performantes.

J'avais fait,il y a pas mal de temps, un LISP pour convertir les traces en polylignes: ici.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Eh oui la derniere fois que j'ai vu des DWGs avec l'entite TRACE, c'etait en 2006 !

 

C pourquoi a l'epoque, j'avais demande sur le forum un programme Lisp/VLisp

pour transformer ces horreurs en bonnes Polylignes ...

 

Grand Merci a Gilles dont la routine a fait merveille !

et m'a permis de transformer des DWGs ASS/AEP qui utilisaient des centaines d'entites TRACE

 

Rappel : l'entite Polyligne est apparue avec la version 2.1 quand meme !

 

Bonne Journne a Tous, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Ça m'amusait (peut-être parce que je trouve ça parfaitement inutile), alors je l'ai fait.

 

Le LISP suivant imite la commande TRACE et la variable système TRACEWID des versions antérieures à 2012.

 

;; TRACEWID
;; Modifier la valeur de la "variable système" TRACEWID
(defun c:tracewid (/ val)
 (initget 6)
 (if (setq val	(getdist
	  (strcat
	    "\nEntrez une nouvelle valeur pour TRACEWID <"
	    (rtos
	      (cond
		((vlax-ldata-get "GILE_TRACE" "TraceWid"))
		((vlax-ldata-put "GILE_TRACE" "Tracewid" 1.0))
	      )
	    )
	    ">: "
	  )
	)
     )
   (vlax-ldata-put "GILE_TRACE" "Tracewid" val)
 )
 (princ)
)

;; TRACE
;; Imite la commande TRACE des versions antérieures à 2012
(defun c:trace (/ *error* makeTrace wid pt1 pt2 zdir ang p10 p11 p12 p13)
 (vl-load-com)

 (defun *error* (msg)
   (and
     msg
     (/= msg "Fonction annulée")
     (princ (strcat "\nErreur: " msg))
   )
   (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
   (princ)
 )

 (defun makeTrace (p1 p2 p3 p4 z)
   (entmake
     (list
'(0 . "TRACE")
(cons 10 (trans p1 1 z))
(cons 11 (trans p2 1 z))
(cons 12 (trans p3 1 z))
(cons 13 (trans p4 1 z))
(cons 210 z)
     )
   )
 )

 (defun left (p) (polar p (+ ang (/ pi 2.)) wid))
 
 (defun right (p) (polar p (- ang (/ pi 2.)) wid))

 (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
 (initget 6)
 (if (setq wid
     (getdist
       (strcat
	 "\nSpécifiez la largeur de la trace <"
	 (rtos (cond
		 ((vlax-ldata-get "GILE_TRACE" "TraceWid"))
		 ((vlax-ldata-put "GILE_TRACE" "Tracewid" 1.0))
	       )
	 )
	 ">: "
       )
     )
     )
   (vlax-ldata-put "GILE_TRACE" "Tracewid" wid)
   (setq wid (vlax-ldata-get "GILE_TRACE" "TraceWid"))
 )
 (setq wid (/ wid 2.))
 (if
   (and
     (setq pt1 (getpoint "\nSpécifiez un point de départ: "))
     (setq pt2 (getpoint pt1 "\nSpécifiez le point suivant: "))
   )
    (progn
      (setq zDir (trans '(0. 0. 1.) 1 0 T)
     ang  (angle pt1 pt2)
     p10  (left pt1)
     p11  (right pt1)
     p12  (left pt2)
     p13  (right pt2)
     pt1  pt2
      )
      (while (setq pt2 (getpoint pt1 "\nSpécifiez le point suivant: "))
 (setq ang (angle pt1 pt2)
       p12 (inters p10 p12 (left pt1) (left pt2) nil)
       p13 (inters p11 p13 (right pt1) (right pt2) nil)
 )
 (makeTrace p10 p11 p12 p13 zDir)
 (setq p10 p12
       p11 p13
       p12 (left pt2)
       p13 (right pt2)
       pt1 pt2
 )
      )
      (makeTrace p10 p11 p12 p13 zDir)
    )
 )
 (*error* nil)
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci,

Je ne comprends pas l'intérêt d'utiliser encore aujourd'hui cette entité antédiluvienne

Je suis d'accord avec vous, personnelement je m'en sert pas c'est pour rendre service à quelqu'un qui apparement s'en servait avant que son entreprise change de version d'AutoCAD..

 

Merci pour le lisp.

 

Au passage la phrase

Ça m'amusait (peut-être parce que je trouve ça parfaitement inutile), alors je l'ai fait.

m'a bien fait rire!! :D

Lien vers le commentaire
Partager sur d’autres sites

on m'a indiquer une erreur lorsque l'on utilise la commande trace et que l'on trace deux traits aligner, soit avec un angle de 180 degré ça bug là:

(cons 11 (trans p2 1 z))
       (cons 12 (trans p3 1 z))
       (cons 13 (trans p4 1 z))
       (cons 210 z)

 

je sais pas si on peut y faire quelque chose?

Merci

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

j'ai corriger pour que la fonction trace marche lorsqu'on prolonge la droite dans la même direction :

;; TRACEWID
;; Modifier la valeur de la "variable système" TRACEWID
(defun c:ttv (/ val)
 (initget 6)
 (if (setq val (getdist
                 (strcat
                   "\nEntrez une nouvelle valeur pour TRACEWID <"
                   (rtos
                     (cond
                       ((vlax-ldata-get "GILE_TRACE" "TraceWid"))
                       ((vlax-ldata-put "GILE_TRACE" "Tracewid" 1.0))
                     )
                   )
                   ">: "
                 )
               )
     )
   (vlax-ldata-put "GILE_TRACE" "Tracewid" val)
 )
 (princ)
)

;; TRACE
;; Imite la commande TRACE des versions antérieures à 2012
(defun c:tt (/ *error* makeTrace wid pt1 pt2 zdir ang p10 p11 p12 p13)
 (vl-load-com)

 (defun *error* (msg)
   (and
     msg
     (/= msg "Fonction annulée")
     (princ (strcat "\nErreur: " msg))
   )
   (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
   (princ)
 )

 (defun makeTrace (p1 p2 p3 p4 z)
   (entmake
     (list
       '(0 . "TRACE")
       (cons 10 (trans p1 1 z))
       (cons 11 (trans p2 1 z))
       (cons 12 (trans p3 1 z))
       (cons 13 (trans p4 1 z))
       (cons 210 z)
     )
   )
 )

 (defun left (p) (polar p (+ ang (/ pi 2.)) wid))
 
 (defun right (p) (polar p (- ang (/ pi 2.)) wid))

 (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
 (initget 6)
 (if (setq wid
            (getdist
              (strcat
                "\nSpécifiez la largeur de la trace <"
                (rtos (cond
                        ((vlax-ldata-get "GILE_TRACE" "TraceWid"))
                        ((vlax-ldata-put "GILE_TRACE" "Tracewid" 1.0))
                      )
                )
                ">: "
              )
            )
     )
   (vlax-ldata-put "GILE_TRACE" "Tracewid" wid)
   (setq wid (vlax-ldata-get "GILE_TRACE" "TraceWid"))
 )
 (setq wid (/ wid 2.))
 (if
   (and
     (setq pt1 (getpoint "\nSpécifiez un point de départ: "))
     (setq pt2 (getpoint pt1 "\nSpécifiez le point suivant: "))
   )
    (progn
      (setq zDir (trans '(0. 0. 1.) 1 0 T)
            ang  (angle pt1 pt2)
            p10  (left pt1)
            p11  (right pt1)
            p12  (left pt2)
            p13  (right pt2)
            pt1  pt2
      )
      (while (setq pt2 (getpoint pt1 "\nSpécifiez le point suivant: "))
        (setq ang (angle pt1 pt2)
              p122 (inters p10 p12 (left pt1) (left pt2) nil)
              p133 (inters p11 p13 (right pt1) (right pt2) nil)
        )
 (if (and(not( null p122 ))(not (null p133)))
   (setq p12 p122
	 p13 p133))
        (makeTrace p10 p11 p12 p13 zDir)
        (setq p10 p12
              p11 p13
              p12 (left pt2)
              p13 (right pt2)
              pt1 pt2
        )
      )
      (makeTrace p10 p11 p12 p13 zDir)
    )
 )
 (*error* nil)
)

 

voilou défois que quelqu'un à besoins de cette vieille commande.

 

merci à Gile!

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é