Changelog
The format is based on Keep a Changelog. This project adheres to Semantic Versioning. Types of changes: Added, Changed, Deprecated, Removed, Fixed.
[0.4.2] - 2025-07-27
Added
examples: Added three new examples: Discrete cadenoid, Discrete Schwarz-P, and exponential ring patterns
halfedge: Added functions to integrate discrete one-forms:
integrate_one_formandverify_closure_one_formmath:
quad_grid_with_periodicityadditionally outputs uv coordinatesifs:
grid_with_periodicityadditionaly writes uv coordinates into attribute
Fixed
halfedge: Fix bug in
bicolor_edgeshalfedge: Fix in
diagonalsobj: Add obj conversion to automatic import
obj: Fix regex to handle numbers with e notation
geometry: Fix error in TypeError for quadrics
[0.4.1] - 2025-04-25
Added
docs: Updated and extended freestyle docs.
Fixed
docs: Added conversion functions imported from private modules to all. This ensures that they appear in the sphinx API docs.
[0.4.0] - 2025-04-15
Added
conversion: New arguments added to the main conversion functions
ddg.blender.convert,ddg.jupyter.convert,ddg.arrays.convertsuch ascurve_sampling,surface_sampling,subspace_size,point_radius,curve_radiusconversion: All main conversion functions can handle all convertible (to
arrays) types now.conversion: Convertible (to
arrays) types includeSmoothNetnow.geometry: Added methods to switch between different geometries directly inside the classes.
Changed
blender: Blender conversion moved to
ddg.blender.convert. See alsoddg.blender.vertices,ddg.blender.edges,ddg.blender.scatter.blender:
ddg.blender.scatterhas been slipt intoddg.blender.scatterandddg.blender.vertices.jupyter: Jupiter conversion moved to
ddg.jupyter.convert. See alsoddg.jupyter.vertices,ddg.jupyter.edges,ddg.jupyter.scatter.arrays: Module
ddg.conversion.arraysfor conversion to array based datatypes moved toddg.arrays. In particular the conversion function moved toddg.arrays.convert.geometry: Renamed
dualizemethod of subspaces and quadrics todualgeometry: Moved angle bisector and reflection functions to
euclidean_models.ProjectiveModel
Removed
blender: Removed old blender conversion
ddg.to_blender_object. Useddg.blender.convertinstead.jupyter: Removed
ddg.jupyter.k3d.to_tubes_and_spheres. Useddg.jupyter.verticesandddg.jupiter.edgesinstead.geometry: Removed redundant
ellipse_from_focifunction from_quadrics
[0.3.1] - 2025-04-10
Fixed
installation: Fixed import error in
ddg.jupyterdue to missing dependenciesdocs: Added jupyter installation guide
[0.3.0] - 2025-04-07
This is an intermediary version to major strucural and API changes in the visualization framework. It adds a new blender conversion framework (as a well a k3d visualization framework for jupyter). The old blender conversion is still contained, but all documentation and exmaples use the new one. The old blender conversion will be removed in the next minor version, and the API of the new one will be changed.
Added
blender: Added new blender conversion
The new main conversion function is given by
ddg.blender.oject.to_blender_object_V2In the current version it coxexists in parallel with the old function
to_blender_oject, which will be complete removed in an upcoming versionCorresponding representations of vertices by spheres and edges by tubes are given by
scatterandedges, which already replace all previous implementations of “tubes and spheres”ddg.blender.object.array_to_objectconverts curves and meshes innumpy.ndarrayrepresentation to Blender objectsMultiple additions to
blender.curve,blender.mesh,blender.objectNew conversion is used in all examples
ddg.blender.propshas been simplified accordinglyThe documentation was changed to describe the new conversion mechanism
conversion:
ddg.conversion.arrays._arrayconverts most pyddg objects to curves and meshes innumpy.ndarrayrepresentationThe output is one of the following new internal basic data types:
ddg.conversion.arrays.Points,ddg.conversion.arrays.Curve,ddg.conversion.arrays.CurveList,ddg.conversion.arrays.MeshThis is the basis of the new blender conversion, yet completetly independent of blender, and will be the basis for any other visualization framework
blender: Added argument for the center in
bmesh.cut_bounding_boxblender: Update to Blender 3.6 LTS
blender: Added module for freestyle setups
ddg.blender.freestyleblender: Added conversion for
QuadricIntersectionof dimension 1.jupyter: Added visualization for jupyter notebooks
errors: An ad-hoc mechanism for error messages was introduced in
ddg._error_messagesdocs: Added more snapshot tests
docs: Added entry on reflection in hyperplane
docs: Included changelog into docs
docs: Added entry on math modules
docs: Revised tutorial
examples: Added reflection in hyperplane
math: Additions from clean up of
inner_productinclude:Added
col_complement_oriented/row_complement_oriented, which ensure positive determinant, and correspondinglydualize_orientedandpolarize_orientedAdded
vectorize_inner_product
math: Added examples to docstrings
math: Added
quad_grid_sandwichto create vertices and faces of quad grids with sandwich combinatoricsmath: Added subdivision by fan triangulation
triangulated_facesgeometry: Added
__str__for geometrieshalfedge: Added arguments to
halfedge.copy:original_vetex_attr,original_edge_attr,original_face_attrgeometry: Added the
SphericalModelto elliptic geometrygeometry: Added the ability to pass lower-dimensional spheres to
lift_sphere_to_quadricgeometry: Added
sphere_through_pointsandorthogonal_sphereto Euclidean, hyperbolic and elliptic geometrygeometry: Added
radical_subspaceto Euclidean geometrygeometry: Added docstring for projection dispatcher
geometry: Added
QuadricIntersectionclass to represent intersections of quadricsgeometry: Added extensive functionalities to
Pencilfor classificationgeometry: Added
SignatureSequence,IndexSequence, andSegreSymbolfor pencil classificationgeometry: Added functions to generate quadrics from inital data:
ellipse_from_foci,quadric_from_points,quadric_from_three_skew_linesifs: Added
grid_sandwichto create grids with sandwich combinatoricsifs: Added
dualizefor combinatorial dualization of IFSifs: Added
mean_values_on_facesto create attribute on faces by taking the mean of an attribute on incident verticesifs: Added
__eq__forddg.indexedfaceset.OrientedFaceto check for equality of tuples up to cyclic permutationifs: Added
sample_domainto create grids as samplings from rectangular domains (with periodicities)ifs: Added
transform_attributeto apply transformations to IFS attributestests: Add helpful messages to
test.pywhenever tests fail
Changed
docs: Introduced
docs/source/conf.pywhich contains versions and other variables for the docsdocs: Improved section on getting started with blender
math: Clean up of
inner_productincluding:Renamed
get_col_complement->col_complement,get_row_complement->row_complementRenamed
points_on_quadric_from_onb->light_like_vectors_from_onbVectorized all functions
math: Moved all parametrizations (circle, sphere, torus, …) into
math.parametrizationsdocs: Restructered some sections
docs: Added section on
mathmoduledocs: Fefactor visualization users guide and fix spheres visualization guide, removed docstring.txt
build: Tag script does not push to develop
build: Test script does not build all versions of docs by default
build: Treat warings as error in docs build
build: Show traceback of errors in docs build
geometry: Simplified
intersectandjoinfunctionsgeometry: Moved all classes related to signatures to
ddg.geometry.signatures
Removed
blender: Removed tubes and spheres representations for half-edge - These have been replaced by
scatterandedgesof the new blender conversion mechanism - Removed have beenvertex_objects,edge_objects,vertex_spheres,edge_tubes,hes_to_tubes_and_spheres_blender_objectblender: Removed
overwrite_callback,hide_callback,clear_callback- Replaced byhide_previousand mechanisms which do not rely on any of those functions
Fixed
docs: Fixed version panel for deep pages
geometry: Fixed conversion of quadric to Euclidean sphere for spheres of radius 0
geometry: Fixed conversion of sphere to smooth net for dimensions not equal to 1 or 2
ifs: Fixed
neighboring_facesreturning faces with multiple common edges multiple timesblender: Fix in
intersection: Fixed zig zag lines and missing intersections in multiple component intersectionstests: Fixed ignored tests for IFS in
test_utils
[0.2.1] - 2024-05-23
Added
math: Added energy module with some discrete local energies
docs: Add example in docstring for
collection
Changed
tests: More flexible snapshot test mechanism
Snapshot test funcionality moved from
snapshottosnapshotsReplaced
opt_inby explicit tests locatedtesting/tests/examples/blender/test_examples.py
halfedge: Creation of surfaces redone by using
ifs_generatorand converting the resurt to halfedgeSome funcions and arguments have been changed in the process
ifs: The
Gridsubclass ofIndexedFaceSetwas removedIts functionality is replaced by
ddg.indexedfaceset.grid_with_periodicityand other already existing functions of_ifs_generator
blender: New defaults for
setup_eevee_rendererandsetup_cycles_renderer
Fixed
docs: Corrected link to docs in readme
docs: Doc string corrections in
mathdocs: Corrected link to develop docs online
tests: Coverage fixes for blender tests
nets: Fixed
shrink_domainforDiscreteInterval
[0.2.0] - 2024-05-06
Added
docs: Multiple versions of the docs available online
build: New mechanism to build all doc versions
Changed
major changes to the package structure and imports
Removed
visualizationanddatastructuresfrom the package structurePulled up most of the module contents
geometryPulled up most of the module contents in
halfedge,indexedfaceset,netsSome modules became private during the pull up, some functions and classes were renamed in the process
[0.1.9] - 2024-04-29
Added
blender: Some additions to
render_frameandrender_animationAdded default render path
Automatically add file extension
Respect image output properties set in set_render_output_images
docs: Section for Blender tips and tricks and a guide on Blender crashing
examples: Exercise on envelopes and orth trajectories for families of circles
examples: Exercise on caustics
examples: Exercise on channel surfaces
tests: Activated some doctests by removing SKIP flags
build: Building docker images with GitLab CI
Changed
docs: Moved sampling guide examples from domain to nets
geometry: Restructured
Transformableso thatX.transform()does not mutateXanymore and returns a transformed copy insteadgeometry: In
SubspaceandQuadricthematrixis cast to dtype floatgeometry:
Pencilnow has methodmatrix(u), which supports complex matrices, whilequadric(u)only supports real quadrics.blender: Some clean up of blender utils. This includes renaming the attributes of some functions. In particular
type->type_.tests: Blender tests raise ImportError if and only if bpy cannot be imported
Replaced automagic importing with explicit imports
Fixed
examples: Fixed AttributError in curvature circles
[0.1.8] - 2024-01-10
Added
examples: Elliptic billiards example
examples: Cycloidal pendulum example
geometry: Add subspace function reflect_in_hyperplane
Changed
geometry: Introduced new geometry concept
Module for each geometry
ddg.geometry.*_models, which contain classes for each model and conversion between different models.Projective models also available as
ddg.geometry.*()Spheres are created by factory methods from inside the geometry model classes
New interfaces in
ddg.geometry.abcembedandcoordinatesare nowembedandunembed
[0.1.7] - 2024-01-08
Added
examples: Curvature cirlces example with animation
docs: Added docs on Blender’s Python API for selections
blender: Some additions to the new Blender conversion API
optimize: IFS optimization
Changed
docs: Improved rendering users guide
docs: Improved animations users guide
docs: Revised guide on scripting in blender
docs: Improved sampling users guide
[0.1.6] - 2023-11-30
Added
tests: Snapshot tests for blender examples.
examples: Evolutes and involutes of curves.
conversion: Added conversion from datastructures and geometry object to arrays as first step of revised blender conversion
nets: Add test for periodicity of circles
Changed
examples: Updated Moebius pencil example
blender: Setting values of BSDF materials
docs: Improved materials and rendering user’s guide
Fixed
geometry: Fixed docstring
[0.1.5] - 2023-11-15
Added
docs: Net visualization examples with cut_bounding_box
math: Added angle, length bisectors, and reflection matrices
geometry: Added orthonormalize_and_center for subspaces
geometry: Added functions for angle bisectors and perpendicular bisectors
Added module
nonexactto replaceNonExactclass andnonexact_functiondecorator
Changed
examples: Updated shadow of an ellipsoid example
Replaced
NonExactclass andnonexact_functiondecorator with functions fromnonexactmodule for elementary nonexact computations that use the global defaults.examples: Updated triangles in perspective
tests: Doctests are now run with
pytestinstead ofsphinx.ext.doctest
Fixed
docs: Windows installation
tests: Fix and speed up benchmark_touching_cones
Removed
blender: Removed mesh selection functions
Removed
NonExactclass andnonexact_functiondecorator to be replaced bynonexactmodule
[0.1.4] - 2023-10-23
Added
nets: Added
utils.composefunction to replace the methodtransformdocs: Included some geometry visualization exercises
Changed
nets: Net utils such as
homogenizeanddehomogenizenow return the resulting net instead of transforming itnets: The use of the method
transformis replaced byutils.composeeverywheredocs: Improved documentation index
docs: Revised blender users guide
docs: Improved conversion documentation
blender: Rewrote
mesh.intersection_curveand renamed tomesh.intersectionifs: Cleanup and improvements to
ifs_generatormath: Renamed
geometric_objectstodiscrete_objects(with cleanup and improvements)dev: Made test modules start with test_ and test classes start with Test
dev: Set ipython debugger as default
tests: Speed up ic-nets test
Removed
blender: Removed some dead Blender code
Fixed
blender: Fixed
mesh.intersection_curvewhich is now calledmesh.intersection
[0.1.3] - 2023-07-31
Added
docs: Added logo and favicon
docs: Installation guide for macOS
docs: Added local TOCs
docs: How to manage dependencies with Poetry
tests: flake8 option added to test script: test.py –lint
build: flake8 runs in the pipeline, and makes it fail for certain errors the corresponding errors have been fixed throughout the code
ifs: Added
Gridclass as subclass ofNgonalIndexedFaceSetmath: Added parametrizations for torus and mobius strip
blender: Added functions to create and animate transparent materials
blender: Added functions to set background images and videos
blender: Added module
contextthat provides context managermodeto set mesh select modesblender: Added context manager
bmesh.bmesh_from_meshto create a bmeshblender: Added
object.get_datablender: Added module
renderfor rendering setupgeometry: Added functions to create random subspaces
Changed
tests: Use a new rng fixture in all tests
math: Some clean up and renaming in
euclideanandeuclidean2ddocs: Use labels instead of line numbers for literalinclude
docs: Single backtick snippets are now interpreted as Python snippets
docs: Respect maximum line length of 88 in docstrings
ci: Use self-hosted docker images
ifs: Adapted ifs generators
gridandcylinderto useGridclassblender: Small changes in
lightblender: Docstring clean up in
objectblender: Adjusted behaviour of
mesh.transform,mesh.join,mesh.shade_smooth
Fixed
build: Avoid adding new files when using tagging script
build: Typos in test script
geometry: Small fixes and refactoring of
Quadricsandaffine_normalization(including 1x1 matrix support)
Removed
blender: Removed
object.move_to_layer
[0.1.2] - 2023-04-23
Added
examples: Shadow of an ellipsoid
geometry.subspaces: least_square_subspace_from_affine_points
math.grids:
triangulate_quads,triangle_grid,triangulated_quad_griddocs: Added / updated sections in the developer’s guide
Changed
geometry.quadrics: Improved
Quadric.__str__geometry.intersection: Restructure meet and join. Improved dispatching and documentation.
blender.object: Clean up. Renamed and removed several functions.
blender.clear: Removed the clear module and distributed the clear functions to the resp. modules
conversion: Relocated and cleaned
obj_to_ifs,ifs_to_obj,obj_to_hds,hds_to_objClean up of init files
docs: Changed to read the docs style
Fixed
math.euclidean: Various small fixes. In particular, adding @NonExact.nonexact_function to some functions
geometry.quadrics: Improved Pencil symbolic roots computation
geometry.subspaces: Fixed least_square_subspace
tests: Fixed test discovery to include *_test.py and *Test again
[0.1.1] - 2023-01-24
Added
tests: Add style check by black
examples: Conics from circles with animation
geometry:
ddg.geometry.quadrics.ellipse_from_focimath.euclidean:
intersect_diags,distance_linesmath.linalg:
minorsblender: Functions to save and load blender properties
save_propsandload_propsconversion.nets: In all
*_to_smooth_netfunctions the default values are changed toaffine=Trueandconvex=Truetests: Add pytest fixture to clean up scene before and after each blender test
Changed
style: All files have been reformatted by black
tests: Change all tests from unittest to pytest style
blender: The following functions were moved from
ddg.visualization.blender.objecttoddg.visualization.blender.meshand anyadd_orcreate_preffixes were removed:duplicate_by_properties,duplicated_by_transformation_matrices,duplicate_linked,join,connected_components,intersection_curve,selected_vertices_of_active_objectmath.euclidean2d: As part of a general cleanup the following functios were renamed
diagonals_intersection->intersect_diags,vertex_angle_with_sign->vertex_angle_signed,circumcircle_center->circumcenter,circumcircle_radius->circumradius,coordinates_on_circle_from_cross_ratio->fourth_point_from_cross_ratiomath.linalg: General cleanup
conversion.nets: Improved subspace conversion. Extracted functions
parametrize_subspace_convexandparametrize_subspace_homogeneousdocs: Improved docs on geometric object visualization
[0.1.0] - 2022-12-06
Added
geometry: Added functions
embedandcoordinatesmethods togeometry.Quadricandgeometry.Subspaceto raise and lower the dimension of their ambient space.geometry: Added
coordinate_hyperplanetogeometry.subspacesmath: Added functions to create and decompose affine and similarity maps in homogeneous coordinates to
math.projective:affine_map,decompose_affine_map,similarity_map,decompose_similarity_map, and a function to change between affine pictures:affine_component_transformationbuild: Added dependency: deprecation
Added
ddg.__version__stringtests: Automatic tests of examples in
examples/blender/geometry/geometry: Method
change_affine_pictureto change affine coordinates added toLinearTransformableexamples: Added some blender geometry examples:
lines in a projective plane,
three triangles in perspective,
cross-ratio of a tetrahedron
blender: Added functions to create duplicate linked objects. In particular for each cell of a half-edge surface. The funcions
vertex_spheresandedge_tubesreplacehes_to_tubes_and_spheres_blender_object
Changed
geometry: All projection functions moved from
geometry.conversiontogeometry.projectiondatastructures: Various improvements to
ifs_generatordocstringsdocs: Flattened ddg.geometry user’s guide outline
Deprecated
hes_to_tubes_and_spheres_blender_objectwill be removed in v0.2.0. Usevertex_spheresandedge_tubesinstead.
Fixed
visualization: Small fixes in
blender.materialutils: Return blender object, and allow any sequence setting color.
Removed
geometry: Removed
affine_componentarguments from all functions and objecst, and replaced it with the “last component” convention. The methodchange_affine_picturecan be used instead.
[0.0.3] - 2022-11-14
Added
docs: First tutorial
ifs: Added
gridandtriangle_gridtoifs_generator
Changed
build: Improved tag script
math: Renamed some functions in
math.complex:diagonals_intersection->intersect_diags,circumcircle_center->circumcenter,circumcircle_radius->circumradiusmath: Moved
math.complex.triangle_area_from_length->math.euclidean2d.triangle_areaRemoved trailing whitespace
blender: Renamed some functions in
visualization.blender.mesh:bisect_plane->cut_half_plane,cut_between_coordinate_planes->cut_between_coordinate_half_spaces
Removed
Removed some updategraph remains
Fixed
docs: Windows and macOS installation guide
docs: Added missing import in tutorial
docs: Fixed blender visualization docs
[0.0.2] - 2022-10-20
Added
math: Scale rotation between two vectors:
ddg.math.euclidean.scale_rotation_from_tobuild: Recursively import all submodules
docs: Support section,
docs: Blender rendering guide
Changed
Moved
numpyversion up to 1.22blender:
object.add_rootmoved tomesh._rootdocs: New introduction
docs: Moved constributers installation to developers guide
docs: Improved Blender properties guide
docs: Improved installation guide
Fixed
math:
ddg.math.euclidean.rotation_from_tonow returns 180 degree rotation for anti-parallel vecters and does not scale vectors
[0.0.1] - 2022-10-18
Added
blender: Function to create Blender Principled BSDF material:
ddg.visualization.blender.material.materialblender: Function to set matrix_world of Blender object:
ddg.visualiaziotn.blender.object.set_matrix_world
Changed
docs: Update installation guide.
build: Improved tag script.
[0.0.0] - 2022-10-17
initial release