Source: connectors/transform.js

const vec3 = require('../maths/vec3')

const fromPointAxisNormal = require('./fromPointAxisNormal')

/**
 * Transform the give connector using the given matrix.
 * @param {mat4} matrix - a transform matrix
 * @param {connector} connector - the connector to transform
 * @returns {connector} a new connector
 * @alias module:modeling/connectors.transform
 */
const transform = (matrix, connector) => {
  // OPTIMIZE
  const newpoint = vec3.transform(vec3.create(), connector.point, matrix)
  const newaxis = vec3.subtract(
    vec3.create(),
    vec3.transform(vec3.create(), vec3.add(vec3.create(), connector.point, connector.axis), matrix),
    newpoint
  )
  const newnormal = vec3.subtract(
    vec3.create(),
    vec3.transform(vec3.create(), vec3.add(vec3.create(), connector.point, connector.normal), matrix),
    newpoint
  )
  return fromPointAxisNormal(newpoint, newaxis, newnormal)
}

module.exports = transform