# IG.GFX.Planning - Generic 3D Planning Behavior

## History

**IG.GFX.Planning 3.5.0**

-   fixed duplicate types

**IG.GFX.Planning 3.4.0**

-   fix usage of rotation units (degrees vs radians)
-   Types: replace usages `Degrees` and `Radians` with `number`
-   SnapCalculator and SnapPoints: enabled includeAllPoints by default
-   GhostInsertMode.isGhostModeNecessary: added onlyTakeFirstNonCollidingMatch in ghost mode neccessary check snap calculator
-   added ig.math dependency

**IG.GFX.Planning 3.3.2**

-   add function to get Wallmesh nodes for exclusion purposes

**IG.GFX.Planning 3.3.1**

-   GhostInsertMode: updated additionalRuleParameters usage
-   StandardInteractor: fixed only left and right neighbours being saved as previousNeighbours

**IG.GFX.Planning 3.3.0**

-   version bump because of ig.gfx.core

**IG.GFX.Planning 3.2.0**

-   add Logger instance
-   StandardInteractor:
    -   make static getSnapColor public
    -   add sub logger and warn when using deprecated callbacks
    -   update documentation
-   ConstrainToBounds:
    -   reimplement restriction check to consider multiple components and all limits
    -   refactor restriction calculation into new class TransformationRestrictor
-   StrongChildMatch:
    -   check if parent key matches child foreign key also
    -   rename constructor params
-   SnapMatches: make members public
-   port class TransformationRestrictor from Planning/ConstrainToBounds
-   extract function calculateMiddlePointFromAllBoundingBoxes
-   remove Blueprint3D from devDependencies
-   SnapCheckOperation: add option considerCollisions (default true), triggering internal SnapCalculator removeCollidingMatches option
-   rename TranslateInPlaneOperation to TranslationOperation
-   change tsconfig.json to fix paths (useful for VSCode Go To Definition)
-   refactorings

**IG.GFX.Planning 3.1.1**

-   add documentation for StandardInteractor
-   refactor StandardInteractor and operations

**IG.GFX.Planning 3.1.0**

-   GhostInsertMode: added missing parameters to addCopy constructor argument

**IG.GFX.Planning 3.0.1**

-   AssociatesCache: added existence check for components in getMultiAssociations
-   Associates: removed unneccessary getRootsInAssociatesRange calls
-   Associates: added component existence check for getRootsInAssociatesRange

**IG.GFX.Planning 3.0.0**

-   SnapPoints: replaced Core.getWorldTransformation with manually created transformation using api
-   add documentation for associates cache
-   use correct key
-   associates: add caching also for neighbors, consolidate implementation
-   caching children and parents on a per pair basis; agressively shortcut pair searching
-   fixed typo in associates
-   point caching
-   added nooping for updateComponentRegions for temporary operations
-   added refactored associates

**IG.GFX.Planning 3.0.0-alpha.2**

-   SnapPoints: replaced Core.getWorldTransformation with manually created transformation using api
-   add documentation for associates cache

**IG.GFX.Planning 3.0.0-alpha.1**

-   use correct key
-   remove logs
-   associates: add caching also for neighbors, consolidate implementation
-   caching children and parents on a per pair basis; agressively shortcut pair searching
-   fixed typo in associates
-   point caching
-   added nooping for updateComponentRegions for temporary operations
-   added refactored associates

**IG.GFX.Planning 2.7.4**

-   SnapCheckOperation: use multiArticleConfiguration from component.userData

**IG.GFX.Planning 2.7.3**

-   replaced references to native component with api calls in ghost insert mode

**IG.GFX.Planning 2.7.2**

-   readded template article visibility for match calculation

**IG.GFX.Planning 2.7.1**

-   changed refreshGhosts to be async. removed visibility toggling for ghost creation

**IG.GFX.Planning 2.7.0**

-   adoptions to IG.GFX.Core 2.7.0 and IG.GFX.ThreeJS 2.9.0

**IG.GFX.Planning 2.6.7**

-   SnapCalculator.isViableForInsertedId: exclude direct parent and neighbor of match from collision check

**IG.GFX.Planning 2.6.6**

-   SnapPoints: use key of attach point in makeStrongNeighborPoints to differentiate multiple neighbors

**IG.GFX.Planning 2.6.5**

-   add debugging flag showBoxInGhostInsertMode
-   StandardInteractor: use multi article configuration for snapping ghosts

**IG.GFX.Planning 2.6.4**

-   StandardInteractor: disable screen based matches when rotating
-   StandardInteractor: prevent z-fighting with ghosts
-   SnapCalculator: deactivate scaled position of attach point again

**IG.GFX.Planning 2.6.3**

-   BREAKING CHANGE: replace setTransformation with API.SetTransformation
-   improve performance

**IG.GFX.Planning 2.6.2**

-   fix rotation center calculation
-   fix offset in box ghosts
-   refactor and performance improvements
-   replace some for-of-loops with indexed for-loops, which makes it easier to debug

**IG.GFX.Planning 2.6.1**

-   refactor
-   fix GhostInsertMode.isGhostModeNecessary using matches without ghost representation

**IG.GFX.Planning 2.6.0**

-   possibly BREAKING CHANGE: refactor SnapMatch calculation
    -   SnapCheckOperation and GhostInsertMode now use getViableMatches from SnapCalculator

**IG.GFX.Planning 2.5.4**

-   isViableForId : collision check for matching takes scaled origin point into account

**IG.GFX.Planning 2.5.0**

-   ig.gfx dependency upgrades
-   disable isSomePointUnsupported for snap matches

**IG.GFX.Planning 2.4.8**

-   prefer snap points in niche under mouse pointer when using screenBasedChildMatches
-   removeRedundantMatches: if only screen based child matches are present, sort by screenDistance instead of xzDistance for grouping

**IG.GFX.Planning 2.4.6**

-   prefer snap points with no deviation in y direction for initial PlacementDecision

**IG.GFX.Planning 2.4.5**

-   added optional createMouseConverter property to StandardInteractorOptions (can be used to overwrite mouse coord to 3d coord translation)

**IG.GFX.Planning 2.4.4**

-   optional parameter for configuration of component to be considered for ghost creation
-   all actionHolders are now considered for BBox creation

**IG.GFX.Planning 2.4.3**

-   fix GhostInsertMode not considering rotation of obstacles correctly
-   fix geometric ghosts being inserted with offset

**IG.GFX.Planning 2.4.0**
**misc**

-   BREAKING CHANGE: remove GetAbstractBounds functionality from WallUtilities.ts (moved to IG.GFX.ThreeJS -> AbstractBoundingBox.ts)
-   prevent moving articles when the camera is in a shallow angle to the movement plane
-   fix articles colliding with the floor
-   remove dependency to IG.GFX.Support

**misc**

-   StandardInteractor prevent calculation of selection center for every frame

**misc**

-   StandardInteractor.moveSteppedCallback += optional snapMatches parameter

**misc**

-   Fix a bug where screen based matches (in a T-Element) would not trigger

**misc**

-   Fix a bug in GhostMode where locations would not be classified as equal when they were
    (precision error)

**misc**

-   Fix a bug where the StandardInteractor would not check for collisions

**misc**

-   Add safer acces to GhostInsertMode.instance.stop : GhostInsertMode.stopInstance()

**misc**

-   Add ConstrainToBounds Operation, makes it possible to constrain the whole
    movement to a bounds like object. Currently only works for a single selected
    object
-   Refactor ProcessFurtherOperation, for the common pattern where an operation
    needs the input of another operation

**misc**

-   Fix bugs in GhostMode and ChildRepositioner

**misc**

-   Placement += bestPlacement

**misc**

-   Bugfixes for GhostInsertMode

**misc**

-   WordLocalConverter: Automatically component to (1,1,1) before calculating conversions

**misc**

-   StandardInteractorOptions += option for keeping floating objects at their old height

---

**misc**

-   += GridOperations
-   StandardInteractorOptions += options for grid movement

**misc**

-   Version bump
-   StandardInteractor += Options for interaction behaviour
-   += ArticleConnector, ChildActionExecutor, ChildRepositioner

**misc**

-   Version bump
-   Dependency update

**misc**

-   Actions are now executed after mouseUp
-   StandardInteractor += StandardInteractorOptions

**misc**

-   made the StandardInteractor class globally accessible with `IG_GFX_Planning.StandardInteractor`

**misc**

-   IGX.Planning += WorldLocalConverter: class for transforming coordinates from local to world coordinate system
-   WallUtilities.faces now returns the correct faces (geometry based instead of BBOX)
-   Placement: isPositionViable now allows collision with one wall for CuttingThroughWall categories
-   CollisionCheckOperation: no collision for cutting through wall objects with walls
-   IGX.Planning += WallPointCalculator: Class for calculation of wall attachment points
-   StandardInteractor: onSnap, call IGX.MultiArticle.Rule.executeAction with all relevant actions
-   SnapMatch += getActions(): get actions belonging to the component of the snapped to point

**misc**

**misc**
