import & insertion d'une image non référencée
Bonjour à Tous,
A force de chercher de façon marginal sur le net les éléments qui me manquent dans mes compétences de pseudo-programmateur, je vous poste le problème de mon lisp:
Il s'agit de lire un fichier txt avec un certain nombre de paramètres qui serviront à renseigner les champs lors de l'insertion du mon image (ie point de base, facteur d'échelle, rotation X,Y,Z). Le paramètre manquant dans ce header est la résolution en pixel de l'image associée au txt (ils ont le même nom, l'extension change).
Ce lisp, s'il fonctionne, traite un répertoire, donc batch une série de txt & png associés.
Attention: je parts d'un dwg vierge, l'objectif est d’insérer des images pas encore référencées (aucune référence externe avant exécution du lisp).
Mon problème est donc dans la récupération de la résol de l'image avant de l'insérer, car c'est ainsi que je calcule son échelle d'insertion.
Mon soucis, dans le code, est que les commandes vla ne référencent que les objets déjà insérer dans le dwg. Si je récupère un fichier (getfiled), comment récupérer une métadonnée du fichier (largeur en pixel ?).
. Merci d'avance !
Re: import & insertion d'une image non référencée
Je ne crois pas qu'un lisp pourra "lire" la résolution d'une image avant l'insertion, ni après d'ailleurs. La langue de programmation qui pourrait peut-être le faire est le VBA. Autrement plus complexe, mais aussi plus puissant.
Re: import & insertion d'une image non référencée
Bonjour,
En 98, j'avais écris quelques lignes pour faire un truc similaire.
C'étaient des images .TIF auxquelles correspondait des fichiers en Ascii (à l'extension .HDR et avec nom identique à l'image)
Ce bout de code m'insérait toutes les images du dossier, géo-référencées avec les donnée du fichier HDR.
Bien que le code que je vais te livrer ne fonctionnera pas tel quel, il pourra être une base de départ pour résoudre la lecture de tes fichiers txt.
Code:
(defun espa (chn / )
(while (eq (substr chn 1 1) " ")
(setq chn (substr chn 2))
)
(while (/= (substr chn 1 1) " ")
(if (eq (substr chn 1 1) "")
(setq chn '" ")
(setq chn (substr chn 2))
)
)
)
(defun c:Scan100_Attach ( / select_file file_open line_read)
(setq select_file (getfiled "Sélection d'un fichier HDR : " "" "HDR" 2))
(cond
(select_file
(setq file_open (open select_file "r"))
(setq line_read (read-line file_open))
(while line_read
(set (read line_read)
(if (or (eq (type (read (espa line_read))) 'REAL) (eq (type (read (espa line_read))) 'INT))
(read (espa line_read))
nil
)
)
(setq line_read (read-line file_open))
)
(close file_open)
(if (and ULXMAP ULYMAP XDIM YDIM)
(command "_.-image" "_attach" (strcat (vl-string-right-trim "hdr" select_file) "tif") (list ULXMAP (- ULYMAP (* YDIM NROWS))) (* XDIM YDIM) 0.0)
)
)
)
(prin1)
)
Je te donne aussi le contenu pour exemple d'un fichier HDR pour pouvoir comprendre le fonctionnement du code fourni.
Quote:
!+
!+--------------------------
!+ HDR/A : Image Information
!+--------------------------
!+
DELTA_X_ORIGIN 0.00 M
DELTA_Y_ORIGIN 0.00 M
MAPUNITS METERS
ULXMAP 760000.00000 M
ULYMAP 1920000.00000 M
XDIM 10.00000 M
YDIM 10.00000 M
NROWS 3000
NCOLS 4000
NBANDS 0
!+
!+-----------------------------
!+ HDR/B : Frame Corner Support
!+-----------------------------
!+
NW_X_PIXEL 0.000
NW_Y_PIXEL 0.000
NE_X_PIXEL 0.000
NE_Y_PIXEL 0.000
SW_X_PIXEL 0.000
SW_Y_PIXEL 0.000
SE_X_PIXEL 0.000
SE_Y_PIXEL 0.000
!+
!+----------------------
!+ HDR/C : File Encoding
!+----------------------
!+
NBITS 0
BYTEORDER I
SKIPBYTES 0
RECORDSKIPBYTES 0
BANDROWBYTES 0
TOTALROWBYTES 0
LAYOUT BIL
!+
!+---------------------------------------------
!+ HDR/D : Reserved Values Support and Coloring
!+---------------------------------------------
!+
BAND_RGB 1 2 3
N_RESERVED_VALUES 0
!+
!+------------------------
!+ HDR/E : More Parameters
!+------------------------
!+
COSINUS 1.000000
SINUS 0.000000
RESOLUTION_H 254.00 DPI
RESOLUTION_V 254.00 DPI
PROJECTION LAMBERT2
Re: import & insertion d'une image non référencée
Quote:
le VBA. Autrement plus complexe, mais aussi plus puissant.
À mon avis, pure légende, excepté pour les boites de dialogue (et encore, ce n'est plus vrai avec ObjectDCL ou OpenDCL).
VBA utilise l'interface COM Automation qui est aussi accessible en LISP donc on a les même possibilités.
À moins que tu ne veuilles parler de .NET...