- Deprecated some methods that produce incorrect results
- Fixed sample_size computation
- Minor fixes and documnetation updates
- Fixed a bug causing double matplotlib figures when run on a Jupyter notebook
- Fixed
filename
argument when plotly visualization module is used - Added offscreen rendering support for VTK visualization module
- Fixed issues #59, #61 and #62
evaluators
API and documentation updates- Documentation updates
- Docker configuration updates:
latest
tag points to Python v3.6
- Update
control_points
module - Fix a bug in
operations.refine_knotvector
failing to work with Bezier-type geometries - Fix a bug in normal vector evaluation for curves (as discussed in #49 and #50)
- Minor improvements and documentation updates
- Added
operations.flip
- Bug fixes and improvements
- Documentation updates
- Fixed imports in
control_points
module
- Improved
linalg
module - Added
control_points
module for managing control points - Bug fixes and improvements
- Documentation updates
- Reduced set control points restrictions for surfaces.
Surface.set_ctrlpts
now accepts 2-dimensional control points. - Deprecated
save
andload
methods defined inBSpline
module in favor ofimport_json
andexport_json
- Generalized
operations.add_dimension
API call to work with allSplineGeometry
subclasses - Documentation updates
- Fix incorrect dict export of trims in trimmed surfaces
- Add analytic trim curve support to trimmed surface dict export
- Change
VolumeContainer
base class fromSurfaceContainer
toAbstractContainer
and add missing methods - Documentation updates
- Minor bug fixes and improvements
- Convert "sense" to "reversed" for better understanding of trim curve orientation (API change for surface trimming)
- Update curve degree elevation and reduction algorithms and operations API (no API change)
- Fix trim curve exporting in
exchange.export_json
- Deprecate
exchange.export_3dm
andexchange.import_3dm
in favor of rw3dm v2.0 - Documentation updates
- Minor refactoring in
elements
module (no API change) - Visualization figure objects are now accessible outside the geometry classes,
render
method returns the figure object vertex_spacing
is set to 1 for consistency between the exchange and visualization modulesvertices
property of theSurface
class returns the exact list of vertices used in generation of the triangles- Minor bug fixes
- Documentation updates
- Moved some
six
module functions andbackports_functools_lru_cache
module under geomdl directory - Removed
typing
dependency (no time to add all typing hints, see docs for input and output types) - Refactored imports, minimized internal dependencies
- Code rearrangement for some internal functions
- Refactored
operations
module (no API change) - Updated
multi
module - Updated
elements
module to make it consistent between its classes (minor API change) - Improved dict-type file formats (JSON, YAML, CFG) to support trim curves and more (backwards compatible)
- Updated
exchange_vtk.export_polydata
to support tessellated surfaces and geometry containers - Refactored
tessellation
module (internal API change, user API is the same and comes with improvements) - Added
tessellate.QuadTessellate
class - Added
==
and!=
operators toSplineGeometry
classes - Added
freeform
module - Improved the surface trimming algorithm to handle edge cases
- Added
trimming
module to fix different types of trim curves (open, multi-curve, etc.) - Added an option to set trim curve sense; i.e.
sense = 0
means trim inside,sense = 1
means trim outside - Improved VTK visualization module to better handle surface and volume plots
- Added voxel visualization option to VTK visualization module
- Registered mode keypress events to VTK visualization module
- Added an option to generate custom visualization configuration while generating the visualization object
- General bug fixes and performance improvements
- Added more tests
- Documentation updates
- Updated surface derivative algorithm to fill the return array completely
- Fixed variable initialization issue causing warnings during cython compilation
- Fixed a bug while computing the surface derivative
- Added
alpha
configuration directive toVisMPL
to control opacity of the evaluated points - Added knot refinement operation:
operations.refine_knotvector()
- Minor bug fixes and coding improvements
- Documentation updates
- Fixed CI config which was failing to generate
geomdl.core
binaries for v5.0.2 and version bumped for user convenience
- Removed dependency
enum34
since it was causing problems with Python 3 - Fixed some minor bugs
- Fix an issue in setup.py causing generation of an incompatible wheel for Python 2.7
- conda-build configuration updates
- Documentation updates
- Includes all updates from v5.0b1 to v5.0b7
- Added knot removal for spline volumes
- Added
operations.degree_operations
function for degree elevation and reduction (still WIP) - Added more surface decomposition options to
operations.decompose_surface
function - Minor coding improvements and fixes
- Documentation updates
- Fixed a critical bug in smesh and vmesh importers
- Added an option to change knot insertion and removal algorithms in the geometry classes
- Documentation updates
- Added
exchange.import_obj
function - Added knot removal, degree elevation and degree reduction algorithms
- Simplified evaluator API to make implementations easier
- Added
knotvector
module - Added surface trimming algorithm
- Minor bug fixes and compatibility updates
- Documentation updates
- Minor API updates and fixes
- Added more convenience methods to spline geometry classes
- Minor fixes and updates in
exchange
module - Documentation updates
- Added volume support to dict-based import and exports, i.e. cfg, yaml, json
- Updated CI configurations
- Added CircleCI support for automation of deployment to PyPI, Anaconda Cloud and Docker Hub
- Updated TravisCI support to use tox and tox environments
- Updated AppVeyor support to generate Cython-compiled versions of geomdl as artifacts
- Added support for star imports, i.e.
from geomdl import *
- Added
abstract.Geometry
andabstract.SplineGeometry
classes - Improved
multi
module reusability - Added animate option to visualization component
- Minor bug fixes and staability improvements
- Documentation updates
- Added Jinja2 template support to JSON, YAML and CFG importers
- Documentation updates and bug fixes
- Added
construct.extract_isosurface
function - Updated
VisVTK
module - Updated
vis.VisAbstract
class - Minor fixes and updates
- Simplified
abstract
module and moved all abstract classes to their relevant modules - Removed
curvept
andsurfpt
methods. Useevaluate_single
instead. - Added an option to enable/disable knot vector normalization. Initialize the class with
normalize_kv=False
to disable knot vector normalization. - Added B-spline and NURBS volume support with visualization,
BSpline.Volume
andNURBS.Volume
- Refactored
convert
module to improve reusability and add support to volumes - Refactored
exchange
module to improve reusability - Rhino file export and import options,
export_3dm
and,import_3dm
inexchange
module - Added
exchange.export_vmesh
for exporting NURBS volumes - Add Jinja2 template support for
exchange.import_txt
- Update the name of
utilities.check_uv
function toutilities.check_params
- Refactored
utilities
module and moved some functions tolinalg
module VisMPL.VisSurfTriangle
is now an alias forVisMPL.VisSurface
fitting
module for curve and surface global interpolation + approximation (fitting)construct
module for constructing surfaces and volumes + extracting surfaces and curveslinalg
module (generated by splittingutilities
module)VisVoxel
andVisVolume
classes for volume visualizationVisVTK
visualization module
- Fix PyPI description
- Prepare for NURBS-Python v5 release
- Fix bugs in
export_csv
andexport_smesh
functions
- Updated Cython-compiled module location for more convenient binary package generation
- Major documentation update with more examples and API descriptions
- Added DockerFiles
- Added and updated import and export methods. Unfortunately, this update breaks .cfg exports prior to v4.4.x; therefore, you might need to re-export your .cfg exports.
export_cfg
,import_cfg
export_yaml
,import_yaml
export_json
,import_json
exchange
module code optimizations
- Fixed a bug in bounding box computation
- Added bounding box plotting option to the visualization module (still WIP)
- Added
bbox
property toMulti
-type classes - Documentation updates
- Added
evalpts
property toMulti
type of classes - Updated conda-build recipe
- Updated
delta
andsample_size
properties ofMultiCurve
andMultiSurface
classes. They are now compatible withCurve
andSurface
classes. - Added
exchange.export_yaml
function (experimental, designed to be used with geomdl_cli) - Updated conda-build recipe
- Minor bug fixes
- Documentation updates
- Updated
operations.translate()
function to make it compatible with multi curves and surfaces - Added conda-build recipe
- Fixed a typo in evaluated points definition of
VisMPL.VisSurfWireframe()
class - Documentation updates
- Hodograph curve and surface computation:
operations.derivative_curve()
andoperations.derivative_surface()
- LU-Factorization and Forward-Backward Substitution functions in
utilities
module - Documentation update for compiling the package with Cython
- Added
axes_equal
andevalpts
keyword arguments to visualization config class - Added
set_plot_type
method to surface visualization classes - Documentation updates
- Minor code improvements
- Fixed a bug causing Plotly surface visualization module to show extra lines
- Added
exchange.export_smesh()
function - Minor bug fixes and documentation updates
- Added
Tessellate
class for customization of the surface tessellation algorithms - Basic trimmed surface support (still work in progress)
- Updated
elements
module - Visualization module improvements and added support for displaying trim curves for surfaces
- Added
evaluate_single
andevaluate_list
methods - Updated default evaluation delta to 0.01
- Minor bug fixes, algorithm and performance improvements
- Fixed a bug causing incorrect alignment of control points that generate the hills in the surface generator module
- Surface generator now generates more smooth hills
- Added an option to change the label on the visualization legend by setting the
name
property - Updated
Multi.MultiCurve
andMulti.MultiSurface
constructors to allow easy addition of the shapes to the container object
This release adds the functionality of finding control points involved in the evaluation of a curve/surface at the
specified parameter(s) using operations.find_ctrlpts()
.
- Added
operations.find_ctrlpts()
function - Minor improvements in the surface evaluation algorithm
This release moves some of the features from BSpline
module to other modules since it is getting bigger and it has a lot of responsibilities which can be "globalized" to ease extensibility.
- Code reorganization and cleanup for Curve and Surface classes
- Removed plural-named methods, such as
tangents
,normals
, etc and moved the functionality to singular methods (normal
,tangent
, etc.) - Moved
translate
,split
anddecompose
methods tooperations
module derivatives
method is added as an abstract method toAbstract.Curve
andAbstract.Surface
since it is also a requirement for allEvaluator
implementations.
The following new and updated features are added with this release:
- New module:
operations
, it contains geometric operations that can be applied to curves and surfaces - Added libconfig-type file export feature to
exchange
module - Updated triangulation functions
- Updated
elements
module - Updated
VisMPL.VisSurfTriangle()
class to useutilities.make_triangle_mesh()
for triangulation - Added colormap input to
VisMPL.VisSurfTriangle()
class - Fixed deprecation errors for Plotly >= 3.0.0
- Added new vector and point operations to
utilities
module
- Added algorithms A2.4, A2.5, A3.7 and A3.8
- Added an option to generate knot vectors for unclamped shapes
- Bug fixes and minor updates
- Documentation updates
- Bug fix: Fixed an inconsistent behavior while setting
delta
andsample_size
properties
- Bug fix: Use
six
package to maintain Python 2 and 3 interoperability for meta classes - Bug fix: Updated
order
property for curves andorder_u
,order_v
,delta
properties for surfaces by removing excess conditional checks from their setters - Updated error messages
- Updated documentation
- Updated tests
- Various minor updates and bug fixes
This is the official release of NURBS-Python (geomdl) v4.0.0. The following list summarizes the new and the updated features.
- Added Plotly visualization module
- Improved algorithms
- Reorganized
exchange
module and added new export file types - Export to file and no window options for the Visualization component
- NURBS module now allows setting control points and weights separately
- Load and save functionality
- New
Evaluator
module for changing evaluation algorithms at runtime - New
convert
module for converting B-Spline objects to NURBS objects - Improved the surface generator module
- Added more examples to the Examples repository: https://github.com/orbingol/NURBS-Python_Examples
- Documentation updates and improvements: http://nurbs-python.readthedocs.io/
- Bug fixes, code cleaning and compatibility updates
- New unit and function tests with codecov.io integration
- Fix a bug in surface generator causing miscalculation of the grid boundaries when users add padding via
base_adjust
argument - Renamed surface control points row order changing functions (flipping)
- Updated smesh file importing API calls
- Minor updates in error messages and exceptions
- Documentation updates
- Bug fix release for Surface Generator module
- Bug fix release (surface generator)
NURBS.ctrlptsw
now returns a tuple- Algorithm and compatibility updates to surface grid generator
- Add more tests
- Fixed an issue which causes figure display problems during rendering curves and surfaces in
Multi
-type classes - Coding improvements in
utilities
module - Added more tests, increasing the code coverage to 47%
- New feature: Exporting plots as image files
- Documentation: Added exporting plots section with code examples
- Documentation: Updated load-save section with some code examples
- Bug fix: The sample generator function was not considering the starting value
exchange
module updates- Documentation updates
- Several bug fixes and compatibility updates
- Documentation updates
This is the first beta version of NURBS-Python v4.x series.
-
Updated
NURBS
class control points / weights getters and setters -
Rearranged / updated some functions and properties to clean up the
BSpline
andNURBS
class structure -
Control points reading and CSV export functionality are moved to
exchange
module -
Added more tests
-
Updated examples
-
Evaluation algorithms speed improvements
-
Added Plotly visualization module
-
Updated documentation and added more details
-
Added new export file formats
-
Added B-Spline to NURBS converters
4.x update might break NURBS
class API a little bit due to the updates in getters and setters but the fix would be very easy: Please see the ctrlptsw
and ctrlpts
properties for details.
- Minor updates
- Minor update related to generating a python source package
VisMPL
module displays all figures in the correct aspect ratio
- Bug fix release
- Fixed a bug when
_reset_ctrlpts
function resets the bounding box
- Bug fix release
- Bug fix release
- Removed unnecessary evaluations while setting
sample_size
anddelta
properties.
- Added
delta_u
anddelta_v
properties to Surface classes. This change allows different sampling in u- and v-directions - Fixed some bugs related to
sample_size
property - Replaced
delta
withsample_size
in Multi classes.sample_size
property directly corresponds tonum
argument in numpy.linspace function.
These changes may cause a small API break in your existing code, especially if you are visualizing using the geomdl.visualization.VisMPL
component.
Please see the examples repository and check any example for the updated usage scenarios.
- Added
sample_size
property.
sample_size
works very similar to numpy.linspace
. In numpy.linspace
, you define start and end positions with the number or samples to generate between them.
This property automatically sets the delta
property, so after setting sample_size
, there is no need to play with delta
.
- Bug fixes and compatibility updates
- Added new tests
- Added Object File Format (OFF) export support to
exchange
module
- Code reorganization
- Bug fixes
- Updated NURBS module to have an extensible variable cache
- Minor bug fixes
- Fixed a bug in Multi module
render
method which fails to work afterVisMPL
update. - Fixed a bug in
frange
function which sometimes fails to generate correct output with bigger delta values
- Bug fixes
The new version comes with performance improvements and documentation updates.
It also adds bbox
property for evaluation and storage of curve and surface bounding box.
- Minor improvements
- Bug fixes and improvements
- Performance improvements
compatibility
module- Performance improvements
- Compatibility fixes and updates
- Documentation updates
- Code reorganization (no API break)
compatibility
module enhancements
- Removed super restrictive knot vector checks
- Improvements in curve/surface evaluation functions
- Performance improvements
- Bug fixes
- Documentation updates
- Added
compatibility
module for control points manipulation - Updated documentation
- Added remove axes option to Matplotlib visualization module
- Added
translate
wrapper to abstract Multi class
- Code clean-up and reorganization
- Bug fixes
- Bug fix release
- Fixed a point of failure in VisCurve3D when it takes a 2D input instead of a 3D one
- Save surfaces as .stl file
- Surface and curve splitting
- Surface and curve Bézier decomposition
- Surface and curve translate by a vector functionality
- Added an option to save .stl files in binary format
- Fixed some bugs in
exchange
module - Fixed some bugs in
utilities
module - Added experimental Export surfaces as .stl support, with
exchange.save_stl()
- The core library now utilizes
Abstract
andMulti
modules - Curve classes now have
split()
method for curve splitting at the given parameter anddecompose()
method for Bézier decomposition - Shapes module upgrades
- Added
decompose
method to curve classes for applying Bézier decomposition - Added
add_list
method toMulti
module
- Minor bug fixes
- Added
translate()
function to curve classes
- Fix a control points copy error in
insert_knot()
methods - Increased stability of
generate_knot_vector()
function - Some other minor fixes in
exchange
module save_obj
can save single or multiple surfaces to a single .obj file- Curve and Curve2D classes have a new method,
split()
. This method splits the curve and returns 2 new instances as the split pieces of the initial curve. It doesn't modify the initial curve. Multi
module is designed to operate on multiple curves and surfaces. Currently, it can only do multi curve and multi surface visualization (in 2D and 3D) on the same window. Documentation will come soon.Abstract
module provides a base for further development of the NURBS algorithms. It will become the base class for B-Spline and NURBS curves and surfaces represented in NURBS-Python. Unfortunately, the module is still WIP and it could remain like that for a while.
- Performance improvements
- Documentation updates
This version comes with stability updates and more tests to cover the majority of the module functionality. The documentation is also improved.
- Added
exchange
module with the capability to save surfaces as .obj files - Added
shapes
module to automatically generate well-defined NURBS curves and surfaces - More configurable
visualization
module - Bug and stability fixes
- Documentation updates
- Bug fix release
- Added new parameters to
evaluate()
functions - Updated documentation
- Bug fix release
- Marker updates on curve and surface plots
- Fixed a PyPI glitch
- Fixed a problem with surface setters (no API break)
- Visualization module updates
- Added more tests
- Added
utilities.vector_generate
function - Fixed some compatibility issues (related to future releases)
- Bug fixes in
make_triangle
- Add
VisSurface
class to visualization module
- Added
make_triangle
function - Updated visualization module
- Minor updates
- Bug fix release
- PyPI description update (requires version bump)
- Minor updates and bug fixes
- Reorganize and update Matplotlib visualization component,
VisMPL
Please note that updates to VisMPL
component might cause a small API break on the visualization module, and therefore it is marked as experimental from now on. Updates to visualization component do not affect NURBS evaluation components.
Currently, VisMPL
has the following classes:
VisCurve2D
for 2D curvesVisCurve3D
for 3D curvesVisSurfWireframe
for surfaces (usesplot_wireframe
function)VisSurfTriangle
for surfaces (usesplot_trisurf
function)VisSurfScatter
for surfaces (uses 3Dscatter
function)
- Added checks to knot vector assignments
- Added 'tangents', 'normals' and 'binormals' methods to Curve classes
- Added 'tangents' and 'normals' methods to Surface classes
- A new example added to documentation
normal
method of theSurface
type classes has been updated. It now returns a list containing 2 elements. First one is the starting point (or origin) of the normal vector and the second one is the normal vector itself.- Added
normal
andbinormal
methods to theCurve
andCurve2D
type classes - Minor fixes to the inline documentation
- Visualization figure updates
- Bug fixes in
Surface
classes - Added tests
- AppVeyor and Travis-CI integration
- Documentation updates
- Style updates and code reformatting after pylint
- Bug fixes
- Documentation updates
- Documentation updates
- Minor updates to
VisMPL
, a visualization module which implements Matplotlib - Documentation updates
- Version bump for fixing issues on Python Package Index (PyPI).
- Version bump for Python Package Index (PyPI) upload.
- Initial stable release of NURBS-Python v3.0.0
- Added the library to Python Package Index (PyPI).
- Bug fixes
- Update visualization component
- Added visualization module.
Visualization module is an optional module for NURBS-Python. In other words, you don't need to import it to evaluate surfaces and curves.
The visualization module currently includes a base class VisABC
which can be used to create new visualization components, and VisMPL
component that implements Matplotlib for 2D and 3D plotting.
Please see the following for usage examples:
- ex_curve01.py - 2D Curve
- ex_curve3d01.py - 3D curve
- Surface visualization component is also complete but currently there are no examples. Please check the examples repository for more details.
This is the first beta release of NURBS-Python after a huge set of new features and updates. Unfortunately, there has been some API changes between v2.x and v3.x series but these changes are not too big, so you might only need to change the import statements to make things working again.
The v2.x code is moved to 2.x
branch. This version will not receive any updates, since I would like to focus on v3.x branch from now on.
- Please check the README file and the documentation for changes in the implementation. I updated the class structure and now the code has different classes for 2D and 3D curves. I also added different classes for B-Spline (NUBS) and NURBS implementations of curves and surfaces.
- There are more file reading and writing routines, such as different types of TXT formats and CSV export for using the data for various visualization software.
- Of course, new version fixes some of the bugs and reorganizes the code
- The documentation is reorganized and vastly improved: http://nurbs-python.readthedocs.io/en/latest/ -- You can still access v2.x series documentation here.
- New functionality: Knot insertion in curves and surfaces
- JSON support (will be extended/merged from the existing branch)
- An optional visualization module using Matplotlib. Visualization module can be extended to use other visualization tools.
- New CSV and TXT export modes
- Documentation improvements and more examples
The examples repository is also updated with some nice visualization examples using Matplotlib and demonstrating new TXT and CSV export features. Please check it out here: https://github.com/orbingol/NURBS-Python_Examples
- Added
order
property
- Minor updates in documentation
- Moved examples to a different repository
- Bug fixes
- Fixed a bug in
Curve::evaluate_rational()
method which causes erroneous NURBS curve evaluation - Added a new NURBS curve example (ex_curve04.py) on evaluation of a full circle
- Documentation updates
- Documentation updates for the ReadTheDocs page
- Added
rotate_x
androtate_y
functions to the Grid class - Updated documentation
- Minor bug fixes
- Added
read_ctrlptsw()
method to theCurve
class - Some minor documentation updates
- Added a 2D grid generator
- Minor bug fixes