use of com.neuronrobotics.sdk.addons.kinematics.DHLink in project BowlerStudio by CommonWealthRobotics.
the class CreatureLab method finishLoading.
private void finishLoading(MobileBase device) {
TreeView<String> tree = null;
TreeItem<String> rootItem = null;
TreeItem<String> mainBase = null;
int count = 1;
for (DHParameterKinematics kin : device.getAllDHChains()) {
for (int i = 0; i < kin.getNumberOfLinks(); i++) {
DHLink dhLink = kin.getDhLink(i);
if (dhLink.getSlaveMobileBase() != null) {
count++;
}
}
}
try {
rootItem = new TreeItem<String>("Mobile Bases", AssetFactory.loadIcon("creature.png"));
mainBase = new TreeItem<String>(device.getScriptingName(), AssetFactory.loadIcon("creature.png"));
} catch (Exception e) {
rootItem = new TreeItem<String>(device.getScriptingName());
}
if (count == 1) {
rootItem = mainBase;
} else {
rootItem.getChildren().add(mainBase);
}
tree = new TreeView<>(rootItem);
AnchorPane treebox1 = tab.getTreeBox();
treebox1.getChildren().clear();
treebox1.getChildren().add(tree);
AnchorPane.setTopAnchor(tree, 0.0);
AnchorPane.setLeftAnchor(tree, 0.0);
AnchorPane.setRightAnchor(tree, 0.0);
AnchorPane.setBottomAnchor(tree, 0.0);
HashMap<TreeItem<String>, Runnable> callbackMapForTreeitems = new HashMap<>();
HashMap<TreeItem<String>, Group> widgetMapForTreeitems = new HashMap<>();
File source;
boolean creatureIsOwnedByUser = false;
try {
source = ScriptingEngine.fileFromGit(device.getGitSelfSource()[0], device.getGitSelfSource()[1]);
creatureIsOwnedByUser = ScriptingEngine.checkOwner(source);
} catch (GitAPIException | IOException e) {
// TODO Auto-generated catch block
new IssueReportingExceptionHandler().uncaughtException(Thread.currentThread(), e);
}
rootItem.setExpanded(true);
MobileBaseCadManager.get(device, BowlerStudioController.getMobileBaseUI());
MobleBaseMenueFactory.load(device, tree, mainBase, callbackMapForTreeitems, widgetMapForTreeitems, this, true, creatureIsOwnedByUser);
for (DHParameterKinematics kin : device.getAllDHChains()) {
for (int i = 0; i < kin.getNumberOfLinks(); i++) {
DHLink dhLink = kin.getDhLink(i);
String linkName = kin.getLinkConfiguration(i).getName();
if (dhLink.getSlaveMobileBase() != null) {
TreeItem<String> mobile = new TreeItem<>(kin.getScriptingName() + " ->\n " + linkName + " link " + i + " ->\n " + dhLink.getSlaveMobileBase().getScriptingName(), AssetFactory.loadIcon("creature.png"));
MobleBaseMenueFactory.load(dhLink.getSlaveMobileBase(), tree, mobile, callbackMapForTreeitems, widgetMapForTreeitems, this, false, creatureIsOwnedByUser);
rootItem.getChildren().add(mobile);
}
}
}
tree.setPrefWidth(325);
tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
JogMobileBase walkWidget = new JogMobileBase(device);
tree.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<?> observable, Object oldValue, Object newValue) {
@SuppressWarnings("unchecked") TreeItem<String> treeItem = (TreeItem<String>) newValue;
new Thread() {
public void run() {
if (callbackMapForTreeitems.get(treeItem) != null) {
callbackMapForTreeitems.get(treeItem).run();
}
if (widgetMapForTreeitems.get(treeItem) != null) {
Platform.runLater(() -> {
tab.getControlsBox().getChildren().clear();
Group g = widgetMapForTreeitems.get(treeItem);
tab.getControlsBox().getChildren().add(g);
AnchorPane.setTopAnchor(g, 0.0);
AnchorPane.setLeftAnchor(g, 0.0);
AnchorPane.setRightAnchor(g, 0.0);
AnchorPane.setBottomAnchor(g, 0.0);
});
} else {
Platform.runLater(() -> {
tab.getControlsBox().getChildren().clear();
});
}
}
}.start();
}
});
VBox progress = new VBox(10);
final ToggleGroup group = new ToggleGroup();
RadioButton rb1 = new RadioButton();
rb1.setToggleGroup(group);
rb1.setSelected(true);
rb1.setOnAction(event -> {
setCadMode(false);
});
RadioButton rb2 = new RadioButton();
rb2.setToggleGroup(group);
rb2.fire();
rb2.setOnAction(event -> {
setCadMode(true);
});
HBox radioOptions = new HBox(10);
radioOptions.getChildren().addAll(new Label("Cad"), rb1, rb2, new Label("Config"));
pi = new ProgressIndicator(0);
baseManager = MobileBaseCadManager.get(device, BowlerStudioController.getMobileBaseUI());
pi.progressProperty().bindBidirectional(baseManager.getProcesIndictor());
HBox progressIndicatorPanel = new HBox(10);
progressIndicatorPanel.getChildren().addAll(new Label("Cad Progress:"), pi);
progress.getChildren().addAll(progressIndicatorPanel, autoRegen, radioOptions);
progress.setStyle("-fx-background-color: #FFFFFF;");
progress.setOpacity(.7);
progress.setMinHeight(100);
progress.setPrefSize(325, 150);
tab.setOverlayTop(progress);
tab.setOverlayTopRight(walkWidget);
BowlerStudioModularFrame.getBowlerStudioModularFrame().showCreatureLab();
// start the UI in config mode
setCadMode(true);
generateCad();
setContent(root);
}
use of com.neuronrobotics.sdk.addons.kinematics.DHLink in project java-bowler by NeuronRobotics.
the class Jfx3dManager method attachArm.
public void attachArm(final DHParameterKinematics model) {
master = model.getFactory().getDyio();
if (master != null)
new DigitalInputChannel(master, 23).addDigitalInputListener(new IDigitalInputListener() {
@Override
public void onDigitalValueChange(DigitalInputChannel source, final boolean isHigh) {
// System.err.println("Button pressed");
Platform.runLater(new Runnable() {
@Override
public void run() {
if (!isHigh) {
ObservableList<Node> cadBits = lookGroup.getChildren();
for (Node n : cadBits) {
double x = n.getTranslateX();
double y = n.getTranslateY();
double z = n.getTranslateZ();
// if (threedBoundCheck(x, y, z,/selsectedAffine, 10)) {
if (MeshView.class.isInstance(n)) {
System.out.println("Selecting Object");
selectedObject = (MeshView) n;
} else {
System.out.println("Not Touching " + n.getClass());
}
// }
}
if (selectedObject != null) {
System.out.println("Grabbing Object ");
selectedObject.getTransforms().clear();
selectedObject.getTransforms().addAll(robotBase, selsectedAffine);
}
} else {
// button released, look for devices
if (selectedObject != null) {
// freeze it in place
selectedObject.getTransforms().clear();
selectedObject.getTransforms().addAll(robotBase, selsectedAffine.clone());
selectedObject = null;
}
}
}
});
}
});
Platform.runLater(new Runnable() {
@Override
public void run() {
ArrayList<DHLink> links = model.getDhChain().getLinks();
for (DHLink dh : links) {
final Axis a = new Axis(15);
a.getChildren().add(new Sphere(5));
a.getTransforms().add(dh.getListener());
manipulator.getChildren().add(a);
if (master != null)
master.addConnectionEventListener(new IDeviceConnectionEventListener() {
@Override
public void onDisconnect(BowlerAbstractDevice source) {
// TODO Auto-generated method stub
manipulator.getChildren().remove(a);
a.getTransforms().clear();
}
@Override
public void onConnect(BowlerAbstractDevice source) {
// TODO Auto-generated method stub
}
});
}
// get the affine of the tip of the chain
selsectedAffine = links.get(links.size() - 1).getListener();
robotBase.setTx(100);
robotBase.setTy(100);
robotBase.setTz(-5);
manipulator.getTransforms().add(robotBase);
world.getChildren().addAll(manipulator);
}
});
}
Aggregations