[
    {
        "Variant name": "main",
        "Reviewer name": "Nicolas Bonneel <nicolas.bonneel@liris.cnrs.fr>",
        "Is master variant (boolean)": true,
        "Is variant deprecated (boolean)": false,
        "Title": "PiGraphs: Learning Interaction Snapshots from Observations",
        "DOI": "10.1145/2897824.2925867",
        "Year": 2016,
        "ACM Keywords": [
            "Spatial and physical reasoning",
            "Computer graphics"
        ],
        "Topic {Rendering, Animation and Simulation, Geometry, Images, Virtual Reality, Fabrication}": "Geometry",
        "Co-authors from academia (boolean)": true,
        "Co-authors from industry (boolean)": false,
        "ACM Open Access (boolean)": false,
        "PDF on the authors' webpage / institution (boolean)": true,
        "PDF URL": "https://graphics.stanford.edu/projects/pigraphs/pigraphs.pdf",
        "PDF on Arxiv or any openarchive initiatives (boolean)": false,
        "Arxiv/OAI page URL": "",
        "Project URL": "https://graphics.stanford.edu/projects/pigraphs/",
        "Code available (boolean)": true,
        "If code not available, pseudo-code available (boolean)": false,
        "If pseudo-code, could the paper be trivially implemented? {0..4}": "",
        "Code URL": "https://github.com/msavva/pigraphs/",
        "Code URL2": "http://aspis.cmpt.sfu.ca/falas_datasets/etherion_backup/data/pigraphs/pigraphs.vhd.bz2",
        "MD5 sum (for archives)": "",
        "git/hg/svn commit hash or revision number": "ee794f3acef4eac418ca0f69bb410fef34b99246",
        "MD5 sum (for archives) URL2": "",
        "git/hg/svn commit hash or revision number URL2": "",
        "Software Heritage permalink": "https://archive.softwareheritage.org/swh:1:rev:ee794f3acef4eac418ca0f69bb410fef34b99246;origin=https://github.com/msavva/pigraphs//",
        "Software type {Code, Binary, Partial Code}": "Code",
        "Code License (if any)": "MIT",
        "Are the code authors explicit? (boolean)": false,
        "Build/Configure mechanism": "IDE Project (VS,..)",
        "Dependencies": "DirectX / Java JNI / ANN / AntTweakBar / Boost / CGAL / flann / FreeImage / FW1FontWrapper / GMP / MPFR / OpenCV / Zlib / szip",
        "Does the software require paywall/proprietary software/material (boolean)?": false,
        "Does the code need data (not examples) (boolean)": true,
        "Nature of the data (pretrained model, LUT...)": "Training data",
        "License of the data": "",
        "Able to perform a replicability test (boolean)": true,
        "If not able to perform a test, was it due to missing hardware/software? (boolean)": false,
        "Documentation score {0=NA,1,2,3}": 2,
        "Dependencies score {0=NA, 1,2,3,4,5}": 1,
        "Build/configure score {0=NA, 1,2,3,4,5}": 2,
        "Fixing bugs score (if any) {0=NA, 1,2,3,4,5}": 1,
        "Replicate paper results score {0=NA, 1,2,3,4,5}": 5,
        "Adaptability score to other contexts {0=NA, 1,2,3,4,5}": 3,
        "Time spent for the test (code download to first successful run, [0,10], 10min slots, 100min max)": 10,
        "Operating system for the test": "Windows",
        "Build instructions/comments": "Using the Virtual Machine provided by the authors, everything ultimately worked, and I managed to at least see the interactions. The interface is not documented at all and quite complex though, so I am not sure what I was doing - some buttons make the program crash. Also, beware the licence for Visual Studio in the VM has expired, and since this is not a free Visual Studio version, you need a licence to be able to recompile from the VM (or reinstall free versions of Visual Studio within the VM).\n\nBut getting there was a challenge.\n\nFirst, I tried to compile the code directly on my machine (on Windows, with VS2017 and Java JDK 13.0.1 instead of the old proposed JDK 8). I had to perform an number of steps and fixed a number of issues :\n\n\n- you need to set the JAVA_HOME environment variable to your java install, e.g., C:\\Program Files\\Java\\jdk-13.0.1\\\n- you need to add boost to the VS project includes (I tried with boost 1.70.0)\n- you need to download mLib and mLibExternal from the provided links and extracted them in the root of pigraphs\n- you need to download the 35GB of data.\n\n- in JACE/Integer.cpp line 399, replace  \nsetJavaJniObject(object); \nby  \nsetJavaJniObject(object.getJavaJniClass().getClass());\nSame thing for Exception.cpp (line 87), Throwable (line 143), IOException (l.90), Collection (l.144), Number (l.100), List (l.200), AbstractList (l.135), AbstractCollection (l.138), ArrayList (l.230), String (l.591 and 612) in their respective files.\n\n- in String.cpp, line 619 replace \njstring thisString = static_cast<jstring>(static_cast<jobject>(*this));\nby \njstring thisString = static_cast<jstring>(static_cast<jobject>(String(*this)));\n\n- in libsg/core/synth/InteractionScorer.h, add : #include \"../ModelInstance.h\"  \n\n- in mlibExternal/include/cgal/segment_3.h, lines 101, 104, 107, 110, and 114 replace\n  typename cpp11::result_of<typename R::Construct_min_vertex_3(Segment_3)>::type\n  by\n  typename cpp11::result_of<typename R_::Construct_min_vertex_3(Segment_3)>::type\n  \n- in mlibExternal/include/cgal/segment_2.h, lines 104, 107, 110, 113, and 116, replace  \n  typename cpp11::result_of<typename R::Construct_min_vertex_2( Segment_2)>::type\n  by\n  typename cpp11::result_of<typename R_::Construct_min_vertex_2( Segment_2)>::type\n  \n- in libsg/vis/vislog.cpp, line 47, replace \n  m_records.push_back({now, desc, images});\n  by \n  m_records.push_back({uint64_t(now), desc, images});\n  \n- in libsg/core/LabeledGrid.cpp, line 99, replace\n    voxels[i] = { coords.x, coords.y, coords.z, label };\n\tby\n\t    voxels[i] = { int16_t(coords.x), int16_t(coords.y), int16_t(coords.z), int16_t(label) };\n\n- in mLibExternal/include/Eigen/src/core/util/Macros.h , line 309 replace \n#if defined(_MSC_VER) && (!defined(__INTEL_COMPILER))\nby\n#if defined(_MSC_VER)  && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER))\n\n* There is a number of issues due to move constructors overriding copy constructors (the copy constructor thus appears deleted), and similarly for operator-, which can be solved like :\n- in JACE/JArray.h, line 445, add a const operator- between iterators (for std::copy to work):\n\t\tIterator operator-(const Iterator &i) const {\n#ifdef JACE_CHECK_ARRAYS\n\t\t\tif (current - i.current < 0)\n\t\t\t\tthrow ::jace::JNIException(\"[JArray::Iterator::operator-] can not rewind iterator out of bounds.\");\n#endif\n\n\t\t\tIterator it(*this);\n\t\t\tit.current -= i.current;\n\t\t\treturn it;\n\t\t}\n\n- in mLib/include/core-mesh/material.h line 19, add:\nMaterial(const Material& m) = default;\nMaterial& operator=(const Material& m) = default;\n\n- in mlib/include/core-mesh/meshdata.h, line 427, add the following functions:\n\tMeshData(const MeshData& d) = default;\n\tMeshData& operator=(const MeshData& d) = default;\n\n* There is a number of issues due to vectors of const objects, which is forbidden since C++11. This can be fixed tediously and with some ugly const_cast:\n\n- in libsg/segmentation/Segmentator.cpp, line 184, replace\nvec<SegIndices> Segmentator::segment(const vec<const ml::TriMeshf>& meshes) {\nby\nvec<SegIndices> Segmentator::segment(const vec<ml::TriMeshf>& meshes) {\nand similarly in Segmentator.h line 58.\n\n- in libsg/core/Skeleton.h, line 466, replace \nstd::shared_ptr<const Skeleton> m_skel = nullptr;\nby\nstd::shared_ptr<Skeleton> m_skel = nullptr;\n\nand line 404, replace \nexplicit TransformedSkeleton(std::shared_ptr<const Skeleton> pSkel,\nby\nexplicit TransformedSkeleton(std::shared_ptr<Skeleton> pSkel,\n\nand line 408, replace \nTransformedSkeleton(const Skeleton& _skel, const ml::mat4f& _transform)\nby\nTransformedSkeleton(Skeleton& _skel, const ml::mat4f& _transform)\n\nand line 409, replace:\n    : m_skel(util::ptr_to_shared<const Skeleton,const Skeleton>(&_skel))\nby\n    : m_skel(util::ptr_to_shared<Skeleton,Skeleton>(&_skel))\n\t\n- in libsg/core/learningUtil.cpp, line 561, replace\nconst TransformedSkeleton tSkel(skel, ml::mat4f::identity());\nby\nconst TransformedSkeleton tSkel(const_cast<Skeleton&>(skel), ml::mat4f::identity());\n\n- in libsg/interaction/InteractionSet.cpp, line 168, replace \nTransformedSkeleton normalizedSkeleton(s, xform);\nby\nTransformedSkeleton normalizedSkeleton(const_cast<Skeleton&>(s), xform);\n\n- in libsg/core/learningUtil.cpp, line 115, replace\ntSkels.push_back(TransformedSkeleton(*skelInter.first, ml::mat4f::identity()));\nby\ntSkels.push_back(TransformedSkeleton(const_cast<Skeleton&>(*skelInter.first), ml::mat4f::identity()));\n\n- in libsg/core/learningUtil.cpp, line 135, replace\n      return std::make_pair(TransformedSkeleton(*x.first.getOriginalSkeleton(), perturbation), Dataset<TransformedSkeleton>::Label_NEG);\nby\n      return std::make_pair(TransformedSkeleton(const_cast<Skeleton&>(*x.first.getOriginalSkeleton()), perturbation), Dataset<TransformedSkeleton>::Label_NEG);\n\t  \n\t \n- in libsg/core/learningUtil.cpp, line 158, replace\n      tSkels.push_back(TransformedSkeleton(*skelInter.first, ml::mat4f::identity()));\n by\n\t  tSkels.push_back(TransformedSkeleton(const_cast<Skeleton&>(*skelInter.first), ml::mat4f::identity()));\n  \n- in libsg/interaction/InteractionSet.cpp, line 93, replace\n        sampledSkeletons.emplace_back(s, xform);\nby\n        sampledSkeletons.emplace_back(const_cast<Skeleton&>(s), xform);\t\t\n\t\t\n- in core/synth/SkeletonPoser.cpp line 452, replace:\n std::shared_ptr<const Skeleton> pSkel = std::make_shared<const Skeleton>(p.first);\nby\n std::shared_ptr<Skeleton> pSkel = std::make_shared<Skeleton>(p.first);\n  \n- in libsg/core/Database.h, line 24, replace\ntypedef map<const Skeleton*, vec<const InteractionRecord>> SkeletonToInteractionsMap;\nby\ntypedef map<const Skeleton*, vec<InteractionRecord>> SkeletonToInteractionsMap;\n\n- in libsg/interaction/InteractionMap.h, line 56, replace:\nconst Skeleton modelSkel = core::TransformedSkeleton(skel, worldToModelML).getSkeleton();\nby\nconst Skeleton modelSkel = core::TransformedSkeleton(const_cast<Skeleton&>(skel), worldToModelML).getSkeleton();\n\n* You need to install DirectX 10 with the proposed link. However, first you need to uninstall Visual C++ 2010 x86 and x64 redistribuables from Windows otherwise the install fails.\n\n* At this point, the C++ code compile. But I got stuck to in the instructions for the Java part, as the explanations are very limited, and require knowledge of ANT, JavaApps, SceneGrok, Jace, WekaUtil, IntelliJ IDEA, and Maven. I know none of them, and the informations provided are not sufficient to build the project. This is apparently a known issue ( https://github.com/msavva/pigraphs/issues/5 ).\n\n* I falled back to installing the VM. The VM is a 70GB bz2 file, and is stored on a moderately fast server (it took me about 34 hours to download the VM with a fast connection ; this is about 600KB/s). I thought the file was corrupted as 7zip could not extract it, so I downloaded the VM 3 times in total, with 2 different computers and internet connections. It happens that 7zip just cannot extract such big files, but bzip2 can.\n\nFinally, to run the VirtualBox, you need to deactivate Hyper-V and the Ubuntu for Windows feature, otherwise VirtualBox produces an error.",
        "Misc. comments": "",
        "Software language": "C/C++, Other"
    }
]