|
@@ -15,6 +15,19 @@ module BABYLON {
|
|
|
private _tmpVector = new Vector3(0,0,0);
|
|
|
|
|
|
/**
|
|
|
+ * The size of the rotation spheres attached to the bounding box (Default: 0.1)
|
|
|
+ */
|
|
|
+ public rotationSphereSize = 0.1;
|
|
|
+ /**
|
|
|
+ * The size of the scale boxes attached to the bounding box (Default: 0.1)
|
|
|
+ */
|
|
|
+ public scaleBoxSize = 0.1;
|
|
|
+ /**
|
|
|
+ * If set, the rotation spheres and scale boxes will increase in size based on the distance away from the camera to have a consistent screen size (Default: false)
|
|
|
+ */
|
|
|
+ public fixedDragMeshScreenSize = false;
|
|
|
+
|
|
|
+ /**
|
|
|
* Fired when a rotation sphere or scale box is dragged
|
|
|
*/
|
|
|
public dragStartObservable = new Observable<{}>();
|
|
@@ -74,7 +87,7 @@ module BABYLON {
|
|
|
this._rotateSpheresParent = new BABYLON.AbstractMesh("", gizmoLayer.utilityLayerScene);
|
|
|
this._rotateSpheresParent.rotationQuaternion = new Quaternion();
|
|
|
for(let i=0;i<12;i++){
|
|
|
- let sphere = BABYLON.MeshBuilder.CreateSphere("", {diameter: 0.1}, gizmoLayer.utilityLayerScene);
|
|
|
+ let sphere = BABYLON.MeshBuilder.CreateSphere("", {diameter: 1}, gizmoLayer.utilityLayerScene);
|
|
|
sphere.rotationQuaternion = new Quaternion();
|
|
|
sphere.material = coloredMaterial;
|
|
|
|
|
@@ -141,7 +154,7 @@ module BABYLON {
|
|
|
for(var i=0;i<2;i++){
|
|
|
for(var j=0;j<2;j++){
|
|
|
for(var k=0;k<2;k++){
|
|
|
- let box = BABYLON.MeshBuilder.CreateBox("", {size: 0.1}, gizmoLayer.utilityLayerScene);
|
|
|
+ let box = BABYLON.MeshBuilder.CreateBox("", {size: 1}, gizmoLayer.utilityLayerScene);
|
|
|
box.material = coloredMaterial;
|
|
|
|
|
|
// Dragging logic
|
|
@@ -218,7 +231,7 @@ module BABYLON {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
- private _updateBoundingBox(){
|
|
|
+ private _updateBoundingBox(){
|
|
|
if(this.attachedMesh){
|
|
|
// Update bounding dimensions/positions
|
|
|
var boundingInfo = this.attachedMesh.getBoundingInfo().boundingBox;
|
|
@@ -248,6 +261,13 @@ module BABYLON {
|
|
|
rotateSpheres[index].position.addInPlace(new BABYLON.Vector3(-this._boundingDimensions.x/2,-this._boundingDimensions.y/2,-this._boundingDimensions.z/2));
|
|
|
rotateSpheres[index].lookAt(Vector3.Cross(Vector3.Forward(), rotateSpheres[index].position.normalizeToNew()).normalizeToNew().add(rotateSpheres[index].position));
|
|
|
}
|
|
|
+ if(this.fixedDragMeshScreenSize){
|
|
|
+ rotateSpheres[index].absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera!.position, this._tmpVector);
|
|
|
+ var distanceFromCamera = this.rotationSphereSize*this._tmpVector.length()/9;
|
|
|
+ rotateSpheres[index].scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
|
|
|
+ }else{
|
|
|
+ rotateSpheres[index].scaling.set(this.rotationSphereSize, this.rotationSphereSize, this.rotationSphereSize);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -261,6 +281,13 @@ module BABYLON {
|
|
|
if(scaleBoxes[index]){
|
|
|
scaleBoxes[index].position.set(this._boundingDimensions.x*i,this._boundingDimensions.y*j,this._boundingDimensions.z*k);
|
|
|
scaleBoxes[index].position.addInPlace(new BABYLON.Vector3(-this._boundingDimensions.x/2,-this._boundingDimensions.y/2,-this._boundingDimensions.z/2));
|
|
|
+ if(this.fixedDragMeshScreenSize){
|
|
|
+ scaleBoxes[index].absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera!.position, this._tmpVector);
|
|
|
+ var distanceFromCamera = this.scaleBoxSize*this._tmpVector.length()/9;
|
|
|
+ scaleBoxes[index].scaling.set(distanceFromCamera, distanceFromCamera, distanceFromCamera);
|
|
|
+ }else{
|
|
|
+ scaleBoxes[index].scaling.set(this.scaleBoxSize, this.scaleBoxSize, this.scaleBoxSize);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|