Lattice2 Workbench

Introduction
The Lattice2 Workbench is a FreeCAD external workbench that serves the purpose of working with placements and arrays of placements. It is a sort of Assembly workbench, but with emphasis on arrays. There are no constraints and relations, there are just arrays of placements that can be generated, combined, transformed, superimposed, and populated with shapes.

Ever wondered how to create a protractor with FreeCAD? That's the aim of the workbench (including tick labeling). Also, exploded assemblies can be made with the workbench.

Additionally, the workbench features a few general-purpose tools, such as parametric downgrade, bounding boxes, shape info tool, and tools for working with collections of shapes (compounds).

One of the big design goals of the workbench is being as parametric as possible.

Tools
Detailed description on the Lattice2 Github wiki

Commands

 * [[Image:Lattice2_Placement.svg|32px]] Placement
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: Custom
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: XY plane
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: XZ plane
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: YZ plane
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: along X
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: along Y
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: along Z
 * [[Image:Lattice2_Placement.svg|24px]] Single Placement: Euler angles
 * [[Image:Lattice2_PlacementFromShape.svg|32px]] Placement of shape: Copy object.Placement
 * [[Image:Lattice2_PlacementFromShape.svg|32px]] Placement of shape: Center of bounding box
 * [[Image:Lattice2_PlacementFromShape.svg|32px]] Placement of shape: Center of mass
 * [[Image:Lattice2_PlacementFromShape.svg|32px]] Placement of shape: Inertial axis system
 * [[Image:Lattice2_AttachablePlacement.svg|32px]] Attachable Placement
 * [[Image:Lattice2_LinearArray.svg|32px]] Generate linear array
 * [[Image:Lattice2_PolarArray.svg|32px]] Generate polar array
 * [[Image:Lattice2_ArrayFromShape.svg|32px]] Array from shape
 * [[Image:Lattice2_ArrayFromShape.svg|32px]] Internal placements
 * [[Image:Lattice2_ArrayFromShape.svg|32px]] Center of bounding box
 * [[Image:Lattice2_ArrayFromShape.svg|32px]] Center of mass
 * [[Image:Lattice2_ArrayFromShape.svg|32px]] Inertial axis system
 * [[Image:Lattice2_InvertLattice.svg|32px]] Invert lattice
 * [[Image:Lattice2_JoinArrays.svg|32px]] Join arrays
 * [[Image:Lattice2_ArrayFilter.svg|32px]] Array filter
 * [[Image:Lattice2_ArrayFilter.svg|32px]] Selected items
 * [[Image:Lattice2_ArrayFilter.svg|32px]] Touching
 * [[Image:Lattice2_ArrayFilter.svg|32px]] Within distance window
 * [[Image:Lattice2_ArrayFilter.svg|32px]] Pointing at shape
 * [[Image:Lattice2_ExplodeArray.svg|32px]] Explode array
 * [[Image:Lattice2_ProjectArray.svg|32px]] Project array
 * [[Image:Lattice2_ResampleArray.svg|32px]] Resample array
 * [[Image:Lattice2_PopulateCopiesNormal.svg|32px]] Populate with copies
 * [[Image:Lattice2_PopulateCopiesNormal.svg|32px]] Populate with copies
 * [[Image:Lattice2_PopulateCopiesArray.svg|32px]] Populate with copies: Build array
 * [[Image:Lattice2_PopulateCopiesMove.svg|32px]] Moved object
 * [[Image:Lattice2_PopulateChildrenNormal.svg|32px]] Populate with children
 * [[Image:Lattice2_PopulateChildrenNormal.svg|32px]] Populate with children
 * [[Image:Lattice2_PopulateChildrenArray.svg|32px]] Populate with children: Build array
 * [[Image:Lattice2_PopulateChildrenMove.svg|32px]] Moved children
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Parametric downgrade
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Leaves
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to CompSolids
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Shells
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to OpenWires
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Faces
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Wires
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Edges
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Seam edges
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Non-seam edges
 * [[Image:Lattice2_ParametricDowngrade.svg|24px]] Downgrade to Vertices
 * [[Image:Lattice2_SubLink.svg|32px]] Sub link
 * [[Image:Lattice2_MakeCompound.svg|32px]] Make compound
 * [[Image:Lattice2_ExplodeCompound.svg|32px]] Explode compound
 * [[Image:Lattice2_FuseCompound.svg|32px]] Fuse compound
 * [[Image:Lattice2_BoundingBox.svg|32px]] Bounding box
 * [[Image:Lattice2_BoundingBox.svg|32px]] Whole
 * [[Image:Lattice2_BoundingBoxCompound.svg|32px]] Children
 * [[Image:Lattice2_ShapeString.svg|32px]] Shape string for array
 * [[Image:Lattice2_ParaSeries.svg|32px]] Para series
 * [[Image:Lattice2_Inspect.svg|32px]] Inspect
 * [[Image:Lattice2_InspectSelection.svg|32px]] Inspect seletion
 * [[Image:Lattice2_InspectShape.svg|32px]] Shape info (feature)
 * [[Image:Lattice2_SubstituteObject.svg|32px]] Substitute object
 * Expose links to subelements

Other
 * Recomputes
 * [[Image:Lattice2_RecomputeMakeFeature.svg|32px]] Make recompute locher object:
 * [[Image:Lattice2_RecomputeLock.svg|32px]] Lock recomputes:
 * [[Image:Lattice2_RecomputeUnlock.svg|32px]] Unlock recomputes:
 * [[Image:Lattice2_RecomputeFeature.svg|32px]] Recompute feature:
 * [[Image:Lattice2_RecomputeDocument.svg|32px]] Recompute document:
 * [[Image:Lattice2_RecomputeForce.svg|32px]] Force recompute:
 * [[Image:Lattice2_RecomputeTouch.svg|32px]] Touch selected feature:
 * [[Image:Lattice2_Lattice2.svg|32px]] Lattice2 Workbench icon

Installation
Prerequisites: Lattice2 Workbench requires FreeCAD >= v0.16.5155.

Automatic installation
As of v0.17 one can use the Addon Manager to install the  Lattice2 Workbench. Use

Manual Install

 * Scroll to the top of the page, and click 'download zip' button
 * Unpack the contents into a "Lattice2" folder created in \Path\to\FreeCAD\Mod, and restart FreeCAD.
 * Note that InitGui.py (and the rest of .py files) should end up directly under Mod\Lattice2 (not under nested directory like Mod\Lattice2\Lattice2).

After you install the workbench, it should appear at the bottom of list of workbench selector in FreeCAD.

Tutorials

 * Tutorials: Gallery
 * Basic Tutorial
 * Lattice2 in PartDesign
 * Making a Cogset
 * Feature Patterns in Lattice2 Workbench by @sliptonic

Links to Lattice2 workbench

 * Lattice2 Wiki: https://github.com/DeepSOIC/Lattice2/wiki
 * FreeCAD Wiki: https://www.freecadweb.org/wiki/Lattice2_Workbench
 * FreeCAD Forum: Lattice workbench - v2.0 is becoming stable
 * Gallery: https://github.com/DeepSOIC/Lattice2/wiki/Gallery
 * Report bugs: Please report bugs at https://github.com/DeepSOIC/Lattice2/issues

Other useful links

 * Lattice aka Lattice1 Workbench (obsolete)
 * External Workbenches: List of FreeCAD workbenches.
 * Macros recipes
 * FreeCAD Community Portal