Releases: leap71/PicoGK
Release list
PicoGK v2.3
This release introduces a new type, Rad, which encapsulates angles in radians.
Note: If you are using the non-Cartesian coordinate types introduced in PicoGK v2.2, this version will break some of your code, as these types now use Rad instead of float for angles. The required changes are small. You can read more in this recent Coding for Engineers book chapter about the change.
Release Notes
NEW: Added the Rad type, which encapsulates an angle in radians.
BREAKING CHANGE: Changed Polar, Cylindrical, and Spherical to use Rad.
BREAKING CHANGE: Changed 2D path objects to use Rad.
BREAKING CHANGE: Changed Frame3d to use Rad.
NEW: Added the missing Vector3.vecPtToWorld and Vector3.vecDirToWorld methods for Vector2 coordinates.
PicoGK v2.2
This release fixes a critical issue on several Windows computers with integrated graphics that lead to crashes in the viewer.
It also introduces a new Overhang data type, which encapsulates the overhang angle for features, relative to a 3D printer's build plate.
Release Notes
- FIX: Viewer crashed on (many) Windows machines with hybrid graphics card setups
- NEW: Overhang data type in
PicoGK.Numerics - CHANGE:
Viewer.EnableOverhangWarningnow accepts theOverhangdata type - CHANGE: Runtime version now at 26.2, API change due to passing of standardized
Overhangdata type - CHANGE: Updated openvdb library to current V13
PicoGK v2.1.0
PicoGK v2.1
This release adds a number of new features for dealing with coordinates, including non-Cartesian ones.
Release Notes
- NEW: Added
Polar2D coordinate type - NEW: Added
Cylindrical3D coordinate type - NEW: Added
Spherical3D coordinate type - NEW: Added
Viewer.AddCrossandViewer.AddArrowfunctions - NEW:
float.bAlmostZeroandVector3.bAlmostZeroextension functions. - NEW: Added
float.bAlmostLessOrEqualandfloat.bAlmostMoreOrEqualextension functions. - NEW:
Vector3/Vector2extension functionsvecNormalizedandvecSafeNormalized. - NEW:
Vector3extension functions to convert from local to world coordinates and back. You can now write vec.vecPtWorld(from) etc. - NEW: Added
Rad.TwoPiconstant to avoid having to constantly write2*float.Pifor angles in radians. - FIX: Renamed
Frame3d.vecFromWorldtoFrame3d.vecPtFromWorldfor consistency
PicoGK v2.0.0
PicoGK v2
This is a substantial release, as a large part of PicoGK was rewritten and enhanced to provide a more robust basis for the future.
Core areas of focus for 2.0 were:
- Improved Memory Management. PicoGK now works with much larger objects and more complex projects.
- Support for non-global use of PicoGK objects (i.e. by instantiating a
Libraryobject for a limited scope) - Foundational support for user interface (using Dear ImGui under the hood)
- A new viewer with improved interactivity
- Support for rendering bitmaps in the viewer (and visualizing slices)
Many of these areas will be extended in the coming months.
Release Notes
- NEW: A substantial amount of the PicoGK Runtime was rewritten and extended to support
- Robust memory management and reporting for very large objects
- Foundational work for a sophisticated user interface (based on the
Imguiopen-source library) - Images in the viewer
- Performance enhancements for lattice operations and booleans by using new
openvdbfunctions - Enhanced rendering support
- Moved to
opendbtransformations for better compatibility with .VDB exchange
- NEW: Completely new Viewer with enhanced zooming, panning, intuitive navigation. Foundational work on adding a proper UI framework
- CHANGE: Entirely new memory management system
- CHANGE: PicoGK now requires OpenGL 4.1 Core profile
- NEW: Support for rendering text to bitmaps
- NEW: Support for 2D textures (bitmaps) in the viewer (
GPUTexture) - NEW: Each viewer object now can have its own rotation/translation matrix (in addition to each viewer group having one). This is preparation for assemblies.
- NEW: Added
Frame3dobject (similar to ShapeKernel'sLocalFrame) to encapsulate a local coordinate system - NEW: A number of base interfaces to abstract 2D and 3D paths and contours (
PicoGK.Shapes) - NEW: Support for visualizing exceeded overhang angle in Viewer objects (important for 3D printing)
- NEW: Added
SliceVizto show slicedVoxelsbitmaps in the viewer - NEW: Added
VoxCutVizto enable cuttingVoxelsand showing the slice bitmap at the cut intersection - NEW: Added
ILoginterface to abstract logging of information and replaced rigidLogFileimplementation - NEW: Added
IProgressinterface and various progress reporting objects - NEW: Added RemoteAllObjects to Viewer
- NEW: Added extraction of slices from
Voxelsin X and Y directions. - NEW: Added
Voxels.bIsEmptyto detect whether a voxel field doesn't contain data - NEW: Added
Voxels.bIsInsideto detect if a position is inside aVoxelsobject - NEW: Added fast function to create voxelized lattice beams
Voxels.voxLatticeBeam - NEW: Added function to create a shelled
MeshasVoxelsobjectVoxels.voxMeshShell - NEW: Library can now report memory consumption of all objects
- NEW: A number of numerical helper functions for comparisons
- FIX: Using multiple
Libraryobjects in sequence didn't work properly - FIX: Slices were mirrored in Y, resulting in flipped CLI files
- FIX:
PolyLineobjects were not included in theViewerbounding box calculations. - FIX: Inconsistency between PicoGK Runtime and C# size about row order vs column order matrices (now consistently uses row order as does C#)
- CHANGE: Reorganized file structure with subfolders
PicoGK 1.7.7.5
PicoGK v.1.7.7.5
With this release we are finally moving to Nuget packages and are retiring the installer. This makes it much easier to get started and build applications with PicoGK. We have updated all the documentation and consolidated it on PicoGK.org for easier reference.
You can download this version of PicoGK from Nuget.org
This will also (likely) be the last release in the 1.x branch of PicoGK. We have many new features coming in the 2.x releases (which will be compatible).
Here's what's new in this version:
- NEW: Nuget support
- NEW: Support for adding a quad to a
Mesh - NEW: Trim a
Voxelsfield by a bounding box (cuts off everything outside) - NEW: Add a list/array of vertices to a
Mesh - NEW: Added
bContainsfunction to Bounding Box - NEW: Function to get an interpolated color value from an image, using normalized (0..1) coordinates
- NEW:
IBoundedImplicitinterfacesimplifies passing signed-distance-function-defined objects - NEW:
Voxels.vecZSliceOriginreturns real world position of slice - NEW:
Voxels.nSliceCountgives quick access to the number of slices in a voxel field - NEW: Function to return color as a BGRA hex code
- NEW: Option to end app (close viewer) when task ends (pass param to
Library::Go) - NEW: Light setup can now be loaded from an embedded resource (important for Nuget)
- CHANGE: Support for flipping Y axis in images
- CHANGE: Made log output to console optional
- CHANGE: A number of sanity checks when dealing with image dimensions
- FIX: Vdb file metadata such as voxel size was overwritten when accessing the fields. Now correctly reports the metadata it was created with.
- FiX: Made project root folder function
strProjectRootFolder()more robust - FIX: Potential error condition in slice vectorization
- FIX:
vecRandomVectorInsideof bounding box did not work correctly for bounding boxes not having min at origin - FIX: Light setup now correctly frees resources asap
- FIX: Vdb files now free their resources asap
PicoGK v1.7.5
PicoGK v1.7.5
PicoGK v1.7.5 adds significant new functionality on the C# side, but no changes to the runtime executable were made.
- NEW: Many new functions were added to the
Voxelsobject, inspired by the ShapeKernel - NEW: Added mathematical operators
+,-and&to theVoxelsobject. You can now sayVoxels vox = (vox1 + vox2) - vox3for example.&is the intersection function (boolean AND). Check out the updatedEx_BooleanShowCase.csfor examples. - CHANGE: More enhancements to CLI output — now defaults to first layer filled, which seems to be the general consensus.
- NEW: New functionality in CSV creation
- NEW: FloatColor can convert itself to a string hex code
- NEW: Viewer can now be queried whether it's idle. Good if you want to wait for a screen capture to complete, for example.
- CHANGE: Shape Kernel now has support for various geometric shapes
- CHANGE: Many Shape Kernel functions now map to the native PicoGK
Voxelsfunctions. Use the PicoGK functions if you start a new project, as the syntax is more concise. - NEW:
LineModulationcan now be scaled
PicoGK v1.7.1
PicoGK v1.7.1 is a maintenance release that enhances CLI output.
- FIX: Both
Voxels.GetSliceandVoxels.GetInterpolatedSlicereturned images that were flipped in the Y axis, leading to mirrored parts when printing from .CLI files. - FIX: The .CLI bounding box is now correctly calculated from the Z slice positions, 0 at the bottom and Z position of the last slice at the top.
- CHANGE: .CLI output now actively closes the contour by adding the first vertex of an outline as the last vertex of the outline. The specification is not clear on this, and some print prep software requires it.
PicoGK v1.7.0
PicoGK v1.7.0 adds support for the industry standard .CLI file format for slice exchange with Laser Powder Bed Fusion (LBPF) printers. It also increases robustness for non-standard scenarios where you run multiple headless versions of PicoGK or create multiple viewers.
- NEW: Support for ASCII-based .CLI output for easy interchange with LBPF printers, such as EOS or EPLUS.
- NEW: Support for vectorizing slices using the Marching Squares algorithm (used by .CLI output)
- NEW: Support for generating interpolated slices from non-integer Z positions (used by .CLI output)
- NEW: Classes to work with RGB, RGBA, BGR, BGRA 8-bit images
- NEW: Mesh can be transformed using a Matrix4x4
- CHANGE: Viewer can now use a specific log file
- FIX: BBox3 created a maximally extended bounding box, when an empty BBox2 was included
- FIX: Viewer window was not destroyed in non-standard use cases (running multiple library calls in sequence)
- FIX: Memory was not released when using multiple Library objects in headless mode
PicoGK v1.6.0
PicoGK v1.6.0 adds one new function to the runtime (hence the number jump) for the creation of a ScalarField from Voxels. It also adds a way to run PicoGK in headless mode.
- NEW: You can now run PicoGK in headless mode, [see discussion post for an example](#30).
- NEW: You can create a
ScalarFieldfromVoxels, setting the scalar value to a constant for every voxel that is inside/surface. Great for creating scalar fields for simulation, for example setting the density value of a fluid domain. - NEW: Added way to detect and color code defect signed distance fields in
SdfVisualizer. - FIX:
Voxels.ProjectZSlicecreated degenerate voxel fields, which resulted in open meshes, when converted toMesh. - FIX: The documentation instructed you to download .NET 8, but the example project installed by the installer used .NET 7. The example project now uses .NET 8 as mentioned in the documentation.
PicoGK v1.5.0
PicoGK v1.5.0 is a major update. The focus of this release is the introduction of field data types for scalar fields and vector fields. Using these types, you can interface with simulation packages, and read the results back to build feedback loops in your software.
- NEW: New data types for scalar fields and vector fields.
- NEW: Support for reading/writing scalar fields and vector fields to OpenVDB
- NEW: Access to OpenVDB field metadata in Voxels, ScalarField, VectorField
- NEW: Library info, voxel size, PicoGK classes etc. all saved to OpenVDB metadata
- NEW: Added example to show usage of fields
- NEW: Added example to show how to exchange simulation setup information using OpenVDB and multiple field types
- NEW: Added LEAP 71 QuasiCrystal library to examples, which allows you to build aperiodic 2D and 3D structures (Penrose Tiles and Quasicrystals)
- NEW: Viewer now supports adding arrow heads to polylines
- NEW: Viewer now supports adding a cross at the end of a polyline
- NEW: VoxelUtils class has functions to count active voxels, extract surface normals.
- NEW: Voxel slices can be output as grayscale and black and white
- NEW: Grayscale image now has a function to determine whether it contains any active pixels
- NEW: Added HLS and HSV color types (allows you to easily desaturate etc. colors)
- NEW: Example to show how to load an STL file and prepare it for printing
- NEW: Added function to find project source path
- NEW: Added experimental Voxels.Gaussian(), Voxels.Median(), and Voxels.Mean() functions to average/blur a voxel field. These are to be considered experimental at this point, as we are not sure if the results are robust enough across multiple voxel sizes, to be useful for engineering.
- FIX: Voxel insertion/removal into the viewer was not thread-safe
- CHANGE: Added asserts to make sure NaN values inserted into a bounding box throw an alert