📄 graphlayoutelement.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 + -