Bloc avec des attributs.
Fermé
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
-
Modifié par ^Abel^ le 16/02/2016 à 17:34
Soficala - 8 juil. 2016 à 15:22
Soficala - 8 juil. 2016 à 15:22
A voir également:
- Bloc avec des attributs.
- Bloc note windows - Télécharger - Traitement de texte
- Code bloc - Télécharger - Langages
- Bloc note gratuit - Télécharger - Agendas & Calendriers
- Bloc invisible minecraft - Forum Minecraft
- Bloc clavier tv toshiba - Forum Téléviseurs
7 réponses
Voilà, c'est fait.
Mode d'emploi:
Copier le code dans un fichier.
Enregistrer ce fichier en lui donnant un nom avec l'extension .lsp, par exemple IMP_BLOC_POINT.LSP
Dans Autocad:
Ouvrir un dessin nouveau ou existant. Le bloc point doit être dans le dessin ou dans un dossier défini pour la Recherche des fichiers supports.
Charger l'application lisp (menu Outils / charger une application ...)
Si pas d'erreur, il y a maintenant une nouvelle commande IMP.
Sur la ligne de commande, taper IMP.
Tiens moi informé. Merci.
Voici le code
Mode d'emploi:
Copier le code dans un fichier.
Enregistrer ce fichier en lui donnant un nom avec l'extension .lsp, par exemple IMP_BLOC_POINT.LSP
Dans Autocad:
Ouvrir un dessin nouveau ou existant. Le bloc point doit être dans le dessin ou dans un dossier défini pour la Recherche des fichiers supports.
Charger l'application lisp (menu Outils / charger une application ...)
Si pas d'erreur, il y a maintenant une nouvelle commande IMP.
Sur la ligne de commande, taper IMP.
Tiens moi informé. Merci.
Voici le code
;;; (IMP-XYZ) - importer fichier ASCII
;Fonction de gestion des erreurs - Ne rien changer
(defun imp-xyz_err (s) ; If an error (such as CTRL-C) occurs
; while this command is active...
(if (/= s "Function cancelled")
(princ (strcat "\nErreur : " s))
)
(close n_f)
(setvar "cmdecho" ocmd) ; Restore saved modes
;(setvar "regenmode" oreg)
(command "scu" "p")
(setvar "OSMODE" old_snap)
(setq *error* olderr) ; Restore old *error* handler
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction d'extraction des données - Ne rien changer
(defun lirechamp ( chaine numchamp / pos1 pos2 ipos deb lng ret nchamp champ)
(setq pos1 0 pos2 0 deb 1 lng (strlen chaine) champ "")
(if (/= lng 0)
(progn
(setq ipos 1 nchamp 0 ret 0)
(while (and (< ipos lng) (= ret 0))
;recherche premier caractere
(WHILE (and (< (ASCII (substr chaine ipos 1)) 33) (< ipos lng))
(setq ipos (+ ipos 1))
)
(setq nchamp (+ nchamp 1) pos1 ipos)
;recherche separateur
(WHILE (and (> (ASCII (substr chaine ipos 1)) 32) (< ipos lng))
(setq ipos (+ ipos 1))
)
(setq pos2 ipos)
(IF (and (= pos2 lng) (> (ASCII (substr chaine pos2 1)) 32)) (setq pos2 (+ pos2 1)))
(IF (= nchamp numchamp) (setq champ (substr chaine pos1 (- pos2 pos1)) ret 1))
);while
);progn
);if
(setq champ champ)
);fin fonction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction de traitement du fichier de points
(defun importer_xyz ()
;ordre de lecture des données
;nom du champ et position
(setq iblk 1 ilay 2 ielev 3 ip 4 idesc 5 iechx 6 iechy 7 iechz 8 ix 9 iy 10 iz 11 irot 12)
(while (setq chaine (read-line n_f))
;1 nom du bloc
(setq val_champ (lirechamp chaine iblk))
(setq blk val_champ)
;2 layer
(setq val_champ (lirechamp chaine ilay))
(setq lay val_champ)
;3 élevation
(setq val_champ (lirechamp chaine ielev))
(setq elev val_champ)
;4 point
(setq val_champ (lirechamp chaine ip))
(setq num val_champ)
;5 description
(setq val_champ (lirechamp chaine idesc))
(setq desc val_champ)
;6 echelle X
(setq val_champ (lirechamp chaine iechx))
(setq echx (atof val_champ))
;7 echelle Y
(setq val_champ (lirechamp chaine iechy))
(setq echy (atof val_champ))
;8 echelle Z
(setq val_champ (lirechamp chaine iechz))
(setq echz (atof val_champ))
;9 X
(setq val_champ (lirechamp chaine ix))
(setq coord_x (atof val_champ))
;10 Y
(setq val_champ (lirechamp chaine iy))
(setq coord_y (atof val_champ))
;11 Z
(setq val_champ (lirechamp chaine iz))
(setq coord_z (atof val_champ))
(setq alt val_champ)
;12 rotation
(setq val_champ (lirechamp chaine irot))
(setq rot (atof val_champ))
(if (not (and (= coord_x 0.0) (= coord_y 0.0)))
(progn
(setq coord_2D (list coord_x coord_y 0.0)) ;Point 2D
(setq coord_3D (list coord_x coord_y coord_z)) ;Point 3D
;calque qui contiendra les blocs, s'il n'existe pas il sera créé
(if (/= (strcase (getvar "clayer")) (strcase lay))
(command "-calque" "e" lay "")
)
;insertion point 2D
;(command "-inserer" "point" coord_2D "" "" "" alt num)
;insertion point 3D
(command "-inserer" blk coord_3D echx echy rot elev num desc)
);progn
);if
);while
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction principale - Ne rien changer
(defun IMPORT-XYZ ()
(setq olderr *error* *error* imp-xyz_err )
;reglage des variables systèmes pour le programme
(setq ocmd (getvar "cmdecho"))
;(setq oreg (getvar "REGENMODE"))
(setvar "cmdecho" 0)
;(setvar "REGENMODE" 0)
(command "scu" "")
(setq old_snap (getvar "OSMODE"))
(setvar "OSMODE" 0)
;Ouverture du fichier de points
(setq chemin (getvar "DWGPREFIX"))
(setq nom_fich (getfiled "Fichier points à importer" chemin "TXT;XYZ;PRN" 0))
(if (= nom_fich nil) (exit)) ; operation annulee
(setq n_f (open nom_fich "r"))
;Traitement du fichier de points
(importer_xyz)
;Fermeture du fichier de points
(close n_f)
;restitutions des variables systèmes originales
(setvar "cmdecho" ocmd)
;(setvar "regenmode" oreg)
(command "zoom" "et")
(command "scu" "p")
(setvar "OSMODE" old_snap)
(setq *error* olderr) ; Restore old *error* handler
;Sortie silencieuse du programme
(princ)
)
(defun c:imp ()
(IMPORT-XYZ)
(princ)
)
Bonjour,
Peux-tu donner quelques précisions?
le programme marche très bien
De quel programme est-il question?
insérer un bloc avec des attributs et une échelle
Quel bloc? Quels attributs? Comment sont définies les coordonnées du point d'insertion et les valeurs des attributs?
A+
Peux-tu donner quelques précisions?
le programme marche très bien
De quel programme est-il question?
insérer un bloc avec des attributs et une échelle
Quel bloc? Quels attributs? Comment sont définies les coordonnées du point d'insertion et les valeurs des attributs?
A+
Bonjour Monsieur Yoda;
je vous remercie pour votre programme qui fonctionne à merveille,
j'ai essayer de créer d'autres blocs dynamiques avec des attributs et les insérer avec des attributs ( le même principe que le programme précedent) , sauf que le programme me les insère comme étant des blocs, mais pas dynamiques, lorsque je clique pour modifier le bloc en question je trouve tous les paramètres, mais dans le dessin je ne peux pas les modifier, en plus à l'insertion il m'affiche ce message (zoom
Spécifiez le coin d'une fenêtre, entrez un facteur d'échelle (nX ou nXP) ou
[Tout/Centre/DYnamique/ETendu/Précédent/Echelle/Fenêtre/Objet] <temps réel>: et
Commande: scu
Nom du SCU courant: *GENERAL*
Spécifiez l'origine du SCU ou [Face/NOMmé/OBjet/Précédent/Vue/GÉnéral/X/Y/Z/axEZ] <GÉnéral>: p
De coup j'ai remarqué que le programme ne réinsère pas les blocs si je refais encore une fois la même commande et il m'affiche toujours le même message ( voir ci-haut) ( sachant que je fais la commande "PURGER" avant de refaire la commande),
je ne sais pas s'il y a une solution pour ça, car votre programme me sauvera beaucoup de temps (jusqu’à 10h du travail)
si vous pouvez m'aider je suis prête a vous transférer les dessins et tous les fichiers utilisés peut-être vous trouverez une erreur quelque part;
j'attends votre réponse Monsieur :)
Salutations!
je vous remercie pour votre programme qui fonctionne à merveille,
j'ai essayer de créer d'autres blocs dynamiques avec des attributs et les insérer avec des attributs ( le même principe que le programme précedent) , sauf que le programme me les insère comme étant des blocs, mais pas dynamiques, lorsque je clique pour modifier le bloc en question je trouve tous les paramètres, mais dans le dessin je ne peux pas les modifier, en plus à l'insertion il m'affiche ce message (zoom
Spécifiez le coin d'une fenêtre, entrez un facteur d'échelle (nX ou nXP) ou
[Tout/Centre/DYnamique/ETendu/Précédent/Echelle/Fenêtre/Objet] <temps réel>: et
Commande: scu
Nom du SCU courant: *GENERAL*
Spécifiez l'origine du SCU ou [Face/NOMmé/OBjet/Précédent/Vue/GÉnéral/X/Y/Z/axEZ] <GÉnéral>: p
De coup j'ai remarqué que le programme ne réinsère pas les blocs si je refais encore une fois la même commande et il m'affiche toujours le même message ( voir ci-haut) ( sachant que je fais la commande "PURGER" avant de refaire la commande),
je ne sais pas s'il y a une solution pour ça, car votre programme me sauvera beaucoup de temps (jusqu’à 10h du travail)
si vous pouvez m'aider je suis prête a vous transférer les dessins et tous les fichiers utilisés peut-être vous trouverez une erreur quelque part;
j'attends votre réponse Monsieur :)
Salutations!
Bonjour je vous remercie pour l'intention que vous avez donné à ma question
Voilà,
Insérer un bloc e(xemple: point avec des coordonnées x,y,z, et des attributs: numéro du point ; élévation z), donc j'ai environ 2000 points à insérer avec toutes ces informations à afficher (élévation z et numéro du point), chacun est différent de l'autre,
Donc pouvez vous m'aider s'il vous plaît??!
Merci.
Salutations ☺
Voilà,
Insérer un bloc e(xemple: point avec des coordonnées x,y,z, et des attributs: numéro du point ; élévation z), donc j'ai environ 2000 points à insérer avec toutes ces informations à afficher (élévation z et numéro du point), chacun est différent de l'autre,
Donc pouvez vous m'aider s'il vous plaît??!
Merci.
Salutations ☺
Oui, j'ai un utilitaire écrit en lisp pour Autocad que je pourrais adapter. Je l'avais fait pour reporter un semi de points sur un plan topographique de géomètre.
Pour le fonctionnement, il faut définir un bloc avec un symbole qui représente le point (par exemple une croix) et lui définir deux attributs, un pour le matricule (ou numero) et un pour l'altitude.
Est-ce que tu as ça?
C'est autocad français? Quelle version?
Pour le fonctionnement, il faut définir un bloc avec un symbole qui représente le point (par exemple une croix) et lui définir deux attributs, un pour le matricule (ou numero) et un pour l'altitude.
Est-ce que tu as ça?
C'est autocad français? Quelle version?
Bon, c'était pas la peine d'inserer tous les blocs sur le plan parce que c'est le programme qui va le faire.
Je dois connaitre le nom du Bloc et le nom des Attributs.
(Par exemple PNT pour le nom du bloc, MAT pour le matricule et ALT pour l'altitude)
Il faut aussi exporter ton fichier Excel au format texte (fichier ASCII)
Ce fichier sera constitué de 4 colonnes, chaque colonne sera séparée par au moins un espace. (par exemple N X Y Z, tu peux changer l'ordre des données) . Un point par ligne.
Le programme va lire le fichier .txt, extraire les coordonnées XYZ pour l'insertion du Bloc et donner le numéro et l'altitude aux attributs qui seront affichés comme texte sur le plan.
A+
Je dois connaitre le nom du Bloc et le nom des Attributs.
(Par exemple PNT pour le nom du bloc, MAT pour le matricule et ALT pour l'altitude)
Il faut aussi exporter ton fichier Excel au format texte (fichier ASCII)
Ce fichier sera constitué de 4 colonnes, chaque colonne sera séparée par au moins un espace. (par exemple N X Y Z, tu peux changer l'ordre des données) . Un point par ligne.
Le programme va lire le fichier .txt, extraire les coordonnées XYZ pour l'insertion du Bloc et donner le numéro et l'altitude aux attributs qui seront affichés comme texte sur le plan.
A+
parfait!
le nom du bloc est ''point''
quand aux attributs sont: ''ÉLÉVATION'' et ''NOM''
je n'ai pas bien compris si je vais inclure le fichier excel ou non!?
je vous souhaite une bonne nuit, moi je serais disponible demain a partir du 14h00 à l'heure du France (car on a un décalge du 6h)
salutaions!
le nom du bloc est ''point''
quand aux attributs sont: ''ÉLÉVATION'' et ''NOM''
je n'ai pas bien compris si je vais inclure le fichier excel ou non!?
je vous souhaite une bonne nuit, moi je serais disponible demain a partir du 14h00 à l'heure du France (car on a un décalge du 6h)
salutaions!
Bonjour
Le fichier de points doit être au format TEXTE (ou ASCII).
En clair, ça veut dire qu'il peut être ouvert avec Notepad (Bloc-note).
A partir d' Excel, menu Fichier, Enregistrer sous, choisir un format texte (*.txt)
Ouvrir le fichier créé avec Notepad ou un autre éditeur de texte, on devrait voir quelque chose qui ressemble à ça:
Le séparateur décimal est un point et non une virgule. Si ce n'est pas le cas, remplacer la virgule par un point.
Le bloc à insérer aura seulement 2 attributs, sinon le signaler.
Le programme se compose de plusieurs fonctions. Il faut ajuster quelques paramètres.
1) Nom du calque (layer) qui contiendra les blocs (par défaut ce sera le calque courant).
2) Ordre de lecture des données, dans mon exemple c'est NOM X Y Z.
3) Ordre d'écriture des attributs (par défaut c'est ELEVATION puis NOM). A vérifier.
4) Insertion du bloc: Point 2D (altitude = 0.0) ou 3D (altitude = Z réel)
5) En option on peut donner une échelle en X et Y, ainsi qu'une rotation
Avec ces précisions,ce sera bon.
A+
Le fichier de points doit être au format TEXTE (ou ASCII).
En clair, ça veut dire qu'il peut être ouvert avec Notepad (Bloc-note).
A partir d' Excel, menu Fichier, Enregistrer sous, choisir un format texte (*.txt)
Ouvrir le fichier créé avec Notepad ou un autre éditeur de texte, on devrait voir quelque chose qui ressemble à ça:
264 884335.129 196588.198 149.975
PS66 884325.596 196632.036 149.791
S01 884323.914 196626.960 149.871
261 884317.001 196629.556 149.705
260 884312.121 196630.381 149.570
1A15 884312.291 196631.014 149.747
258 884313.977 196637.606 149.581
Le séparateur décimal est un point et non une virgule. Si ce n'est pas le cas, remplacer la virgule par un point.
Le bloc à insérer aura seulement 2 attributs, sinon le signaler.
Le programme se compose de plusieurs fonctions. Il faut ajuster quelques paramètres.
1) Nom du calque (layer) qui contiendra les blocs (par défaut ce sera le calque courant).
2) Ordre de lecture des données, dans mon exemple c'est NOM X Y Z.
3) Ordre d'écriture des attributs (par défaut c'est ELEVATION puis NOM). A vérifier.
4) Insertion du bloc: Point 2D (altitude = 0.0) ou 3D (altitude = Z réel)
5) En option on peut donner une échelle en X et Y, ainsi qu'une rotation
Avec ces précisions,ce sera bon.
A+
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
17 févr. 2016 à 14:42
17 févr. 2016 à 14:42
ça ne marche pas pour moi;
enfaite je pense que je ne me retrouve pas avec les attribut (dans le programme)
pouvez-vous me donner le programme s'il vous plait?
merci!
enfaite je pense que je ne me retrouve pas avec les attribut (dans le programme)
pouvez-vous me donner le programme s'il vous plait?
merci!
Yoda
>
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
17 févr. 2016 à 15:13
17 févr. 2016 à 15:13
Pour l'instant je n'ai pas encore donné de programme.
Ce que tu as trouvé sur le forum n'est pas adapté à ce que tu veux faire.
Si tu veux bien me renseigner sur les questions posées , je t'envoie le bon programme.
1) Nom du calque (layer) qui contiendra les blocs (par défaut ce sera le calque courant).
Nom du calque?
2) Ordre de lecture des données, dans mon exemple c'est NOM X Y Z.
Montre-moi un extrait de ton fichier de points.
3) Ordre d'écriture des attributs (par défaut c'est ELEVATION puis NOM).
Si pas dans le bon ordre, les textes NOM et ELEVATION seront inversés.
4) Insertion du bloc: Point 2D (altitude = 0.0) ou 3D (altitude = Z réel)?
Si tu ne comprends pas, dis-le.
A+
Ce que tu as trouvé sur le forum n'est pas adapté à ce que tu veux faire.
Si tu veux bien me renseigner sur les questions posées , je t'envoie le bon programme.
1) Nom du calque (layer) qui contiendra les blocs (par défaut ce sera le calque courant).
Nom du calque?
2) Ordre de lecture des données, dans mon exemple c'est NOM X Y Z.
Montre-moi un extrait de ton fichier de points.
3) Ordre d'écriture des attributs (par défaut c'est ELEVATION puis NOM).
Si pas dans le bon ordre, les textes NOM et ELEVATION seront inversés.
4) Insertion du bloc: Point 2D (altitude = 0.0) ou 3D (altitude = Z réel)?
Si tu ne comprends pas, dis-le.
A+
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
17 févr. 2016 à 14:57
17 févr. 2016 à 14:57
aussi est-ce que je dois remplacer la valeur 0.0 d'une autre
(exemple: (setq coord_y (atof val_champ)) ;Y
(if (not (and (= coord_x 0.0) (= coord_y 0.0)))
(exemple: (setq coord_y (atof val_champ)) ;Y
(if (not (and (= coord_x 0.0) (= coord_y 0.0)))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
17 févr. 2016 à 16:03
17 févr. 2016 à 16:03
1)le nom du calque c'est "E-GEO-POINT-LEVE- PP"
2)et le fichier excel est le suivant:
Nom Calque Echelle X Echelle Y Echelle Z ELEV Position X Position Y Position Z Rotation XY
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.018 69054.0000 22433.6860 18.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.012 60413.0000 22083.6860 12.0000 -30
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.018 67413.0000 22433.6860 18.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.018 68413.0000 22433.6860 18.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 61413.0000 21433.3721 14.0000 30
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.008 62413.0000 21433.6860 8.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 60413.0000 21433.3721 14.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.012 59544.5000 21433.3721 12.0000 45
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 61413.0000 22433.3721 14.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 62413.0000 22433.3721 14.0000 135
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.012 67413.0000 23433.3721 12.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.
3) ordre d’écriture des attributs est ELEV (ÉLÉVATION); POINT (NOM); DESC (DESCRIPTION) (3 ATTRIBUTS)
4) le bloc sera inseré en 3D (XYZ)
A +
2)et le fichier excel est le suivant:
Nom Calque Echelle X Echelle Y Echelle Z ELEV Position X Position Y Position Z Rotation XY
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.018 69054.0000 22433.6860 18.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.012 60413.0000 22083.6860 12.0000 -30
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.018 67413.0000 22433.6860 18.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.018 68413.0000 22433.6860 18.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 61413.0000 21433.3721 14.0000 30
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.008 62413.0000 21433.6860 8.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 60413.0000 21433.3721 14.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.012 59544.5000 21433.3721 12.0000 45
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 61413.0000 22433.3721 14.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.014 62413.0000 22433.3721 14.0000 135
point E-GEO-POINT-LEVE- PP 63.5000 63.5000 63.5000 0.012 67413.0000 23433.3721 12.0000 0
point E-GEO-POINT-LEVE- PP 63.5000 63.
3) ordre d’écriture des attributs est ELEV (ÉLÉVATION); POINT (NOM); DESC (DESCRIPTION) (3 ATTRIBUTS)
4) le bloc sera inseré en 3D (XYZ)
A +
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
17 févr. 2016 à 16:53
17 févr. 2016 à 16:53
je l'ai masqué sur mon fichier autocad lorsque j'ai extrait les données sur excel; je vais vous refaire le fichier ; voila :
Nom du bloc Calque ELEV POINT DESC Echelle X Echelle Y Echelle Z Position X Position Y Position Z Rotation
point E-GEO-POINT-LEVE_SNC 0.002 10192 DALLE Z 63.5000 63.5000 63.5000 69576.8494 65073.0985 2.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 9888 DALLE Z 63.5000 63.5000 63.5000 71182.7274 66826.8345 -1.0000 -45
point E-GEO-POINT-LEVE_SNC -0.008 10212 DALLE Z 63.5000 63.5000 63.5000 59722.9157 55507.1667 -8.0000 1
point E-GEO-POINT-LEVE_SNC -0.012 10209 DALLE Z 63.5000 63.5000 63.5000 63013.7104 53843.8405 -12.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10210 DALLE Z 63.5000 63.5000 63.5000 61905.1917 53939.7786 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10217 DALLE Z 63.5000 63.5000 63.5000 63049.0458 51079.0439 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 10220 DALLE Z 63.5000 63.5000 63.5000 64672.5598 50564.3447 -1.0000 1
point E-GEO-POINT-LEVE_SNC -0.005 10221 DALLE Z 63.5000 63.5000 63.5000 64038.7505 50553.8644 -5.0000 135
point E-GEO-POINT-LEVE_SNC -0.007 10218 DALLE Z 63.5000 63.5000 63.5000 61893.0763 51078.2946 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.010 10219 DALLE Z 63.5000 63.5000 63.5000 64622.3787 52197.6217 -10.0000 45
point E-GEO-POINT-LEVE_SNC -0.007 10202 DALLE Z 63.5000 63.5000 63.5000 67873.9514 55547.8307 -7.0000 1
Nom du bloc Calque ELEV POINT DESC Echelle X Echelle Y Echelle Z Position X Position Y Position Z Rotation
point E-GEO-POINT-LEVE_SNC 0.002 10192 DALLE Z 63.5000 63.5000 63.5000 69576.8494 65073.0985 2.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 9888 DALLE Z 63.5000 63.5000 63.5000 71182.7274 66826.8345 -1.0000 -45
point E-GEO-POINT-LEVE_SNC -0.008 10212 DALLE Z 63.5000 63.5000 63.5000 59722.9157 55507.1667 -8.0000 1
point E-GEO-POINT-LEVE_SNC -0.012 10209 DALLE Z 63.5000 63.5000 63.5000 63013.7104 53843.8405 -12.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10210 DALLE Z 63.5000 63.5000 63.5000 61905.1917 53939.7786 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10217 DALLE Z 63.5000 63.5000 63.5000 63049.0458 51079.0439 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 10220 DALLE Z 63.5000 63.5000 63.5000 64672.5598 50564.3447 -1.0000 1
point E-GEO-POINT-LEVE_SNC -0.005 10221 DALLE Z 63.5000 63.5000 63.5000 64038.7505 50553.8644 -5.0000 135
point E-GEO-POINT-LEVE_SNC -0.007 10218 DALLE Z 63.5000 63.5000 63.5000 61893.0763 51078.2946 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.010 10219 DALLE Z 63.5000 63.5000 63.5000 64622.3787 52197.6217 -10.0000 45
point E-GEO-POINT-LEVE_SNC -0.007 10202 DALLE Z 63.5000 63.5000 63.5000 67873.9514 55547.8307 -7.0000 1
Yoda
>
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
17 févr. 2016 à 17:23
17 févr. 2016 à 17:23
Le format des données est différent du précédent. Tabernacle!
Il faut définir le format une fois pour toutes sinon ça va pas marcher.
Si tu veux un programme capable de s'adapter à plusieurs formats, c'est plus compliqué.
Dans un premier temps, si tu veux que le programme marche, il faut:
- soit que tu apprennes à programmer le lisp pour être capable de faire des modifs dans le script par toi-même
- soit convenir d'un format unique en sachant que les éléments d'une ligne de donnée sont séparés par au moins un espace. Ce qui veut dire que les données de type texte doivent être en un seul mot :
E-GEO-POINT-LEVE- PP --> 2 mots PAS BON
E-GEO-POINT-LEVE-PP --> 1 mot BON
DALLE Z --> 2 mots PAS BON
DALLE_Z --> 1 mot BON
Est-ce qu'on peut continuer avec ces contraintes? Sinon mieux vaut abandonner, on perd notre temps.
A+
Il faut définir le format une fois pour toutes sinon ça va pas marcher.
Si tu veux un programme capable de s'adapter à plusieurs formats, c'est plus compliqué.
Dans un premier temps, si tu veux que le programme marche, il faut:
- soit que tu apprennes à programmer le lisp pour être capable de faire des modifs dans le script par toi-même
- soit convenir d'un format unique en sachant que les éléments d'une ligne de donnée sont séparés par au moins un espace. Ce qui veut dire que les données de type texte doivent être en un seul mot :
E-GEO-POINT-LEVE- PP --> 2 mots PAS BON
E-GEO-POINT-LEVE-PP --> 1 mot BON
DALLE Z --> 2 mots PAS BON
DALLE_Z --> 1 mot BON
Est-ce qu'on peut continuer avec ces contraintes? Sinon mieux vaut abandonner, on perd notre temps.
A+
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
>
Yoda
17 févr. 2016 à 17:45
17 févr. 2016 à 17:45
vous voulez dire que je vais remplacer partout dans mon texte "espace" par un" _ " comme les deux exemple que vous avez cité ci-haut ( DALLE Z avec DALLE_Z) ?
le dernier fichier sera mon fichier d'essai et on va partir avec , et je vais rester avec ce seul format
Nom du bloc Calque ELEV POINT DESC Echelle X Echelle Y Echelle Z Position X Position Y Position Z Rotation
point E-GEO-POINT-LEVE_SNC 0.002 10192 DALLE_Z 63.5000 63.5000 63.5000 69576.8494 65073.0985 2.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 9888 DALLE_Z 63.5000 63.5000 63.5000 71182.7274 66826.8345 -1.0000 -45
point E-GEO-POINT-LEVE_SNC -0.008 10212 DALLE_Z 63.5000 63.5000 63.5000 59722.9157 55507.1667 -8.0000 1
point E-GEO-POINT-LEVE_SNC -0.012 10209 DALLE_Z 63.5000 63.5000 63.5000 63013.7104 53843.8405 -12.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10210 DALLE_Z 63.5000 63.5000 63.5000 61905.1917 53939.7786 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10217 DALLE_Z 63.5000 63.5000 63.5000 63049.0458 51079.0439 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 10220 DALLE_Z 63.5000 63.5000 63.5000 64672.5598 50564.3447 -1.0000 1
point E-GEO-POINT-LEVE_SNC -0.005 10221 DALLE_Z 63.5000 63.5000 63.5000 64038.7505 50553.8644 -5.0000 135
point E-GEO-POINT-LEVE_SNC -0.007 10218 DALLE_Z 63.5000 63.5000 63.5000 61893.0763 51078.2946 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.010 10219 DALLE_Z 63.5000 63.5000 63.5000 64622.3787 52197.6217 -10.0000 45
point E-GEO-POINT-LEVE_SNC -0.007 10202 DALLE_Z 63.5000 63.5000 63.5000 67873.9514 55547.8307 -7.0000 1
merci pour votre compréhension, je veux vraiment le réaliser; et je viens de commencer mes cours en programmation j'espère un jour je serais capable d'aider les gens comme que vous le faites :)
le dernier fichier sera mon fichier d'essai et on va partir avec , et je vais rester avec ce seul format
Nom du bloc Calque ELEV POINT DESC Echelle X Echelle Y Echelle Z Position X Position Y Position Z Rotation
point E-GEO-POINT-LEVE_SNC 0.002 10192 DALLE_Z 63.5000 63.5000 63.5000 69576.8494 65073.0985 2.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 9888 DALLE_Z 63.5000 63.5000 63.5000 71182.7274 66826.8345 -1.0000 -45
point E-GEO-POINT-LEVE_SNC -0.008 10212 DALLE_Z 63.5000 63.5000 63.5000 59722.9157 55507.1667 -8.0000 1
point E-GEO-POINT-LEVE_SNC -0.012 10209 DALLE_Z 63.5000 63.5000 63.5000 63013.7104 53843.8405 -12.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10210 DALLE_Z 63.5000 63.5000 63.5000 61905.1917 53939.7786 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10217 DALLE_Z 63.5000 63.5000 63.5000 63049.0458 51079.0439 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 10220 DALLE_Z 63.5000 63.5000 63.5000 64672.5598 50564.3447 -1.0000 1
point E-GEO-POINT-LEVE_SNC -0.005 10221 DALLE_Z 63.5000 63.5000 63.5000 64038.7505 50553.8644 -5.0000 135
point E-GEO-POINT-LEVE_SNC -0.007 10218 DALLE_Z 63.5000 63.5000 63.5000 61893.0763 51078.2946 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.010 10219 DALLE_Z 63.5000 63.5000 63.5000 64622.3787 52197.6217 -10.0000 45
point E-GEO-POINT-LEVE_SNC -0.007 10202 DALLE_Z 63.5000 63.5000 63.5000 67873.9514 55547.8307 -7.0000 1
merci pour votre compréhension, je veux vraiment le réaliser; et je viens de commencer mes cours en programmation j'espère un jour je serais capable d'aider les gens comme que vous le faites :)
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
17 févr. 2016 à 17:46
17 févr. 2016 à 17:46
on peut oublier les premiers fichier et on va partir avec ce derniers
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
18 févr. 2016 à 14:37
18 févr. 2016 à 14:37
bonjour Yoda;
vous êtes un génie, ça fonctionne très bien,
je vous remercie infiniment; le programme marche à merveille
merci encore une fois
vous êtes un génie, ça fonctionne très bien,
je vous remercie infiniment; le programme marche à merveille
merci encore une fois
Bonjour,
Oui, ça marche mais uniquement pour ce bloc et ce format de fichier. C'est un peu restrictif.
Pourquoi ne pas utiliser l'utilitaire de Express Tools, il est capable d'exporter des blocs avec attributs, et de les réimporter après mise à jour. C'est très pratique.
Il y a aussi des macros VBA qui marchent pour Importer/Exporter Autocad<->Excel.
Gardes bien la commande ATTDIA en tête. Si elle est désactivée tu ne pourras plus afficher le dialogue des attributs quand tu voudras inserer un bloc.
Si tu le souhaites, on peut modifier le lisp pour rétablir cette variable à la fin du programme.
A+
Oui, ça marche mais uniquement pour ce bloc et ce format de fichier. C'est un peu restrictif.
Pourquoi ne pas utiliser l'utilitaire de Express Tools, il est capable d'exporter des blocs avec attributs, et de les réimporter après mise à jour. C'est très pratique.
Il y a aussi des macros VBA qui marchent pour Importer/Exporter Autocad<->Excel.
Gardes bien la commande ATTDIA en tête. Si elle est désactivée tu ne pourras plus afficher le dialogue des attributs quand tu voudras inserer un bloc.
Si tu le souhaites, on peut modifier le lisp pour rétablir cette variable à la fin du programme.
A+
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
>
Yoda
18 févr. 2016 à 15:20
18 févr. 2016 à 15:20
j'aimerais ça utiliser une autres méthode plus rapide comme "l'utilitaire de Express Tools"
mais ou-est ce que puis-je m'informer d'avantage; je suis une nouvelle dessinatrice donc si vous pouvez m'orienter ça va être avec un plaisir de découvrir ça; je veux vraiment aller loin avec Autocad
A+
mais ou-est ce que puis-je m'informer d'avantage; je suis une nouvelle dessinatrice donc si vous pouvez m'orienter ça va être avec un plaisir de découvrir ça; je veux vraiment aller loin avec Autocad
A+
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
1
18 févr. 2016 à 15:22
18 févr. 2016 à 15:22
aussi pouvez vous s'il vous plait (si vous avez le temps bien-sure) de modifier le Lisp ?
merci :)
merci :)
Yoda
>
soficala
Messages postés
13
Date d'inscription
mardi 16 février 2016
Statut
Membre
Dernière intervention
6 décembre 2016
18 févr. 2016 à 16:13
18 févr. 2016 à 16:13
Express Tools est un ensemble d'outils fourni avec Autocad, c'est en anglais. Il est installé en option en même temps qu'Autocad. Regardes sur la barre des menus s'il y a Express.
Sinon, il faut aller dans gestion des programme et Supprimer/Modifier Autocad, demander d'installer Express Tools.
Modification du lisp:
Avant tout remettre la variable ATTDIA à 1
Commande : taper ATTDIA
puis 1
Dans la fonction de gestion des erreur (tout au début du programme)
ajouter une ligne
Dans la fonction principale ( en bas du programme )
Ajouter 2 lignes
Enregistrer, Recharger, Essayer.
A+
Sinon, il faut aller dans gestion des programme et Supprimer/Modifier Autocad, demander d'installer Express Tools.
Modification du lisp:
Avant tout remettre la variable ATTDIA à 1
Commande : taper ATTDIA
puis 1
Dans la fonction de gestion des erreur (tout au début du programme)
ajouter une ligne
(setvar "cmdecho" ocmd) ; Restore saved modes
;(setvar "regenmode" oreg)
(command "scu" "p")
(setvar "OSMODE" old_snap)
(setvar "ATTDIA" old_attdial) ;<---Ajouter cette ligne
Dans la fonction principale ( en bas du programme )
Ajouter 2 lignes
;reglage des variables systèmes pour le programme
(setq ocmd (getvar "cmdecho"))
;(setq oreg (getvar "REGENMODE"))
(setvar "cmdecho" 0)
;(setvar "REGENMODE" 0)
(command "scu" "")
(setq old_snap (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq old_attdial (getvar "ATTDIA"))
(setvar "ATTDIA" 0) ;<---Ajouter cette ligne
;restitutions des variables systèmes originales
(setvar "cmdecho" ocmd)
;(setvar "regenmode" oreg)
(command "zoom" "et")
(command "scu" "p")
(setvar "OSMODE" old_snap)
(setvar "ATTDIA" old_attdial) ;<---Ajouter cette ligne
Enregistrer, Recharger, Essayer.
A+
bonjour monsieur Yoda,
je m’excuse pour le retard;
bon; j'ai essayé d'ajouter des lignes avec Copier/Coller pour le programmes d'insertion des points en Attributs mais ça ne marchait pas: il importe les points mais il masque les attributs (sachant qu'il les importe avec les bons attributs et la bonne échelle);
aussi il m'affiche ce message :
Commande: APPLOAD
programepoint.lsp correctement chargé(s)
Commande:
Commande:
Commande: ATTDIA
Entrez une nouvelle valeur pour ATTDIA <0>: 0
Commande: *Annuler*
Commande: IMP
zoom
Spécifiez le coin d'une fenêtre, entrez un facteur d'échelle (nX ou nXP) ou
[Tout/Centre/DYnamique/ETendu/Précédent/Echelle/Fenêtre/Objet] <temps réel>: et Régénération du modèle.
Commande: scu
Nom du SCU courant: *GENERAL*
Spécifiez l'origine du SCU ou [Face/NOMmé/OBjet/Précédent/Vue/GÉnéral/X/Y/Z/axEZ] <GÉnéral>: p
-une autre question quand j'ai essayé de crier un autre bloc avec un nom et des attributs différents (question de pratiquer); ça ne marche pas non-plus pour moi il m'affiche toujours le message ci-haut.
je m’excuse pour le retard;
bon; j'ai essayé d'ajouter des lignes avec Copier/Coller pour le programmes d'insertion des points en Attributs mais ça ne marchait pas: il importe les points mais il masque les attributs (sachant qu'il les importe avec les bons attributs et la bonne échelle);
aussi il m'affiche ce message :
Commande: APPLOAD
programepoint.lsp correctement chargé(s)
Commande:
Commande:
Commande: ATTDIA
Entrez une nouvelle valeur pour ATTDIA <0>: 0
Commande: *Annuler*
Commande: IMP
zoom
Spécifiez le coin d'une fenêtre, entrez un facteur d'échelle (nX ou nXP) ou
[Tout/Centre/DYnamique/ETendu/Précédent/Echelle/Fenêtre/Objet] <temps réel>: et Régénération du modèle.
Commande: scu
Nom du SCU courant: *GENERAL*
Spécifiez l'origine du SCU ou [Face/NOMmé/OBjet/Précédent/Vue/GÉnéral/X/Y/Z/axEZ] <GÉnéral>: p
-une autre question quand j'ai essayé de crier un autre bloc avec un nom et des attributs différents (question de pratiquer); ça ne marche pas non-plus pour moi il m'affiche toujours le message ci-haut.
Bonjour soficala,
Si tu es toujours intéressé(e), j'ai remanié le programme de manière à pouvoir insérer tous types de blocs avec attributs (de 0 à 5 attributs).
C’était un peu long mais je crois que ça en valait la peine.
Es-tu prêt à recevoir le code?
Je dois m'absenter, mais je pense être libéré vers 20H00 heure française (14H00 heure américaine).
A+
Si tu es toujours intéressé(e), j'ai remanié le programme de manière à pouvoir insérer tous types de blocs avec attributs (de 0 à 5 attributs).
C’était un peu long mais je crois que ça en valait la peine.
Es-tu prêt à recevoir le code?
Je dois m'absenter, mais je pense être libéré vers 20H00 heure française (14H00 heure américaine).
A+
Voilà l'affaire, j'ai pris le temps de faire quelques essais.
Le programme fonctionne de cette manière.
1) Lire un fichier configuration
2) Vérifier et afficher la config
3) Lire le fichier de données suivant la config
4) Insérer les blocs
Le fichier de config est composé de mots clés (champ1) et de valeurs (champ2), le reste est du commentaire.
Il définit certains paramètres, et surtout le numéro des colonnes où se trouvent les données.
Certains champs sont obligatoires, d'autres optionnels.
Voici un exemple de fichier de configuration, réglé sur les données du bloc "point".
Copies et colles dans un fichier texte (.txt)
Le programme definit 2 commandes:
DEBUG : cette commande active le mode débogage (execution vituelle)
Elle permet de voir comment le programme interprète les données.
Aucun bloc n'est inséré.
IMPB : Cette commande lance le programme
Les blocs à inserer doivent etre accessibles (dessin courant ou dossier du path)
Après avoir chargé le lisp, taper Debug [Enter], puis taper impb [Enter]
Si tout est bon taper impb [Enter] (execution réelle)
J'attends un retour d'informations
Voici le lisp, copier et coller dans un fichier, extension .lsp
A+
Le programme fonctionne de cette manière.
1) Lire un fichier configuration
2) Vérifier et afficher la config
3) Lire le fichier de données suivant la config
4) Insérer les blocs
Le fichier de config est composé de mots clés (champ1) et de valeurs (champ2), le reste est du commentaire.
Il définit certains paramètres, et surtout le numéro des colonnes où se trouvent les données.
Certains champs sont obligatoires, d'autres optionnels.
Voici un exemple de fichier de configuration, réglé sur les données du bloc "point".
Copies et colles dans un fichier texte (.txt)
;Definition du fichier d'INPUT pour le bloc "point" avec 3 attributs
;
;LABEL VAL/COL CARACTERE DESCRIPTION
;
SEPARATOR B OBLIGATOIRE Séparateur de champ: Mettre B pour Blanc ou T pour Tab
HEADER 1 OPTIONNEL Nombre de lignes d'en-tête à ignorer (par défaut 0)
;
;Pour les champs OPTIONNEL : Mettre 0 si absent ou ignorer
BLOC_NAME 1 OBLIGATOIRE Col. Nom du bloc à inserer
LAYER_NAME 2 OPTIONNEL Col. Nom du calque à utiliser
;
INSERT_X 9 OBLIGATOIRE Col. Coordonnée X
INSERT_Y 10 OBLIGATOIRE Col. Coordonnée Y
INSERT_Z 11 OPTIONNEL Col. Coordonnée Z
;
SCALE_X 6 OPTIONNEL Col. Echelle X
SCALE_Y 7 OPTIONNEL Col. Echelle Y
ROTATION 12 OPTIONNEL Col. Rotation
;
ATT_CONT 3 OPTIONNEL Nombre d'attributs du bloc (de 0 à 5)
ATT1 3 OPTIONNEL Col. 1er attribut
ATT2 4 OPTIONNEL Col. 2eme attribut
ATT3 5 OPTIONNEL Col. 3eme attribut
ATT4 0 OPTIONNEL Col. 4eme attribut
ATT5 0 OPTIONNEL Col. 5eme attribut
Le programme definit 2 commandes:
DEBUG : cette commande active le mode débogage (execution vituelle)
Elle permet de voir comment le programme interprète les données.
Aucun bloc n'est inséré.
IMPB : Cette commande lance le programme
Les blocs à inserer doivent etre accessibles (dessin courant ou dossier du path)
Après avoir chargé le lisp, taper Debug [Enter], puis taper impb [Enter]
Si tout est bon taper impb [Enter] (execution réelle)
J'attends un retour d'informations
Voici le lisp, copier et coller dans un fichier, extension .lsp
;;; (IMP-BLOC) - importer fichier bloc
;Fonction de gestion des erreurs - Ne rien changer
(defun imp-bloc_err (s) ; If an error (such as CTRL-C) occurs
; while this command is active...
(if (/= s "Function cancelled")
(princ (strcat "\nErreur : " s))
)
(close n_f)
(close n_def)
(setvar "cmdecho" ocmd) ; Restore saved modes
;(setvar "regenmode" oreg)
(command "scu" "p")
(setvar "OSMODE" old_snap)
(setvar "ATTDIA" old_attdial) ;<---Ajouter cette ligne
(setq *error* olderr) ; Restore old *error* handler
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction d'extraction des données - Ne rien changer
;séparateur de champs: caractère espace (code ASCII 32) ou Tab (code ASCII 9)
(defun read-field ( chaine numchamp / pos1 pos2 ipos deb lng ret nchamp champ)
;(setq spt 32)
(setq pos1 0 pos2 0 deb 1 lng (strlen chaine) champ "")
(if (/= lng 0)
(progn
(setq ipos 1 nchamp 0 ret 0)
(while (and (< ipos lng) (= ret 0))
;recherche premier caractere
(WHILE (and (<= (ASCII (substr chaine ipos 1)) spt) (< ipos lng))
(setq ipos (+ ipos 1))
)
(setq nchamp (+ nchamp 1) pos1 ipos)
;recherche separateur
(WHILE (and (> (ASCII (substr chaine ipos 1)) spt) (< ipos lng))
(setq ipos (+ ipos 1))
)
(setq pos2 ipos)
(IF (and (= pos2 lng) (> (ASCII (substr chaine pos2 1)) spt)) (setq pos2 (+ pos2 1)))
(IF (= nchamp numchamp) (setq champ (substr chaine pos1 (- pos2 pos1)) ret 1))
);while
);progn
);if
(setq champ champ)
);fin fonction
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction de traitement du fichier de points
(defun fields_def ()
;default values
(setq spt 32 sp "B" iatt_cont 0 skip 0)
(setq iblk 0 ilay 0)
(setq blk "" lay "")
(setq ix 0 iy 0 iz 0)
(setq coord_x 0.0 coord_y 0.0 coord_z 0.0)
(setq iechx 0 iechy 0 irot 0)
(setq echx "" echy "" rot "")
(setq iatt1 0 iatt2 0 iatt3 0 iatt4 0 iatt5 0)
(setq att1 "" att2 "" att3 "" att4 "" att5 "")
(while (setq chaine (read-line n_def))
(setq label (strcase(read-field chaine 1)))
(setq lb_value (read-field chaine 2))
(if (and (= label "SEPARATOR") (= lb_value "T")) (setq sp lb_value))
(if (= label "HEADER") (setq skip (atoi lb_value)))
(if (= label "BLOC_NAME") (setq iblk (atoi lb_value)))
(if (= label "ATT_CONT") (setq iatt_cont (atoi lb_value)))
(if (= label "LAYER_NAME") (setq ilay (atoi lb_value)))
(if (= label "INSERT_X") (setq ix (atoi lb_value)))
(if (= label "INSERT_Y") (setq iy (atoi lb_value)))
(if (= label "INSERT_Z") (setq iz (atoi lb_value)))
(if (= label "SCALE_X") (setq iechx (atoi lb_value)))
(if (= label "SCALE_Y") (setq iechy (atoi lb_value)))
(if (= label "ROTATION") (setq irot (atoi lb_value)))
(if (= label "ATT1") (setq iatt1 (atoi lb_value)))
(if (= label "ATT2") (setq iatt2 (atoi lb_value)))
(if (= label "ATT3") (setq iatt3 (atoi lb_value)))
(if (= label "ATT4") (setq iatt4 (atoi lb_value)))
(if (= label "ATT5") (setq iatt5 (atoi lb_value)))
)
(if (= sp "T") (setq spt 9))
(if (< iatt_cont 0) (setq iatt_cont 0))
(if (< skip 0) (setq skip 0))
;vérification
(setq err 0)
(setq msg (strcat "Fichier : " nom_fich (chr 10)))
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Séparateur de champ : " ))
(if (= sp "T") (setq msg (strcat msg "Tab")) (setq msg (strcat msg "Blanc" (chr 10))))
(setq msg (strcat msg "Lignes d'en-tête : " (itoa skip)))
(setq msg (strcat msg (chr 10) (chr 10)))
(setq msg (strcat msg "Nom du bloc : "))
(if (= iblk 0)
(setq err 1 msg (strcat msg "*ERREUR*" (chr 10)))
(setq msg (strcat msg "Colonne " (itoa iblk) (chr 10)))
)
(setq msg (strcat msg "Nom du calque : "))
(if (> ilay 0)
(setq msg (strcat msg "Colonne " (itoa ilay) (chr 10)))
(setq msg (strcat msg "N/C" (chr 10)))
)
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Coordonnée X : "))
(if (> ix 0)
(setq msg (strcat msg "Colonne " (itoa ix) (chr 10)))
(setq msg (strcat msg "*ERREUR*" (chr 10)) err 1)
)
(setq msg (strcat msg "Coordonnée Y : "))
(if (> iy 0)
(setq msg (strcat msg "Colonne " (itoa iy) (chr 10)))
(setq msg (strcat msg "*ERREUR*" (chr 10)) err 1)
)
(setq msg (strcat msg "Coordonnée Z : "))
(if (> iz 0)
(setq msg (strcat msg "Colonne " (itoa iz) (chr 10)))
(setq msg (strcat msg "N/C" (chr 10)))
)
(setq msg (strcat msg (chr 10)))
(if (> iechx 0)
(setq msg (strcat msg "Echelle X : Colonne " (itoa iechx) (chr 10)))
)
(if (> iechy 0)
(setq msg (strcat msg "Echelle Y : Colonne " (itoa iechy) (chr 10)))
)
(if (> iechz 0)
(setq msg (strcat msg "Echelle Z : Colonne " (itoa iechz) (chr 10)))
)
(if (> irot 0)
(setq msg (strcat msg "Rotation : Colonne " (itoa irot) (chr 10)))
)
(setq msg (strcat msg (chr 10)))
(if (> iatt_cont 0)
(setq msg (strcat msg "Nombre d'attributs : " (itoa iatt_cont) (chr 10)))
)
(if (> iatt_cont 0) (progn
(setq msg (strcat msg "Attribut 1 : Colonne " (itoa iatt1) (chr 10))))
)
(if (> iatt_cont 1) (progn
(setq msg (strcat msg "Attribut 2 : Colonne " (itoa iatt2) (chr 10))))
)
(if (> iatt_cont 2) (progn
(setq msg (strcat msg "Attribut 3 : Colonne " (itoa iatt3) (chr 10))))
)
(if (> iatt_cont 3) (progn
(setq msg (strcat msg "Attribut 4 : Colonne " (itoa iatt4) (chr 10))))
)
(if (> iatt_cont 4) (progn
(setq msg (strcat msg "Attribut 5 : Colonne " (itoa iatt5) (chr 10))))
)
(setq msg (strcat msg (chr 10)))
(if (> err 0)
(setq msg (strcat msg "*ERREUR* - Format de données incorrect - Corrigez!"))
(setq msg (strcat msg "Selectionnez maintenant le fichier des blocs à importer"))
)
(alert msg)
(if (> err 0) (exit))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction de traitement du fichier de points
(defun importer_bloc ()
;lecture des données
(setq i_ligne 0)
(while (setq chaine (read-line n_f))
(setq i_ligne (+ i_ligne 1))
(if (> i_ligne skip) (progn
(setq msg (strcat "Fichier : " nom_fich (chr 10)))
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "En-tête : " (itoa skip) " lignes" (chr 10)))
;(setq msg (strcat msg "Séparateur de champ : " sp (chr 10) (chr 10)))
(setq msg (strcat msg "Ligne " (itoa i_ligne) (chr 10)))
(setq msg (strcat msg chaine (chr 10) (chr 10)))
;nom du bloc
(setq val_champ (read-field chaine iblk))
(setq blk val_champ)
(setq msg (strcat msg "Nom du bloc : " blk (chr 10)))
;layer
(setq val_champ (read-field chaine ilay))
(setq lay val_champ)
(setq msg (strcat msg "Nom du calque : " lay (chr 10)))
;coord X
(setq val_champ (read-field chaine ix))
(setq coord_x (atof val_champ))
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Coordonnée X : " val_champ))
;coord Y
(setq val_champ (read-field chaine iy))
(setq coord_y (atof val_champ))
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Coordonnée Y : " val_champ))
;coord Z
(setq val_champ (read-field chaine iz))
(setq coord_z (atof val_champ))
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Coordonnée Z : " val_champ))
(setq msg (strcat msg (chr 10)))
;echelle X
(setq val_champ (read-field chaine iechx))
(setq echx val_champ)
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Echelle X : " val_champ))
;echelle Y
(setq val_champ (read-field chaine iechy))
(setq echy val_champ)
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Echelle Y : " val_champ))
;rotation
(setq val_champ (read-field chaine irot))
(setq rot val_champ)
(setq msg (strcat msg (chr 10)))
(setq msg (strcat msg "Rotation : " val_champ))
(setq msg (strcat msg (chr 10)))
(if (> iatt_cont 0)
(setq msg (strcat msg "Nombre d'attributs : " (itoa iatt_cont) (chr 10)))
)
;attribut_1
(setq val_champ (read-field chaine iatt1))
(setq att1 val_champ)
(if (> iatt_cont 0)
(setq msg (strcat msg "Attribut 1 : " val_champ (chr 10)))
)
;attribut_2
(setq val_champ (read-field chaine iatt2))
(setq att2 val_champ)
(if (> iatt_cont 1)
(setq msg (strcat msg "Attribut 2 : " val_champ (chr 10)))
)
;attribut_3
(setq val_champ (read-field chaine iatt3))
(setq att3 val_champ)
(if (> iatt_cont 2)
(setq msg (strcat msg "Attribut 3 : " val_champ (chr 10)))
)
;attribut_4
(setq val_champ (read-field chaine iatt4))
(setq att4 val_champ)
(if (> iatt_cont 3)
(setq msg (strcat msg "Attribut 4 : " val_champ (chr 10)))
)
;attribut_5
(setq val_champ (read-field chaine iatt5))
(setq att5 val_champ)
(if (> iatt_cont 4)
(setq msg (strcat msg "Attribut 5 : " val_champ (chr 10)))
)
(if (= dbg 1) (progn
(alert msg)
(prompt "\n")
(initget "O N")
(setq cle (getkword "Voulez-vous continuer le debogage Oui[O] Non[N] <O>:"))
(if (= cle "N") (progn (setq dbg 0) (exit)))
))
(if (= dbg 0)
(progn
(setq coord_3D (list coord_x coord_y coord_z)) ;Point 3D
;calque qui contiendra les blocs, s'il n'existe pas il sera créé
(if (/= (strcase (getvar "clayer")) (strcase lay))
(command "-calque" "e" lay "")
)
;insertion bloc 0 attribut
(if (= iatt_cont 0)
(command "-inserer" blk coord_3D echx echy rot))
;insertion bloc 1 attribut
(if (= iatt_cont 1)
(command "-inserer" blk coord_3D echx echy rot att1))
;insertion bloc 2 attributs
(if (= iatt_cont 2)
(command "-inserer" blk coord_3D echx echy rot att1 att2))
;insertion bloc 3 attributs
(if (= iatt_cont 3)
(command "-inserer" blk coord_3D echx echy rot att1 att2 att3))
;insertion bloc 4 attributs
(if (= iatt_cont 4)
(command "-inserer" blk coord_3D echx echy rot att1 att2 att3 att4))
;insertion bloc 5 attributs
(if (= iatt_cont 5)
(command "-inserer" blk coord_3D echx echy rot att1 att2 att3 att4 att5))
);progn
);if
));if progn
);while
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Fonction principale - Ne rien changer
(defun IMPORT-BLOC ()
(setq olderr *error* *error* imp-bloc_err )
;reglage des variables systèmes pour le programme
(setq ocmd (getvar "cmdecho"))
;(setq oreg (getvar "REGENMODE"))
(setvar "cmdecho" 0)
;(setvar "REGENMODE" 0)
(command "scu" "")
(setq old_snap (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq old_attdial (getvar "ATTDIA"))
(setvar "ATTDIA" 0) ;<---Ajouter cette ligne
;Ouverture du fichier de definition des champs
(setq chemin (getvar "DWGPREFIX"))
(alert "Selectionnez le fichier de définition des champs")
(setq nom_fich (getfiled "Fichier de définition des champs" chemin "TXT" 0))
(if (= nom_fich nil) (exit)) ; operation annulee
(setq n_def (open nom_fich "r"))
;Analyse du fichier de définition
(fields_def)
;Fermeture du fichier de définition
(close n_def)
;Ouverture du fichier de points
(setq nom_fich (getfiled "Fichier des blocs à importer" chemin "TXT;XYZ;PRN" 0))
(if (= nom_fich nil) (exit)) ; operation annulee
(setq n_f (open nom_fich "r"))
;Traitement du fichier de points
(importer_bloc)
;Fermeture du fichier de points
(close n_f)
;restitutions des variables systèmes originales
(setvar "cmdecho" ocmd)
;(setvar "regenmode" oreg)
(command "zoom" "et")
(command "scu" "p")
(setvar "OSMODE" old_snap)
(setvar "ATTDIA" old_attdial) ;<---Ajouter cette ligne
(setq *error* olderr) ; Restore old *error* handler
;Sortie silencieuse du programme
(princ)
)
(defun c:impb ()
(IMPORT-BLOC)
(princ)
)
(defun c:debug ()
(setq dbg 1)
(alert "Importer Blocs - Debogage activé")
(princ)
)
;
A+
bonjour;
je vous remercie infiniment pour le temps que vous avez accordez pour moi!
je viens de voire votre message;
j'aurais une question le programme que je vais intégrer sur Autocad; je ne vais pas le modifier je vais juste changer l'information sur le nom du bloc et les attributs:
exemple: si mon bloc à deux attributs:
1) est-ce que je vais juste rentrer le nom du bloc et la définition des attributs; puis je supprime tout ligne a une relation avec le reste des attributs ?
2) ou bien je vais donner juste les informations nécessaires pour le bloc et ses attributs et je ne supprime aucune ligne ? (car à ce que je comprends en bas ça va se faire automatiquement; je m'explique: si le fichier final que je vais intégrer dans Autocad aura seulement deux attributs; le programme va s'adapter à ça directement)
sincères salutations!
je vous remercie infiniment pour le temps que vous avez accordez pour moi!
je viens de voire votre message;
j'aurais une question le programme que je vais intégrer sur Autocad; je ne vais pas le modifier je vais juste changer l'information sur le nom du bloc et les attributs:
exemple: si mon bloc à deux attributs:
1) est-ce que je vais juste rentrer le nom du bloc et la définition des attributs; puis je supprime tout ligne a une relation avec le reste des attributs ?
2) ou bien je vais donner juste les informations nécessaires pour le bloc et ses attributs et je ne supprime aucune ligne ? (car à ce que je comprends en bas ça va se faire automatiquement; je m'explique: si le fichier final que je vais intégrer dans Autocad aura seulement deux attributs; le programme va s'adapter à ça directement)
sincères salutations!
Tu peux garder le même fichier de données, si tu veux seulement 2 attributs, sur fichier de config tu modifies ATT_CONT 2 au lieu de ATT_CONT 3
Ajuste le numéro des colonnes pour ATT1 et ATT2
Mais attention aux numéros des autres colonnes, il faut que ça corresponde (X,Y,Z....)
fais un essai sur un dessin vierge, en mode debug puis en mode réel, le bloc doit déjà être défini dans le dessin où dans le path.
A+
;
ATT_CONT 2 OPTIONNEL Nombre d'attributs du bloc (de 0 à 5)
ATT1 3 OPTIONNEL 1er attribut
ATT2 4 OPTIONNEL 2eme attribut
ATT3 0 OPTIONNEL 3eme attribut
ATT4 0 OPTIONNEL 4eme attribut
ATT5 0 OPTIONNEL 5eme attribut
Ajuste le numéro des colonnes pour ATT1 et ATT2
Mais attention aux numéros des autres colonnes, il faut que ça corresponde (X,Y,Z....)
fais un essai sur un dessin vierge, en mode debug puis en mode réel, le bloc doit déjà être défini dans le dessin où dans le path.
A+
BONJOUR MONSIEUR YODA;
je suis entraîne d'essayer le programme;
ça affiche les messages correctement et je suis les étapes; mais lorsque il me demande de déboguer je clique "O" ; et un message s'affiche comme suit:
En-tête: 1 lignes
ligne 3
DEF-CAR (le nom de mon bloc) calque att1 att2......
je comprends qu'il lit les informations correctement;
je continu a cliquer pour le nombre du bloc car il me demande de le faire pour chaque bloc.......
mais à la fin il insert pas les blocs, même si il trouve l'information suffisante et il ne me signale aucune erreur
salutations!
je suis entraîne d'essayer le programme;
ça affiche les messages correctement et je suis les étapes; mais lorsque il me demande de déboguer je clique "O" ; et un message s'affiche comme suit:
En-tête: 1 lignes
ligne 3
DEF-CAR (le nom de mon bloc) calque att1 att2......
je comprends qu'il lit les informations correctement;
je continu a cliquer pour le nombre du bloc car il me demande de le faire pour chaque bloc.......
mais à la fin il insert pas les blocs, même si il trouve l'information suffisante et il ne me signale aucune erreur
salutations!
17 févr. 2016 à 22:04
mais lorsque j’insère le fichier d'information sur les points, il insére les blocs mais sans les attributs il me demande de le faire manuellement pour chaque bloc;
voici le texte que j'essaie d’insérer pour les points:
point E-GEO-POINT-LEVE_SNC 0.002 10192 DALLE_Z 63.5000 63.5000 63.5000 69576.8494 65073.0985 2.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 9888 DALLE_Z 63.5000 63.5000 63.5000 71182.7274 66826.8345 -1.0000 -45
point E-GEO-POINT-LEVE_SNC -0.008 10212 DALLE_Z 63.5000 63.5000 63.5000 59722.9157 55507.1667 -8.0000 1
point E-GEO-POINT-LEVE_SNC -0.012 10209 DALLE_Z 63.5000 63.5000 63.5000 63013.7104 53843.8405 -12.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10210 DALLE_Z 63.5000 63.5000 63.5000 61905.1917 53939.7786 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.007 10217 DALLE_Z 63.5000 63.5000 63.5000 63049.0458 51079.0439 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.001 10220 DALLE_Z 63.5000 63.5000 63.5000 64672.5598 50564.3447 -1.0000 1
point E-GEO-POINT-LEVE_SNC -0.005 10221 DALLE_Z 63.5000 63.5000 63.5000 64038.7505 50553.8644 -5.0000 135
point E-GEO-POINT-LEVE_SNC -0.007 10218 DALLE_Z 63.5000 63.5000 63.5000 61893.0763 51078.2946 -7.0000 1
point E-GEO-POINT-LEVE_SNC -0.010 10219 DALLE_Z 63.5000 63.5000 63.5000 64622.3787 52197.6217 -10.0000 45
point E-GEO-POINT-LEVE_SNC -0.007 10202 DALLE_Z 63.5000 63.5000 63.5000 67873.9514 55547.8307 -7.0000 1
17 févr. 2016 à 22:28
Mais je n'ai pas ton bloc point. Est-ce que tu peux me le transmette avec http://www.cjoint.com/
Tu tapes Wbloc, sélectionne le bloc, ça fera un fichier point.dwg, tu le mets sur http://www.cjoint.com/ , et tu poste le lien.
A+
17 févr. 2016 à 22:45
il faut mettre la variable système ATTDIA à 0.
sur la ligne de commande tapes ATTDIA
ensuite 0
tapes IMP
ça va marcher