Aller au contenu

Insérer une dalle ECW facilement


Messages recommandés

Posté(e)

Bonjour,

 

Pour ceux qui utilise la BD-ORTHO de l'IGN, je vous propose un bout de code (à personnaliser) pour insérer la bonne dalle au bon endroit.

En effet quoi de plus pénible que de devoir identifier le nom de la dalle que l'on veut inséré, puis de parcourir tous les dossiers/fichiers pour sélectionner le bon cliché!

 

Voici le bout de code:

 

(defun trunc (xr / ia)
 (setq ia (itoa (fix (/ xr 10000.0))))
 (strcat
   (cond
     ((< (strlen ia) 3) "0")
     ((< (strlen ia) 2) "00")
     (T "")
   )
   (if (> (- (fix (/ xr 1000)) (* 10 (fix (/ xr 10000)))) 4)
     (strcat ia "5")
     (strcat ia "0")
   )
 )
)
(defun c:BD_ORTHO ( / ent_text dxf_ent key img_name folder)
;On pourrait ici par exemple déterminer l'emprise globale des dalles et faire un zoom
; (setvar "LIMCHECK" 0)
; (setvar "LIMMIN" '(760000.0 6345000.0))
; (setvar "LIMMAX" '(855000.0 6485000.0))
 (setq ent_text
   (entmakex
     (list
       (cons 0 "MTEXT")
       (cons 100 "AcDbEntity")
       (cons 100 "AcDbMText")
       (cons 1 "")
       (cons 10 (trans (getvar "VIEWCTR") 0 1))
       (cons 40 (/ (getvar "VIEWSIZE") 75.0));
       (cons 50 (- 0 (getvar "VIEWTWIST")))
       (cons 62 250)
       (cons 71 7)
       (cons 72 5)
       (cons 90 1)
       (cons 63 255)
       (cons 45 1.5)
     )
   )
   dxf_ent (entget ent_text)
 )
 (while (and (setq key (grread T 4 0)) (/= (car key) 3))
   (cond
     ((eq (car key) 5)
       (setq
;Concaténez les valeurs textes vous concernant
         img_name (strcat "07-2011-" (trunc (caadr key)) "-" (itoa (+ (atoi (trunc (cadadr key))) 5)) "-LA93.ecw")
         dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent)
         dxf_ent (subst (cons 1 (strcat "{\\fArial;" img_name "}" )) (assoc 1 dxf_ent) dxf_ent)
         dxf_ent (subst (cons 40 (/ (getvar "VIEWSIZE") 75.0)) (assoc 40 dxf_ent) dxf_ent)
       )
       (entmod dxf_ent)
     )
   )
 )
 (cond
   ((eq (car key) 3)
     (entdel ent_text)
;ICI il vous faut fixer en DUR le dossier contenant les images ECW
     (setq folder "K:\\1-BDORTHO\\ORTHO-2011\\BDO_RVB_0M50_ECW_LAMB93_D07-ED11-1\\")
     (if (findfile (strcat folder img_name))
       (progn
         (princ (strcat "\nCharge l'image: " (strcat folder img_name)))
         (setvar "FILEDIA" 0)
         (setvar "CMDECHO" 0)
         (command "_MAPIINSERT" (strcat folder img_name) "_no")
         (setvar "FILEDIA" 1)
         (setvar "CMDECHO" 1)
       )
       (progn
;PAREIL ICI il vous faut fixer en DUR le dossier contenant les images ECW (2 dossier en tout représentant les 2 DVD)
         (setq folder "K:\\1-BDORTHO\\ORTHO-2011\\BDO_RVB_0M50_ECW_LAMB93_D07-ED11-2\\")
         (if (findfile (strcat folder img_name))
           (progn
             (princ (strcat "\nCharge l'image: " (strcat folder img_name)))
             (setvar "FILEDIA" 0)
             (setvar "CMDECHO" 0)
             (command "_MAPIINSERT" (strcat folder img_name) "_no")
             (setvar "FILEDIA" 1)
             (setvar "CMDECHO" 1)
           )
           (princ (strcat "\nL'image " img_name " est introuvable!"))
         )
       )
     )
   )
 )
 (prin1)
)

 

Après lancement du lisp il vous suffit de déplacer le curseur pour avoir le nom du cliché et de simplement cliquer pour insérer la dalle.

 

NB: Cela peut être adaptable à une version pleine d'AutoCad autre que MAP en remplaçant "_MAPIINSERT" par "_IMAGEATTACH" et en fournissant les coordonnées qui ont été concaténées dans la variable img_name

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)
Aurais-tu de quoi tester ?

 

La Bd-Ortho de l'IGN est sous licence, je me voie mal mettre en ligne des fichiers pour tester.En plus 2DVD complet, ça fait du monde...

 

Mais rien ne t'empêche d'enlever les semi-colon devant:

; (setvar "LIMCHECK" 0)

; (setvar "LIMMIN" '(760000.0 6345000.0))

; (setvar "LIMMAX" '(855000.0 6485000.0))

et de rajouter en dessous de celle-ci:

(command "_.zoom" "_all")

 

Tu lance le lisp et tu balade ton curseur.

Bien sur si tu clique, il n'insérera pas l'image (puisque tu ne les possèdes pas!)

 

En fait les noms de clichés de l'IGN sont constitués d'une partie des coordonnées d'insertion de l'image.

C'est pour cela qu'après adaptation cela doit fonctionner sur n'importe quel département de France.

 

Voici aussi presque le même pour le SCAN25 (ici il n'y a qu'un dossier ou DVD)

 

(defun trunc (xr / ia)
 (setq ia (itoa (fix (/ xr 10000.0))))
 (strcat
   (cond
     ((< (strlen ia) 3) "0")
     ((< (strlen ia) 2) "00")
     (T "")
   )
   (strcat ia "0")
 )
)
(defun c:SCAN25 ( / ent_text dxf_ent key img_name folder)
; (setvar "LIMCHECK" 0)
; (setvar "LIMMIN" '(760000.0 6345000.0))
; (setvar "LIMMAX" '(855000.0 6485000.0))
; (command "_.zoom" "_all")
 (setq ent_text
   (entmakex
     (list
       (cons 0 "MTEXT")
       (cons 100 "AcDbEntity")
       (cons 100 "AcDbMText")
       (cons 1 "")
       (cons 10 (trans (getvar "VIEWCTR") 0 1))
       (cons 40 (/ (getvar "VIEWSIZE") 75.0));
       (cons 50 (- 0 (getvar "VIEWTWIST")))
       (cons 62 250)
       (cons 71 7)
       (cons 72 5)
       (cons 90 1)
       (cons 63 255)
       (cons 45 1.5)
     )
   )
   dxf_ent (entget ent_text)
 )
 (while (and (setq key (grread T 4 0)) (/= (car key) 3))
   (cond
     ((eq (car key) 5)
       (setq
         img_name (strcat "SC25_TOUR_" (trunc (caadr key)) "_" (itoa (+ (atoi (trunc (cadadr key))) 10)) "_L93.tif")
         dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent)
         dxf_ent (subst (cons 1 (strcat "{\\fArial;" img_name "}" )) (assoc 1 dxf_ent) dxf_ent)
         dxf_ent (subst (cons 40 (/ (getvar "VIEWSIZE") 75.0)) (assoc 40 dxf_ent) dxf_ent)
       )
       (entmod dxf_ent)
     )
   )
 )
 (cond
   ((eq (car key) 3)
     (entdel ent_text)
     (setq folder "K:\\4-SCAN\\1-SCAN25\\SC25_TOUR_TIF_LAMB93_DEP07\\")
     (if (findfile (strcat folder img_name))
       (progn
         (princ (strcat "\nCharge l'image: " (strcat folder img_name)))
         (setvar "FILEDIA" 0)
         (setvar "CMDECHO" 0)
         (command "_MAPIINSERT" (strcat folder img_name) "_no")
         (setvar "FILEDIA" 1)
         (setvar "CMDECHO" 1)
       )
       (princ (strcat "\nL'image " img_name " est introuvable!"))
     )
   )
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut Bonuscad,

 

 

je n'ai pas encore testé, mais l’idée est vraiment très bonne......

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Posté(e)

Re,

 

Je pense que cela serais aussi sympa à utiliser avec les planches cadastrales... wink.gif

 

B)

 

bonuscad,

 

 

Depuis cette config =>

 

Les données étant (Exemple pour L098_081.TFW) =>

 

2.50

0

0

-2.50

980001.25

169998.75

 

Que dois-je modifier de plus sur le code pour ne pas avoir :

 

Commande: (LOAD "C:/Users/Lili2006/Desktop/INSERTION SCAN 25/SCAN 25/SCAN25.lsp") C:SCAN25

Commande: SCAN25

L'image L098_000_10.tif est introuvable!

 

En fait, je ne sais pas comment trouver le nom de l'image associé à son ".twf",..

 

Il faut surement commencer par fixer les limites des coordonnées,..

 

Le code modifié =>

 

(defun trunc (xr / ia)
 (setq ia (itoa (fix (/ xr 10000.0))))
 (strcat
(cond
 	((< (strlen ia) 3) "0")
 	((< (strlen ia) 2) "00")
 	(T "")
)
(strcat ia "0")
 )
)
(defun c:SCAN25 ( / ent_text dxf_ent key img_name folder)
; (setvar "LIMCHECK" 0)
; (setvar "LIMMIN" '(760000.0 6345000.0))
; (setvar "LIMMAX" '(855000.0 6485000.0))
; (command "_.zoom" "_all")
 (setq ent_text
(entmakex
 	(list
   	(cons 0 "MTEXT")
   	(cons 100 "AcDbEntity")
   	(cons 100 "AcDbMText")
   	(cons 1 "")
   	(cons 10 (trans (getvar "VIEWCTR") 0 1))
   	(cons 40 (/ (getvar "VIEWSIZE") 75.0));
   	(cons 50 (- 0 (getvar "VIEWTWIST")))
   	(cons 62 250)
   	(cons 71 7)
   	(cons 72 5)
   	(cons 90 1)
   	(cons 63 255)
   	(cons 45 1.5)
 	)
)
dxf_ent (entget ent_text)
 )
 (while (and (setq key (grread T 4 0)) (/= (car key) 3))
(cond
 	((eq (car key) 5)
   	(setq
     	img_name (strcat "L098_" (trunc (caadr key)) "_" (itoa (+ (atoi (trunc (cadadr key))) 10)) ".tif")
     	dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent)
     	dxf_ent (subst (cons 1 (strcat "{\\fArial;" img_name "}" )) (assoc 1 dxf_ent) dxf_ent)
     	dxf_ent (subst (cons 40 (/ (getvar "VIEWSIZE") 75.0)) (assoc 40 dxf_ent) dxf_ent)
   	)
   	(entmod dxf_ent)
 	)
)
 )
 (cond
((eq (car key) 3)
 	(entdel ent_text)
 	(setq folder "C:\Users\Lili2006\Desktop\INSERTION SCAN 25\SCAN 25\\")
 	(if (findfile (strcat folder img_name))
   	(progn
     	(princ (strcat "\nCharge l'image: " (strcat folder img_name)))
     	(setvar "FILEDIA" 0)
     	(setvar "CMDECHO" 0)
     	(command "_MAPIINSERT" (strcat folder img_name) "_no")
     	(setvar "FILEDIA" 1)
     	(setvar "CMDECHO" 1)
   	)
   	(princ (strcat "\nL'image " img_name " est introuvable!"))
 	)
)
 )
 (prin1)
)

 

Merci d'avance,

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Bonjour lili2006

 

Malheureusement la structure du nom de tes fichier ne convient pas...

Voici par exemple la mienne pour un scan25

http://uppix.net/3/0/6/2a9ce98f33f84e4cfb11e5d4369f6t.jpg

 

Pour les scans > 1/25000 le principe de matricule des noms de fichier n'est plus la même, donc cela ne fonctionnera pas.

 

SC25_TOUR_0760_6400_L93.tif

 

Ici en rouge tu retrouves les coordonnées X Y en Lambert93 du cliché (les 4 premières décimales) ce qui représente en faite la coordonnée 760000.0,6400000.0

Pour la Bd-Ortho le principe est le même.

 

Autrement ta modification

(setq folder "C:\Users\Lili2006\Desktop\INSERTION SCAN 25\SCAN 25\\")

n'est pas correcte, il faut penser à doubler les \ (anti-slash)

Ceci serait correct:

(setq folder "C:\\Users\\Lili2006\\Desktop\\INSERTION SCAN 25\\SCAN 25\\")

 

Je pense que cela serais aussi sympa à utiliser avec les planches cadastrales... Image IPB

Là le principe est plutôt avec le numéro INSEE de la commune, la section puis la feuille, donc rien à voir avec les coordonnées. (en tout cas avec le cadastre provenant du format vectoriel EDIGEO) avec le format raster cela reste peut être possible (à voir)

 

Il faudrait peut être envisager un dessin gabarit dans lequel il y aurait par exemple dans le calque "defpoint" (non-imprimable) un texte contenant les infos nécessaires pour identifier la planche à charger.

 

et avec un code de se genre (pour le principe), on pourrait automatiser les chargements.

(defun c:BD_PARCELLAIRE ( / js dxf_ent name-image)
(while (not (setq js (ssget "_+.:E:S" '((0 . "TEXT") (67 . 0) (410 . "Model") (8 . "Defpoints") (62 . 1) (100 . "AcDbText"))))))
(setq dxf_ent (entget (ssname js 0)))
(setq name-image (cdr (assoc 1 dxf_ent)))
(initget "Attacher Détacher _Attach Detach")
(if (eq (getkword "\n[Attacher/Détacher] l'image <Détacher>: ") "Attach")
	(command "_.-image" "_attach" name-image (cdr (assoc 10 dxf_ent)) "1000" "0")
	(command "_.-image" "_detach" (substr name-image (1+ (vl-string-search "BDP_07_" name-image)) 24))
)
(prin1)
)

 

Tu devrais donner un extrait de structure de dossier et du noms des fichiers (comme à fait lili), pour voir si le premier principe est applicable.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

En lisp le caractère "\" est un caractère spécial.

 

Extrait de l'aide à propos de (prin1)

 

\\ \ character

 

\" " character

 

\e Escape character

 

\n Newline character

 

\r Return character

 

\t TAB character

 

\nnn Character whose octal code is nnn

 

Il peut aussi être interprété littéralement comme une pause (surtout dans les macro)

 

En lisp dans les chemins de dossier il faut donc le doubler (1er exemple de l'extrait de l'aide) ou alors, autre possibilité le remplacer par le seul symbole "/" (slash ou diviser en français)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

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é