# IG.GFX.Core - An abstract 3D scene-graph rendering API that can then be implemented for X3DOM, ThreeJS, BabylonJS, etc.

## History

**IG.GFX.Core 3.5.0**

**IG.GFX.Core 3.4.2**

-   Types: ICameraView/CameraView: add functions `updateLight` and `setEnabled`
-   CAUTION: please use `CameraView.setEnabled(true or false)` instead of `CameraView.settings.active = true or false`. This updates lights that are positioned relative to camera. Works only for one active CameraView, because lights are moved in the scene.

**IG.GFX.Core 3.4.1**

-   put postprocessing options (`State.postprocessingTimeout` and `State.handlePostprocessingBeforeRender`) into new object `postprocessingOptions`
-   add option `State.postprocessingOptions.globalEnable`

**IG.GFX.Core 3.4.0**

-   comment rotation to be given in radians for:
    -   MathTypes.Transformation:
-   comment rotation to be given in degrees for:
    -   AttachPoint:
    -   IGXC: AttachPoint.Rotation
-   AttachPoint.ConvertForObject: fix rotation.y (was saved as radiant, not as degrees)
-   API.SetX/Y/ZRotation:
    -   comment that degrees are used
    -   change param name to "degrees"
-   Types
    -   mark Degrees, Radians, LocalRotation and WorldRotation deprecated
    -   replace usages `Degrees` and `Radians` with `number`
-   Animation:
    -   added initialisation of currentTimeProgress
    -   remove deprecated Easing.ts, use new easing functions from ig.utilites instead
    -   replaced animation folder module with single file module
-   Animator:
    -   showAnimation: invert easing before calling createAnimation
    -   showAnimation: add parameter to set where the animation starts
    -   showAnimation: changed animation params to be provided as an object
    -   added `afterAnimationProgressChange` hook
-   PostprocessingTypes: add functions, ported from ig.gfx.threejs
    -   `setGlobalIgnore3DObjectInPostprocessing`
    -   `getGlobalIgnored3DObjectsForCameraView`
    -   `removeGlobalIgnore3DObjectInPostprocessing`
    -   `refreshIgnorePostprocessingInCameraViews`
-   CameraList: port functions from ig.gfx.threejs to to CameraViewUtils.ts
    -   `setCameraView`
    -   `getView`
    -   `enableViewRendering`
    -   `updateViewFrame`
    -   `enableViewControls`
-   Scripts:
    -   loadIGXCScripts: log script names and versions correctly
    -   fix appending ".js" on script name
-   changed componentId argument for getRelativeGfxId to also be nullsy
-   Loader: fixed variable naming and paths in applyUpdateIGXC
-   Hierarchy:
    -   fixed typo in isSelfOrChildGfxId
    -   fixed typing of getRelativeGfxId
-   added ig.math dependency
-   added TestUtils export. added setComponentData to TestAPI

**IG.GFX.Core 3.3.3**

-   State: add variable postprocessingTimeout (default 300ms)
-   Types: port postprocessing types to new file
-   moved common devDependencies to workspace dependencies
-   replaced npm with yarn for cmd execution

**IG.GFX.Core 3.3.2**

**IG.GFX.Core 3.3.1**

-   State:
    -   add maxTextureSize
    -   remove rendererOptions, as they are ThreeJS specific

**IG.GFX.Core 3.3.0**

-   Bounds: add getBoundsCorners
-   Animation:
    -   Animator: added onProgressChange option
    -   changed stepTo to be protected
    -   added getProgress and setProgress
    -   added totalDuration animator option
-   Controls
    -   add callbacks onStart, onChange and onEnd
    -   handle triggering post processing
-   GeoUvMapping:
    -   define mapping property in IGXC objects
-   Hierarchy: added isChildGfxId and isSelfOrChildGfxId
-   Loader: processNode: warn in console if scaling geometry with 0 in some direction
-   Postprocessing
    -   implementation in ig.gfx.threejs
    -   add postprocessing information into ICameraView/CameraView
    -   Types
        -   add interface `IPostprocessingAccumulationPass`
        -   add interface `ICorePostProcessing`, containing central parts of post processing
        -   add interface `IRespectIgnored3DObjects` for postprocessing steps and IGDepthShadowPlane
    -   API/State/CameraView: add loop for triggering postprocessing, add handlePostprocessingBeforeRender
-   State:
    -   move cameraViews array to ig.gfx.core
    -   add handlePostprocessingBeforeRender
        -   allows to specify which camera view is to be updated
        -   defaults to updating all camera views
-   remove ForceOnly render behaviour

**IG.GFX.Core 3.2.0**

-   ImageProcessing:
    -   export with namespace
    -   changed context for image processing to be created lazily -> fixes annoying jest warnings
-   PlatformUtil:
    -   fixed setting of platform usage
    -   replaced deleteComponent with removeComponent
    -   use platformUsage from IComponentData
-   API:
    -   added SetComponentData
    -   added afterRootTransformationChange hook
    -   GetAllSelectedComponents: prevent double entries
    -   GetBounds: added missing nullsy parameter type for componentId
    -   move GetCategories from implementation in IG.GFX.ThreeJS to Core
    -   GetCategories: change return type to readonly string[]
-   Vector
    -   add functions AbsoluteComponents2/3
    -   add functions MaximizeInPlace2/3 and MinimizeInPlace2/3
-   MathTypes
    -   rename AsLine to convertLineSegmentToLine
    -   rename asPlaneSegment to convertBoundsToXZPlaneSegment
    -   rename AsPlane to convertPlaneSegmentToPlane
-   LinearAlgebra:
    -   refactor
    -   rename function PlaneSegment to asPlaneSegment and move to MathTypes
    -   DistanceToPlaneSegment: use ProjectToPlaneSegment instead of own implementation and add tests
-   change tsconfig.json to fix paths (useful for VSCode Go To Definition)
-   refactor math types, export in namespace Core.MathTypes (next to existing export)
    -   `Plane`
    -   `Line`
    -   `PlaneSegment`
    -   `LineSegment`
    -   `Transformation`
-   port isCloseTo function to MathUtils.ts
-   rename namespace Utilities to CoreUtils
    -   port createSaneRegExp from Types.ts to Utilities (in CoreUtils namespace)
-   reduce usages of old type Vector3
-   add VisibleGhostModes constant
-   TestUtils: fix usage of userData.productHash
-   IComponentData:
    -   define ThreeJsUserData extending IComponentData, move cachedBounds etc. there
    -   move index signature from IComponentData to ThreeJsUserData
    -   move content of ThreeJS.IUserData into Core.IComponentData, implement categories as ReadonlyArray
    -   replace IComponentData.customProperties.Normal with ThreeJsUserData.wallNormal
    -   add geometryParameters, platformUsage and transform
    -   add IWallInfo definition
    -   add cachedCollisionBounds
-   TestUtils/objectLoader.ts: in setComponentData: exchange dot with comma as separator
-   moved animation frame generator to ig.utilities

**IG.GFX.Core 3.1.1**

-   Interactor: log error if interactor constructor not found
-   Loader/Validation: warn if more than one axis is > 0 in rotation node

**IG.GFX.Core 3.1.0**

-   IAbstractBounds: add getAxisAlignedBoundingBox and getSize
-   Scripts: added check for js extension
-   added GenericResourceCache
-   added support for AO Maps in IGXC loading
-   IGXCLoader: added basic update igxc handling
-   added AO Map properties to IGXC

**IG.GFX.Core 3.0.1**

-   replaced referencing of self with getGlobalObject from ig.utilities in script loading (for node compat)

**IG.GFX.Core 3.0.0**

-   Hierarchy: add getRelativeGfxId
-   IGXC: simplify ambient occlusion entries
-   Hierarchy: add getParentGfxId
-   IAmbientOcclusionMapEntry: rename TransformMatrix to Transform
-   change IAmbientOcclusionMapEntry to take a transformation matrix
-   IGXC: support full matrix components for texture atlas in ambient occlusion maps
-   add ambient occlusion entry to IGXC Scene
-   moved IGXC validation into seperate module
-   added appending of raw igxc values to standardized objects
-   API: add GetCollisionInfo
-   add API.GetCollisionBounds
-   Vector: add ApplyMatrix4 and RotateVec3
-   vec3.test: add basic tests for RotateVec3 and ApplyMatrix4
-   vec3.test: restructure
-   Math/Euler: small refactor
-   Math/Quaternion: add createQuaternionFromEuler
-   keep GeometryLinks inside Core to prevent ghost errors (correct solution would be GeometryCache in Core instead of Threejs)
-   improve documentation
-   LinearAlgebra: reformat and rename rotateVectorAAroundPointBByNormalCWithRadiantAngle
-   add simple RegEx cache (creation is expensive)
-   added nooping for updateComponentRegions for temporary operations
-   fixed matrix creation from quaternion
-   [core, threejs] material.Type LegacyPhong support

**IG.GFX.Core 2.9.1**

-   Animator: fixed handling of components in preview status
-   Animator: replaced eval of interactor with API.CreateInteractor
-   fixed error handling in creation of interactors
-   updated dependencies

**IG.GFX.Core 2.9.0**

-   added manipulation of geometries for preview mode
-   added geometryStatus to userData
-   IGXCLoader: added creating of preview igxc and materials
-   added Preview igxc functions
-   added loadMode option to IProcessIGXCOptions
-   Material: note that "Ambient" is deprecated
-   updated dependencies
-   handle ancient .Texture parameter for giving a diffuse map
-   add types for RenderKnecht
-   added cancelRedraw to DeferedRenderBehaviour
-   IGXC: add legacy entry for ".Texture" diffuse map url

**IG.GFX.Core 2.8.0**

-   added TraverseComponent method to API
-   added rangeType parameter to RegionManager.getNearbyComponents
-   added preview geometry support
-   added afterGfxLoad hook to API
-   changed DeferedRenderBehaviour to defer using an animation frame
-   removed manipulation of igxc tree inside igxc loading
-   refactored FFD code to consist of data and static functions instead of classes
-   removed onDeformationTimeChange callback from ControllLattice
-   added objectloader geometryUpdate capability
-   added matching algorithm for matching of current children with new children in igxc loader
-   added catch block to playback control done promise to prevent internal uncaught promise expections
-   removed deformationCache
-   Core.Material: unify typings for texture mapping
-   remove SetupView from API

**IG.GFX.Core 2.7.2**

-   replaced manipulation of original material with manipulation of a cloned material in material cache

**IG.GFX.Core 2.7.1**

-   changed GetAsIGXC to always clone the root object regardless of visibility

**IG.GFX.Core 2.7.0**

-   introduced workspace building with `yarn watchAll` or `yarn buildAll`
-   added CreateSuperRoot method to API
-   cleanup and refactor import functions (also made more abstract)
-   BREAKING CHANGE: changed API.AddChild to return a Promise&lt;void&gt; instead of string
-   BREAKING CHANGE: moved API.AddChild form IG.GFX.ThreeJS to IG.GFX.Core
-   BREAKING CHANGE: added ProcessIGXC method to API
-   BREAKING CHANGE: rename API.DeleteComponent to API.RemoveComponent (while old DeleteComponent function still exists)
-   added convience methods for platform creation and deletion

**IG.GFX.Core 2.6.5**

-   BREAKING CHANGE: support IGXC with Object .Categories given as string[] instead of comma seperated string

**IG.GFX.Core 2.6.4**

-   BREAKING CHANGE: Vector.Normalize functions to return undefined, if magnitude is zero
-   performance on some Vector functions
-   fix Vector.Normalize2
-   Vector.Normalize functions to return undefined, if magnitude is zero
-   saving animation start and end status in userdata
-   improved IGXD.AttachPoint type

**IG.GFX.Core 2.6.3**

-   BREAKING CHANGE: replace setTransformation with API.SetTransformation

**IG.GFX.Core 2.6.2**

-   fixed SetCategoryMaterials Promise not including children promise

**IG.GFX.Core 2.6.0**

-   BREAKING CHANGE: add optional field transformedPoint to AttachPoint

**IG.GFX.Core 2.5.3**

-   add typings for AttachPointTypes

**IG.GFX.Core 2.5.0**

-   add interface for orbitting controls
-   add mergeBounds, getBoundsSize and getBoundsCenter for Bounds
-   add hasAnimatableComponents to Animator
-   add ScriptLoader.loadIGXCScripts
-   BREAKING CHANGE: add setFrame to ICameraView
-   add some functions to vec2 and vec3 adressing lower memory consumption
    -   `CopyVec2/3`
    -   `NormalizeInPlace2/3`
    -   `SubOnFirst2/3`
    -   `AddOnFirst2/3`
    -   `ScalarMultiplyInPlace2/3`
    -   `ScalarAddInPlace2/3`
    -   `ReverseInPlace2/3`
-   BREAKING CHANGE: ensureBoundsAreAssorted: modify parameter directly instead of creating a new one
-   BREAKING CHANGE: SetRotationCenter: to fix missing implementation in ig.gfx.threejs API, implement dummy function in Core.API
-   add API.GetWorldPosition
-   BREAKING CHANGE: change LinearAlgebra.IsCollision to return CollisionInformation instead of just a boolean

**IG.GFX.Core 2.4.8**

-   BREAKING CHANGE: extend IDetailedHitInfo to also contain the component containing the hit mesh

**IG.GFX.Core 2.4.7**

-   BREAKING CHANGE: extend IDetailedHitInfo to also contain the direct hit mesh

**IG.GFX.Core 2.4.5**

-   BREAKING CHANGE: change typing of CollisionInformation

**IG.GFX.Core 2.4.2**

-   change extendBounds() to directly manipulate given bounds
-   add areBoundsValid to check if Bounds have infinity values
-   add maxFPS value to Animation

**IG.GFX.Core 2.4.1**

-   BREAKING CHANGE: move maxBBoxOverlap from LinearAlgebra to CoreState (fix being readonly)

**IG.GFX.Core 2.4.0**

-   BREAKING CHANGE: move LinearAlgebra.ts from IG.GFX.Support
-   BREAKING CHANGE: Extend class Vector with static functions for vec2 and vec3 (use CreateVec2/CreateVec3 like a constructor)
-   refactor Vector, vec2, vec3 and vec2or3 into separate File (Vector.ts)
-   BREAKING CHANGE: add more static functions to Vector class (change to uppercase at the beginning)
    -   `CreateVec2/3`
    -   `CloneVec2/3`
    -   `Normalize2/3`
    -   `Sub2/3`
    -   `Add2/3`
    -   `MagnitudeSquared2/3`
    -   `Magnitude2/3`
    -   `InnerProduct2/3`
    -   `Cross3`
    -   `Distance2/3`
    -   `ScalarMultiply2/3`
    -   `Reverse2/3`
    -   `IsEqual2/3`
    -   `AngleBetweenVectors2/3`
    -   `StringifyVec2/3`
-   refactor Point into separate file (AttachPoint.ts)
-   rename Data3D to InteractionData3D
-   BREAKING CHANGE: move IAction to IG.GFX.MultiArticle and rename to IMultiArticleAction
-   BREAKING CHANGE: move IViewFrame, ICameraView and ICameraViewSettings from IG.GFX.Support to here
-   possibly BREAKING CHANGE: add typings for InteractorHandler.ts
-   BREAKING CHANGE: Bounds is now a type, not a class anymore
    -   `doBoundsIntersect`
    -   `isPointInBounds`
    -   `createBounds`
    -   `cloneBounds`

**IG.GFX.Core 2.2.0**

-   BREAKING CHANGE: API.GetBounds: use local bounding box to calculate world bounding box. Make sure to use API.InvalidateComponent when local bounding box has changed.
-   BREAKING CHANGE: API.GetBounds: default consider scale for local bounding box calculation
-   refactor CreateInteractor and CreateRootInteractor to also accept constructor instead of just string
-   BREAKING CHANGE: Scene and WebGLRenderer are not created by default any more. Please use ThreeJS/src/Utils.ts -> CreateDefaults()

**IG.GFX.Core 2.1.18**

-   IGX.API.GetBounds(): remove "Parent" as possible argument for parameter context

**IG.GFX.Core 2.1.17**

-   refine typings

**IG.GFX.Core 2.1.15**

-   reformat with "prettier" and refine typings

**IG.GFX.Core 2.1.10**

-   IGX.API.SetMaterial(), SetCategoryMaterial(): marked as async

**IG.GFX.Core 2.1.6**

-   API += SetPoint

**IG.GFX.Core 2.1.3**

-   IGXM += FilterBehaviour

**IG.GFX.Core 2.0.25**

-   Category += DontFilter

**IG.GFX.Core 2.0.23**

-   Category += NotDimensioned, InteriorElement
-   API += SetDeformation()

**IG.GFX.Core 2.0.22**

-   Version bump
-   Dependency update

**IG.GFX.Core 2.0.21**

-   IGXM += NeighborDependency Mode for Actions
-   IGXC += GeometryNormalMaps

**IG.GFX.Core 2.0.0**

-   IGX.Core += setAPI()

**IG.GFX.Core 1.2.2**

-   IGX += IAction
-   IGX.Core += IGXM (from IG.GFX.MultiArticle)
-   IGX.API += GetMergedIGXC(): get a merged IGXC from different root objects
-   IGX.API += GetActions(): Get the stored actions of the component
-   IGX.Category += CuttingThroughWall
-   IGX.Core.IGXC.AttachPoint now has an optional ComponentId attribute
-   IGX.Point now has an optional componentId attribute

**IG.GFX.Core 1.2.1**

-   IGX.API.AddChild(): added parameter to skip redraw
-   IGX.API.SetMaterial(), SetCategoryMaterial(): accepting Material name or Material object
-   IGX.API += SetupWalls()
-   IGX.API += GetAbstractBounds()
-   IGX.Core += IAbstractBounds

**IG.GFX.Core 1.2.0**

-   IGX.API += InvalidateComponent()
-   IGX.API += GetCollision()
-   IGX.API += GetHitComponent()
-   IGXC.Scene += BasePath
-   IGX.API += AutoHighlightComponent
-   IGXC.Scene += CommercialId
-   IGX += rendererOptions

**IG.GFX.Core 1.1.6**

-   IGX.API += SetupGhost(), GetGhostId()
-   IGX += global constants, making IGX.API.ROOT_POSTFIX, .DEG2RAD, \*.RAD2DEG deprecated

**IG.GFX.Core 1.1.5**

-   IGX.API += SetIGXCPoints(), GetIGXCPoints()
-   IGX.API += SetCategories()
-   IGX.API += SetSelectionMode()

**IG.GFX.Core 1.1.4**

-   IGX.Material: FIX access error if Diffuse is undefined

**IG.GFX.Core 1.1.4**

-   IGX.Material updated (composite entries for Diffuse, Normal, Environment)
-   IGX.API += GetAllSelectedComponents()
-   IGX.API += IsSelected()
-   IGX.Core.MultiProductInteractor += AUTO_GROUPING mode

**IG.GFX.Core 1.1.3**

-   IGX.API.CALLBACKS += NEIGHBOR_ADDING/"OnNeighborAdding"
-   IGX.API += LoadIGXC()
-   IGX.Core.MultiProductInteractor += SetMode()
-   IGX.API += HighlightHandler()
-   IGX.API += GetDistance(), GetAreaDistance()
-   IGX.Core += MultiArticle WIP
-   Product.GetAssociates(): add top/bottom n'bors WIP

**IG.GFX.Core 1.1.2**

-   IGX.API.GetAsIGXC() FIX do not dump invisible objects as undefined entries
-   IGX.Core.MultiProductInteractor += X-Y translation mode (WIP)
-   IGX.Core += EInteractionMode
-   IGXC += AttachPoint

**IG.GFX.Core 1.1.2**

-   IGX.API += LoadGeometryErrorHandler()

**IG.GFX.Core 1.1.2**

-   IGX.API += LoadGeometryHandler()
-   IGX.UpdateData += LoadingGeometries
-   IGX.Core.MultiProductInteractor add callback OnSnapped() to Evaluators
-   IGX.API.GetAsIGXC() implementation of Visible state

**IG.GFX.Core 1.1.1**

-   IGX.API.GetAsIGXC() support for IGXC.WriterOptions.OnComponentProcessed()
-   IGXC.WriterOptions += OnComponentProcessed()
-   IGXD += Product
-   IGXC += Product
-   IGX.API.AddMaterials() like LoadMaterials but expects an object

**IG.GFX.Core 1.1.0**

-   IGX.API.GetAsIGXC() dump material definitions if requested
-   IGXC.WriterOptions -= ExpandMaterialCategories, += AddMaterialDefinitions

**IG.GFX.Core 1.1.0**

-   IGX.API.GetAsIGXC() dump materials along with the material categories
-   IGXC.Object += Material

**IG.GFX.Core 1.1.0**

-   IGX.API.Highlight() += optional redraw-suppress parameter

**IG.GFX.Core 1.1.0**

-   IGX.API.GetAsIGXC() FIX path assignment
-   IGX.API.GetAsIGXC() round rotation values
-   IGX.API.GetAsIGXC() ignore transform for root
-   IGX.API.GetAsIGXC() don't dump 'id' as Interactor parameter

**IG.GFX.Core 1.1.0**

-   IGX.API.IGXC += WriterOptions
-   IGX.API += GetAsIGXC()
-   IGX.Core += IGXD.\*
-   IGX.Core += IGXC.\*

**IG.GFX.Core 1.0.2**

-   IGX.API += SetGeometry()

**IG.GFX.Core 1.0.1**

-   IGX.Material += BumpMaterial, BumpScale, NormalMap, NormalScale
-   IGX.API += GetMaterial()
-   IGX.API += UpdateEvaluator(), UpdateInteractor()
-   IGX.API += AddChild()
-   IGX.API += LoadMaterials()
-   IGX.Float3 += add()
-   IGX.Bounds += doBBoxesIntersect()
-   IGX.Utilities += IntersectSceneWithBox()
-   IGX += Utilities

**IG.GFX.Core 1.0.0**

-   IGX.API += RedrawSceneHandler()
-   IGX.API += SetHash()
-   IGX.Core.Interactor: ComponentId() renamed to GetComponentId()
-   IGX.Core.MultiProductInteractor: update the selection after finish of x-z translation
-   IGX.API += GetRootInteractor()
-   IGX.API += GetHash()
-   IGX.API += GetGeometry()
-   IGX.API += GetComponent()

**IG.GFX.Core 1.0.0**

-   IGX.Vector3 added (compatibility with Unity-3D scripts)
-   IGX.API.GetInteractionData(): optional parameters
-   provision of System.Console.WriteLine()
-   IGX.Core.MultiProductInteractor: supporting callbacks for initial placment
-   IGX.API += CALLBACKS
-   IGX.API.GetEvaluatorCallback()
-   IGX.API += Set/GetCommercialId()
-   IGX.API.LoadUpdate(): in geometry-update scenario, restore pos+y rot, also minor fixes

**IG.GFX.Core 1.0.0**

-   IGX.API += LoadUpdateErrorHandler()
-   IGX.Product: callback for ghost2product conversion
-   IGX.Product: ignore implicit mat categories for ghost coloring
-   IGX.API.LoadUpdate(): return type string, was void
-   IGX.API += IsValid()
-   IGX.API += Log()
-   IGX.Product.CreateGhosts(): FIX don't call it if there're no Origin points
-   IGX.API.SetCategoryMaterial(s): proper handling of assignment of undefined material
-   IGX.Point.ChildMatch(): ignore y

**IG.GFX.Core 1.0.0**

-   IGX.Core.MultiProductInteractor: global ghost mode
-   IGX.Product += Ghost mode. A Ghost appears when there're multiple insert positions for a given add-on
-   IGX += type UpdateData
-   IGX.Core.MultiProductInteractor: preparing for Ghost-mode insertion
-   IGX += type Material
-   IGX.API: += DeleteHandler()
-   IGX.Product: += Delete()
-   IGX.Core.MultiProductInteractor: moveable children now snap to parents
-   IGX.API: += Select2Handler()
-   IGX.Core.MultiProductInteractor: default placement if no selection or selection does not match
-   IGX.Core.MultiProductInteractor: initial selection timeout to resolve n'bor connections
-   IGX.API: += SelectComponents2(), GetSelectedComponents2() - support for secondary selection
-   IGX.API: += GetSelectedComponent()

**IG.GFX.Core 1.0.0**

-   IGX.Core.MultiProductInteractor: changes related to new bbox/highlighting

**IG.GFX.Core 1.0.0**

-   IGX.Core.MultiProductInteractor: exclude Parent-Child points from n'bor hood snapping
-   IGX.Core.MultiProductInteractor: timer-based snap ignore
-   IGX.API: += Highlight()
-   IGX.Core.MultiProductInteractor: if parent of non-moveable product exists, auto-select the parent for moving
-   IGX.Core.MultiProductInteractor: up-traversal during insertion
-   IGX.Core.MultiProductInteractor: handle cyclic nbors and double nbors
-   IGX.Core.MultiProductInteractor: initial placement support
-   IGX.Core.MultiProductInteractor: smooth raster rotation allowing slooooow motion
-   IGX.Core.MultiProductInteractor += snapping (two levels), n'bor detection
-   IGX.API: new handler InteractionDoneHandler()
-   IGX.API: CalcInteractionData() renamed to GetInteractionData(), return type now Data3D (was: any)
-   IGX.Core: += Interactor.SingleTouchEnd()
-   IGX.API: FIX AssignMaterial()
-   IGX.API += MultiProductInteractor
-   IGX.API: += GetPoints()
-   IGX.API: += GetEvaluator()
-   IGX.API: Remote() -> Package IG.GFX.UI
-   IGX.API: new function RemoteHandler()

**IG.GFX.Core 1.0.0**

-   IGX.API: GetBounds() new parameter 'context', return value changed to {} for min and max, was [3]
-   IGX.API: GetBounds() allow componentId null to get the scene bounds
-   IGX.API: new static variable AutoDeselectComponent
-   IGX.API: functions Set/GetHighLighting() R.I.P.
-   IGX.API: ShowBehavior() mod. single component Id (was array)
-   IGX.API += SelectComponent()
-   IGX.Core += SingleProductInteractor
-   IGX.API: new function CreateRootInteractor()
-   IGX.API: implementation of GetComponents()
-   IGX.API: new function GetBounds()
-   IGX.API: new function DeleteComponent()
-   IGX.API: new functions Set/GetHighLighting()
-   IGX.API.Remote: new commands 'Configure' and 'Autofocus'
-   IGX.API: LoadUpdate() url parameter can now be empty
-   IGX.API: data parameter for LoadUpdate()

**IG.GFX.Core 1.0.0**

-   IGX.API: new function SetupView
-   IGX.API: new function GetInteractor()
-   IGX.API: new method SetCategoryMaterials()
-   IGX.API: fixed issues in SetLayerVisibility()
-   IGX.API: new function LoadUpdateHandler()
-   IGX.API: new functions GetAllMaterialCategories(), GetAllLayers()
-   IGX.API: new functions GetRoots()
-   IGX.API: new functions PickHandler(), SelectHandler()
-   IGX.API.LoadUpdate - load an initial/update file, replacing LoadProduct()
-   IGX.API.Remote: new function SetVisibility()
-   IGX.API: new function RedrawScene()
-   IGX.API: new functions SetLayerVisibility(), Set/GetVisible()
-   IGX.API: new function GetOrderNumber()

**IG.GFX.Core 1.0.0**

-   Migration to TypeScript

**IG.GFX.Core 1.0.0**
