# Manigraph Manigraph is a cutting-edge tool for multidimentional surface visualization, capable of handling over a hundred dimensions. It allows users to interactively explore each dimension in an intuitive and dynamic way. Import your .klein files, which represents multidimentional surface. # Building Manigraph is written in C99, and uses OpenGL 2.0 for the rendering. So you just need a C compiler to build this project. ## Source code ``` git clone https://gitea.axiolutions.top/software/manigraph.git cd manigraph git submodule update --init --recursive ``` ## Dependecies You may need system specific dependecies to build *Manigraph*. [Reference](https://www.glfw.org/docs/3.3/compile.html#compile_deps) ### Linux - `x11`: libXcursor-devel libXi-devel libXinerama-devel libXrandr-devel - `wayland`: libwayland-dev libxkbcommon-dev wayland-protocols ## Commands A C compiler is needed for building *Manigraph*. and any of those commands ``` make windows ./compile.bat make linux-x11 make linux-wayland make cocoa make CC=emcc wasm ``` # Flow of Manigraph ![Flow of Manigraph](doc/flow.svg) # Design Manigraph is a program designed with sustainability in mind. It is built to be portable, resource-efficient, and easy to maintain and scale. The program follows a Data-Oriented Programming (DOP) paradigm, where each file is responsible for a specific data type and manages its own dependencies. Each function is named after the file it resides in, ensuring a clear organization and structure. The independence of data types allows for efficient scaling and maintenance. The main file is a special case in this design: it is responsible for combining all the data types in a comprehensive manner, actng as the workflow of the program. # Contributing Before commiting use `clang-format`, for coding style consistency. Your contribution must be whitin the design principles and the concept of Manigraph. The following diagram illustrates the relationships between files, showing how they are connected through dependencies. It also highlights the scenarios where files are not independent of one another, ![File layout](doc/file_layout.svg)