Aller au contenu

creation de texte a partir d\'insertion de bloc


Messages recommandés

Posté(e)

bonjour a tous et merci pour votre forum

voila ma question:

est-il possible qu'un texte se cree ou s'insere dans la fin d'un fichier texte existant quand j'insere un bloc sur mon dessin. Il doit entre autre contenir les coordonnees d'insertion du bloc, et si je deplace celui-ci le texte doit se trouver modifier.Si cela est possible je vous enverrais le formatage que je dois appliquer.

 

merci d'avance

 

 

Posté(e)

Quelques devoirs de vacances ?

 

Je trouve que ta demande est couverte par ATTEXTR. Voirici.

 

Il s'agit d'une extraction, pas d'un texte alimenté dynamiquement.

 

Sous la version 2002, on est tranquille, plus besoin d'attributs dans les blocs (si mes souvenirs sont exacts) et la commande passe par une boite de dialgoue.

 

[Edité le 22/11/2005 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Sans le faire dynamiquement avec des réacteurs, tu peux utiliser eattext en ligne de commande pour éviter la boîte de dialogue. Tu peux même l'associer ou bouton de sauvegarde. A chaque fois que tu sauvegarderas, la liste des blocs sera créée. En plus c'est peut-être mieux de ne pas le faire dynamiquement mais uniquement lors de la sauvegarde : si tu n'enregistres pas le dessin, ta liste et ton desin ne sont plus "synchrones".

 

En lisp :

 (defun c:expblk()
    (setq enr (strcat (getvar "dwgprefix") (substr (setq fichier (getvar"dwgname")) 1 (- (strlen fichier) 4))))
 (command "-eattext" "dwgCourant" "n" "o" "n" "csv" enr "o")
 )

 

Le fichier est créé dans le même répertoire que le dessin.

J'ai mis un "o" à la fin de ma commande "-eattext" car si le fichier existe, il demande une validation pour l'écraser. Du coup, si le fichier n'existe pas, le lisp renvoit "o", commande inconnue. Si quelque sait tester l'existence d'un fichier...

 

[Edité le 22/11/2005 par LUDWIG]

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

(defun c:expblk()
 (setq enr (strcat (getvar "dwgprefix") (substr (setq fichier (getvar"dwgname")) 1 (- (strlen fichier) 4))))
 (setq fichext(strcat(substr (setq fichier (getvar"dwgname")) 1 (- (strlen fichier) 4))".csv"))
 (if(member fichext(vl-directory-files (vl-string-translate "\\" "/" (getvar "dwgprefix"))))
   (command "-eattext" "dwgCourant" "n" "o" "n" "csv" enr "o")
   (command "-eattext" "dwgCourant" "n" "o" "n" "csv" enr )
   )
 )

 

Une facon de faire. Mais non testée, semble ne pas marcher pareil en 2004.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

bonsoir et merci de repondre si rapide,

j'ai essayé votre lisp et voici le message d'erreur que je reçois.

 

 

Commande: expblk

-eattext Commande inconnue "-EATTEXT". Appuyez sur F1 pour obtenir de l'aide.

Commande: dwgCourant Commande inconnue "DWGCOURANT". Appuyez sur F1 pour

obtenir de l'aide.

Commande: n Commande inconnue "N". Appuyez sur F1 pour obtenir de l'aide.

Commande: o Commande inconnue "O". Appuyez sur F1 pour obtenir de l'aide.

Commande: n Commande inconnue "N". Appuyez sur F1 pour obtenir de l'aide.

Commande: csv Commande inconnue "CSV". Appuyez sur F1 pour obtenir de l'aide.

Commande: G:\bloc\essai Commande inconnue "G:\BLOC\ESSAI". Appuyez sur F1 pour

obtenir de l'aide.

Commande: nil

 

 

Nous possédons autocad 2000, c'est peut-etre pour cela que cela ne fonctionne pas.

J'ai bien enregistré les lignes de code dans un fichier lisp et chargé l'application, puis lancé la commande expblk.

 

@+

Posté(e)

Sur 2000, la série de questions, voire le nom de commande peuvent être mal reconnus.

 

Autant le faire en manuel ATTEXTR (suivre le lien que j'ai donné). Ca demande un peu de préparation et ne marche que sur les blocs avec attributs (dans la version 2000, dans les suivantes c'est beaucoup mieux car la présence d'attrib n'est plus obkigatoire).

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Si l'extraction d'attributs ne fonctionne pas avec la 2000, essayes ce code :

 

 (defun c:expblk()
 
(setq enr (strcat (getvar "dwgprefix") (substr (setq fichier (getvar"dwgname")) 1 (- (strlen fichier) 4))".csv"));on définit chemin+nom du fichier à écrire

(setq jeu (ssget "X" '((0 . "insert"))));on fait une sélection de l'ensemble des blocs du dessin

(setq csv (open enr "w"));on ouvre le fichier à écrire (s'il n'existe pas, il est créé ; s'il existe, il sera réécrit)
(write-line "Nom;Calque;X;Y;Z;Rotation" csv);on écrit la ligne des entêtes

(setq n 0);on met le compteur à 0
 
(repeat (sslength jeu);on répètera la suite des actions autant de fois qu'il y a de blocs dans la sélection
 
 (setq bloc (entget(ssname jeu n)));on récupère les propriétés du bloc numéro n
 
 (setq nom (cdr(assoc 2 bloc)));on prend son som
 (setq calque (cdr(assoc 8 bloc)));son calque
 (setq positionX (rtos(nth 0(cdr(assoc 10 bloc)))));le X (rtos permet de transformer un numérique en alphanumérique (sinon pas possible de l'écrire dans un fichier))
 (setq positionY (rtos(nth 1 (cdr(assoc 10 bloc))))); le Y
 (setq positionZ (rtos(nth 2 (cdr(assoc 10 bloc)))));le z
 (setq Rotation (rtos(cdr(assoc 50 bloc))));la rotation

 (setq ligne (strcat nom ";" calque ";" positionX ";" positionY ";" positionZ ";" Rotation));on définit la ligne à écrire pour cet ensemble de données
 (write-line ligne csv);on écrit cette ligne dans le fichier

(setq n (+ 1 n));on incrémente le compteur
 
   )
 (close csv);on ferme le fichier (sinon il restera en lecture seule)

 
)

 

Je ne l'ai pas trop tester. Je ne sais pas comment il réagit si tu as des blocs dans l'espace objet ET dans un espace papier. Il ne récupérera pas les blocs imbriqués (cad dans un autre bloc) ni les attributs. Donc à tester. A voir si les infos collectées sur les blocs te sont suffisantes et si le format csv te convient.

 

CSV : comma (t ?) separated values > valeurs séparées par des virgules. Tu peux l'ouvrir avec n'importe quel éditeur de texte. Excel est très bien pour manipuler ces données (pourvu que tu n'aies pas plus de 65000 lignes soit 64999 blocs, limte d'excel).

 

Tu peux associés ce code au bouton de sauvegarde : ^C^C_qsave;expblk;

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

bonjour,

j'ai testé ton lisp LUDWIG et cele fonctionne.

voici le formatage que j'aimerais obtenir.

 

<102 \BohrVert\ (BohrVert etant le nom du bloc)

XA="50" (50 etant la position en x du bloc)

YA="30" (30 etant la position en y du bloc)

BM="LS"

TI="14"

DU="8"

AN="3"

MI="0"

S_="2"

AB="(la-60)/2"

WI="90"

HP="0"

SP="0"

YVE="0"

WW="60,61,62,88,90,91,92,150"

MX="0"

MY="0"

MZ="0"

MXF="1"

MYF="1"

 

les autres donnees restent fixes

@+ et merci pour le travail fourni

Posté(e)

Tu veux les données dans une seule colonne comme tu me l'écrit ? Les blocs les uns en dessous des autres ? Ou toujours une colonne par propriété et une ligne par bloc ?

 

EDIT : et il te faut aussi les guillemets ? Envoies un exemple de fichier tel que tu le veux sur ludwig*desmier(A)infeo*fr (remplace * par POINT)

 

[Edité le 23/11/2005 par LUDWIG]

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

nonodao, j'ai bien reçu ton dernier fichier... je ne t'ai pas oublié mais j'ai pas mal de boulot. Je te prépare un lisp amélioré pour plus tard.

Autocad 2021 - Revit 2022 - Windows 10

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é