Third Party Libraries: Difference between revisions

From FreeCAD Documentation
m (30 revisions)
No edit summary
Line 3: Line 3:
The used libraries are:
The used libraries are:


Consider using [[#LibPack|LibPack]] instead downloading and installing all the stuff on your own.
Consider using [[#LibPack|LibPack]] instead of downloading and installing all the stuff on your own.


=== Links ===
=== Links ===
Line 16: Line 16:
| OpenCasCade || >= 5.2 || http://www.opencascade.org
| OpenCasCade || >= 5.2 || http://www.opencascade.org
|-
|-
| Qt || >= 4.1.x || http://www.troll.no
| Qt || >= 4.1.x || http://www.qtsoftware.com
|-
|-
| Coin3D || >= 2.x || http://www.Coin3D.org
| Coin3D || >= 2.x || http://www.coin3d.org
|-
|-
| ODE || >= 0.10.x || http://www.ode.org
| ODE || >= 0.10.x || http://www.ode.org
|-
|-
| SoQT || >= 1.2 || http://www.Coin3D.org
| SoQt || >= 1.2 || http://www.coin3d.org
|-
|-
| Xerces-C++ || >= 2.3.x || http://xml.apache.org/xerces-c/
| Xerces-C++ || >= 2.3.x || http://xml.apache.org/xerces-c/
Line 40: Line 40:
'''Version:''' 2.5 or higher
'''Version:''' 2.5 or higher


'''License:''' Python 2.5 license
You can use the source or binary from http://www.python.org/ or use alternetivly !ActiveState Python from http://www.activestate.com/ though it is a little bit hard to get the debug libs from !ActiveState.

You can use the source or binary from http://www.python.org/ or use alternetivly ActiveState Python from http://www.activestate.com/ though it is a little bit hard to get the debug libs from ActiveState.


===== Description =====
===== Description =====
Python is the primary scripting language and is used in the whole application.
Python is the primary scripting language and is used throughout the application.
For example:
For example:


Line 59: Line 61:
* And so on ...
* And so on ...


Especially the dynamic package loading of python is used to load at run time additional functionality and workbenches needed for the actual tasks. For a closer look to python see: www.python.org Why Python you may ask. There are some reasons: So far I used different scripting languages in my professional life:
Especially the dynamic package loading of Python is used to load at run time additional functionality and workbenches needed for the actual tasks. For a closer look to Python see: www.python.org Why Python you may ask. There are some reasons: So far I used different scripting languages in my professional life:
* Perl
* Perl
* Tcl/Tk
* Tcl/Tk
* VB
* VB
* Java
* Java
Python is more OO then Perl and Tcl, the code is not a mess like in Perl and VB. Java isn?t a script language in the first place and hard (or impossible) to embed. Python is well documented and easy to embed and extend. It is also well tested and has a strong back hold in the open source community.
Python is more OO then Perl and Tcl, the code is not a mess like in Perl and VB. Java isn't a script language in the first place and hard (or impossible) to embed. Python is well documented and easy to embed and extend. It is also well tested and has a strong back hold in the open source community.


===== Credits =====
===== Credits =====
goes to Guido van Rossum and a lot of people made Python such a success!
Goes to Guido van Rossum and a lot of people made Python such a success!


==== OpenCasCade ====
==== OpenCasCade ====
Line 73: Line 75:
'''Version:''' 5.2 or higher
'''Version:''' 5.2 or higher


'''License:''' OCTPL
OCC is a full featured CAD Kernel. Its originally developed by Matra Datavision in France for the Strim (Styler) and Euclid Quantum applications and later on made Open Source. It's a really huge library and makes a free CAD application possible in the first place, by providing some packages which would be hard or impossible to implement in an Open Source project:

OCC is a full-featured CAD Kernel. Originally, it's developed by Matra Datavision in France for the Strim (Styler) and Euclid Quantum applications and later on made Open Source. It's a really huge library and makes a free CAD application possible in the first place, by providing some packages which would be hard or impossible to implement in an Open Source project:
* A complete STEP compliant geometry kernel
* A complete STEP compliant geometry kernel
* A topological data model and all needed functions to work on (cut, fuse, extrude, and so on. . . )
* A topological data model and all needed functions to work on (cut, fuse, extrude, and so on. . . )
* Standard Import- / Export processors like STEP, IGES, VRML
* Standard Import- / Export processors like STEP, IGES, VRML
* 3D and 2D Viewer with selection support
* 3D and 2D viewer with selection support
* A Document and Project data structure with support for save and restore, external linking of documents, recalculation of design history (parametric modeling) and a facility to load new data types as a extension package dynamically
* A document and project data structure with support for save and restore, external linking of documents, recalculation of design history (parametric modeling) and a facility to load new data types as an extension package dynamically


To learn more about OpenCasCade take a look at the OpenCasCade page or http://www.opencascade.org.
To learn more about OpenCasCade take a look at the OpenCasCade page or http://www.opencascade.org.
Line 86: Line 90:
'''Version:''' 4.1.x or higher
'''Version:''' 4.1.x or higher


'''License:''' GPL v2.0/v3.0 or Commercial (from version 4.5 on also LPGL v2.1)
I don't think I need to tell a lot about Qt. It's one of the most often used GUI toolkits in Open Source projects. For me the most important point to use Qt is the Qt Designer and the possibility to load whole dialog boxes as a (XML) resource and incorporate specialized widgets. In a CAX application the user interaction and dialog boxes a by far the biggest part of the code and a good dialog designer is very important to easily extend FreeCAD with new functionality. Further information and a very good on line documentation you'll find on http://www.troll.no.

I don't think I need to tell a lot about Qt. It's one of the most often used GUI toolkits in Open Source projects. For me the most important point to use Qt is the Qt Designer and the possibility to load whole dialog boxes as a (XML) resource and incorporate specialized widgets. In a CAX application the user interaction and dialog boxes are by far the biggest part of the code and a good dialog designer is very important to easily extend FreeCAD with new functionality. Further information and a very good online documentation you'll find on http://www.qtsoftware.com.


==== Coin3D ====
==== Coin3D ====
Line 92: Line 98:
'''Version:''' 2.0 or higer
'''Version:''' 2.0 or higer


'''License:''' GPL v2.0 or Commercial
Coin is a high-level 3D graphics library with a C++ Application Programming Interface. Coin uses scene graph data structures to render real-time graphics suitable for mostly all kinds of scientific and engineering visualization applications.

Coin is a high-level 3D graphics library with a C++ Application Programming Interface. Coin uses scenegraph data structures to render real-time graphics suitable for mostly all kinds of scientific and engineering visualization applications.


Coin is portable over a wide range of platforms: any UNIX / Linux / *BSD platform, all Microsoft Windows operating system, and Mac OS X.
Coin is portable over a wide range of platforms: any UNIX / Linux / *BSD platform, all Microsoft Windows operating system, and Mac OS X.
Line 98: Line 106:
Coin is built on the industry-standard OpenGL immediate mode rendering library, and adds abstractions for higher-level primitives, provides 3D interactivity, immensely increases programmer convenience and productivity, and contains many complex optimization features for fast rendering that are transparent for the application programmer.
Coin is built on the industry-standard OpenGL immediate mode rendering library, and adds abstractions for higher-level primitives, provides 3D interactivity, immensely increases programmer convenience and productivity, and contains many complex optimization features for fast rendering that are transparent for the application programmer.


Coin is based on the SGI Open Inventor API. Open Inventor, for those who are not familiar with it, has long since become the de facto standard graphics library for 3D visualization and visual simulation software in the scientific and engineering community. It has proved it's worth over a period of more than 10 years, it's maturity contributing to it's success as a major building block in thousands of large-scale engineering applications around the world.
Coin is based on the SGI Open Inventor API. Open Inventor, for those who are not familiar with it, has long since become the de facto standard graphics library for 3D visualization and visual simulation software in the scientific and engineering community. It has proved it's worth over a period of more than 10 years, its maturity contributing to its success as a major building block in thousands of large-scale engineering applications around the world.


We will use OpenInventor as 3D viewer in FreeCAD because the OpenCasCade viewer (AIS and Graphics3D) has serios limitations and performace bottlenecks, especially when it goes in large-scale engineering rendering. Other things like textures or volumetric rendering are not really supported, and so on ....
We will use OpenInventor as 3D viewer in FreeCAD because the OpenCasCade viewer (AIS and Graphics3D) has serios limitations and performace bottlenecks, especially when it goes in large-scale engineering rendering. Other things like textures or volumetric rendering are not really supported, and so on ....


Since Version 2.0 Coin use a different licence model. Its not longer LGPL. They use GPL for open source and a commercial licence for closed source. That means if you want to sell your work based on FreeCAD (extension modules) you need to purchase a Coin licence!
Since Version 2.0 Coin uses a different licence model. It's not longer LGPL. They use GPL for open source and a commercial licence for closed source. That means if you want to sell your work based on FreeCAD (extension modules) you need to purchase a Coin licence!


==== ODE (Open dynamic engine) ====
==== ODE (Open dynamic engine) ====


'''Version:''' 0.10.0 or higher
'''Version:''' 0.10.0 or higher

'''License:''' LGPL v2.1 or later or BSD


ODE is an open source, high performance library for simulating rigid body dynamics. It is fully featured, stable, mature and platform independent with an easy to use C/C++ API. It has advanced joint types and integrated collision detection with friction. ODE is useful for simulating vehicles, objects in virtual reality environments and virtual creatures. It is currently used in many computer games, 3D authoring tools and simulation tools.
ODE is an open source, high performance library for simulating rigid body dynamics. It is fully featured, stable, mature and platform independent with an easy to use C/C++ API. It has advanced joint types and integrated collision detection with friction. ODE is useful for simulating vehicles, objects in virtual reality environments and virtual creatures. It is currently used in many computer games, 3D authoring tools and simulation tools.
Line 118: Line 128:
'''Version:''' 1.2.0 or higher
'''Version:''' 1.2.0 or higher


'''License:''' GPL v2.0 or Commercial
SoQt is the Inventor binding to the Qt Gui Toolkit. Unfortunately its not longer LGPL so we have to remove it from the code base of FreeCAD and link it as a library. It has the same licence model like Coin. And you have to compile it with your Version of Qt.

SoQt is the Inventor binding to the Qt Gui Toolkit. Unfortunately, it's not longer LGPL so we have to remove it from the code base of FreeCAD and link it as a library. It has the same licence model like Coin. And you have to compile it with your version of Qt.


==== Xerces-C++ ====
==== Xerces-C++ ====


'''Version:''' 2.3.0 or higher
'''Version:''' 2.3.0 or higher

'''License:''' Apache Software License Version 2.0


Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents.
Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents.
Line 130: Line 144:
The parser provides high performance, modularity, and scalability. Source code, samples and API documentation are provided with the parser. For portability, care has been taken to make minimal use of templates, no RTTI, and minimal use of #ifdefs.
The parser provides high performance, modularity, and scalability. Source code, samples and API documentation are provided with the parser. For portability, care has been taken to make minimal use of templates, no RTTI, and minimal use of #ifdefs.


The parser is used for save and store parameter in FreeCAD.
The parser is used for saving and restoring parameters in FreeCAD.




Line 136: Line 150:


'''Version:''' 0.7.x
'''Version:''' 0.7.x

'''License:''' LGPL v2.0 or later


GTS stands for the GNU Triangulated Surface Library. It is an Open Source Free Software Library intended to provide a set of useful functions to deal with 3D surfaces meshed with interconnected triangles. The source code is available free of charge under the Free Software LGPL license.
GTS stands for the GNU Triangulated Surface Library. It is an Open Source Free Software Library intended to provide a set of useful functions to deal with 3D surfaces meshed with interconnected triangles. The source code is available free of charge under the Free Software LGPL license.
Line 144: Line 160:


'''Version:''' 1.x.x
'''Version:''' 1.x.x

'''License:''' zlib License


zlib is designed to be a free, general-purpose, legally unencumbered -- that is, not covered by any patents -- lossless data-compression library for use on virtually any computer hardware and operating system. The zlib data format is itself portable across platforms. Unlike the LZW compression method used in Unix compress(1) and in the GIF image format, the compression method currently used in zlib essentially never expands the data. (LZW can double or triple the file size in extreme cases.) zlib's memory footprint is also independent of the input data and can be reduced, if necessary, at some cost in compression.
zlib is designed to be a free, general-purpose, legally unencumbered -- that is, not covered by any patents -- lossless data-compression library for use on virtually any computer hardware and operating system. The zlib data format is itself portable across platforms. Unlike the LZW compression method used in Unix compress(1) and in the GIF image format, the compression method currently used in zlib essentially never expands the data. (LZW can double or triple the file size in extreme cases.) zlib's memory footprint is also independent of the input data and can be reduced, if necessary, at some cost in compression.
Line 152: Line 170:


'''Version:''' 1.33.x
'''Version:''' 1.33.x

'''License:''' Boost Software License - Version 1.0


The Boost C++ libraries are a collection of peer-reviewed, open source libraries that extend the functionality of C++. The libraries are licensed under the Boost Software License, designed to allow Boost to be used with both open and closed source projects. Many of Boost's founders are on the C++ standard committee and several Boost libraries have been accepted for incorporation into the Technical Report 1 of C++0x.
The Boost C++ libraries are a collection of peer-reviewed, open source libraries that extend the functionality of C++. The libraries are licensed under the Boost Software License, designed to allow Boost to be used with both open and closed source projects. Many of Boost's founders are on the C++ standard committee and several Boost libraries have been accepted for incorporation into the Technical Report 1 of C++0x.
Line 157: Line 177:
The libraries are aimed at a wide range of C++ users and application domains. They range from general-purpose libraries like SmartPtr, to OS Abstractions like FileSystem, to libraries primarily aimed at other library developers and advanced C++ users, like MPL.
The libraries are aimed at a wide range of C++ users and application domains. They range from general-purpose libraries like SmartPtr, to OS Abstractions like FileSystem, to libraries primarily aimed at other library developers and advanced C++ users, like MPL.


In order to ensure efficiency and flexibility, Boost makes extensive use of templates. Boost has been a source of extensive work and research into generic programming and metaprogramming in C++.
In order to ensure efficiency and flexibility, Boost makes extensive use of templates. Boost has been a source of extensive work and research into generic programming and meta-programming in C++.


See: http://www.boost.org/ for details.
See: http://www.boost.org/ for details.
Line 163: Line 183:
=== LibPack ===
=== LibPack ===


LibPack is a convenient pack with all the the above libraries packed together. It is currently available for the
LibPack is a convenient package with all the above libraries packed together. It is currently available for the
Windows platform on the [[Download]] page!
Windows platform on the [[Download]] page!



Revision as of 11:10, 17 February 2009

Overview

These are libraries which are not changed in the FreeCAD project. They are basically used unchanged as a dynamic link library (*.so or *.dll). If there is a change necessary or a wrapper class is needed, then the code of the wrapper or the changed library code have to be moved to the FreeCAD base package. The used libraries are:

Consider using LibPack instead of downloading and installing all the stuff on your own.

Links

Link table
Lib name Version needed Link to get it
Python >= 2.5.x http://www.python.org/
OpenCasCade >= 5.2 http://www.opencascade.org
Qt >= 4.1.x http://www.qtsoftware.com
Coin3D >= 2.x http://www.coin3d.org
ODE >= 0.10.x http://www.ode.org
SoQt >= 1.2 http://www.coin3d.org
Xerces-C++ >= 2.3.x http://xml.apache.org/xerces-c/
GTS >= 0.7.x http://gts.sourceforge.net/
Zlib >= 1.x.x http://www.zlib.net/
Boost >= 1.33.x http://www.boost.org/
OpenCV >= 1.0 http://sourceforge.net/projects/opencvlibrary/

Details

Python

Version: 2.5 or higher

License: Python 2.5 license

You can use the source or binary from http://www.python.org/ or use alternetivly ActiveState Python from http://www.activestate.com/ though it is a little bit hard to get the debug libs from ActiveState.

Description

Python is the primary scripting language and is used throughout the application. For example:

  • Implement test scripts for testing on:
    • memory leaks
    • ensure presents of functionality after changes
    • post build checks
    • test coverage tests
  • Macros and macro recording
  • Implement application logic for standard packages
  • Implementation of whole workbenches
  • Dynamic loading of packages
  • Implementing rules for design (Knowledge engineering)
  • Doing some fancy Internet stuff like work groups and PDM
  • And so on ...

Especially the dynamic package loading of Python is used to load at run time additional functionality and workbenches needed for the actual tasks. For a closer look to Python see: www.python.org Why Python you may ask. There are some reasons: So far I used different scripting languages in my professional life:

  • Perl
  • Tcl/Tk
  • VB
  • Java

Python is more OO then Perl and Tcl, the code is not a mess like in Perl and VB. Java isn't a script language in the first place and hard (or impossible) to embed. Python is well documented and easy to embed and extend. It is also well tested and has a strong back hold in the open source community.

Credits

Goes to Guido van Rossum and a lot of people made Python such a success!

OpenCasCade

Version: 5.2 or higher

License: OCTPL

OCC is a full-featured CAD Kernel. Originally, it's developed by Matra Datavision in France for the Strim (Styler) and Euclid Quantum applications and later on made Open Source. It's a really huge library and makes a free CAD application possible in the first place, by providing some packages which would be hard or impossible to implement in an Open Source project:

  • A complete STEP compliant geometry kernel
  • A topological data model and all needed functions to work on (cut, fuse, extrude, and so on. . . )
  • Standard Import- / Export processors like STEP, IGES, VRML
  • 3D and 2D viewer with selection support
  • A document and project data structure with support for save and restore, external linking of documents, recalculation of design history (parametric modeling) and a facility to load new data types as an extension package dynamically

To learn more about OpenCasCade take a look at the OpenCasCade page or http://www.opencascade.org.

Qt

Version: 4.1.x or higher

License: GPL v2.0/v3.0 or Commercial (from version 4.5 on also LPGL v2.1)

I don't think I need to tell a lot about Qt. It's one of the most often used GUI toolkits in Open Source projects. For me the most important point to use Qt is the Qt Designer and the possibility to load whole dialog boxes as a (XML) resource and incorporate specialized widgets. In a CAX application the user interaction and dialog boxes are by far the biggest part of the code and a good dialog designer is very important to easily extend FreeCAD with new functionality. Further information and a very good online documentation you'll find on http://www.qtsoftware.com.

Coin3D

Version: 2.0 or higer

License: GPL v2.0 or Commercial

Coin is a high-level 3D graphics library with a C++ Application Programming Interface. Coin uses scenegraph data structures to render real-time graphics suitable for mostly all kinds of scientific and engineering visualization applications.

Coin is portable over a wide range of platforms: any UNIX / Linux / *BSD platform, all Microsoft Windows operating system, and Mac OS X.

Coin is built on the industry-standard OpenGL immediate mode rendering library, and adds abstractions for higher-level primitives, provides 3D interactivity, immensely increases programmer convenience and productivity, and contains many complex optimization features for fast rendering that are transparent for the application programmer.

Coin is based on the SGI Open Inventor API. Open Inventor, for those who are not familiar with it, has long since become the de facto standard graphics library for 3D visualization and visual simulation software in the scientific and engineering community. It has proved it's worth over a period of more than 10 years, its maturity contributing to its success as a major building block in thousands of large-scale engineering applications around the world.

We will use OpenInventor as 3D viewer in FreeCAD because the OpenCasCade viewer (AIS and Graphics3D) has serios limitations and performace bottlenecks, especially when it goes in large-scale engineering rendering. Other things like textures or volumetric rendering are not really supported, and so on ....

Since Version 2.0 Coin uses a different licence model. It's not longer LGPL. They use GPL for open source and a commercial licence for closed source. That means if you want to sell your work based on FreeCAD (extension modules) you need to purchase a Coin licence!

ODE (Open dynamic engine)

Version: 0.10.0 or higher

License: LGPL v2.1 or later or BSD

ODE is an open source, high performance library for simulating rigid body dynamics. It is fully featured, stable, mature and platform independent with an easy to use C/C++ API. It has advanced joint types and integrated collision detection with friction. ODE is useful for simulating vehicles, objects in virtual reality environments and virtual creatures. It is currently used in many computer games, 3D authoring tools and simulation tools.

Credits

Russell Smith is the primary author of ODE.


SoQt

Version: 1.2.0 or higher

License: GPL v2.0 or Commercial

SoQt is the Inventor binding to the Qt Gui Toolkit. Unfortunately, it's not longer LGPL so we have to remove it from the code base of FreeCAD and link it as a library. It has the same licence model like Coin. And you have to compile it with your version of Qt.

Xerces-C++

Version: 2.3.0 or higher

License: Apache Software License Version 2.0

Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents.

Xerces-C++ is faithful to the XML 1.0 recommendation and many associated standards (see Features below).

The parser provides high performance, modularity, and scalability. Source code, samples and API documentation are provided with the parser. For portability, care has been taken to make minimal use of templates, no RTTI, and minimal use of #ifdefs.

The parser is used for saving and restoring parameters in FreeCAD.


GTS

Version: 0.7.x

License: LGPL v2.0 or later

GTS stands for the GNU Triangulated Surface Library. It is an Open Source Free Software Library intended to provide a set of useful functions to deal with 3D surfaces meshed with interconnected triangles. The source code is available free of charge under the Free Software LGPL license.

Actually not needed to compile FreeCAD. You can switch on the usage with a proprocessor switch in FCConfig.h.

Zlib

Version: 1.x.x

License: zlib License

zlib is designed to be a free, general-purpose, legally unencumbered -- that is, not covered by any patents -- lossless data-compression library for use on virtually any computer hardware and operating system. The zlib data format is itself portable across platforms. Unlike the LZW compression method used in Unix compress(1) and in the GIF image format, the compression method currently used in zlib essentially never expands the data. (LZW can double or triple the file size in extreme cases.) zlib's memory footprint is also independent of the input data and can be reduced, if necessary, at some cost in compression.


Boost

Version: 1.33.x

License: Boost Software License - Version 1.0

The Boost C++ libraries are a collection of peer-reviewed, open source libraries that extend the functionality of C++. The libraries are licensed under the Boost Software License, designed to allow Boost to be used with both open and closed source projects. Many of Boost's founders are on the C++ standard committee and several Boost libraries have been accepted for incorporation into the Technical Report 1 of C++0x.

The libraries are aimed at a wide range of C++ users and application domains. They range from general-purpose libraries like SmartPtr, to OS Abstractions like FileSystem, to libraries primarily aimed at other library developers and advanced C++ users, like MPL.

In order to ensure efficiency and flexibility, Boost makes extensive use of templates. Boost has been a source of extensive work and research into generic programming and meta-programming in C++.

See: http://www.boost.org/ for details.

LibPack

LibPack is a convenient package with all the above libraries packed together. It is currently available for the Windows platform on the Download page!

FreeCADLibs4 Changelog

  • we replaced the QT 3.2.1 non commercial edition with the QT 4.1.4 GPL Version.
  • STLport was removed (VC6 compiler is not longer supported.
  • Use Python 2.5