选择框 投影点

pull/7/head
ChenX 7 years ago
parent 214b747245
commit 8ed28d2ef1

@ -0,0 +1,14 @@
import { Vector3Ext } from '../../src/Geometry/Vector3Ext';
import * as THREE from "three";
test("测试平行", () =>
{
let v1 = new Vector3Ext(0, 0, 1);
let v2 = new Vector3Ext(0.0001, 0, 1);
expect(v1.isParallelTo(v2)).toBe(false);
expect(v1.equals(new THREE.Vector3(0, 0, 1))).toBe(true);
expect(v2.equals(new THREE.Vector3(0.0001, 0, 1))).toBe(true);
// console.log(v1.isParallelTo(v2));
// console.log(v1);
// console.log(v2);
})

@ -2,6 +2,7 @@ import { Vector3, Matrix4 } from 'three';
import { Entity } from '../DatabaseServices/Entity';
import * as THREE from 'three';
import { PlaneExt } from '../Geometry/Plane';
import { GeUtils } from '../Geometry/GeUtils';
//
@ -25,6 +26,7 @@ export class SelectBox
// m_Min: Vector3;
// m_Max: Vector3;
private m_SelPolyPtsBuff: Map<string, Array<Vector3>> = new Map<string, Array<Vector3>>();
/**
* .
@ -35,15 +37,20 @@ export class SelectBox
*/
getProjectionPts(planDir: THREE.Vector3): Array<Vector3>
{
if (GeUtils.isParallelTo(planDir, this.m_ViewNormal))
return [];
let dirStr = GeUtils.ptToString(planDir);
if (this.m_SelPolyPtsBuff.has(dirStr))
return this.m_SelPolyPtsBuff.get(dirStr)
let plan = new PlaneExt(planDir);
this.m_SelPolyPts.map(p =>
let pts = this.m_SelPolyPts.map(p =>
{
let l = new THREE.Line3(p, p.clone().add(this.m_ViewNormal));
return plan.intersectLine(l, null, true);
})
return [];
});
this.m_SelPolyPtsBuff.set(dirStr, pts);
return pts;
}
}
export class SelectSet
@ -56,4 +63,5 @@ export class SelectSet
m_SelectEntityCollection: Array<Entity> = [];
m_SelectBox: SelectBox;
}
}

@ -1,6 +1,7 @@
import { Vector3, Matrix4 } from 'three';
import * as THREE from 'three';
namespace GeUtils
import { Vector3Ext } from './Vector3Ext';
export namespace GeUtils
{
export const cZeroVec = new THREE.Vector3();
@ -41,5 +42,27 @@ namespace GeUtils
mat.lookAt(cZeroVec, dir, up);
return mat;
}
export function isParallelTo(v1: THREE.Vector3, v2: THREE.Vector3)
{
let vx1 = new Vector3Ext().copy(v1);
let vx2 = new Vector3Ext().copy(v2);
return vx1.isParallelTo(vx2);
}
export function ptToString(v: THREE.Vector3, fractionDigits: number = 3): string
{
return v.toArray().map(o =>
{
return o.toFixed(fractionDigits)
}).join(",")
}
}
let v = new THREE.Vector3(1.224444444)
let s = GeUtils.ptToString(v);
console.log(s);

@ -0,0 +1,24 @@
import * as THREE from "three";
export class Vector3Ext extends THREE.Vector3
{
constructor(x?: number, y?: number, z?: number)
{
super(x, y, z);
}
/**
* ,1e-5.
*
* @export
* @param {THREE.Vector3} v
* @returns {boolean}
*/
isParallelTo(v: Vector3Ext): boolean
{
let v2 = this.clone().cross(v);
return v2.lengthSq() < 1e-10;
}
}
Loading…
Cancel
Save