- 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
filenameargument when plotly visualization module is used - Added offscreen rendering support for VTK visualization module
- Fixed issues #59, #61 and #62
evaluatorsAPI and documentation updates- Documentation updates
- Docker configuration updates:
latesttag points to Python v3.6
- Update
control_pointsmodule - Fix a bug in
operations.refine_knotvectorfailing 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_pointsmodule
- Improved
linalgmodule - Added
control_pointsmodule for managing control points - Bug fixes and improvements
- Documentation updates
- Reduced set control points restrictions for surfaces.
Surface.set_ctrlptsnow accepts 2-dimensional control points. - Deprecated
saveandloadmethods defined inBSplinemodule in favor ofimport_jsonandexport_json - Generalized
operations.add_dimensionAPI call to work with allSplineGeometrysubclasses - Documentation updates
- Fix incorrect dict export of trims in trimmed surfaces
- Add analytic trim curve support to trimmed surface dict export
- Change
VolumeContainerbase class fromSurfaceContainertoAbstractContainerand 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_3dmandexchange.import_3dmin favor of rw3dm v2.0 - Documentation updates
- Minor refactoring in
elementsmodule (no API change) - Visualization figure objects are now accessible outside the geometry classes,
rendermethod returns the figure object vertex_spacingis set to 1 for consistency between the exchange and visualization modulesverticesproperty of theSurfaceclass returns the exact list of vertices used in generation of the triangles- Minor bug fixes
- Documentation updates
- Moved some
sixmodule functions andbackports_functools_lru_cachemodule under geomdl directory - Removed
typingdependency (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
operationsmodule (no API change) - Updated
multimodule - Updated
elementsmodule 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_polydatato support tessellated surfaces and geometry containers - Refactored
tessellationmodule (internal API change, user API is the same and comes with improvements) - Added
tessellate.QuadTessellateclass - Added
==and!=operators toSplineGeometryclasses - Added
freeformmodule - Improved the surface trimming algorithm to handle edge cases
- Added
trimmingmodule to fix different types of trim curves (open, multi-curve, etc.) - Added an option to set trim curve sense; i.e.
sense = 0means trim inside,sense = 1means 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
alphaconfiguration directive toVisMPLto 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.corebinaries for v5.0.2 and version bumped for user convenience
- Removed dependency
enum34since 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_operationsfunction for degree elevation and reduction (still WIP) - Added more surface decomposition options to
operations.decompose_surfacefunction - 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_objfunction - Added knot removal, degree elevation and degree reduction algorithms
- Simplified evaluator API to make implementations easier
- Added
knotvectormodule - 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
exchangemodule - 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.Geometryandabstract.SplineGeometryclasses - Improved
multimodule 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_isosurfacefunction - Updated
VisVTKmodule - Updated
vis.VisAbstractclass - Minor fixes and updates
- Simplified
abstractmodule and moved all abstract classes to their relevant modules - Removed
curveptandsurfptmethods. Useevaluate_singleinstead. - Added an option to enable/disable knot vector normalization. Initialize the class with
normalize_kv=Falseto disable knot vector normalization. - Added B-spline and NURBS volume support with visualization,
BSpline.VolumeandNURBS.Volume - Refactored
convertmodule to improve reusability and add support to volumes - Refactored
exchangemodule to improve reusability - Rhino file export and import options,
export_3dmand,import_3dminexchangemodule - Added
exchange.export_vmeshfor exporting NURBS volumes - Add Jinja2 template support for
exchange.import_txt - Update the name of
utilities.check_uvfunction toutilities.check_params - Refactored
utilitiesmodule and moved some functions tolinalgmodule VisMPL.VisSurfTriangleis now an alias forVisMPL.VisSurfacefittingmodule for curve and surface global interpolation + approximation (fitting)constructmodule for constructing surfaces and volumes + extracting surfaces and curveslinalgmodule (generated by splittingutilitiesmodule)VisVoxelandVisVolumeclasses for volume visualizationVisVTKvisualization module
- Fix PyPI description
- Prepare for NURBS-Python v5 release
- Fix bugs in
export_csvandexport_smeshfunctions
- 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_cfgexport_yaml,import_yamlexport_json,import_json
exchangemodule code optimizations
- Fixed a bug in bounding box computation
- Added bounding box plotting option to the visualization module (still WIP)
- Added
bboxproperty toMulti-type classes - Documentation updates
- Added
evalptsproperty toMultitype of classes - Updated conda-build recipe
- Updated
deltaandsample_sizeproperties ofMultiCurveandMultiSurfaceclasses. They are now compatible withCurveandSurfaceclasses. - Added
exchange.export_yamlfunction (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
utilitiesmodule - Documentation update for compiling the package with Cython
- Added
axes_equalandevalptskeyword arguments to visualization config class - Added
set_plot_typemethod 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
Tessellateclass for customization of the surface tessellation algorithms - Basic trimmed surface support (still work in progress)
- Updated
elementsmodule - Visualization module improvements and added support for displaying trim curves for surfaces
- Added
evaluate_singleandevaluate_listmethods - 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
nameproperty - Updated
Multi.MultiCurveandMulti.MultiSurfaceconstructors 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,splitanddecomposemethods tooperationsmodule derivativesmethod is added as an abstract method toAbstract.CurveandAbstract.Surfacesince it is also a requirement for allEvaluatorimplementations.
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
exchangemodule - Updated triangulation functions
- Updated
elementsmodule - 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
utilitiesmodule
- 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
deltaandsample_sizeproperties
- Bug fix: Use
sixpackage to maintain Python 2 and 3 interoperability for meta classes - Bug fix: Updated
orderproperty for curves andorder_u,order_v,deltaproperties 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
exchangemodule 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
Evaluatormodule for changing evaluation algorithms at runtime - New
convertmodule 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_adjustargument - 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.ctrlptswnow 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
utilitiesmodule - 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
exchangemodule updates- Documentation updates
- Several bug fixes and compatibility updates
- Documentation updates
This is the first beta version of NURBS-Python v4.x series.
-
Updated
NURBSclass control points / weights getters and setters -
Rearranged / updated some functions and properties to clean up the
BSplineandNURBSclass structure -
Control points reading and CSV export functionality are moved to
exchangemodule -
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
VisMPLmodule displays all figures in the correct aspect ratio
- Bug fix release
- Fixed a bug when
_reset_ctrlptsfunction resets the bounding box
- Bug fix release
- Bug fix release
- Removed unnecessary evaluations while setting
sample_sizeanddeltaproperties.
- Added
delta_uanddelta_vproperties to Surface classes. This change allows different sampling in u- and v-directions - Fixed some bugs related to
sample_sizeproperty - Replaced
deltawithsample_sizein Multi classes.sample_sizeproperty directly corresponds tonumargument 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_sizeproperty.
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
exchangemodule
- Code reorganization
- Bug fixes
- Updated NURBS module to have an extensible variable cache
- Minor bug fixes
- Fixed a bug in Multi module
rendermethod which fails to work afterVisMPLupdate. - Fixed a bug in
frangefunction 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
compatibilitymodule- Performance improvements
- Compatibility fixes and updates
- Documentation updates
- Code reorganization (no API break)
compatibilitymodule enhancements
- Removed super restrictive knot vector checks
- Improvements in curve/surface evaluation functions
- Performance improvements
- Bug fixes
- Documentation updates
- Added
compatibilitymodule for control points manipulation - Updated documentation
- Added remove axes option to Matplotlib visualization module
- Added
translatewrapper 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
exchangemodule - Fixed some bugs in
utilitiesmodule - Added experimental Export surfaces as .stl support, with
exchange.save_stl()
- The core library now utilizes
AbstractandMultimodules - Curve classes now have
split()method for curve splitting at the given parameter anddecompose()method for Bézier decomposition - Shapes module upgrades
- Added
decomposemethod to curve classes for applying Bézier decomposition - Added
add_listmethod toMultimodule
- 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
exchangemodule save_objcan 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. Multimodule 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.Abstractmodule 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
exchangemodule with the capability to save surfaces as .obj files - Added
shapesmodule to automatically generate well-defined NURBS curves and surfaces - More configurable
visualizationmodule - 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_generatefunction - Fixed some compatibility issues (related to future releases)
- Bug fixes in
make_triangle - Add
VisSurfaceclass to visualization module
- Added
make_trianglefunction - 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:
VisCurve2Dfor 2D curvesVisCurve3Dfor 3D curvesVisSurfWireframefor surfaces (usesplot_wireframefunction)VisSurfTrianglefor surfaces (usesplot_trisurffunction)VisSurfScatterfor surfaces (uses 3Dscatterfunction)
- 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
normalmethod of theSurfacetype 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
normalandbinormalmethods to theCurveandCurve2Dtype classes - Minor fixes to the inline documentation
- Visualization figure updates
- Bug fixes in
Surfaceclasses - 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
orderproperty
- 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_xandrotate_yfunctions to the Grid class - Updated documentation
- Minor bug fixes
- Added
read_ctrlptsw()method to theCurveclass - Some minor documentation updates
- Added a 2D grid generator
- Minor bug fixes