|
@@ -78860,8 +78860,8 @@ void main() {
|
|
|
}
|
|
|
|
|
|
//add-------------------------------------
|
|
|
- const OpaWhenNotSelect = 0.75;
|
|
|
- const ScaleRatio = 4;
|
|
|
+ const OpaWhenNotSelect = 0.6;
|
|
|
+ const ScaleRatio = 8;
|
|
|
const OutlineColor = 0x666666;
|
|
|
//----------------------------------------
|
|
|
const hideFocusHandles = true;//add
|
|
@@ -78872,7 +78872,7 @@ void main() {
|
|
|
this.viewer = viewer;
|
|
|
|
|
|
this.scene = new Scene();
|
|
|
-
|
|
|
+ this.modesEnabled = {};//add
|
|
|
this.selection = [];
|
|
|
this.pivot = new Vector3();
|
|
|
this.dragging = false;
|
|
@@ -78986,7 +78986,8 @@ void main() {
|
|
|
if(!handels)return
|
|
|
for(let o in handels){
|
|
|
handels[o].node.visible = !!enable;
|
|
|
- }
|
|
|
+ }
|
|
|
+ this.modesEnabled[mode] = !!enable;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -79189,11 +79190,13 @@ void main() {
|
|
|
initializeTranslationHandles(){
|
|
|
|
|
|
let boxGeometry = new BoxGeometry(1, 1, 1);
|
|
|
-
|
|
|
+ this.translateNodes = new Object3D;
|
|
|
+ this.scene.add(this.translateNodes);
|
|
|
+
|
|
|
for(let handleName of Object.keys(this.translationHandles)){
|
|
|
let handle = this.handles[handleName];
|
|
|
let node = handle.node;
|
|
|
- this.scene.add(node);
|
|
|
+ this.translateNodes.add(node);
|
|
|
|
|
|
let material = new MeshBasicMaterial({
|
|
|
color: handle.color,
|
|
@@ -79214,7 +79217,7 @@ void main() {
|
|
|
|
|
|
let box = new Mesh(boxGeometry, material);
|
|
|
box.name = `${handleName}.handle`;
|
|
|
- box.scale.set(1, 1, 36);
|
|
|
+ box.scale.set(1, 1, 72);
|
|
|
box.lookAt(new Vector3(...handle.alignment));
|
|
|
box.renderOrder = 10;
|
|
|
node.add(box);
|
|
@@ -79718,7 +79721,9 @@ void main() {
|
|
|
for(let handleName of Object.keys(this.handles)){
|
|
|
let handle = this.handles[handleName];
|
|
|
let node = handle.node;
|
|
|
-
|
|
|
+ let mode = handleName.split('.')[0];
|
|
|
+ if(!this.modesEnabled[mode])continue;//xzw add
|
|
|
+
|
|
|
let handlePos = node.getWorldPosition(new Vector3());
|
|
|
let distance = handlePos.distanceTo(camera.position);
|
|
|
let pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight);
|
|
@@ -79727,10 +79732,11 @@ void main() {
|
|
|
|
|
|
let s = (ScaleRatio / pr);
|
|
|
let scale = new Vector3(s, s, s).divide(ws);
|
|
|
-
|
|
|
+
|
|
|
let rot = new Matrix4().makeRotationFromEuler(node.rotation); //需要使用到旋转,所以我把设置scale的移到旋转后了,否则在视图上下旋转的分界线处rotateHandel会被拉长从而闪烁。
|
|
|
let rotInv = rot.clone().invert();
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
scale.applyMatrix4(rotInv);
|
|
|
scale.x = Math.abs(scale.x);
|
|
|
scale.y = Math.abs(scale.y);
|
|
@@ -79738,22 +79744,32 @@ void main() {
|
|
|
|
|
|
node.scale.copy(scale);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
+ //add
|
|
|
+ /* this.translateNodes.rotation.copy(this.selection[0].rotation)
|
|
|
+ this.translateNodes.rotation.x *= -1
|
|
|
+ this.translateNodes.rotation.y *= -1
|
|
|
+ this.translateNodes.rotation.z *= -1
|
|
|
+ */
|
|
|
+
|
|
|
+
|
|
|
|
|
|
{
|
|
|
let ray = Utils.mouseToRay(pointer, camera, domElement.clientWidth, domElement.clientHeight);
|
|
|
let raycaster = new Raycaster(ray.origin, ray.direction);
|
|
|
raycaster.layers.enableAll();//add
|
|
|
|
|
|
- let intersects = raycaster.intersectObjects(this.pickVolumes.filter(v => v.visible), true);
|
|
|
-
|
|
|
-
|
|
|
|
|
|
+ let pickVolumes = this.pickVolumes.filter(v=>{
|
|
|
+ let mode = v.handle.split('.')[0];
|
|
|
+ return this.modesEnabled[mode]
|
|
|
+ });
|
|
|
+ let intersects = raycaster.intersectObjects(pickVolumes, true);
|
|
|
|
|
|
+
|
|
|
if(intersects.length > 0){
|
|
|
let I = intersects[0];
|
|
|
let handleName = I.object.handle;
|
|
|
+ console.log(handleName);
|
|
|
this.setActiveHandle(this.handles[handleName]);
|
|
|
}else {
|
|
|
this.setActiveHandle(null);
|
|
@@ -115179,14 +115195,14 @@ ENDSEC
|
|
|
if(objects.includes(object)){
|
|
|
this.selectModel(object);
|
|
|
}else {
|
|
|
- if(!viewer.inputHandler.selection[0]){//正在平移和旋转,不允许取消
|
|
|
+ //if(!viewer.inputHandler.selection[0]){//正在平移和旋转,不允许取消
|
|
|
this.selectModel(null);
|
|
|
- }
|
|
|
+ //}
|
|
|
}
|
|
|
}else {
|
|
|
- if(!viewer.inputHandler.selection[0]){
|
|
|
+ //if(!viewer.inputHandler.selection[0]){
|
|
|
this.selectModel(null);
|
|
|
- }
|
|
|
+ //}
|
|
|
}
|
|
|
});
|
|
|
|
|
@@ -115259,6 +115275,7 @@ ENDSEC
|
|
|
}else {
|
|
|
viewer.outlinePass.selectedObjects = [];
|
|
|
this.selected = null;
|
|
|
+ viewer.transformObject(null);
|
|
|
//console.log('selectModel', null)
|
|
|
}
|
|
|
|
|
@@ -126683,7 +126700,7 @@ ENDSEC
|
|
|
focusOnObject(object, type, duration, o={} ) {
|
|
|
//飞向热点、测量线等 。
|
|
|
|
|
|
- console.log('focusOnObject: ', object, type);
|
|
|
+ //console.log('focusOnObject: ', object, type)
|
|
|
|
|
|
let deferred = o.deferred || $.Deferred();
|
|
|
let target = new Vector3, //相机focus的位置
|