cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk memutar dan mengalihkan widget?

Adakah terdapat cara untuk membuat komponen bergerak atau berputar selepas memilihnya? Sebagai contoh, selepas memilihnya, putarkannya mengikut sudut sepanjang paksi tertentu, atau selepas memilihnya, alihkan komponen ke kedudukan lain?

PHPzPHPz2744 hari yang lalu486

membalas semua(1)saya akan balas

  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:12:06

    Ya, anda boleh mencapainya seperti ini:

    1. Putar 180 darjah di sepanjang paksi Y (berikut ialah contoh kod untuk ES2015):

    class RotateExt extends Autodesk.Viewing.Extension {
      constructor( viewer, options ) {
        super();
      }
    
       load() {
        viewer.addEventListener( Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionChanged );
        return true;
       }
    
       unload() {
        viewer.removeEventListener( Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionChanged );
        return true;
       }
       
      /**!
       * 关键函数
       */
       onSelectionChanged = ( event ) => {
           
        const quaternion = new THREE.Quaternion();
        // 设置旋转量 - 依 Y 轴旋转构件 180 度
        quaternion.setFromAxisAngle( new THREE.Vector3( 0,1,0 ), Math.PI );
    
        const model = event.model;
        const fragIdsArray = event.fragIdsArray;
    
        fragIdsArray.forEach( ( fragId, idx ) => {
          const fragProxy = this.viewer.impl.getFragmentProxy( model, fragId );
    
          fragProxy.getAnimTransform();
    
          const position = new THREE.Vector3( fragProxy.position.x, fragProxy.position.y, fragProxy.position.z );
          position.applyQuaternion( quaternion );
    
          fragProxy.position = position;
          fragProxy.quaternion.multiplyQuaternions( quaternion, fragProxy.quaternion );
    
          if( idx === 0 ) {
            const euler = new THREE.Euler();
            euler.setFromQuaternion( fragProxy.quaternion, 0 );
          }
    
          fragProxy.updateAnimTransform();
        });
        
        this.viewer.impl.sceneUpdated( true );
      };
    }
    
    Autodesk.Viewing.theExtensionManager.registerExtension( 'Autodesk.ADN.Viewing.Extension.RotateTool', RotateExt );
    1. Alihkan -100 unit di sepanjang paksi X (berikut ialah contoh kod untuk ES2015):

    class TranslateExt extends Autodesk.Viewing.Extension {
      constructor( viewer, options ) {
        super();
      }
    
       load() {
        viewer.addEventListener( Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionChanged );
        return true;
       }
    
       unload() {
        viewer.removeEventListener( Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionChanged );
        return true;
       }
    
      /**!
       * 关键函数
       */
       onSelectionChanged = ( event ) => {
        
        // 设置移动量 - 向 X 轴移动 -100 单位
        const offset = new THREE.Vector3( -100, 0 , 0 );
    
        const model = event.model;
        const fragIdsArray = event.fragIdsArray;
    
        fragIdsArray.forEach( ( fragId, idx ) => {
          const fragProxy = this.viewer.impl.getFragmentProxy( model, fragId );
    
          fragProxy.getAnimTransform();
    
          const position = new THREE.Vector3(
            fragProxy.position.x + offset.x,
            fragProxy.position.y + offset.y,
            fragProxy.position.z + offset.z
          );
    
          fragProxy.position = position;
    
          fragProxy.updateAnimTransform();
        });
        
        this.viewer.impl.sceneUpdated( true );
      };
    }
    
    Autodesk.Viewing.theExtensionManager.registerExtension( 'Autodesk.ADN.Viewing.Extension.TranslateTool', TranslateExt );

    balas
    0
  • Batalbalas