domlysz / BlenderGIS

Blender addons to make the bridge between Blender and geographic data
GNU General Public License v3.0
7.67k stars 1.35k forks source link

About compatibility with dxf export #7

Open kikislater opened 8 years ago

kikislater commented 8 years ago

Bonjour Dominique,

J'ai une question sur les exports, je souhaiterais exporter en dxf, ce qui est possible dans Blender d'origine (qui produit d'ailleurs un résultat très propre d'un DEM en TIN) mais je perds mon géoréférencement. Du coup, ma question porte sur "comment ça fonctionne" pour réexporter en conservant le géoréfrencement.

Si je me réfère à ça if "Georef X" in scn and "Georef Y" in scn: dx, dy = scn["Georef X"], scn["Georef Y"] else: dx, dy = (0, 0) Le dx et dy correspond au centre de l'objet importé ou centre de la scene ? Je pense que c'est l'objet et du coup je pourrais exporter en DXF géoréférencé en déplaçant mon objet avant de l'exporter grâce à bpy.data.scenes['Scene']['Georef X'] et bpy.data.scenes['Scene']['Georef Y'] que j'ai pu récupéré dans la console python

Du coup un simple déplacement devrait suffir pour que ce soit efficace avec : bpy.ops.transform.translate(value=dx, dy, 0)

J'ai testé dans la console python puis export et ouverture dans Draftsight, ça fonctionne. Il faut que je scripte tout ça maintenant. Serais-tu intéressé pour l'intégrer dans le projet BlenderGIS ?

Cdt,

Sylvain

domlysz commented 8 years ago

Salut Sylvain,

Tu as raison ça n'est au final qu'une simple translation, mais l'interêt n'est pas seulement de ramener le model au centre de la scene.

En effet les coordonnées dans Blender sont codées en float32 ce qui donne en gros une précision de 7 chiffres, or les coordonnées projetées en mètres donnent des nombres élevés qui nécessitent d'être codés en float64. Concretement si une coordonnée ne peut être codée en float32 elle sera arrondie dans Blender d'où une dégradation des données. Souvent ça passe inaperçu mais dans certain cas où les points sont très proches les uns des autres c'est flagrant (j'ai eu le cas avec des courbes de niveau issuent d'un relevé topo qui apparaissaient toutes "saccadées").

Du coup la translation dans Blender avant export n'est pas idéal, les options envisageables : -faire la translation dans Draftsight après import du model -modifier le script d'export dxf pour translater chaque coordonnées au moment de l'écriture du fichier -faire un export shp qui prendra en compte le georef puis réexporter le shp en dxf via QGIS ou OGR (en espérant que l'export prenne en compte le Z)

kikislater commented 8 years ago

Ok merci de la précision, je me souviens avoir eu des problèmes de décalage lorsque je faisais grass => vtk => paraview => ply => modification du mesh. Maintenant je comprends bien le problème, merci. On a une idée si un jour blender sera en float64 ou si ça a été remonté à l'équipe de dev ?

options envisageables : -faire la translation dans Draftsight après import du model => Je penses que c'est le mieux à faire -modifier le script d'export dxf pour translater chaque coordonnées au moment de l'écriture du fichier => Envisageable mais pas forcément le temps en ce moment. Il faudra comparer la fiabilité -faire un export shp qui prendra en compte le georef puis réexporter le shp en dxf via QGIS ou OGR (en espérant que l'export prenne en compte le Z) => Le DXF produit ne sera pas en 3D ...

domlysz commented 8 years ago

Oui le problème est bien connu mais je ne crois qu'il soit prévu d'évolution à moyen terme. Après tout Blender n'a pas vocation à être un outil de précision et j'imagine que basculer en float64 ne doit pas être une mince affaire en + d'avoir un impact important sur l'utilisation mémoire.

kikislater commented 8 years ago

ok merci du retour, je vais quand même aller faire la demande sur le support de Blender

bvgnt commented 8 years ago

Le problème n'est pas cantonné à blender. Quasiment tout les softs ont ce problème hors ceux spécifiquement dédiés. Le mieux, choisir un point avec des coordonnées significatives proche de ton projet et en faire ton origine, ça évitera des bugs inévitable sur les plateforme 3D (BIM, Rhino3D, Max, Blender,...)

kikislater commented 8 years ago

Le shift utilisé par Dominique est très utile, pas besoin de choisir une origine proche, un shift suffit et c'est que j'utilise. Le soucis est le shift à refaire après l'export. Mais depuis la nouvelle librairie libopencad, ça m'évitera d'ouvrir Draftsight pour faire la translation https://github.com/sandyre/libopencad