Changelog¤
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[0.9.1] 2026-11-11¤
Added¤
- Added uv instructions following
jax_fdm:uv addanduv pip installin the installation guide and the README, anduv sync --extra devwithuv runfor contributors, pinned by a committeduv.lock..gitignoreexcluded the lock on the belief that it would pin every CI job, but CI installs with pip, and uv's pip interface ignores a lock anyway. The pip commands stay as the fallback, and CI still installs with pip. The development tools stay in thedevextra rather than dependency groups, becausecompas-actionsinstalls.[dev]. - Added an icon for each Grasshopper component, replacing the CEM logo all 38 shared; Info keeps the logo. Each component folder holds the TikZ source
icon.texbeside itsicon.png, andcomponents_cpython/icon_style.texholds the shared palette, group tiles and styles. The icons follow the conventions of the CEM diagrams and the Grasshopper icon guide's empty border and drop shadow. Each tile is framed in a dark shade of its group's color, since a light frame washed out in Grasshopper. - Added the
build-iconstask, which renders eachicon.texinto a 24 pxicon.pngwith its drop shadow. It needspdflatexandpdftocairo; the icons are committed, so building the plugin does not. - Added
pillowto thedevextra, whichtasks.pyimports for the drop shadow.
Changed¤
- Refreshed
.editorconfigfrom the 2021 template so editors agree with the pre-commit hooks: two-space indentation now covers.yamlas well as.yml, Python uses ruff's 88 columns, and the Markdown andLICENSEexceptions, which the whitespace and end-of-file hooks undo, are gone with theMakefileand Windows script sections that matched no file. - Limited
uv.lockto Python 3.11 and newer through[tool.uv] environments. Resolved for 3.9 and 3.10 too, the lock pinned releases of Pillow, filelock, urllib3, cryptography and other development and plotting dependencies that have no security fix for those Pythons, which opened about a hundred Dependabot alerts. The package still supports Python 3.9, CI still tests 3.9 to 3.13 with pip, and work on 3.9 or 3.10 uses the pip route. - Extended the copyright years in
LICENSEfrom 2020-2021 to 2020-2026, and setcompas_cem.__copyright__to the license's holder with no year, asjax_fdmdoes. It readCopyright 2020 - Princeton University. - Moved every workflow to
actions/checkout@v7andactions/setup-python@v7. Thedev-docsjob still ran the deprecated Node 20 releasescheckout@v4andsetup-python@v5. - Replaced the
Zomzog/changelog-checkeraction, unmaintained since 2022 and declaring the retirednode12runtime, with a shell step that lists the pull request's changed files withgh pr diff --name-only. Theno changeloglabel still skips it. - Replaced the warning that the Grasshopper plugin is not installable with Package Manager instructions for Rhino 8 in the README and the installation guide. 0.9.0 ships the plugin on the Rhino package server, so the 0.9.0 README on PyPI still carries the outdated warning.
- Pointed the README's links to the examples, the API reference and the citing page at the
latestdocumentation instead ofdev, now that 0.9.0 is published. - Shrank the header animation to 960 by 540 pixels at 12 frames per second, 4.4 MB, from 1280 by 720 at 24 frames per second and 13.5 MB. PyPI loads README images through an image proxy, so the 0.9.0 page shows a broken image: GitHub's raw file host labels a file that large
application/octet-stream, and such proxies refuse non-image types and files over about 5 MB, as GitHub's own proxy does for the larger file.
Removed¤
- Removed the last conda references: the
conda.recipe/line in.gitignoreand conda as a virtual environment example inCONTRIBUTING.md. Every dependency installs with pip.
[0.9.0] 2026-11-10¤
Added¤
- Added
pyproject.toml, replacingsetup.py,setup.cfg,pytest.iniand.bumpversion.cfg. - Added
mkdocs.ymland a mkdocs-material documentation site. - Added
.github/workflows/pr-checks.yml. - Added regression baselines for every example under
tests/baseline, captured from 0.8.6 behaviour. - Added regression tests that
add_nodeandadd_edgeaccept both vocabularies, reject a mismatched element, and survive a JSON round trip and acopy(). - Added
Diagram.node_connected_edges, which returns the edges incident to a node. - Added
TopologyDiagram.__from_data__, which restores the integer keys of the trail bookkeeping after a round trip. - Added regression tests that trails and auxiliary trails survive a JSON round trip.
- Added
plotters/scene_objects.pyandviewers/scene_objects.py, replacing the artist and object modules of both visualization backends. - Added
tests/baseline/render.py, which renders every example headless for visual review of the plotters. - Added
ghpython/scene_objects.py, replacingghpython/artists.pywithcompas.scenescene objects that register themselves in theGrasshoppercontext. - Added
src/compas_cem/ghpython/yak_template/, holding themanifest.ymland the package icon thatyakerizewraps the built components with. - Added the
build_cpython_ghuser_components,update_gh_header,yakerizeandpublish_yaktasks totasks.py, together with theghuser_cpythonandyakconfiguration blocks they read. - Added a static
instanceGuidto all 39 componentmetadata.jsonfiles. The componentizer mints a fresh random GUID whenever the field is absent, so every build emitted different GUIDs and broke the components already placed in a.ghfile. - Added a
dev-docsjob that publishes the documentation built frommainas thedevversion.compas-actions.docsdeploys mkdocs on a version tag only, so between releases the site would otherwise show the last release and nothing newer. - Added a concurrency group to the build, docs and pull request workflows, so pushing to a pull request cancels its own in-flight run instead of queueing a second one. Pushes and tags keep a run-unique group, so a stuck run cannot hold up a deploy.
- Added
workflow_dispatchto the build and docs workflows, so either can be run by hand. - Added the yak publish to the release workflow. After the PyPI upload, which the components'
# r:header installs from, it packages the components withinvoke yakerizeand pushes them withinvoke publish-yak, authenticated by theYAK_TOKENsecret.compas-actions.publishonly builds the components, so no release had reached the Rhino package server. The push cannot be rehearsed on the test server: it is wiped each night and keeps its own records, so it rejects the API key thatyak login --ciissues on the production server. A manual run that pushed there built and packaged the components on Windows, then failed with a 401. - Added a
vizextra, read fromrequirements-viz.txt, holdingcompas_plotter>=1.0.1andcompas_viewer>=2.0, the backends ofcompas_cem.plottersandcompas_cem.viewers. They stay out of the core install so thatcompas_cemstays lean inside Rhino 8, where the viewer would otherwise pull in PySide6 and PyOpenGL for nothing. Thedevextra includes them. Importing either module without them raises anImportErrorthat names the extra. - Added a Made with COMPAS badge and a badge linking to the Computer-Aided Design article underpinning the framework to
README.md. - Added a pre-commit configuration with ruff check and format, whitespace, end-of-file, YAML, TOML, JSON and merge-conflict checks, and a check that fails when a personal name appears in project prose outside the authorship files, or in a commit message.
invoke lintrunsruff check --fixonsrcandtestsonly and never checks formatting, so the hook is the only check on formatting,examplesandtasks.py. Apre-commitjob in the pull request checks runs every hook on every file, so these checks also gate merges; commit messages are checked locally only.
Changed¤
- Migrated from COMPAS 1.17.10 to
compas>=2.15,<3.0. - Rewrote the installation instructions around
pipandvenv. conda is being phased out across the COMPAS ecosystem, andcompasno longer needs installing separately becausecompas_cemdeclares it. - Marked the Grasshopper plugin as not installable in this release. It linked into Rhino 6 and 7 through
compas_rhino.install, which COMPAS 2 removed. - Renamed
ConstrainttoGoalthroughout, a clean break with no deprecation aliases. The nine concrete classes, theVectorConstraintandFloatConstraintbases, theconstraintsmodule,Optimizer.add_constraintandremove_constraint, and the eight Grasshopper component directories all follow. This frees the nameConstraintfor genuine hard constraints, which nlopt supports and the package does not yet use. - Made
Diagram.add_nodeandDiagram.add_edgeaccept either a node or edge element, or a key with attributes. COMPAS 2 deserializes a graph by replayingadd_node(key=, attr_dict=)andadd_edge(u, v, attr_dict=), which the object-taking overrides shadowed, breakingcopy()andfrom_json(). Both entry points now dispatch on the argument, so the authoring API is unchanged and deserialization reaches the base graph. - Made the entry points reject a mismatched element rather than silently treating it as a node key:
add_noderefuses an edge element,add_edgerefuses a node element, and a key given both positionally and by name raises. - Folded
NodeMixinsandEdgeMixinsintoDiagramand droppedcompas_cem.data.Datafrom its bases.Datastructure.__inheritance__walks the MRO up toDatastructurecalling__clstype__()on every class in between, so a plainobjectmixin madeto_json()raise. - Changed the
toldiagram attribute from a format string to an integer count of decimal places, followingcompas.tolerance.TOL.geometric_key. - Ported serialization from the
dataproperty pair to__data__and__from_data__on goals and on edge and node parameters. - Gave
Goal,Parameter,EdgeParameterandNodeParameterdefault constructor arguments, so__from_data__can build one without knowing the concrete signature. - Regenerated
examples/03_bridge_2d.json, which was COMPAS 1.7.1 JSON and unreadable by COMPAS 2. Node and edge insertion order is preserved, because it sets the order of the optimizer's parameter vector. - Changed
requires-pythonfrom>=3.8to>=3.9,<3.14, and both CI matrices to 3.9 through 3.13, now that thedistutilsceiling is gone. The floor is 3.9 because Rhino 8 runs CPython 3.9 and every Grasshopper component installs this package into it; a 3.10 floor made that install fail. The macOS cell for 3.9 is left out becausecompas-actions.buildskips it without running anything. - Replaced the reStructuredText module docstrings and inline markup with Markdown, and moved parameter and return types out of docstrings and into the signature position that mkdocstrings renders.
- Migrated the plotters from
compas_plottersartists tocompas_plotter>=1.0.1scene objects, and the viewers fromcompas_view2objects tocompas_viewer>=2.0scene objects. Both register throughcompas.scene.registeron import, because compas discovers scene object plugins incompas*packages only. - Pinned the plotter node size policy to
relative. The upstream scene object defaults toabsolute, which divides the node size by the plotter resolution instead of the node count and draws markers two orders of magnitude smaller. - Drew the topology load crosses straight onto the canvas. A line scene object fixes its own stacking order in its constructor, which put the crosses underneath the opaque node markers.
- Fixed
state_formatin both visualization backends reading an undefinededgeinstead of the edge it was passed. - Fixed
DiagramObjectreferring toself.topology, which it never defined. - Fixed a
show_nodessetter that assigned to_show_edges. - Fixed
DiagramArtist.draw_reactionsdocumenting amin_loadparameter that its signature callsmin_force, andTopologyDiagramObjectdocumenting its argument asform_diagram. - Renamed
ghpython/components/toghpython/components_cpython/, matchingcompas_faband the CPython-only component format that Rhino 8 loads. - Named every Grasshopper component
<name> (COMPAS CEM)instead ofCOMPAS CEM: <name>. The componentizer only knows a prefix, so the suffix lives in eachmetadata.jsonname and theprefixsettings intasks.pyandrelease.ymlare gone. The instance GUIDs are unchanged, so components already placed in a definition still resolve. - Renamed the Form Artist and Topology Artist components to Draw Form and Draw Topology, and the
08_Artistssubcategory to08_Visualization. Their directories are nowCompasCem_DrawForm,CompasCem_DrawTopologyandCompasCem_Colors. COMPAS 2 replaced artists with scene objects, so the artist vocabulary was legacy. The instance GUIDs are unchanged. A plotter docstring and the quick start example drop the word too. - Made the Constrained Form-Finding component solve in-process. It solved through
compas.rpc.Proxy, which finds its interpreter through thecompas_bootstrappermodule that the COMPAS 1 Rhino installer wrote, so under COMPAS 2 it launched whateverpythonwas on Rhino's path, withoutcompas_cem. Rhino 8 runs CPython, so nlopt and autograd run inside Rhino and the component drivesOptimizerdirectly, as the Python examples do. - Ported all 39 Grasshopper components to Rhino 8 CPython: a
# r: compas_cem>=0.9.0requirements header,Grasshopper.Kernel.GH_ScriptInstancein place ofghpythonlib.componentbase.executingcomponent, PEP 484 annotations onRunScript, and the injectedghenv.Componentin place ofself, which is no longer the component. - Ported the 13 components that read Rhino geometry from the removed
compas_rhino.geometry.Rhino*wrappers to thecompas_rhino.conversionsfunctions that replaced them. - Annotated component inputs as optional where Grasshopper passes
Nonefor an unconnected input, underfrom __future__ import annotationsso that Rhino 8, which is CPython 3.9, does not evaluate the unions at definition time. - Read node positions in the Grasshopper scene objects from the scene object rather than from the diagram, so a transformation set on the object applies to everything it draws.
- Built the documentation on Python 3.12 instead of the
compas-actions.docsdefault of 3.10. On 3.10 the resolver pairspymdown-extensions12, whose highlighter gained a required argument, withmkdocstrings1.0.6, the last release for 3.10, which does not pass it, so every API page fails to render. - Moved the release publish job from
ubuntu-latesttowindows-latestand gave it the component-building inputs, because the componentizer loadsGH_IO.dll. - Fixed
_draw_forcesnormalizing a force vector before testing its magnitude, which divided by a zero length at a node carrying no load or reaction. - Fixed the Draw Form and Draw Topology components passing their diagram positionally to the scene object. The first parameter of a COMPAS 2 graph scene object is
show_nodes, so the diagram never reached the object and every draw failed on aNonegraph. Both now pass it asitem. - Fixed the Export Diagram component returning
diagram.data, which COMPAS 2 replaced with__data__, so it raised after writing the file. It now returns the JSON string it wrote, fromto_jsonstring, whichfrom_jsonstringcan read back. - Fixed
draw_reactionsraising on a node with no connected edge, where it searched an empty sequence for the strongest edge force. - Fixed the topology JSON import component declaring a class named
FormDiagramFromJSONand documenting itself as importing a form diagram. - Fixed a
typeHinIDmisspelling in the Draw Topology component'smetadata.json, which left two of its inputs without a type hint. - Replaced
rs.AddPointin the support node results component withpoint_to_rhino. Therhinoscriptsyntaxcall bakes a point into the Rhino document instead of returning geometry to the component output. - Returned an empty list rather than
Nonefrom the topology draw methods when a selection is empty. - Fixed the five Python example pages showing
--8 < --"examples/…"instead of the example source. A pymdownx snippet marker is valid python, soruff formatreformatted it as an expression inside the fenced block and the include stopped resolving. Markdown is now excluded from the formatter. - Moved the documentation from Sphinx and reStructuredText to mkdocs-material with mkdocstrings.
- Converted
README,CHANGELOGandAUTHORSfrom reStructuredText to Markdown. - Replaced the abandoned
pytest-lazy-fixturewithpytest-lazy-fixtures, which lifts thepytest<8ceiling. - Rewrote
tasks.pyto composecompas_invocations2tasks. - Updated CI to
compas-actions.build@v5,compas-actions.docs@v5andcompas-actions.publish@v3. - Replaced the Zenodo badge in
README.mdwith a static shields.io badge on the concept DOI10.5281/zenodo.5705740, which always resolves to the latest deposit. The badge Zenodo generates is rendered on request and frequently times out behind the GitHub image proxy, so it showed up broken. - Fixed the badges and links in
README.md. The Python badge read the classifiers of the latest PyPI release, so it showed 3.8 and 3.9; it now readsrequires-pythonfrompyproject.tomlonmain. The documentation links pointed at Sphinx pages the mkdocs site does not have, and the COMPAS tutorial and API links at pages COMPAS 2 moved. The build badge uses the current workflow badge URL. - Shrank the header animation from 3200 by 1800 pixels and 76.5 MB to 1280 by 720 pixels and 13.5 MB, renamed it
staircase.gif, and linked it fromREADME.mdby absolute URL. PyPI does not host the repository's files, so the relative path showed as a broken image on the package page. - Replaced flake8, isort, doc8 and pydocstyle with ruff, and reformatted the code base to 88 columns.
- Loosened dependency version from
numpy<2tonumpy>=1.26. The upper bound was never necessary; the test suite passes on numpy 2. - Pinned ruff to 0.16.1 in
requirements-dev.txt, matching the pre-commit hook, so the hook,invoke lintand CI run the same ruff. - Replaced the stale
masterbranch withmaininCONTRIBUTING.mdand dropped it from the pull request checks trigger.
Removed¤
- Removed the dependency on
trimesh. It was never imported: its only reference isoptimization/goals/mesh.py, which is commented out of the package. - Removed
.travis.yml, which targeted Python 2.7. - Removed the
compas_cem.diagrams.mixinspackage, folded intoDiagram. - Removed
Diagram.connected_edges, superseded bynode_connected_edges. COMPAS 2 gives the inherited name a different meaning: it takes no node and returns edge groups per connected component. - Removed
plotters/proxy.py. It was dead code calling aFormPlotterand aTopologyPlotterthat no longer exist. - Removed the
FormArtist,TopologyArtistandDiagramArtistplotter classes and theregister_artistsplugin, superseded by the plotter scene objects. - Removed
ghpython/install.pyandghpython/uninstall.py, and with them theinstallable_rhino_packagesandafter_rhino_installplugin hooks. Grasshopper components ship through yak only. - Removed
ghpython/artists.pyandghpython/register.py, superseded by the Grasshopper scene objects, which register on import as the plotter and viewer ones do. - Removed the
__all_plugins__declaration fromcompas_cem/__init__.py, which named the three deleted modules. - Removed the Proxy Server Grasshopper component. It only started and stopped the RPC server that the Constrained Form-Finding component no longer uses.
- Removed
optimization.solve_proxyand thecompas_cem.PROXY_PORTconstant. They existed only for the RPC call that the Constrained Form-Finding component no longer makes. A solver that cannot run inside Rhino, such as a JAX backend on Rhino 8's Python 3.9, would need its own entry point, not this nlopt wrapper. - Removed
isAdvancedModefrom all 39 componentmetadata.jsonfiles. It only meant anything to the Rhino 7 IronPython component format.
[0.8.6] 2025-02-24¤
Added¤
Changed¤
- Loosened dependency version from
autograd==1.5toautograd. - Loosened dependency version from
numpy==1.26.3tonumpy<2.
Removed¤
[0.8.5] 2025-01-23¤
Added¤
- Implemented
FormDiagram.from_equilibrium_stateconstructor for compatibility withjax_cem.
Changed¤
Removed¤
[0.8.4] 2025-01-15¤
Added¤
Changed¤
- Pinned dependency to
nlopt>2.7.
Removed¤
[0.8.3] 2025-01-15¤
Added¤
Changed¤
- Pinned dependency to
nlopt==2.7.1.
Removed¤
[0.8.2] 2025-01-15¤
Added¤
Changed¤
Removed¤
[0.8.1] 2025-01-15¤
Added¤
- Added set conversion in
TopologyDiagram.is_auxiliary_trail_edge().
Changed¤
- Pinned dependency to
numpy==1.26.3. - Pinned dependency to
compas==1.17.10. - Updated installation instructions in docs website.
- Set minimum supported python version to
3.8. - Bumped to docs action to
docs@.2.21. - Pinned
sphinx,pytest, andpytest-lazy-fixturedependencies inrequirements_dev.txt. - Set
crazy-max/ghaction-github-pages@v3.1.0indocsaction. - Set
compas-actions.docs@v2.2.1indocsaction. - Updated grashopper components in examples.
Removed¤
- Removed
compas_singulardependency.
[0.8.0] 2023-04-07¤
Added¤
- Added
PolylineConstraintcomponent to grasshopper plugin. - Implemented
constraints.PolylineConstraint. - Added
EdgeDirectionConstraintcomponent to grasshopper plugin. - Implemented
constraints.EdgeDirectionConstraint. - Added
Diagram.edge_planeto query the projection plane of an edge.
Changed¤
Removed¤
[0.7.0] 2022-09-26¤
Added¤
- Added sequence coloring for nodes to
plotters.TopologyArtist. - Automatically compute edge widths from a two-tuple with
plotters.FormArtist. - Automatically compute edge widths from a two-tuple with
viewers.DiagramObject. - Created
MoveOriginNodesGH component. - Implemented
ShiftTrailsGH component. - Implemented
Topology.number_of_sequences() - Enabled
static_equilibriumcalculations up to akmaxsequence. - Implemented
Topology.trails_sequencesmapping. - Implemented
Topology.trail_sequencemapping. - Implemented
Topology.shift_trailto change the starting sequence of a trail. - Implemented
Topology.from_dualquadmesh. - Created colors for direct and indirect deviation edges.
- An origin node can be parametrized by more than one optimization parameter (position and applied load).
- An edge can be assigned more than one constraint for optimization.
- A node can be assigned more than one constraint for optimization.
- Enabled
NodeLoadx, y, z components to be used as an optimization parameter.
Changed¤
- Plot reaction forces and applied loads as arrow meshes in
viewers.DiagramObjectinstead of lines. Topology.auxiliary_trails()takeskeysas parameter to iterate over origin node keys and trails.Topology.trails()takeskeysas parameter to iterate over origin node keys and trails.Topology.sequence()takeskeysas parameter to iterate over origin node keys and trails.Topology.sequences()outputs tuples with the nodes in every sequence instead of a range toklast.- Set explicit use of
compas_cem.ghpythonartist inFormArtist. - Set explicit use of
compas_cem.ghpythonartists inTopologyArtist.
Fixed¤
- Prevent
NaNin next position calculation inequilibrium_state_numpy.
Removed¤
[0.6.1] 2022-08-24¤
Added¤
Changed¤
Fixed¤
- Fixed mising
kappaargument inoptimization.solve_proxy
Removed¤
[0.6.0] 2022-08-18¤
Added¤
ConstrainedFormFindingGH component outputs optimizedTopologyDiagram.compas_cem.plotters.TopologyArtisthas node size and edge width default parameters.compas_cem.plotters.FormArtisthas node size and edge width default parameters.- Added support for gradient computation via finite differences.
- Added support for the
VARoptimization algorithm from NLOpt. - Added gradient convergence treshold
kappato the signature ofOptimizer.solve. - Added
kappaas input to theConstrainedFormFindingGH component. - Implemented
Diagram.is_edge_supported
Changed¤
- Changed GH components folder prefix from CEM to CompasCem.
- Renamed
compas_cem.optimization.Optimizer.solve_nlopttosolve. - Refactored
compas_cem.optimization.Parameter. - Refactored calculation of trail edge length via plane intersection in
static_equilibrium. - Refactored calculation of trail edge length via plane intersection in
static_equilibrium_numpy.
Fixed¤
- Fixed bug in
compas_cem.equilibrium.equilibrium_statewhereresidualcalculation was undefined whentmax=1.
Deprecated¤
- Deprecated
Optimizer.solve_nloptand.solve_nlopt_proxy.
Removed¤
[0.5.0] 2022-06-03¤
Added¤
- Implemented
compas_cem.plotters.Plotter. - Implemented
compas_cem.viewers.Viewer. - Implemented
compas_cem.viewers.DiagramObject. - Implemented
compas_cem.viewers.TopologyDiagramObject. - Implemented
compas_cem.viewers.FormDiagramObject. - Created
compas_cem.viewers.
Changed¤
Removed¤
[0.4.1] 2022-06-02¤
Added¤
- Implemented
ProxyServerGH component to accelerate optimization time in Rhino. - Added
compas_cem.diagrams.Diagram.__str__().
Changed¤
- Changed
ConstrainedFormFindingGH component to check for existingProxyServer. - Changed
nlopt_statusflags for better interpretability in ghpython.
Fixed¤
- Fixed bug in
compas_cem.ghpython.artistsregistration. - Fixed bug in serialization and target computation in
optimization.constraints.VectorConstraint. - Fixed bug in
Planecreation caused by old version ofcompas_rhino.RhinoPlane.from_geometry.
Removed¤
- Removed
compas_cem.loads.NodeLoad.from_rhino_point_and_vector - Removed
compas_cem.supports.NodeSupport.from_rhino_point - Removed
compas_cem.elements.Edge.from_rhino_line - Removed
compas_cem.elements.Node.from_rhino_point - Removed
compas_cem.data.GHData.
[0.4.0] 2022-05-31¤
Added¤
- Added spiral staircase ghpython example.
- Added Jenssen tensegrity ghpython example.
- Added tube bridge 3d ghpython example.
- Added bridge 2d ghpython example.
- Added dome ghpython example.
- Implemented
TopologyDiagram.is_node_support(). - Renamed node and edge key search GH components.
- Implemented
compas_cem.data.Data. - Implemented
compas_cem.plotters.TopologyArtist. - Implemented
compas_cem.plotters.FormArtist. - Implemented
compas_cem.optimization.Parameter. - Added artists registration for plotters and grasshopper via
compas.plugins.plugin.
Changed¤
- Changed reaction force global color from dark blue to dark gray.
- Changed data serialization mechanism to comply with
compas.data.Data.
Fixed¤
- Fixed bug in auxiliary trails coloring in
compas_cem.plotters.
Deprecated¤
- Deprecated
TopologyPlotter. - Deprecated
FormPlotter.
Removed¤
- Removed
compas_cem.optimization.serialization.Serializable. - Removed
compas_cem.ghpython.components.Nodecomponent.
[0.2.2] 2021-11-16¤
Added¤
Changed¤
Fixed¤
- Pinned COMPAS dependency to version 1.8.1 due to NetworkPlotter deprecation.
Removed¤
[0.2.1] 2021-11-09¤
Added¤
Changed¤
- Changed reaction forces display color from dark green to dark gray.
- Changed loads display color from light green to dark green.
Fixed¤
- Trail-building was ignored assembling deviation-only topology diagrams in ghplugin.
- Fixed bug: Wrapped
EdgeSearchtuple output in a list in ghplugin.
Removed¤
- Removed support for gradient-free NLopt optimization algorithms.
- Dropped "LD" subscript to identify NLopt optimization algorithms.
[0.1.15] 2021-09-08¤
Added¤
- Added check to skip adding None objects to
AssembleTopologyDiagramin ghplugin.
Changed¤
Removed¤
[0.1.14] 2021-09-07¤
Added¤
- Added
draw_arrowsargument toTopologyPlotter._draw_loads() - Implemented
TopologyPlotter._draw_load_arrows()to display loads as arrows. - Added import/export diagram from JSON to ghplugin.
- Implemented
TopologyArtist.draw_trails(). TopologyArtistComponentin ghplugin can draw trails.- Added
TopologyDiagram.number_of_trail_edges()andTopologyDiagram.number_of_deviation_edges(). - Implemented
__repr__()method in diagrams, elements, supports, loads, parameters, constraints and optimizer.
Changed¤
- Renamed edge to edge_key and node to node_key in ghplugin components.
- Changed display color of loads from green to light green.
- Replaced
NodeResultswitSupportNodeResultscomponent in ghplugin.
Removed¤
- Removed
build_trailscomponent from gh plugin. Merged withAssembleTopologyDiagram. - Removed user access to specify auxiliary trails directions and lengths in ghplugin.
- Removed
nodesfrom input toTopologyDiagramin ghplugin.
[0.1.13] 2021-08-25¤
Added¤
- Added
Optimizer.gradientandOptimizer.gradient_normas attributes.
Changed¤
- Exposed
etaandtmaxin the signature ofOptimizer.solve_nlopt()instead of hard-coded values. - Updated ghcomponent
ConstrainedFormFindingto includeetaandtmaxas extra inputs.
Fixed¤
- Converted
Framereturned byRhinoPlane.to_compas()toPlanefor compatibility ofPlaneConstraint()in ghplugin. - Renamed input of ghcomponent
FormFindingfromeps_mintoeta. - Fixed bug in trail force sign calculation in
equilibrium_stateand inequilibrium_state_numpy.
Removed¤
[0.1.12] 2021-07-14¤
Added¤
- Added node coloring for free and support nodes in
FormPlotter(). - Added
TopologyPlotter.draw_segments() - Added color scheme for
auxiliary_trail_edgeswhen usingTopologyPlotter.draw_edges()
Changed¤
Fixed¤
- Set
tight=Falsewhenaxes.autoscaleis called byPlotter.save(). Overcropped saved image
Removed¤
- Deleted custom edge and node keys in
form_plotter_proxyand intopology_plotter_proxy - Removed frame polygon from
form_plotter_proxyand intopology_plotter_proxy
[0.1.11] 2021-07-09¤
Added¤
Changed¤
Fixed¤
- Fixed bug in
static_equilibriumandstatic_equilibrium_numpywhen calculating support forces - Fixed bug in
TopologyArtistgh component: took in list of nodes instead of list of edges - Temporary patch in length calculation in
DeviationEdgeLengthConstraintthat raised error withautograd.
Removed¤
[0.1.9] 2021-07-08¤
Added¤
- Added automatical creation of auxiliary trails.
- Added
auxiliary_trails=Falseto the signature ofTopologyDiagram.build_trails(). - Added
TopologyDiagram.auxiliary_trails()iterator. - Added
TopologyDiagram.auxiliary_trail_edges()iterator. - Added
TopologyDiagram.is_auxiliary_trail_edge()edge filter. - Added
TopologyDiagram.number_of_auxiliary_trails(). - Added property
TopologyDiagram.auxiliary_trail_lengthwith setter. - Added property
TopologyDiagram.auxiliary_trail_vectorwith setter. - Created first full version of GH plugin under
compas_cem.ghpython.components
Changed¤
- Changed
TopologyDiagram.trails()to return an iterable of trails instead of a dictionary. - Changed
TopologyDiagram.build_trails()to not return anything. - The type of a trail is
tuple, no longerlistto reflect they are immutable. - Splitted
Constraint()into children classesVectorConstraint()andFloatConstraint(). - Renamed
errortopenaltyincompas_cem.optimization. - Refactores examples folder.
Fixed¤
- Changed check for
NoneinNodeMixins.node_xyz().
Removed¤
- Removed
Nonefrom default arguments in optimization constraints and parameters.
[0.1.6] 2021-07-05¤
Added¤
- Implemented
TopologyArtistandFormArtist - Added
compas_cem.rhino_installto streamline the symlink with Rhino - Added
src/compas_cem/ghpython/components/ghuser/to.gitignore
Changed¤
- Refactored
compas_cem.rhino_installintocompas_cem.ghpython.install - Refactored
compas_cem.rhino_installintocompas_cem.ghpython.uninstall
Removed¤
- Removed
compas_cem.rhino_install
[0.1.4] 2021-07-04¤
Added¤
Changed¤
Removed¤
- Deleted tag regex from
.bumpversion.cfg
[0.1.3] 2021-07-04¤
Added¤
- Added automatic tag versioning to
CHANGELOG.md
Changed¤
- Renamed
CHANGELOG.mdtoCHANGELOG.rst