The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

README

Gregory Jefferis

dracor

R-CMD-check Codecov test coverage GitHub CRAN status Downloads

The goal of dracor is to allow decoding of the Draco compressed meshes in R. This is done by wrapping the Draco C++ decoding library with the assistance of the Rcpp package.

The original motivation for dracor was decoding neuroglancer meshes of neurons for example as used by https://flywire.ai/.

Installation

dracor is available from CRAN:

install.packages('dracor')

but you can also install the development version like so:

remotes::install_github("natverse/dracor")

Example

This is a basic example using a sample from the draco repository

library(dracor)
# get sample file from draco repository
carurl='https://github.com/google/draco/blob/master/testdata/car.drc?raw=true'
car.m3d=dracor::draco_decode(carurl)
str(car.m3d)
#> List of 2
#>  $ vb: num [1:4, 1:1856] 1.54 1.65 -1.21 1 1.57 ...
#>  $ it: int [1:3, 1:1744] 1 2 3 3 2 4 4 2 5 5 ...
#>  - attr(*, "class")= chr [1:2] "mesh3d" "shape3d"

rgl is the most widely used R package for 3D visualisation. By default we return meshes as rgl mesh3d objects, which can then be displayed by rgl or manipulated by a range of R packages including Rvcg.

# install.packages("rgl")
# convert to rgl mesh3d format
# set a nice viewpoint
rgl::shade3d(car.m3d, col='red')
rgl::view3d(theta = 60, fov=0, zoom=.7)

Some details

dracor is deliberately intended as a minimal decoder package without any dependencies besides the Rcpp package. It accepts raw bytes, a file or a URL as input and can produce either an rgl mesh3d object as output or a list containing points and 0-indexed faces. It essentially replicates the most basic decoding ability of the draco_decoder command line tool.

If you just want a result as close as possible to what the Draco library would give then set mesh3d=FALSE

car.m=dracor::draco_decode(carurl, mesh3d=FALSE)
str(car.m)
#> List of 2
#>  $ points: num [1:3, 1:1856] 1.54 1.65 -1.21 1.57 1.77 ...
#>  $ faces : int [1:3, 1:1744] 0 1 2 2 1 3 3 1 4 4 ...

Acknowledgements

Many thanks to the authors of:

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.