Skip to content

Latest commit

 

History

History
180 lines (154 loc) · 7.36 KB

CHANGELOG.md

File metadata and controls

180 lines (154 loc) · 7.36 KB

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.

[1.5.0]

Added

  • Curves:
    • get_tangent()
    • get_normal()
    • get_binormal()
  • Mapped sketch
  • Definition of any fixed-blocking sketch
  • Automatic laplacian smoothing (fixed outer edges, movable inner vertices)
  • Sketches
  • OneCoreDisk
  • FourCoreDisk (the default Disk for Shapes)
  • WrappedDisk
  • Oval
  • WrappedDisk
  • Grid (A cartesian array of rectangular faces in XY plane)
  • grid property of Sketch/Shape/Stack
  • Stacks
  • LoftedShape: a generic shape from 2 Sketches with the same number of faces
  • Examples: Heater, Fusilli
  • Mesh.delete() will omit given operation from blockMeshDict but its data stays in mesh (chops, patches, etc.)

Changed

  • Definitions of Disks sketches
  • All off-the-shelf Shapes are now a LoftedShape
  • Calling .transform() with a Mirror transformation will warn about creating an inverted block

[1.4.1]

Changed

  • Improved optimization output

Removed

  • Relaxation within optimization
  • Numerical integration of analytic curve lengths; use discretization instead

[1.4.0]

Added

  • Channel example
  • Cyclone example
  • Mirror transform on points, operations, shapes, mirror example
  • Operation:
    • get_closest_face(), get_closest_side(), get_normal_face()
    • Connector operation
  • Geometric finders: find_on_plane()
  • functions.point_to_line_distance()

Changed

  • Optimization improvements:
    • Default parameters for clamp optimization
    • Clamps are sorted by sensitivity, not "junction quality" as before (improves optimization speed)
    • Clamp parameters follow domain scale (Read more below)
    • Raise an Exception when adding more than one Clamp for the same vertex

Clamp Parameters:

Previously:

  • RadialClamp had a single parameter, the angle of the point (and change thereof)
  • In Linelamp the parameter t went from 0 to 1 regardless of the distance between points

This created difficulties with optimization algorithms with extra large or very small domains. Optimization speed also drastically changing with simply scaling the dimensions.

This has been changed:

  • RadialClamp's parameter is now multiplied with radius so it means actual distance
  • LineClamp's parameter now goes from 0 to distance between points When working with CurveClamps, this kind of automatic correction cannot be made so it is advisable that parameter is of a similar magnitudes than points' coordinates.

Removed

  • Junction.delta() is now handled by optimization automatically

[1.3.3]

Added

  • Airfoil example
  • Translation and Rotational Link: move together with vertices being optimized (see the airfoil example)

Changed

  • Renamed ParametricCurveClamp to CurveClamp (takes Curve object of any kind)
  • Interpolated curves' indexes are now between 0 and 1 (easier to work with than using len(points) every time)
  • Optimization driver:
    • Termination tolerance is now based on initial improvement instead of quality
    • Relaxation starts at 0.5 by default and increases linearly to 1 in a given number of relaxed iterations

Removed

  • Curve.get_closest_param() now finds initial_param automatically

[1.3.2] Curves

Added

  • *Curve objects for dealing with edge specification and optimization

[1.3.1] Optimization/Backport

Added

  • mesh.clear() removes lists of all items that were populated during mesh.assemble()
  • mesh.backport() updates user supplied operations' points with results of optimization/modification

Changed

  • Optimizer: under-relaxation for the first optimization iterations

[1.3.0] Blocking Optimization

Added

  • Blocking Optimization
    • Finders for easier fetching vertices, generated by mesh.assemble()
      • GeometricFinder lists vertices inside searchable geometric entities
      • RoundSolidFinder identifies vertices on core/shell of round solids
    • An Optimizer class that handles blocking optimization
    • Clamp classes that define degrees of freedom of optimizing points:
      • Free (3 DoF)
      • Slide along a curve (line, parametric curve) (1 DoF)
      • Move on a surface (parametric surface) (2 DoF)
  • Reorienting Operations and Faces
    • Face:
      • shift() method to rotate points around
      • reorient() method that rotates points so that they start nearest to given position
    • ViewpointOrienter: a class for auto-orienting operation's points based on specified points 'in front' and 'above' the operation.

Changed

  • Projection Behaviour
    • Calling .project() on a Point/Vertex will add the new geometry instead of replacing it.
    • Calling .project_edge() on an Operation will add the new geometry instead of replacing it.
    • Calling .project_side() on an Operation will add the new geometry to edges instead of replacing them (but will replace existing label for the side)

[1.2.0] Shell Shape

Added

  • A Shell Shape, created from arbitrary set of faces

Changed

  • Operation.get_face() will not auto-reorder faces (causes confusion for users)

Fixed

  • A bug where Operation.project_face(..., points=True) won't project vertices

[1. 1. 0] Default Extrude Direction

Added

  • Extrude now takes a vector of a float. If a float is given, direction is normal of the base face.

[1. 0. 0] Refactor

A complete overhaul of all objects in an attempt to create a proper SOLID-obeying package with type hinting, static typing and no python-ish duck-typing hacks.

Added

  • examples and showcases from classy_examples repo
  • static type analysis, formatting, linting
  • Origin and Angle edges (Foundation and ESI alternatives to arc)
  • Projection of vertices to geometry
  • Import convention import classy_blocks as cb and direct imports of user-usable objects from cb, like cb.Mesh, cb.Loft, cb.Arc
  • Operation.faces property that creates new faces on-the-fly for easier chaining of new operations
  • A Frame object that simplifies addressing edges/wires/other stuff between pairs of vertices on a hexahedron
  • ExtrudedRing.fill() method has been added to create cylinders inside rings

Changed

  • Major package layout refactor
  • Edge specification (Arc, Origin, Angle, Project, Spline, PolyLine objects)
  • Reverted Face specification for operations
  • The Block object is not directly available to the user as it makes no sense to do so
  • Import convention: import classy_blocks as cb for examples
  • Changed examples so that an example file runs directly instead of calling run.py (that created a lot of confusion)
  • Box() is now an operation (previously Shape)
  • simplified cylinder and sphere creation
  • Chaining of elbows/cylinders/etc always with start_face parameters (instead of negative length)

Removed

  • *Wall shapes will be created later with a different approach
  • Examples with *Wall shapes will be recreated later with new approaches
  • airfoil2d example requires blocking optimization so it will be recreated when that feature is available
  • sphere example will be recreated when 'offset' is available
  • block.from_points has been removed (use Loft)
  • T-joint will be added when a skew transform is implemented

[0.0.1] Status Quo

Added

examples and showcases from classy_examples repo static type analysis, formatting, linting

Changed

Major package layout refactor Major CI refactor

Removed

Some dependencies, docs and other stuff that is not ready ATM