Self-contained C++ interface for the MeshCat visualizer.
meshcat-cpp took (heavy) inspiration for C++ (drake) MeshCat interface extensively discussed here. The main purpose of this package is to have an independent (self-contained) C++ library that exposes the MeshCat interface in C++.
🚧 REPOSITORY UNDER DEVELOPMENT 🚧
The library implemented in this repository is still experimental and we cannot guarantee stable API
meshcat-cpp is a self-contained library. Most dependencies can be cloned at compile time and they are statically linked to the library. The only dependencies you need is a sufficiently recent C++ compiler (full support to C++20), cmake
, openssl
, zlib
, libuv
, boost
and pkg-config
.
sudo apt install cmake pkg-config build-essential ninja-build git libssl-dev libuv1-dev libz-dev libboost-dev
mamba create -n meshcatcppdev boost-cpp libuwebsockets cmake pkg-config compilers zlib openssl libuv msgpack-cxx
Then, execute all the other commands after activating the environment:
mamba activate meshcatcppdev
You can build the library coping and paste the following snippet into a terminal
git clone https://github.com/GiulioRomualdi/meshcat-cpp.git
cd meshcat-cpp
mkdir build && cd build
cmake ..
cmake --build .
[sudo] make install
meshcat-cpp provides native CMake
support which allows the library to be easily used in CMake
projects. Please add in your CMakeLists.txt
project(foo)
find_package(MeshcatCpp REQUIRED)
add_executable(${PROJECT_NAME} src/foo.cpp)
target_link_libraries(${PROJECT_NAME} MeshcatCpp::MeshcatCpp)
Differently for the python, julia, and C++ (drake) interfaces this interface currently supports only a subset of functionalities (🚧 New functionalities will be soon implemented). The following example shows you how to display some primary shapes.
#include <MeshcatCpp/Material.h>
#include <MeshcatCpp/Meshcat.h>
#include <MeshcatCpp/Shape.h>
MeshcatCpp::MatrixView<double> array_to_matrix_view(std::array<double, 16>& array)
{
constexpr MeshcatCpp::MatrixView<double>::index_type rows = 4;
constexpr MeshcatCpp::MatrixView<double>::index_type cols = 4;
constexpr auto order = MeshcatCpp::MatrixStorageOrdering::ColumnMajor;
return MeshcatCpp::make_matrix_view(array.data(), rows, cols, order);
}
int main()
{
MeshcatCpp::Meshcat meshcat;
MeshcatCpp::Material m;
std::array<double, 16> transform = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
auto matrix_view = array_to_matrix_view(transform);
m.set_color(66, 133, 244);
meshcat.set_object("box", MeshcatCpp::Box(0.5, 0.5, 0.5), m);
matrix_view(3, 1) = 1.75;
meshcat.set_transform("box", matrix_view);
m.set_color(234, 67, 53);
meshcat.set_object("sphere", MeshcatCpp::Sphere(0.5), m);
matrix_view(3, 1) = 0.75;
meshcat.set_transform("sphere", matrix_view);
m.set_color(251, 188, 5);
meshcat.set_object("ellipsoid", MeshcatCpp::Ellipsoid(0.5, 0.25, 0.75), m);
matrix_view(3, 1) = -0.75;
meshcat.set_transform("ellipsoid", matrix_view);
m.set_color(52, 168, 83);
meshcat.set_object("cylinder", MeshcatCpp::Cylinder(0.25, 0.5), m);
matrix_view(3, 1) = -1.75;
meshcat.set_transform("cylinder", matrix_view);
meshcat.join();
return 0;
}
Once you have run the example, the MeshcatCpp::Meshcat
class will print the URL
at which the MeshCat server runs. Please open the link in your browser and you should be able to see the following screen
All types of issues are welcome.
Materials in this repository are distributed under the following license:
All software is licensed under the BSD 3-Clause "New" or "Revised" License. See LICENSE file for details.