Skip to content

natverse/dracor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

4cea2da · Feb 1, 2023

History

91 Commits
Feb 1, 2023
Jul 22, 2020
Jan 11, 2023
Jul 22, 2020
Jan 17, 2023
Jan 29, 2023
Jul 22, 2020
Jan 19, 2023
Aug 8, 2020
Oct 7, 2020
Jan 29, 2023
Jul 18, 2020
Jul 22, 2020
Jan 29, 2023
Jan 17, 2023
Jan 17, 2023
Aug 8, 2020
Jan 12, 2023
Jan 29, 2023
Jan 29, 2023

Repository files navigation

title author output
README
Gregory Jefferis
html_document
keep_md
true

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: