|
@@ -110,15 +110,53 @@ export default class Sprite extends THREE.Mesh{
|
|
|
let orient2d
|
|
|
|
|
|
if(this.lineDir){
|
|
|
- /* let r1 = Potree.Utils.getPos2d(new THREE.Vector3, camera, viewer.renderArea, e.viewport);
|
|
|
- let r2 = Potree.Utils.getPos2d(this.lineDir, camera, viewer.renderArea, e.viewport); */
|
|
|
+ this.root.updateMatrix();//先更新,getWorldPosition才能得到正确的
|
|
|
+ this.root.updateMatrixWorld(true)
|
|
|
+ let center = this.root.getWorldPosition(new THREE.Vector3())
|
|
|
+ //由于两个端点容易在屏幕外,所以使用center和center加dir
|
|
|
+ let lineDir = this.lineDir.clone();
|
|
|
+
|
|
|
+
|
|
|
+ let r1 = Potree.Utils.getPos2d(center, camera, viewer.renderArea, e.viewport);
|
|
|
+ if(!r1.trueSide)return console.error('!r1.trueSide')
|
|
|
+
|
|
|
+ let r2, point2
|
|
|
+
|
|
|
+ let p2State = '', len=1,/* tryTimes = 0, */ p2StateHistory = []
|
|
|
+ while(p2State != 'got' && p2StateHistory.length<10){
|
|
|
+ point2 = center.clone().add(lineDir).multiplyScalar(len);
|
|
|
+ r2 = Potree.Utils.getPos2d(point2, camera, viewer.renderArea, e.viewport);
|
|
|
+ if(!r2.trueSide){
|
|
|
+ if(!p2StateHistory.includes('tooLong-reverse')){
|
|
|
+ p2State = 'tooLong-reverse' //先尝试反向
|
|
|
+ }else{
|
|
|
+ p2State = 'tooLong'
|
|
|
+ }
|
|
|
+ }else if(r2.pos.distanceTo(r1)<5 && !p2StateHistory.includes('tooLong')){//和r1距离太近,要加长
|
|
|
+
|
|
|
+ p2State = 'tooShort'
|
|
|
+ }else{
|
|
|
+ p2State = 'got'; break;
|
|
|
+ }
|
|
|
+
|
|
|
+ len = p2State == 'tooLong-reverse' ? -len : p2State == 'tooLong' ? len / 2 : p2State == 'tooShort' ? len * 3 : len
|
|
|
+
|
|
|
+ p2StateHistory.push(p2State)
|
|
|
+ /* tryTimes ++ */
|
|
|
+ }
|
|
|
+ console.log(p2StateHistory,len)
|
|
|
+
|
|
|
+ if(!r2.trueSide){
|
|
|
+ return console.log(' !r2.trueSide', )
|
|
|
+ }
|
|
|
|
|
|
- let r1 = Potree.Utils.getPos2d(this.lineDir[0], camera, viewer.renderArea, e.viewport);
|
|
|
- let r2 = Potree.Utils.getPos2d(this.lineDir[1], camera, viewer.renderArea, e.viewport);
|
|
|
|
|
|
+ /* let r1 = Potree.Utils.getPos2d(this.lineDir[0], camera, viewer.renderArea, e.viewport);
|
|
|
+ let r2 = Potree.Utils.getPos2d(this.lineDir[1], camera, viewer.renderArea, e.viewport);
|
|
|
+
|
|
|
if(!r1.trueSide || !r2.trueSide){
|
|
|
return console.log('!r1.trueSide || !r2.trueSide', )
|
|
|
- }
|
|
|
+ }*/
|
|
|
let p1 = r1.pos, p2 = r2.pos
|
|
|
let vec = new THREE.Vector2().subVectors(p1,p2);
|
|
|
let angle = -vec.angle()
|
|
@@ -195,6 +233,10 @@ export default class Sprite extends THREE.Mesh{
|
|
|
//console.log(this.root.name + e.viewport.name + " : "+this.root.matrixWorld.elements)
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
setUniforms(name,value){
|
|
|
this.material.setUniforms(name,value)
|
|
|
}
|