hello à tous,
je cherche à réaliser ce tuto : http://cgi.tutsplus.com/tutorials/mapping-dem-data-in-cinema-4d--cms-23158
mais je ne trouve pas de fichier .DEM
je suis aller sur ce site : http://www.data.gouv.fr/fr/datasets/bd-alti-75m/
où j'ai télécharger le .asc .....mais dedans je n'ai que du .md5
où puis je trouver des .dem tel que dans le tuto
merci à vous
personne pour me répondre!!!
http://data.geocomm.com/dem/
cette adresse vient directement d'une discussion sur le forum
C4D R18 Studio Tout dépend de l'endroit où on se place par rapport à l'idée qu'on s'en fait!
merci à toi mais c'est aussi celle du tuto que j'ai regardé et dont je parle ...sauf qu'on ne trouve que des données US et pas française
Salut,
Cinema4D est capable de lire le format dem qui est utilisé par les américains. En Europe on utilise plutôt le format ascii (.asc) que malheureusement Cinema4d ne lit pas. Je te donne ci-dessous un script qui te permettra de lire ce type de fichier. Tu trouveras ces fichier dans ton téléchargement IGN (ton lien : http://www.data.gouv.fr/fr/datasets/bd-alti-75m/) dans le dossier BDALTIV2_MNT_75M_ASC_LAMB93_IGN69_FRANCE.
Attention le script passe automatiquement ton document en mètre et la limite de la vue en énorme (options de document ctrl+D) et je n'ai pas mis d'annulation. Le script ne gère pas la position des tuiles les unes par rapport aux autres, mais si tu en a besoin je peux t'expliquer ou voir compléter le script...
Mode d'emploi : exécuter le script et choisir un fichier .asc
code à coller dans le gestionnaire de scripts après avoir fait fichier/nouveau dans le menu du gestionnaire de scripts
Code PHP:
# -*- coding: utf-8 -*-
import c4d,re
import os.path
#pour savoir si on est sur windows pour le codage des chemins de fichiers
WIN = c4d.GeGetCurrentOS()==c4d.OPERATINGSYSTEM_WIN
def polygonise(obj,nb_rows,nb_cols):
id_poly = 0
id_pt = 0
for r in xrange(nb_rows):
for c in xrange(nb_cols):
if c < (nb_cols-1) and r < (nb_rows-1):
try :
obj.SetPolygon(id_poly,c4d.CPolygon(id_pt,id_pt+nb_cols,id_pt+1+nb_cols,id_pt+1))
except : print id_poly,'->', (id_pt,id_pt+nb_cols,id_pt+1+nb_cols,id_pt+1)
id_poly+=1
id_pt+=1
def main():
doc = c4d.documents.GetActiveDocument()
#DOCUMENT EN METRE - Limite de la vue -> énorme
data = doc[c4d.DOCUMENT_DOCUNIT]
data.SetUnitScale(1,c4d.DOCUMENT_UNIT_M)
doc[c4d.DOCUMENT_DOCUNIT]=data
doc[c4d.DOCUMENT_CLIPPING_PRESET] = c4d.DOCUMENT_CLIPPING_PRESET_HUGE
fn = c4d.storage.LoadDialog()
if not fn : return
if not os.path.splitext(fn)[1] == '.txt' and not os.path.splitext(fn)[1] == '.asc' :
c4d.gui.MessageDialog("Ce n'est pas un fichier de terrain (.txt ou .asc)")
return
#pour windows on encode en cp1252
if WIN : fn = fn.decode('utf-8').encode('cp1252')
name = os.path.basename(fn).split('.')[0]
nb = 0
header = {}
#lecture de l'entête pour savoir si on a 5 ou 6 lignes ( il y a des fichiers qui n'ont pas la ligne nodata)
with open(fn,'r') as file:
while 1:
s = file.readline()
if re.match(r'^[0-9]',s) or re.match(r'^-',s) : break
split = s.split()
if(len(split))>2: break #rajouté car avec QGis on dirait que les lignes commencent de toute façon par un un espace
k,v = split
header[k.lower()] = v #QGIS met le NODATA_value en partie en majuscule !!!
nb +=1
cellsize = float(header['cellsize'])
ncols = int(header['ncols'])
nrows = int(header['nrows'])
xcorner = float(header['xllcorner'])
ycorner = float(header['yllcorner'])
nodata = 0.
if nb == 6 : nodata = float(header['nodata_value'])
#lecture des altitudes
with open(fn,'r') as file:
#on saute l'entête
for i in xrange(nb): file.readline()
nb_pts = ncols*nrows
nb_poly = (ncols-1)*(nrows-1)
poly = c4d.PolygonObject(nb_pts,nb_poly)
poly.SetName(name)
origine = c4d.Vector(xcorner,0,ycorner+nrows*cellsize)
pos = c4d.Vector(0)
i=0
for r in xrange(nrows):
for val in file.readline().split():
y = float(val)
if y == nodata: y=0.0
pos.y = y
poly.SetPoint(i,pos)
pos.x +=cellsize
i+=1
pos.x=0
pos.z-=cellsize
polygonise(poly,nrows,ncols)
poly.Message(c4d.MSG_UPDATE)
doc.InsertObject(poly)
c4d.CallCommand(12148) # Zoom sur la scene
c4d.EventAdd()
if __name__=='__main__':
main()
Salut à tous,
j'ai besoins d"intégrer un fichier de topographie ASC à une créa.
J'ai essayé le script de Oli_d mais cela ne fonctionne pas. Il me passe bien la doc en m avec la limite de vue en énorme mais je n'ai pas d'objet ds le gestionnaire ni rien à l'écran.
Je suis sous mac, est-ce que cela peut poser un problème ? j'ai vu ds les commentaires du scripts qu'il y avait pas mal d'infos par rapport a l'OS.
Une âme charitable ?
Merci à tous.
Salut,
C'est un peu difficile de répondre comme ça, il faudrait que tu me transmettes la console (menu script/console, sous r20 ligne python sur la gauche de la console) le message d'erreur. Sinon ce qui m'aiderait, c'est soit le fichier complet si il n'est pas trop lourd et confidentiel, soit juste l'entête et les premières altitudes qui ressemble à ça (tu peux ouvrir le fichier sur n'importe quel éditeur de texte):
Je ne pense pas que ça vienne du mac. je suis également sur mac ...Code:ncols 226 nrows 341 xllcorner 2498990.5 yllcorner 1113441 cellsize 0.5 421.60501098632813 421.59600830078125 421.59100341796875...
... sinon après réflexion cela doit venir d'un entête à 7 lignes où on a deux valeur pour les cellules en x et en y.
Dis-moi juste si dans l'entête il y a deux lignes dx et dy ...
Merci Oli_d,
voici le message d'erreur que j'ai ds la console :
Et sinon, je peux t'envoyer le .asc sans problème, c'est un de test :Traceback (most recent call last):
File "/Users/geoffrey/Library/Preferences/MAXON/Cinema 4D R20_7DE41E5A/library/scripts/Fichier .ASC.py", line 101, in <module>
main()
File "/Users/geoffrey/Library/Preferences/MAXON/Cinema 4D R20_7DE41E5A/library/scripts/Fichier .ASC.py", line 59, in main
xcorner = float(header['xllcorner'])
KeyError: 'xllcorner'
https://www.dropbox.com/s/6k7xviym7i...IGN69.asc?dl=0
alors en fait dans l'entête de ton fichier asc les lignes qui s'appellent normalement xllcorner et yllcorner s'appellent xllcenter et yllcenter.
Donc soit tu changes les deux noms dans le code ou alors dans l'entête de ton fichier asc ...
C'est pour le calage géographique, dans tous les fichiers que je connais c'est normalement les coordonnées du coin en haut à gauche, dans ton cas je pense que cela doit être le centre du modèle numérique
Dernière modification par oli_d ; 02/04/2019 à 15h35.
En fait dans ton modèle de terrain tu as une majorité de points "non renseignés". Si tu ouvres ton fichier avec un éditeur de texte c'est tous les points -99999. Mon script met ces points à 0, tu peux le changer à la ligne if y == nodata: y=0.0 en changeant le 0.0.
Dans ton modèle seul le petit triangle au premier plan contient des altitudes (négatives d’ailleurs) avec très peu de différences entre elles. Essaie de changer l'échelle en y de l'objet en mettant 10 ou 100 et tu verras mieux ces différences. Mais cette tuile contient vraiment très peu d'informations ...
Ok, encore merci Oli-d.
Je vais essayer plutot avec un autre ASC.
++