# T-SPLINE **Repository Path**: stoneold/T-SPLINE ## Basic Information - **Project Name**: T-SPLINE - **Description**: No description available - **Primary Language**: C++ - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-04 - **Last Updated**: 2024-03-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: cad, tspline ## README # T-SPLINE T-SPLINE Library. Contact: xiaowenlei@buaa.edu.cn ## 1. INTRODUCTION ### 1.1 Overview T-SPLINE -- A T-spline object oriented package in C++ Copyright (C) 2015- Wenlei Xiao The T-SPLINE Library is an ***OPEN SOURCE***, ***EASY TO UNDERSTAND***, ***EASY TO COMPILE***, and ***EASY TO USE*** C++ package for T-spline. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Report problems and direct all questions to: Wenlei Xiao, Associate Professor
School of Mechanical Engineering and Automation
Beihang University
D-315, New Main Building,
Beijing, P.R. China, 100191
email: xiaowenlei@buaa.edu.cn ### 1.2 History & Credits Developing History: - 2015.03: Wenlei Xiao started the project; - 2016.01: Wenlei Xiao released the first version of T-SPLINE Library; - 2016.01: Yazui Liu joined the team; - 2016.03: Yazui Liu rewrite the rhino tsm parser from matlab to c++; - 2016.04: Wenlei Xiao and Yazui Liu added projects: tsm2stl, tsm2obj, tsm2dxf and tsm2stp; - 2016.04: Oleksandr Zavalnyi joined the team; - 2016.05: Oleksandr Zavalnyi added projects: tsm2gpl and viewer; - 2016.06: Yazui Liu added OpenMP to support more efficient tessellation; - 2016.10: Wenlei Xiao and Yazui Liu added the analytical and matrix forms of basis functions; - 2016.10: Lorenz Lechner from TU Graz, Austria added the python bindings; - 2016.10: Yazui Liu and Oleksandr Zavalnyi rewrite the viewer based on GLC Player; - 2016.12: Wenlei Xiao suggested and Yazui Liu developed the Matrix-like mesh data structure; - 2017.02: Oleksandr Zavalnyi developed the Andriod viewer for T-SPLINE (https://github.com/RubykoAlex/T-spline-android-viewer); - 2017.02: Jia Zhang joined the team; - 2017.11: Xinjie Zhang joined the team; - 2018.02: Xinjie Zhang rewrite the tessellator; Acknowledgements: T-SPLINE has been developed for more than one year. Beside the developers, I wish to thank and acknowledge the contributions of the following group of people: - Gang Zhao: He helped to define the terms of new data structures and promoted the idea of T-mapper. - Rui Li: He gave many advices on the T-spline thoery during the development; - Wei Wang: He had the first discussion with me on the efficiency and complexity of T-spline; ### 1.3 Citation It is recommended to cite our article, if the source code can help you: Reconsideration of T-spline data models and their exchanges using STEP. Computer-Aided Design, 2016, 79, 36-47. @article{Xiao201636, title = "Reconsideration of T-spline data models and their exchanges using \{STEP\} ", journal = "Computer-Aided Design ", volume = "79", number = "", pages = "36 - 47", year = "2016", note = "", issn = "0010-4485", doi = "http://dx.doi.org/10.1016/j.cad.2016.06.004", url = "http://www.sciencedirect.com/science/article/pii/S0010448516300616", author = "Wenlei Xiao and Yazui Liu and Rui Li and Wei Wang and Jianmin Zheng and Gang Zhao", keywords = "T-spline", keywords = "Data model", keywords = "STEP", keywords = "Data exchange " } ## 2. HOW TO UNDERSTAND T-spline is a new approach to define freeform surfaces with relatively less control points than NURBS and is able to represent a model using a single surface without joining errors. Whereas, the complexity of T-spline data models leads numerous difficulties in its programming, which hinders the research and development of T-spline technologies. Here, the T-SPLINE kernel gives a set of redesigned data models which have much more understanding conveniences to both human and computer. For more detail information, please refer to our article[1]. ## 3. HOW TO BUILD To build and compile the T-SPLINE library, CMake tools have to be used. ### 3.1. BUILDING on Windows systems: - Run CMake; - Specify the source code and binary directories (fill the corresponding entries with value "../SOURCE_DIRECTORY" or drag the "CMakeLists.txt" file); - Press Configure button, set up the Generator settings(choose the Microsoft Visual C++ (MSVC) version); - After configuring done few options can be chosen: BUILD_DOCUMENTATION (allows to generate gocumentation): (Doxygen tool is required to use this option); CMAKE_INSTALL_PREFIX(define the directory where "*.lib" files and header files will be generated); OpenMP (allows to activate multiprocessing): . - Press Generate button(it will generate all the binary files in the SOURCE_DIRECTORY); - Open tspline.sln file in MSVC and build the solution; - To generate "*.lib" files and header files, build INSTALL project; - To generate documentation Doxyfile created in the SOURCE_DIRECTORY/doxy folder can be used for the Doxygen tool ### 3.2. BUILDING on unix/debian-like systems: - Run the following comands in terminal: $ cd SOURCE_DIRECTORY $ cmake . $ make (try make -j4 for a faster build if you have a multi-core machine) (all "*.exe" files and "*.a" libraries will be generated in the SOURCE_DIRECTORY) $ sudo make install (will install all the header files, default directory is /usr/local/include) - If you also want to build the documentation, then run: $ make doc (this should create the documentation in the SOURCE_DIRECTORY/doxy directory) ### 3.3. BUILDING on Mac systems: - Using Command Line: all the steps are similar to the steps described in section 2.2. BUILDING on unix/debian-like systems - Using CMake software: - Run CMake; - Specify the source code and binary directories (fill the corresponding entries with value "../SOURCE_DIRECTORY" or drag the "CMakeLists.txt" file); - Press Configure button, set up the Generator settings(choose the Generator) - After configuring done few options can be chosen: BUILD_DOCUMENTATION (allows to generate gocumentation): (Doxygen tool is required to use this option); - Press Generate button(it will generate all the binary files in the SOURCE_DIRECTORY) (if Unix Makefiles Generator has been chosen it will produce Makefile in the SOURCE_DIRECTORY and all the comands described in section 2.2. BUILDING on unix/debian-like systems (except $ cmake .)have to be run in Command Line). - To generate documentation Doxyfile created in the SOURCE_DIRECTORY/doxy folder can be used for the Doxygen tool ## 4. HOW TO USE ### 4.1 DEMO The demo project will show you how to use the T-spline kernel. It creates a mouse T-spline model and generates STL files(ASCII & BINARY), OBJ file, DXF files(T-imgage, T-connect and T-pointset), STEP file and GNUPlot files. ```cpp //// Create a mouse T-spline model. MouseDemoPtr demo = makePtr(); //// Get the T-spline pointer of the mouse model. TSplinePtr spline = demo->findTSpline(); //// Construct the tessellator using T-spline pointer. TTessellator tessellator(spline); //// Tessellation and get all the triangle meshes. TriMeshPtr trimesh = tessellator.interpolateAll(); //// Write a single mesh to the STL ASCII file. StlWriter stlwriter(dirname + "/" + splinename, trimesh); stlwriter.writeStlAcii(); ObjWriter objwriter(dirname + "/" + splinename, 0); std::vector faces; demo->findTFaceNames(faces); for (int i=0;ifindTGroup()); stepwriter.writeStep(); //Write T-spline model to the STEP file. GnuplotWriter gplwriter(dirname + "/" + splinename, trimesh, spline); gplwriter.writeGnuplMesh(); //Write T-mesh to the GNUPlot file. gplwriter.writeGnuplTImage(); //Write T-image to the GNUPlot file. gplwriter.writeGnuplTConnect(); //Write T-connect to the GNUPlot file. gplwriter.writeGnuplTPointset(); //Write T-pointset to the GNUPlot file. ``` ### 4.2 TSM2STL - Converts a TSM file to a STL ASCII/BINARY file. - Usage: tsm2stl.exe [*.tsm] [-asc/-bin] ### 4.3 TSM2OBJ - Converts a TSM file to an OBJ file. - Usage: tsm2obj.exe [*.tsm] ### 4.4 TSM2STP - Converts a TSM file to a STEP file. - Usage: tsm2stp.exe [*.tsm] ### 4.5 TSM2DXF - Converts a TSM file to DXF(T-imgage, T-connect and T-pointset) files. - Usage: tsm2dxf.exe [*.tsm] [-img/-cnt/-pst] ### 4.6 TSM2GPL - Converts TSM file to GNUPlot(T-mesh, T-imgage, T-connect and T-pointset) files. - Usage: tsm2gpl.exe [*.tsm] ### 4.7 VIEWER - A T-spline 3D viewer with GUI(developed using GLC Player libaries). ### 4.8 NOTES - For Windows, use '..\' to get the parent directory and use '.\' to get the current directory. - For Linux & MAC, use '../' to get the parent directory and use './' to get the current directory. ## 5. TODO LIST * 5.1 Close T-spline has not been supported yet. * 5.2 T-NURCCS has not been supported yet. ## Reference: * [1] Wenlei Xiao, Yazui Liu, Rui Li, Wei Wang, Jianmin Zheng, Gang Zhao. Reconsideration of T-spline data models and their exchanges using STEP. Computer-Aided Design, 2016, 79, 36 - 47.