Inserer bloc avec coordonnée

Fermé
polyline Messages postés 1 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 26 février 2013 - 26 févr. 2013 à 19:46
 ZCAD - 16 janv. 2024 à 13:35
Bonjour,

Bonsoir

J'ai un petit soucis et j'espère que l'on pourrait m'aider

Voila je dois insère une centaine de bloc (avec sont attribut ) avec des coordonnées x et y qui
provienne d'un fichier excel
J'aimerais savoir si il est possible de crée un script ou une routine lisp pour me facilité la tache

Le problème est que je n'y connais presque rien a la programmation
Si quelqu'un veut bien me donner un coups de pouce ce serais génial


Tableau excel

Nom du bloc coordonnée
F601 x: 150147 / y : 147302

Materiel autocad 2009 / 2013

A voir également:

5 réponses

Bonjour,

Il y a pas mal de lisps sur le net pour charger un semi de points dans autocad
En voici un exemple

http://cadxp.com/index.php?/topic/16959-charger-un-semi-de-point-en-format-txt/

Il faudra certainement adapter.
Peut-on voir quelques lignes de ton fichier texte à charger?

A+.
0
noreddinebakkali
27 févr. 2013 à 12:06
Merci pour ta reponse

Mais je ne connais pas le lisp
Je pensais plus partir sur l'idee d'un script .

J'ai pu trouver sur le net un script qui m'insere les points au coordonnée voulue;
Voici la fonction sur excel:='_point "&C1&","&D1
mais avec ce code je n'arrive pas a charger mon bloc editable.(bloc+attribut dans autocad) dans mon dessin

Point C1 D1

Nom du bloc X Y
F01 151.210 174.250
F02 151.211 174.251
F03 151.212 174.252

Merci d'avance pour vos conseil
0
Les languages de programmation d'autocad sont le VBA et le Lisp.

L'avantage du VBA c'est que tu peux travailler en même temps dans autocad et dans Excel.

Pour revenir à ton problème, il faudrait confectionner un programme sur mesure, en prenant pour modèle des Lisps ou des macro VBA qu'on trouve sur les forums. Si tu n'as pas un minimum de connaissances en programmation, ça va être compliqué. Pour un usage unique, pas sur que ça vaille le coup.

A tout hazard:
Est-ce le même bloc qu'il faut inserer à chaque point?
Quels sont les attributs (le nom des étiquettes)?...

Y.
0
noreddinebakkali
27 févr. 2013 à 15:04
Bonjour

En faite je dois pouvoir reutiliser la commande plusieur fois (plusieur projet a venir).C'est pour cela que je cherche a avoir une routine pour me facilité la tache

Pour ce projet j'ai plus d'une 100 de bloc a insere , je ne pense pas qu'il puisse
m'inserer different bloc

Donc j'insere un bloc de base ( localisation de forage sur une parcelle de terrain)
le bloc a insere a comme attribut le numeros du forage

Bien à toi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai un peu bricolé un Lisp que j'avais fait. Tu testeras.

Pour que ça marche, tu dois exporter ton fichier Excel au format texte sans les en-tetes.
Enregistrer sous ... format Texte(DOS), de manière à obtenir ça:

F01 151.210 174.250
F02 151.211 174.251
F03 151.212 174.252

Copies les lignes qui suivent et tu les colles dans un fichier avec Bloc Notes ou ton editeur de texte préféré (pas de Word ou autre traitement de texte).

Deux lignes à modifier:
(command "-calque" "e" "NOM_DU_CALQUE" "") ; <- NOM DU CALQUE

remplaces NOM_DU_CALQUE par le calque qui contiendra les blocs

(command "-inserer" "NOM_DU_BLOC" coord_2D "" "" "" n_p) ; <- NOM DU BLOC

remplaces NOM_DU_BLOC par le bloc à inserer; le bloc doit déjà être défini dans le dessin.

Tu sauvegardes le fichier avec l'extention .lsp

Utilisation:
Charger le lisp (Outils/AutoLisp/Charger une application)

Si pas d'erreur, taper IMP-NXY sur la ligne de commande.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;  (IMP-NXY) - importer fichier ASCII 

(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)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(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


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun importer_xyz ()
  (command "-calque" "e" "NOM_DU_CALQUE" "") ; <- NOM DU CALQUE
  (while (setq chaine (read-line n_f))
         (setq val_champ (lirechamp chaine i_p))
         (setq n_p val_champ)                  ;numero
         (setq val_champ (lirechamp chaine i_x))
         (setq coord_x (atof val_champ))       ;X
         (setq val_champ (lirechamp chaine i_y))
         (setq coord_y (atof val_champ))       ;Y
      (if (not (and (= coord_x 0.0) (= coord_y 0.0)))
      (progn
         (setq coord_2D (list coord_x coord_y 0.0))     ;Point 2D
         (command "-inserer" "NOM_DU_BLOC" coord_2D "" "" "" n_p) ; <- NOM DU BLOC
      );progn
      );if
 );while
)


(defun C:IMP-NXY ()
  (setq olderr  *error*
        *error* imp-xyz_err
  )
	
  (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 i_p 1 i_x 2 i_y 3)

(setq chemin (getvar "DWGPREFIX"))
  (setq nom_fich (getfiled "Fichier .TXT à importer" chemin "TXT" 0))
  (if (= nom_fich nil) (exit))        ; operation annulee
  (setq n_f (open nom_fich "r"))
  
  (importer_xyz)

  (close n_f)
  (setvar "cmdecho" ocmd)
  ;(setvar "regenmode" oreg)
  (command "zoom" "et")
  (command "scu" "p")
  (setvar "OSMODE" old_snap)
  (setq *error* olderr)               ; Restore old *error* handler
  (princ)
)
0

Bonjour yoda, 

j'ai essayé ton lisp mais il ne fonctionne pas peut-être que mes données ne sont pas dans une forme correct ? 

Voici un extrait de mes coordonnées : 

7.052320918,46.832327756
7.052657895,46.832436843
7.052950767,46.832536785
7.053242461,46.832636722
7.053534393,46.832745654
7.053827138,46.832845593
7.054113634,46.832531719
7.054121518,46.832693664
7.054145705,46.832945618
7.054228724,46.83917974
7.054259942,46.838811032
7.054395125,46.838460666
7.054440103,46.833036565
7.054510688,46.838146215
7.0546428,46.832675155
7.054650348,46.837768877

merci d'avance 

0