Aller au contenu

[Résolu] Créer un attribut à partir d'un MTEXT dans un bloc existant


Steven

Messages recommandés

Salut à tous,

Ci-joint, un exemple de bloc dans lequel il y a un Mtext à la place d'une définition d'attribut.

J'ai un dessin avec une multitude de blocs comme celui-ci mais avec des noms différents. Mais ils sont tous constitués de la même manière.

Existe-t-il un moyens de transformer le Mtext ou Texte qui est à l'intérieur des blocs, en attribut et que la valeur valeur de l'attribut soit la valeur du Mtext ou du Texte ?

Dans le fichier joint, j'ai nommer le bloc, BLOC, pour l'exemple.

EXEMPLE_BLOC.zip

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Steven

Tu en as combien de tels blocs ?, la notion de multitude étant subjective.
Te connaissant, je pense que tu as pensé à redéfinir le bloc en mettant le contenu du texte en attribut constant dans un ATTDEF inséré lors du passage par l'éditeur de bloc.

On parle de dizaines de secondes, voire quelques minutes, sauf si la multitude s'exprime en centaines.
Je viens de tester et ça fonctionne, ensuite, il n'y a qu'à retirer la notion de "constant" pour modifier les futurs blocs et je ne suis même pas certain que ce soit obligé.

Tu veux une solution par programme LSP ?

Amitiés

 

Lien vers le commentaire
Partager sur d’autres sites

Salut Didier,

J'ai 66 blocs composés de polylignes et d'un Mtxt. mais il peut y en voir plus, selon les dessins.

Ce Mtxt est différent à chaque fois.

J'avais pensé à redéfinir le bloc avec un ATTDEF mais il faudrait que je rentre une valeur différentes à chaque fois.

Je souhaiterais pouvoir transformer le Mtxt en valeur d'attribut et que la valeur dudit attribut soit égal au contenu du Mtext.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Hello Steven.

La routine que tu espères est ultra-spécifique et de fait ne servira qu'une fois en tout et pour tout.
Je suis en train de regarder ce qui serait possible, mais je ne suis pas hyper motivé du fait de l'unicité de la chose.
Fais-moi passer un dessin avec les 66 blocs s'i te plaît. En privé si tu préfères.

Amitiés

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Tu peux essayer le LISP ci-dessous, il traite toutes les définitions de bloc du dessin et remplace tous les textes et textes multilignes dans ces blocs par un attribut (Invite = "Attrib_n" étiquette = ATTRIB_n avec incrémentation par bloc au cas où il y ait plusieurs textes).

(vl-load-com)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
(or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))

(defun ReplaceTextByAttDef (blockDef / i objName attrib just)
  (setq i 0)
  (vlax-for obj	blockDef
    (setq objName (vla-get-ObjectName obj))
    (cond
      ((= objName "AcDbMText")
       (setq attrib
	      (vla-AddAttribute
		blockdef
		(vla-get-Height obj)
		acAttributeModeMultipleLine
		(strcat "Attrib_" (itoa (setq i (1+ i))) ": ")
		(vla-get-InsertionPoint obj)
		(strcat "ATTRIB_" (itoa i))
		(vla-get-TextString obj)
	      )
       )
       (vla-put-Alignment attrib (+ (vla-get-AttachmentPoint obj) 5))
       (vla-put-TextAlignmentPoint attrib (vla-get-InsertionPoint obj))
       (vla-Delete obj)
      )
      ((= objName "AcDbText")
       (setq attrib
	      (vla-AddAttribute
		blockdef
		(vla-get-Height obj)
		0
		(strcat "Attrib_" (itoa (setq i (1+ i))) ": ")
		(vla-get-InsertionPoint obj)
		(strcat "ATTRIB_" (itoa i))
		(vla-get-TextString obj)
	      )
       )
       (if (/= (vla-get-Alignment obj) acAlignmentLeft)
	 (progn
	   (vla-put-Alignment attrib (vla-get-Alignment obj))
	   (vla-put-TextAlignmentPoint
	     attrib
	     (vla-get-TextAlignmentPoint obj)
	   )
	 )
       )
       (vla-Delete obj)
      )
    )
  )
  (command-s "_.ATTSYNC" "_Name" (vla-get-Name blockDef))
  (princ)
)

(defun c:Steven	()
  (vlax-for blockDef *blocks*
    (if	(and (= (vla-get-Islayout blockDef) :vlax-false)
	     (= (vla-get-IsXRef blockDef) :vlax-false)
	)
      (ReplaceTextByAttDef blockDef)
    )
  )
  (princ)
)

 

  • Upvote 2

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

Lien vers le commentaire
Partager sur d’autres sites

 Salut @(gile)

Je pensais à un truc moins rapide mais là, je n'aurais jamais pensé que ça pouvais prendre si peu de temps pour redéfinir les blocs. 3"12 pour redéfinir tous les blocs 😶

Chapeau bas, @(gile) 👍🏼

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Da lut @(gile),

J'ai mis la variable CMDECHO à 0 mais je n'ai pas trop vu la différence.

Mais bon, vu la vitesse avec laquelle ça c'est fait, je ne suis plus à 1/2 seconde près. C'est super rapide😀

Merci 🙂

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Juste une petite chose,

Serait possible que les attributs soient des attributs classiques et non des attributs multilignes ?

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Salut @(gile),

Y a pas de lézard, c'est moi qui n'est pas suffisamment été précis dans ma demande 😉

C'est top 👍🏼

Merci.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

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é