Search in sources :

Example 1 with DHLink

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);
}
Also used : Group(javafx.scene.Group) HBox(javafx.scene.layout.HBox) HashMap(java.util.HashMap) GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) AnchorPane(javafx.scene.layout.AnchorPane) IOException(java.io.IOException) IssueReportingExceptionHandler(com.neuronrobotics.bowlerstudio.IssueReportingExceptionHandler) GitAPIException(org.eclipse.jgit.api.errors.GitAPIException) IOException(java.io.IOException) TransportException(org.eclipse.jgit.api.errors.TransportException) InvalidRemoteException(org.eclipse.jgit.api.errors.InvalidRemoteException) DHLink(com.neuronrobotics.sdk.addons.kinematics.DHLink) DHParameterKinematics(com.neuronrobotics.sdk.addons.kinematics.DHParameterKinematics) File(java.io.File) VBox(javafx.scene.layout.VBox)

Example 2 with DHLink

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);
        }
    });
}
Also used : Node(javafx.scene.Node) ArrayList(java.util.ArrayList) DigitalInputChannel(com.neuronrobotics.sdk.dyio.peripherals.DigitalInputChannel) Sphere(javafx.scene.shape.Sphere) BowlerAbstractDevice(com.neuronrobotics.sdk.common.BowlerAbstractDevice) ObservableList(javafx.collections.ObservableList) IDeviceConnectionEventListener(com.neuronrobotics.sdk.common.IDeviceConnectionEventListener) DHLink(com.neuronrobotics.sdk.addons.kinematics.DHLink) IDigitalInputListener(com.neuronrobotics.sdk.dyio.peripherals.IDigitalInputListener) MeshView(javafx.scene.shape.MeshView)

Aggregations

DHLink (com.neuronrobotics.sdk.addons.kinematics.DHLink)2 IssueReportingExceptionHandler (com.neuronrobotics.bowlerstudio.IssueReportingExceptionHandler)1 DHParameterKinematics (com.neuronrobotics.sdk.addons.kinematics.DHParameterKinematics)1 BowlerAbstractDevice (com.neuronrobotics.sdk.common.BowlerAbstractDevice)1 IDeviceConnectionEventListener (com.neuronrobotics.sdk.common.IDeviceConnectionEventListener)1 DigitalInputChannel (com.neuronrobotics.sdk.dyio.peripherals.DigitalInputChannel)1 IDigitalInputListener (com.neuronrobotics.sdk.dyio.peripherals.IDigitalInputListener)1 File (java.io.File)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 ObservableList (javafx.collections.ObservableList)1 Group (javafx.scene.Group)1 Node (javafx.scene.Node)1 AnchorPane (javafx.scene.layout.AnchorPane)1 HBox (javafx.scene.layout.HBox)1 VBox (javafx.scene.layout.VBox)1 MeshView (javafx.scene.shape.MeshView)1 Sphere (javafx.scene.shape.Sphere)1 GitAPIException (org.eclipse.jgit.api.errors.GitAPIException)1