Aller au contenu

[Résolu] Modifier du textes en attributs


Steven

Messages recommandés

Salut à tous,

 

J'ai actuellement des dessins avec un immeuble qui à des parties de façade arrondies.

Autour de l'immeuble, il y a des numéros de trames qui sont perpendiculaires à la façade.

Tous ces numéros de trame sont sous forme de Texte ou Mtext.

 

Je souhaiterais pouvoir transformer ces Textes ou Mtext en bloc avec attriut.

 

Actuellement, j'ai un lisp que m'avait fait Didier, il y a quelques années pour transformer des Textes en attributs. Le soucis est que lorsque les textes deviennent des attributs, ceux-ci s'orientent à 0° et sont donc tous horizontaux.

 

Y a-t-il donc un moyen de transformer les textes, en attribut mais que ceux-ci conservent leurs orientations?

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

 

Je suis comme toi, j'ai en stock une routine US qui fait le boulot

mais qui insere a l'horizontale le Bloc avec UN attribut ...

 

Je joins le code source car je sais que la Modif est facile pour un Lispeur ...

 

Bye, lecrabe

 


;; 
;; Routine : Txt2Blk  (Text to Block with ONE attribute) by Moshe 
;; 1. now it handles the default block name 
;; 2. it take the middle point of the imaginary box surrounding the text (no matter the text justification) 
;; 3. what do you mean by 'in case of negative answer?' 
;; you can individually select each text object and place your circle around 
;; but it is better to put the circle inside the block
;;


(defun get_block_name (/ blkName)

(if (eq (getvar "users5") "")
 (prompt "\nBlock name: ")
 (prompt (strcat "\nBlock name <" (getvar "users5") ">: "))
); if

(if (= (setq blkName (getstring t)) "")
 (setq blkName (getvar "users5"))
 (setvar "users5" blkName)
); if

(if (/= blkName "")
 (if (null (tblsearch "block" blkName))
  (progn
   (vlr-beep-reaction)
   (prompt (strcat "\nBlock " (strcase blkName) " is not exist."))
   (setvar "users5" (setq blkName ""))
  )
 )
)

blkName
)


(defun get_middle_text_point (e / insPt box t0 t1 p0 p1)
(setq ins (cdr (assoc '10 e)))
(setq box (textbox (list (assoc '1 e))))
(setq t0 (car box) t1 (cadr box))
      
(setq p0 (list (+ (car ins) (car t0)) (+ (cadr ins) (cadr t0))))
(setq p1 (list (+ (car ins) (car t1)) (+ (cadr ins) (cadr t1))))
 
(polar p0 (angle p0 p1) (/ (distance p0 p1) 2))
)



(defun c:Txt2Blk (/ savOSmode savAttdia savAttreq blkName ss i ent e p10 text)
(vl-load-com)

(setvar "cmdecho" 0)  ; disable command echo 
(command "._undo" "_begin")

(setq savOSmode (getvar "osmode"))  ; save osnap
(setq savAttdia (getvar "attdia"))  ; save attdia
(setq savAttreq (getvar "attreq"))  ; save attreq

(setvar "attdia" 0)  ; disable attribute dialog
(setvar "attreq" 1)  ; enable attribute request
 
(if (/= (setq blkName (get_block_name)) "")
 (if (setq ss (ssget (list '(0 . "*TEXT"))))  ; select only *TEXT objects
  (progn
   (setvar "osmode" 0)  ; disable osnap
    
   (setq i -1)
   (repeat (sslength ss)
    (setq i (1+ i))
    (setq e (entget (setq ent (ssname ss i))))
    (setq p10 (get_middle_text_point e))
    (setq text (cdr (assoc '1 e))) 

;;;      (command ".insert"   blkName p10 "" "" "" text)  ;; ._-insert 
        (command "._-insert" blkName p10 "" "" "" text)  ;; ._-insert 

    (entdel ent)
   ); repeat

   (setvar "osmode" savOSmode)
  ); progn
 ); if
); if

(setvar "attdia" savAttdia)  ; restore attdia
(setvar "attreq" savAttreq)  ; restore attreq

(command "._undo" "_end")
(setvar "cmdecho" 1)  ; restore command echo
(princ)
 
); defun

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Vieux Hibou Grincheux

 

1) SVP Eventuellement tu pourrais nous fournir TA routine amelioree ?

 

2) Ou bien nous faire la Micro-Amelioration sur la routine US que j'ai fournie ?

 

En esperant ta contribution, je te souhaite une excellente journee ...

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Allez ! je vais me fendre d'une amélioration et peut-être que la populace cessera de persifler

Là didier, tu te remets à délirer, retourne chez ton psy et vite fait !!!!

 

Blague à part, j'ai rajouté une ligne à cette routine qui date quelque peu

Ça fonctionne même si aujourd'hui on fait plus "propre" en termes de code...

 

(setq jeusel (ssget ))
(setq n 0)
(repeat (sslength jeusel)
 (setq ent (ssname jeusel n))
 (command "_insert"
 "numerodeposte"
 (cdr(assoc 10 (entget ent)))
 ""
 ""
 (* (/ (- (* pi 2.0) (cdr(assoc 50 (entget ent)))) pi)200.0)
 (cdr(assoc 1 (entget ent)))
 )
 (setq n ( + 1 n))
 (entdel ent)
 )

 

Il faut que le bloc "numerodeposte" existe dans le dessin, y'a pas de contrôles.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Salut à tous,

 

Le lisp que Didier m'avait fait il y a quelques années est celui en pièce jointe.

TAT.lsp

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

Coucou

 

Il est tout à fait possible que ce soit moi qui te l'ai fait passer mais il est clair que je n'en suis pas l'auteur

J'avais retrouvé dans mes archives une routine faite pour Toi et (celle-là de moi) et c'est de cette dernière que je suis parti pour te filer le code du message #7.

 

Tiens-nous au courant si ça fonctionne ou pas.

 

Amitiés

Lien vers le commentaire
Partager sur d’autres sites

Salut à tous,

 

Bon, je ne sais plus trop où j'en suis, là, entre le lisp fourni par lecrabe, le mien et la ligne de Didier à rajouter.

 

Donc,

 

J'ai des numéros de trame rayonnants sur des façades courbes:

 

http://pix.toile-libre.org/upload/img/1470830083.png

 

Ces numéro de trames sont actuellement sous forme de texte.

Je souhaite transformer ces textes sous forme de bloc avec attribut.

 

Le isp fourni par le crabe transforme bien les textes en bloc avec attribut mais ceux-ci ne conservent pas l'orientation d'origine des textes et se mettent à l'horizontale.

 

Le lisp que m'avait fourni Didier, que j'ai aussi mis à disposition, transforme aussi les textes en bloc mais l'orientation n'est pas, non plus, conservé.

 

Je ne sais pas où rajouter la ligne que Didier a mis à disposition.

 

Bref, je suis un peu dans le vague :mellow:

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

 

Tu ajoutes cette ligne (cons 50 (dxf 50 en))

  ; *************** Insert the block ******
   (entmake (list '(0 . "INSERT")
	   '(100 . "AcDbEntity")
	   (cons 8 lyr)
	   '(100 . "AcDbBlockReference")
	   '(66 . 1)
	   (cons 2 bname)
	   (cons 10 ins-pt)
     ) ;_ list
   ) ;_ entmake
   (entmake (list '(0 . "ATTRIB")
	   '(100 . "AcDbEntity")
	   (cons 8 lyr)
	   '(100 . "AcDbText")
	   (cons 10 ins-pt)
	   (cons 40 txt-ht)
	   (cons 50 (dxf 50 en))
	   (cons 1 txt-str)
	   (cons 7 txt-style)
	   '(100 . "AcDbAttribute")
	   (cons 2 t-str)
	   '(70 . 0)
     ) ;_ list
   ) ;_ entmake

 

@+

 

ps : le surlignage ne passe pas dans les balises code

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut Lecrabe

 

Ton lisp ne fonctionne pas correctement.

Déjà il demande un bloc existant.

Si le bloc a des attributs, le remplissage n'est pas correcte.

Si le bloc n'a pas d'attributs, et bien le texte est remplacé par le bloc.

 

Sinon, il faut logiquement remplacer

(command "._-insert" blkName p10 "" "" "" text)  ;; ._-insert 

par

(command "._-insert" blkName p10 "" "" (* 180.0 (/ (cdr (assoc 50 e)) pi)) text)  ;; ._-insert 

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Hello Mr P35

 

Je ne te suis pas bien ! ... Il est sur qu'il n'est pas parfait !!

 

Mais je l'ai deja utilise sur un Bloc avec UN SEUL attribut (deja defini dans le DWG)

et dans CE cas, je trouve qu'il fonctionne bien !?

 

Sinon MERCI pour la ligne que je vais implementer ...

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Tu ajoutes cette ligne (cons 50 (dxf 50 en))

  ; *************** Insert the block ******
   (entmake (list '(0 . "INSERT")
       '(100 . "AcDbEntity")
       (cons 8 lyr)
       '(100 . "AcDbBlockReference")
       '(66 . 1)
       (cons 2 bname)
       (cons 10 ins-pt)
        ) ;_ list
   ) ;_ entmake
   (entmake (list '(0 . "ATTRIB")
       '(100 . "AcDbEntity")
       (cons 8 lyr)
       '(100 . "AcDbText")
       (cons 10 ins-pt)
       (cons 40 txt-ht)
       (cons 50 (dxf 50 en))
       (cons 1 txt-str)
       (cons 7 txt-style)
       '(100 . "AcDbAttribute")
       (cons 2 t-str)
       '(70 . 0)
        ) ;_ list
   ) ;_ entmake

 

@+

 

ps : le surlignage ne passe pas dans les balises code

 

Salut Patrick_35,

 

J'ajoute cette ligne dans le lisp fourni par lecrabe ou celui que m'avait fourni Didier?

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

Coucou

 

Je ne comprends pas bien ta demande

Ce qu'il y a dans le message 7 est opérationnel

Rien à rajouter par toi, je l'ai déjà fait

 

Tiens-moi au courant mon copain

 

 

Salut Didier,

 

J'ai ajouté la ligne que tu as indiqué.

J'ai créé un bloc "numerodeposte" pour que celui-ci existe dans le dessin et quand je charge le lisp, je dois sélectionner des objets. je sélectionne mes objets Texte et ceux-ci sont remplacés par le bloc "numerodeposte" mais avec une autre orientation.

 

 

Salut

 

Dans le lisp que tu as joint.

 

@+

 

Salut Patrick_35,

 

J'ao bien ajouté ton code au lisp que j'ai fourni mais ça ne fonctionne toujours pas.

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

Bon, je n'y arrive pas.

 

Laissez tomber, de toute façon, je me suis pris la tête pour rien, j'ai utilisé la commande "Rechercher" pour remplacer une partie des numéros de trame par une autre. Je n'avais pas besoin de remplacer les textes par un bloc avec attributs.

 

Il va vraiment falloir que je me prenne des vacances...

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

 

C'est juste la ligne (cons 50 (dxf 50 en)) à ajouter dans le lisp que tu as fournit.

J'ai donné un morceau de code plus complet pour indiquer où mettre cette ligne.

 

@+

 

 

Aaaaah, d'accooooord.

Je comprends mieux, maintenant le :

ps : le surlignage ne passe pas dans les balises code

 

En effet, ça marche tout de suite mieux :D

 

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

Coucou

 

C'est pas normal !

Tu peux faire passer une partie du fichier dessin pour comprendre ?

 

Amitiés

 

Salut Didier,

 

Le voici ;)TRAME.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

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é