Aller au contenu

Importer du texte dans un attribut existant


nen

Messages recommandés

Bonjour le forum,

 

J'ai un petit problème… en faite j'ai fait une boulette :blink: , j'aurais besoin de votre aide ;) .

J'ai un attribut existant "Info_Local" avec trois champs, Désignation, Numéro et surface.

Et naturellement pour aller vite, et cela devait être seulement pour un exemple, j'ai créé ses trois champs dans du texte normale, en utilisant la commande « texte ».

Je voudrais donc récupérer les textes simples dans le bloc "Info_Local" composé des trois attribut "Désignation, Numéro et surface".

 

Est-ce possible ?

 

Existe-t-il une commande ou un lisp ?

 

 

J'ai cherché sur internet et les forums un je n'ai rien trouvé, est-ce que quelqu'un a une solution ?

 

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

un exemple illustré serait le bienvenu, car j'ai du mal à comprendre.

En effet, "Info_local" c'est tantôt un bloc, tantôt un attribut.

 

"Un bon croquis vaut mieux qu'un long discours." Napoléon Bonaparte

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Non ce n'est pas un cas isolé j'en ai plus de 50 :(

 

Malheureusement je n'arrive pas à joindre un dwg ou un gif, j'ai le message ci-dessous depuis le boulot et depuis chez moi :(

 

Erreur Le serveur a retourné une erreur durant l'envoi.

 

Je fais comment ? :wacko:

 

 

Merci d'avance

 

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

(vl-load-com)

(defun modif_attrib (E ETIQ VALEUR / LATT ATT)
 (if (= (type E) 'ENAME)
   (setq E (vlax-ename->vla-object E))
 )
 (setq LATT (vlax-invoke E 'getAttributes))
 (foreach ATT LATT
   (if (= (strcase (vla-get-TagString ATT)) (strcase ETIQ))
     (vla-put-TextString ATT VALEUR)
   )
 )
)

(defun indtxt (enam)
 (vla-get-TextString (vlax-ename->vla-object enam)) 
)

(defun c:txt2att ()

 (setq Des (car (entsel "\nTexte Désignation : ")))
 (setq Num (car (entsel "\nTexte Numéro : ")))
 (setq Sur (car (entsel "\nTexte Surface : ")))
 
 (setq Blo (car (entsel "\nBloc de destination : ")))
 
 (modif_attrib Blo "DÉSIGNATION" (indtxt Des))
 (modif_attrib Blo "NUMERO" (indtxt Num))
 (modif_attrib Blo "SURFACE" (indtxt Sur))

 (princ)
)

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je te remercie pour ton aide et ton message :rolleyes: .

Ton lisp fonctionne impeccable, il est en plus facilement modifiable :D

 

Juste pour mon info personnel j'avais des rechercher entre temps sur le net et j'ai trouvé ce lisp ci-dessous.

Je ne comprends pas comment il fonctionne ?

Si tu fais un copier/coller ok mais, ensuite comment charger ce type de lisp ? et il n'a pas de commande "defun c: pushtext" ? :(

Il fonctionne bien aussi, mais le problème c'est que tu dois faire du copier/coller à chaque fois :(

 

 

; This will record text picked and push it into a block with attributes
; By Alan H oct 2018

(defun pushtext ( / lst ent txt blk x att)
(setq blk (vlax-ename->vla-object (car (entsel "Pick block object"))))
(foreach att (vlax-invoke blk 'getattributes)
(setq txt (vla-get-textstring (vlax-ename->vla-object (car (entsel "Pick text object")))))
(vla-put-textstring att txt)
(princ "\n")
)
)
(pushtext)

 

 

Merci de ton aide Vincent

 

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

le c: permet d'utiliser une fonction lisp comme une commande Autocad. Sinon, s'il n'y a pas le c:, on peut quand même appeler la fonction en ligne de commande, comme on le ferait dans un lisp, en tapant (pushtext).

 

Rien ne t'empêche de rajouter c: devant pushtext, mais il faudrait enlever (pushtext) de la fin. Au niveau de la logique, pushtext est plus polyvalent, puisqu'il fonctionne quel que soit le nombre d'attributs et quels que soient leurs noms. Par contre, il a un gros désavantage, celui pour l'utilisateur de connaitre parfaitement l'ordre des attributs avant l'exécution de la fonction. S'il y en a que 3, c'est gérable :D

On pourrait, pour améliorer Pushtext, rajouter dans la boucle foreach, le vla-get qui va bien pour récupérer le nom de l'attribut courant et l'afficher, pour que l'utilisateur sache où il en est avant de faire le "Pick text object"

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je te remercie pour ton message :) .

Ci-dessous le code modifié avec le fameux "defun c:pushtext" ;)

En effet l'utilisateur de connaitre parfaitement l'ordre des attributs mais c'est quand même une possibilité intéressante suivant le cas.

Pour améliorer le lisp je laisserais faire les pros parce que moi ce n'est pas ça :(rires forts):

 

Merci pour ton aide

Meilleures salutations

 

 

; This will record text picked and push it into a block with attributes
; By Alan H oct 2018
; Edit by CAB


(defun c:pushtext ( / lst ent txt blk x att)
(setq blk (vlax-ename->vla-object (car (entsel "Choisir un objet bloc avec des attributs"))))
(foreach att (vlax-invoke blk 'getattributes)
(setq txt (vla-get-textstring (vlax-ename->vla-object (car (entsel "\nChoisir un objet texte")))))
(vla-put-textstring att txt)
(princ "\n")
)
)

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

 

je pense que c'est assez facile de rajouter le texte qui indique à l'utilisateur quel est l'attribut qui est en train d'être traité. Un (vla-get-TagString att) placé judicieusement suffirait déjà

 

; This will record text picked and push it into a block with attributes
; By Alan H oct 2018
; Edit by CAB


(defun c:pushtext ( / txt blk att)
 (setq blk (vlax-ename->vla-object (car (entsel "Choisir un objet bloc avec des attributs"))))
 (foreach att (vlax-invoke blk 'getattributes)
   (setq txt
     (vla-get-textstring 
       (vlax-ename->vla-object 
         (car
           (entsel
             (strcat "\nChoisir un objet texte pour l'attribut "
               (vla-get-TagString att)
             )
           )
         )
       )
     )
   )
   (vla-put-textstring att txt)
 )
(princ)
)

 

amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Merci pour la mise à jour du lisp, je l'ai testé ce matin... nickel :D .

 

J'ai une petite remarques ;)

 

Est-il possible qu'au départ de la commande "pushtext" qu'il y ait une demande du type "un seul ou plusieurs attributs", si l'option "Plusieurs" une fois l'attribut renseigné la commande reste active et on passe au suivant sans relancer la commande "pushtext" car suivant le nombre d'attributs c'est un peu pénible.

 

Merci d'avance :)

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

l'appui sur la barre d'espace relance la dernière commande et évite de retaper à chaque fois la commande précédente, quelle qu'elle soit, y compris un lisp.

 

Mais, si j'ai bien compris la demande, une boucle while devrait pouvoir nous aider et faire "tourner" le lisp tant qu'on clique sur un bloc à renseigner. Pour s'arrêter, on clique dans le vide.

 

; This will record text picked and push it into a block with attributes
; By Alan H oct 2018
; Edit by CAB


(defun c:pushtext ( / txt blk att)
 (while (setq blk (entsel "\nChoisir un objet bloc avec des attributs : "))
   (setq blk (vlax-ename->vla-object (car blk)))
   (foreach att (vlax-invoke blk 'getattributes)
     (setq txt
       (vla-get-textstring 
         (vlax-ename->vla-object 
           (car
              (entsel
               (strcat "\nChoisir un objet texte pour l'attribut "
                 (vla-get-TagString att)
               )
             )
           )
         )
       )
     )
     (vla-put-textstring att txt)
   )
 ) 
 (princ)
)

 

Amicalement

Vincent

  • Upvote 1

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je te remercie pour ton nouveau lisp, nickel, c'est exactement ça :D.

 

En effet tu tapes sur la barre d'espace ou enter, mais quand tu as 60 blocs avec 3 attributs dans chaque. Tu fais déjà 240 cliques sans le rappel de la commande barre d'espace avec le rappel cela fait 300 cliques pour un niveau, il y en a 5 :o

 

Je te remercie infiniment pour ton aide ;)

 

Meilleures salutations

Lien vers le commentaire
Partager sur d’autres sites

Super,

 

ce qui est encore un peu faiblard c'est le peu de test qui est effectué par le lisp. Est-ce que l'utilisateur, ce blaireau, saisit bien un bloc quand il faut saisir un bloc et des textes quand il faut saisir des textes ? Cela risque de se planter à chaque erreur de clic.

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é