⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphlayoutelement.java

📁 Java 3D Desktop Environment旨在使用Java 3D来创建一个3D桌面环境。功能包括:分布式的应用程序
💻 JAVA
字号:
package org.j3de.ui.impl; 

import java.util.Enumeration;
import java.util.Iterator;      
import java.util.List;      
import java.util.Vector;      

import javax.media.j3d.Bounds; 
import javax.media.j3d.BranchGroup; 
import javax.media.j3d.TransformGroup;  
import javax.media.j3d.Transform3D;
 
import javax.vecmath.Vector3d;

import org.j3de.ui.LayoutConstraint;
import org.j3de.ui.UIElement;
import org.j3de.ui.UIElementMapper;
import org.j3de.ui.UILocalElement;
import org.j3de.ui.LayoutConstraint;
import org.j3de.ui.constraint.HasConstraints;

public class GraphLayoutElement extends BranchGroup {
  private List            constraints;
  private TransformGroup  tg;
  private Transform3D     transform;
  private UIElement       element;      
  private UIElementMapper elementMapper;      
  private UILocalElement  localElement;
  private GraphLayout     layout;
  
  private Vector3d        v1;
  private Vector3d        v2;
  
  public GraphLayoutElement(UIElement element, UIElementMapper elementMapper, GraphLayout layout) {
    this.elementMapper = elementMapper;

    constraints = new Vector();
    transform   = new Transform3D();         
    tg          = new TransformGroup(); 

    tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
    tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

    this.setBoundsAutoCompute(false);
    this.setCapability(BranchGroup.ALLOW_BOUNDS_WRITE);
    this.setCapability(BranchGroup.ALLOW_BOUNDS_READ);
    this.setCapability(BranchGroup.ALLOW_DETACH);
   
    this.tg.addChild(elementMapper.getLocal(element).getNode());
    this.addChild(tg);   

    this.element = element;           
    this.localElement = elementMapper.getLocal(element);
    this.layout = layout;
    
    this.v1 = new Vector3d();
    this.v2 = new Vector3d();

    if (localElement instanceof HasConstraints) {
      synchronized (localElement) {
        Enumeration constraints = ((HasConstraints)localElement).getConstraints();
        while (constraints.hasMoreElements()) {
          layout.addLayoutConstraint((LayoutConstraint)constraints.nextElement());
        }
      }
    }

    updateBounds();
  } 

  private void updateBounds() {
    Bounds bounds = (Bounds)localElement.getNode().getBounds().clone();
    bounds.transform(transform);
    this.setBounds(bounds);
  }
  
  public UIElement getUIElement() {
    return element;
  }
    
  public void getPosition(Vector3d position) {
    tg.getTransform(transform);
    transform.get(position);
  }

  public Bounds getElementBounds() {
    return localElement.getNode().getBounds();
  }
       
  public void move(double annealing) {           
    v1.set(0.0, 0.0, 0.0);
    Iterator iter = constraints.iterator();
    
    while (iter.hasNext()) {
      LayoutConstraint constraint = (LayoutConstraint)iter.next();
      constraint.getForce(v2);
      v1.add(v2);
    }  
    v1.scale(annealing);
    
    tg.getTransform(transform);
    transform.get(v2);
    v1.add(v2);
    transform.setTranslation(v1);
    
    layout.normalize(transform);
    tg.setTransform(transform);
  }
  
  public void addConstraint(LayoutConstraint constraint) {    
    constraints.add(constraint);
  }

  public void removeConstraint(LayoutConstraint constraint) {
    constraints.remove(constraint);
  }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -