Aller au contenu

Question \"bête\" sur les Champs dynamiques


Messages recommandés

Posté(e)

 

Bonsoir à tous

 

J'ai un problème simple ... Valable pour AutoCAD 2007 / 2006 / 2005 !

 

J'utilise "pas mal" les champs dynamiques depuis 2 ans ...

 

Je crains d'avoir peut être complètement raté une option ou commande "simple" !

 

En sélectionnant un MTexte qui contient un champ dynamique ...

 

Comment savoir à quelle objet graphique il est lié !?

 

Le Decapode "tout bête"

 

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Il y a peut être un moyen plus simple, mais l'expression suivante retourne la liste DXF de l'objet auquel le champ est lié :

 

(entget
 (cdr
   (assoc
     331
     (entget
(cdr
  (assoc
    360
    (entget
      (cdr
	(assoc
	  360
	  (entget
	    (cdr
	      (assoc
		360
		(entget	(cdr (assoc 360 (entget (car (entsel)))))
		)
	      )
	    )
	  )
	)
      )
    )
  )
)
     )
   )
 )
) 

 

Edit : pour le mettre en surbrillance.

 

(redraw
 (cdr
   (assoc
     331
     (entget
(cdr
  (assoc
    360
    (entget
      (cdr
	(assoc
	  360
	  (entget
	    (cdr
	      (assoc
		360
		(entget	(cdr (assoc 360 (entget (car (entsel)))))
		)
	      )
	    )
	  )
	)
      )
    )
  )
)
     )
   )
 )
 3
) 

 

[Edité le 15/12/2006 par (gile)]

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

Posté(e)

 

Hello Gilles

 

Ta réactivité est exceptionnelle ...

 

Suggestion de développement Lisp/V-Lisp qui devrait intéresser beaucoup de gens:

(Routine fonctionnelle sur AutoCAD 2005-2006-2007 si possible)

 

A partir de la sélection de UN Mtexte contenant un champ dynamique :

 

- Mise en surbrillance de l'objet graphique concerné

 

- Plus une option intéressante surtout lorsque l'objet est LOIN du champ dynamique

Dessin réel (sur le calque courant) d'une ligne allant du Point d'insertion du MText à un point précis de l'objet graphique concerné :

- Début d'une ligne, arc, polyligne, spline, arc elliptique, 3DPoly, 3Dface

- Centre d'un Cercle, Ellipse (Ou peut être le ZERO degré/grade)

- Point d'insertion d'un Bloc, Xref, Image, Texte, MTexte

- Région, Solide

- etc

 

Comment tu fais si le MTexte est dans un tableau, tu le vois comme un MTexte normal ?

 

*** Version TIP-TOP : Sélection de N MTextes ***

 

Le Decapode "Générateur de prise de têtes"

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Voilà pour un Mtexte contenant un champ (ou un champ).

 

Comment tu fais si le MTexte est dans un tableau, tu le vois comme un MTexte normal ?

 

Je n'y avais pas pensé au premier jet, mais en utilisant nentsel plutôt que entsel, je récupère la sous-entité Mtext dans un tableau ou dans un bloc.

 

;;; CHP-OBJ -Gilles Chanteau- 16/12/06
;;; Met en surbrillance l'objet lié au champ sélectionné.
;;; Une option permet de créer une ligne du texte à l'objet.
;;; Fonctionne avec les champs contenus dans des tableaux ou des blocs.

(defun c:chp-obj (/ ent txt elst dic chp obj)
 (while
   (not
     (and (setq ent (nentsel "\nSélectionnez un champ: "))
   (setq txt (car ent))
   (setq elst (entget txt))
   (member (cdr (assoc 0 elst)) '("MTEXT" "ATTRIB"))
     )
   )
    (princ "\nAucun champ sélectionné.")
 )
 (if (and (setq dic (cdr (assoc 360 elst)))
   (setq dic (cdr (assoc 360 (entget dic))))
   (setq chp (cdr (assoc 360 (entget dic))))
   (= (cdr (assoc 0 (entget chp))) "FIELD")
   (setq chp (cdr (assoc 360 (entget chp))))
     )
   (if	(setq obj (cdr (assoc 331 (entget chp))))
     (progn
(redraw obj 3)
(initget "Oui Non")
(if
  (= "Oui"
     (getkword "\nLier l'objet au texte ? [Oui/Non] : ")
  )
   (entmake (list '(0 . "LINE")
		  (cons	10
			(if (				  (setq	pt
				 (mapcar '+
					 (cdr (assoc 10 (entget (car (last ent)))))
					 (cdr (assoc 10 elst))
				 )
			  )
			  (setq pt (cdr (assoc 10 elst)))
			)
		  )
		  (cons 11 (cdr (assoc 10 (entget obj))))
	    )
   )
)
     )
     (princ "\nLe champ n'est pas lié à un objet.")
   )
   (princ "\nLe texte ne contient pas de champ.")
 )
 (princ)
)

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

Posté(e)

Salut (gile) & Le Decapode

 

Voila une chose que je cherchais depuis un certain temps et je suis tombé par hasard sur le sujet!!

 

Je viens de tester le lisp de gile et je dois dire que c'est un plus pour les personnes qui utilisent les champs, donc merci gile!!

 

Alors sinon j'ai une question!

 

Serait il possible de cliquer sur le champ et de voir automatiquement le lien!

En fait ce que tu as fait mais dans le principe des bases de données autocad

 

C'est juste une question mais sinon to lisp va tres bien (pratique le lien on le met sur un calque non imprimable par exemple..

 

Bon Week end à vous

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

Salut Jalna,

Je ne comprends pas bien la demande, tu préfères avoir une ligne plutôt que l'objet en surbrillance ?

Tu veux que la persistance de la ligne soit optionnelle ?

 

Par exemple, créer une ligne à conserver ou non :

 

;;; CHP-OBJ -Gilles Chanteau- 16/12/06 -Version 2.0-
;;; Crée une ligne entre le champ et l'objet qui lui est lié.
;;; L'utilisateur peut choisir de conserver la ligne ou non.
;;; Fonctionne avec les champs contenus dans des tableaux ou des blocs.

(defun c:chp-obj (/ ent txt elst dic chp obj)
 (vl-load-com)
 (while
   (not
     (and (setq ent (nentsel "\nSélectionnez un champ: "))
   (setq txt (car ent))
   (setq elst (entget txt))
   (member (cdr (assoc 0 elst)) '("MTEXT" "ATTRIB"))
     )
   )
    (princ "\nAucun champ sélectionné.")
 )
 (if (and (setq dic (cdr (assoc 360 elst)))
   (setq dic (cdr (assoc 360 (entget dic))))
   (setq chp (cdr (assoc 360 (entget dic))))
   (= (cdr (assoc 0 (entget chp))) "FIELD")
   (setq chp (cdr (assoc 360 (entget chp))))
     )
   (if	(setq obj (cdr (assoc 331 (entget chp))))
     (progn
(entmake (list '(0 . "LINE")
		  (cons	10
			(if (				  (setq	pt
				 (mapcar '+
					 (cdr (assoc 10 (entget (car (last ent)))))
					 (cdr (assoc 10 elst))
				 )
			  )
			  (setq pt (cdr (assoc 10 elst)))
			)
		  )
		  (cons 11 (cdr (assoc 10 (entget obj))))
	    )
   )
(initget "Oui Non")
(if
  (= "Non"
     (getkword "\nConserver la ligne ? [Oui/Non] : ")
  )
   (entdel (entlast))
)
     )
     (princ "\nLe champ n'est pas lié à un objet.")
   )
   (princ "\nLe texte ne contient pas de champ.")
 )
 (princ)
) 

 

[Edité le 16/12/2006 par (gile)]

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

Posté(e)

 

Bonsoir à tous

 

En fait j'utilise "intensivement" les champs dynamiques sur les objets suivants:

- TEXT, MTEXT & MTEXT dans les Tableaux

- POLYLINE 2D & 3D, LWPOLYLINE

- INSERT (Bloc, Bloc+Attribut)

- POINT (Parfois)

 

Les autres objets graphiques me semblent relativement "inintéressants" pour les champs dynamiques ... :exclam:

 

Qu'en pensez vous ?

 

Le Decapode

 

Autodesk Expert Elite Team

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