Pergunta

I have some Clojure code that generates a regular 3D grid of data (voxels). I want to write this to a file that can be later read by Paraview (and, possibly, other analysis/visualisation programs). What is the simplest way to do this? My main priority is simplicity, but I would also like this to also scale well, so that I can use it for large datasets. I do not need to handle anything more complex than a regular grid.

Foi útil?

Solução

Paraview has a "raw" input format, which is simply a sequence of binary values, with X varying fastest, Z slowest. The following Clojure code will write a sequence of doubles in this format:

(defn write-doubles [voxels path]
  "write raw data stream - for paraview x must vary fastest."
  (let [out (java.io.DataOutputStream.
              (java.io.BufferedOutputStream.
                (java.io.FileOutputStream. path)))]
    (dorun (map (fn [v] (.writeDouble out v)) voxels))
    (.close out)))

You can then read this into Paraview by selecting the file (use a .raw extension) and entering the metadata (origin, step, range) for the axes. It's not a great solution - it would be better to have the metadata in the file too - but it's very simple. And it works.

[Note - DataOutputStream generates data in big-endian format]

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top