.. role:: clio-const
   :class: clio-flag clio-flag-const


######################
@ts3d-hoops/common API
######################

.. describe:: @ts3d-hoops/common API

   @ts3d-hoops/common
   
   Foundational math and utility types used across HOOPS web packages. This lightweight library provides vectors, matrices, colors, boxes, quaternions, planes, and related helpers—written in TypeScript with bundled type definitions.
   
   
   - Zero-dependency runtime
   - Tree‑shakable ES modules
   - Fully typed API
   
   Installation
   
   .. code-block:: bash
   
      npm install @ts3d-hoops/common
   
   Quick start
   
   .. code-block:: ts
   
      import { Point3, Matrix, Color, Box, Quaternion, Plane } from '@ts3d-hoops/common';
      
      const a = new Point3(1, 2, 3);
      const b = new Point3(4, 5, 6);
      const mid = Point3.scale(Point3.add(a, b), 0.5);
      
      const rot = Quaternion.fromAxisAngle(new Point3(0, 1, 0), Math.PI / 2);
      const m = Matrix.rotation(rot);
      const transformed = Matrix.transformPoint(m, mid);
      
      const red = new Color(255, 0, 0);
      const box = new Box(a, b);
   
   What’s inside
   
   
   - Math primitives: ``Point2``\ , ``Point3``\ , ``Point4``\ , ``Quaternion``\ , ``Matrix``\ , ``Plane``\ , ``Ray``
   - Geometry helpers: ``Box``
   - Rendering helpers: ``Color``
   - Utilities: ``Unicode``
   - Types: shared enums and type aliases
   
   Import paths follow a flat structure. You can import from the package root for convenience:
   
   .. code-block:: ts
   
      import { Point2, Point3, Matrix } from '@ts3d-hoops/common';
   
   API highlights
   
   
   - Immutable-style helpers alongside class methods (e.g., ``Point3.add``\ , ``Matrix.multiply``\ )
   - Factory helpers (e.g., ``Color.white()``\ , ``Quaternion.identity()``\ )
   - Copy/clone methods to avoid mutating inputs
   
   TypeScript
   
   Type definitions are bundled. No extra configuration is required. The library targets modern TypeScript/ESM projects and works with common bundlers (Vite, Webpack, Rollup, esbuild).
   
   Versioning and compatibility
   
   ``@ts3d-hoops/common`` is designed to be shared by ``@ts3d-hoops/web-viewer`` and related packages. Keep versions aligned across the HOOPS packages in your project when possible.
   
   License
   
   Commercial license. For evaluation or production licensing, contact Tech Soft 3D.
   
   
   Index
   =====
   
   .. rubric:: Variables
   
   
   .. rst-class:: api-xref-list
   
   
   * :js:data:`~common.Ohm`
   * :js:data:`~common.Subscript1`
   * :js:data:`~common.Subscript2`
   * :js:data:`~common.Subscript3`
   * :js:data:`~common.SubscriptNeg`
   
   



.. rst-class:: kind-group kind-enumerations

.. rubric:: Enumerations
   :class: kind-group-title


.. rst-class:: api-xref-list


* :js:data:`~common.BasicUnit`

.. rst-class:: kind-group kind-classes

.. rubric:: Classes
   :class: kind-group-title


.. rst-class:: api-xref-list


* :js:class:`~common.Box`
* :js:class:`~common.Color`
* :js:class:`~common.Matrix`
* :js:class:`~common.Plane`
* :js:class:`~common.Point2`
* :js:class:`~common.Point3`
* :js:class:`~common.Point4`
* :js:class:`~common.Ray`

.. rst-class:: kind-group kind-interfaces

.. rubric:: Interfaces
   :class: kind-group-title


.. rst-class:: api-xref-list


* :js:class:`~common.FaceFaceDistanceObject`
* :js:class:`~common.IBox`
* :js:class:`~common.IColor`
* :js:class:`~common.IPoint2`
* :js:class:`~common.IPoint3`
* :js:class:`~common.IPoint4`
* :js:class:`~common.IRay`
* :js:class:`~common.UnitElement`

.. rst-class:: kind-group kind-type-aliases

.. rubric:: Type Aliases
   :class: kind-group-title


.. rst-class:: api-xref-list


* :js:data:`~common.Matrix12`
* :js:data:`~common.Matrix16`
* :js:data:`~common.Matrix9`
* :js:data:`~common.Rgbas`
* :js:data:`~common.Uvs`
* :js:data:`~common.Vector3`
* :js:data:`~common.Vector3s`
* :js:data:`~common.Vector4`
* :js:data:`~common.Vector4s`

.. rst-class:: kind-group kind-variables

.. rubric:: Variables
   :class: kind-group-title


.. js:data:: common.Ohm

      .. rst-class:: clio-flags
      
         :clio-const:`const`
      
      .. rst-class:: sig-pretty-signature
      
         | Ohm: *"Ω"*
      



.. js:data:: common.Subscript1

      .. rst-class:: clio-flags
      
         :clio-const:`const`
      
      .. rst-class:: sig-pretty-signature
      
         | Subscript1: *"¹"*
      



.. js:data:: common.Subscript2

      .. rst-class:: clio-flags
      
         :clio-const:`const`
      
      .. rst-class:: sig-pretty-signature
      
         | Subscript2: *"²"*
      



.. js:data:: common.Subscript3

      .. rst-class:: clio-flags
      
         :clio-const:`const`
      
      .. rst-class:: sig-pretty-signature
      
         | Subscript3: *"³"*
      



.. js:data:: common.SubscriptNeg

      .. rst-class:: clio-flags
      
         :clio-const:`const`
      
      .. rst-class:: sig-pretty-signature
      
         | SubscriptNeg: *"⁻"*
      



.. rst-class:: kind-group kind-functions

.. rubric:: Functions
   :class: kind-group-title


.. rst-class:: api-xref-list


* :js:func:`~common.closestPointFromPointToSegment`
* :js:func:`~common.closestPointScalarFromPointToSegment`
* :js:func:`~common.computeAngleBetweenVector`
* :js:func:`~common.computeOffaxisRotation`
* :js:func:`~common.computePointToLineDistance`
* :js:func:`~common.createReferenceGeometryFromAxis`
* :js:func:`~common.createReferenceGeometryFromFaceNormal`
* :js:func:`~common.degreesToRadians`
* :js:func:`~common.distanceLineLine`
* :js:func:`~common.formatWithUnit`
* :js:func:`~common.generateArcPoints`
* :js:func:`~common.generatePointsOnCircle`
* :js:func:`~common.get3dBaseFromVector`
* :js:func:`~common.getLongUnitString`
* :js:func:`~common.getOrthogonalVector`
* :js:func:`~common.intersect3d2Planes`
* :js:func:`~common.intersectionPlaneLine`
* :js:func:`~common.intersectionPlaneLine2`
* :js:func:`~common.isIColor`
* :js:func:`~common.isIPoint2`
* :js:func:`~common.isIPoint3`
* :js:func:`~common.isIPoint4`
* :js:func:`~common.isPointInRect2d`
* :js:func:`~common.isPointOnLineSegment`
* :js:func:`~common.isPointOnLineSegment2d`
* :js:func:`~common.lineLineIntersect`
* :js:func:`~common.oneVectorCross`
* :js:func:`~common.radiansToDegrees`
* :js:func:`~common.sortVerticesCounterClockwise`

.. toctree::
   :maxdepth: 1
   :hidden:

   enums/BasicUnit
   classes/Box
   functions/closestPointFromPointToSegment
   functions/closestPointScalarFromPointToSegment
   classes/Color
   functions/computeAngleBetweenVector
   functions/computeOffaxisRotation
   functions/computePointToLineDistance
   functions/createReferenceGeometryFromAxis
   functions/createReferenceGeometryFromFaceNormal
   functions/degreesToRadians
   functions/distanceLineLine
   interfaces/FaceFaceDistanceObject
   functions/formatWithUnit
   functions/generateArcPoints
   functions/generatePointsOnCircle
   functions/get3dBaseFromVector
   functions/getLongUnitString
   functions/getOrthogonalVector
   interfaces/IBox
   interfaces/IColor
   functions/intersect3d2Planes
   functions/intersectionPlaneLine
   functions/intersectionPlaneLine2
   interfaces/IPoint2
   interfaces/IPoint3
   interfaces/IPoint4
   interfaces/IRay
   functions/isIColor
   functions/isIPoint2
   functions/isIPoint3
   functions/isIPoint4
   functions/isPointInRect2d
   functions/isPointOnLineSegment
   functions/isPointOnLineSegment2d
   functions/lineLineIntersect
   classes/Matrix
   types/Matrix12
   types/Matrix16
   types/Matrix9
   functions/oneVectorCross
   classes/Plane
   classes/Point2
   classes/Point3
   classes/Point4
   functions/radiansToDegrees
   classes/Ray
   types/Rgbas
   functions/sortVerticesCounterClockwise
   interfaces/UnitElement
   types/Uvs
   types/Vector3
   types/Vector3s
   types/Vector4
   types/Vector4s


