Files
CADViewComponent/src/PlaneExt.ts

47 lines
1.4 KiB
TypeScript
Raw Normal View History

import * as THREE from 'three';
2020-04-01 16:12:28 +08:00
import { Vector3, Line3, Plane } from "three";
2020-04-01 16:12:28 +08:00
export class PlaneExt extends Plane
{
2020-04-01 16:12:28 +08:00
constructor(normal?: Vector3, constant?: number)
{
super(normal, constant);
}
intersectLine(line: Line3, optionalTarget?: Vector3, extendLine?: boolean): Vector3
{
let v1 = new Vector3();
let result = optionalTarget || new Vector3();
let direction = line.delta(v1);
let denominator = this.normal.dot(direction);
if (denominator === 0)
{
// line is coplanar, return origin
if (this.distanceToPoint(line.start) === 0)
{
return result.copy(line.start);
}
// Unsure if this is the correct method to handle this case.
return undefined;
}
let t = - (line.start.dot(this.normal) + this.constant) / denominator;
//If you not extendLine,check intersect point in Line
if (!extendLine && (t < 0 || t > 1))
{
return undefined;
}
return result.copy(direction).multiplyScalar(t).add(line.start);
}
intersectRay(ray: THREE.Ray, optionalTarget?: Vector3, extendLine?: boolean): Vector3
{
// 从射线初始位置
let line = new THREE.Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction));
return this.intersectLine(line, optionalTarget, extendLine);
}
}