From cf2ef58442a61a7ba38f8efcd1d4a93639067800 Mon Sep 17 00:00:00 2001 From: Kevin Harrington Date: Wed, 10 Jul 2024 17:22:32 -0400 Subject: [PATCH] Adding vitamins to the screen when created instantly and removing the stale ones --- .../creature/MobleBaseMenueFactory.java | 14 +++-- .../bowlerstudio/creature/VitatminWidget.java | 55 ++++++++++++++++++- 2 files changed, 64 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/creature/MobleBaseMenueFactory.java b/src/main/java/com/neuronrobotics/bowlerstudio/creature/MobleBaseMenueFactory.java index 56add7b2f..ed66b3070 100644 --- a/src/main/java/com/neuronrobotics/bowlerstudio/creature/MobleBaseMenueFactory.java +++ b/src/main/java/com/neuronrobotics/bowlerstudio/creature/MobleBaseMenueFactory.java @@ -67,7 +67,7 @@ public static String[] copyGitFile(String sourceGit, String targetGit, String fi public static void addVitamins(IVitaminHolder vitamins, TreeItem rootItem, HashMap, Runnable> callbackMapForTreeitems, - HashMap, Parent> widgetMapForTreeitems,ITransformProvider tfp) { + HashMap, Parent> widgetMapForTreeitems,ITransformProvider tfp,Affine manipulator, Affine lastLink, TransformNR offset) { TreeItem vitaminsMenu = new TreeItem("Vitamins Add/Remove", AssetFactory.loadIcon("Vitamins.png")); HashMap widget = new HashMap<>(); @@ -80,7 +80,9 @@ public static void addVitamins(IVitaminHolder vitamins, TreeItem rootIt Parent w = loader.load(); VitatminWidget tw = loader.getController(); tw.setVitaminProvider(vitamins,tfp); - + tw.setManipulator(manipulator); + tw.setLastLinkAffine(lastLink); + tw.setOffset(offset); //Group value = new Group(w); widgetMapForTreeitems.put(vitaminsMenu, w); widget.put(w, tw); @@ -571,7 +573,7 @@ public void onTransformChaging(TransformNR newTrans) { rootItem.getChildren().addAll(bodymass, imuCenter,PlaceLimb); addVitamins( device, rootItem, callbackMapForTreeitems, widgetMapForTreeitems, selected->{ return device.forwardOffset(new TransformNR()); - }); + },(Affine)device.getRootListener(),(Affine)device.getRootListener(),new TransformNR()); if (root) rootItem.getChildren().addAll( printable,arrangeBed, kinematics); rootItem.getChildren().addAll(addArm, addleg, addFixed, addsteerable); @@ -1104,6 +1106,10 @@ public void onSliderDoneMoving(EngineeringUnitsSliderWidget source, double newAn link.getChildren().addAll(design); + Affine manipulator = (Affine) dh.getListener(linkIndex); + TransformNR offset = dh.getDHStep(linkIndex).inverse(); + Affine lastLinkAffine = linkIndex==0? (Affine) dh.getRootListener() :(Affine) dh.getListener(linkIndex-1); + addVitamins( dh.getLinkConfiguration(linkIndex), link, callbackMapForTreeitems, widgetMapForTreeitems,selected->{ Affine linkObjectManipulator = (Affine) dh.getLinkObjectManipulator(linkIndex); TransformNR pose = TransformFactory.affineToNr(linkObjectManipulator); @@ -1120,7 +1126,7 @@ public void onSliderDoneMoving(EngineeringUnitsSliderWidget source, double newAn pose = TransformFactory.affineToNr(ll); } return pose; - }); + },manipulator,lastLinkAffine,offset); link.getChildren().addAll(slaves, remove); diff --git a/src/main/java/com/neuronrobotics/bowlerstudio/creature/VitatminWidget.java b/src/main/java/com/neuronrobotics/bowlerstudio/creature/VitatminWidget.java index f1001cd4d..a1eed14d9 100644 --- a/src/main/java/com/neuronrobotics/bowlerstudio/creature/VitatminWidget.java +++ b/src/main/java/com/neuronrobotics/bowlerstudio/creature/VitatminWidget.java @@ -11,6 +11,7 @@ import java.util.ResourceBundle; import java.util.stream.Collectors; +import com.neuronrobotics.bowlerstudio.BowlerStudio; import com.neuronrobotics.bowlerstudio.BowlerStudioController; import com.neuronrobotics.bowlerstudio.assets.AssetFactory; import com.neuronrobotics.bowlerstudio.assets.FontSizeManager; @@ -66,7 +67,10 @@ public class VitatminWidget implements IOnTransformChange { private HashMap locationMap = new HashMap<>(); private VitaminLocation selectedVitamin; private ITransformProvider currentTipProvider; - + private Affine lastLinkAffine = null; + private Affine manipulator=null; + private TransformNR offset= new TransformNR(); + @FXML void onAdd(ActionEvent event) { VitaminLocation newVit = new VitaminLocation(isScript.isSelected(),name.getText(), selectedType, sizeSelected, tf.getCurrent()); @@ -77,6 +81,28 @@ void onAdd(ActionEvent event) { holder.addVitamin(newVit); add(newVit); validateInput(); + CSG newDisplay = getCSG(newVit); + if(newDisplay!=null) { + BowlerStudioController.addCsg(newDisplay); + } + + } + + private CSG getCSG(VitaminLocation newVit) { + MobileBaseCadManager manager = MobileBaseCadManager.get(holder); + CSG newDisplay=null; + switch(newVit.getFrame()) { + case DefaultFrame: + newDisplay = manager.getVitaminDisplay(newVit, manipulator, new TransformNR()); + break; + case LinkOrigin: + newDisplay = manager.getVitaminDisplay(newVit, manipulator, offset); + break; + case previousLinkTip: + newDisplay = manager.getVitaminDisplay(newVit, lastLinkAffine, new TransformNR()); + break; + } + return newDisplay; } private void add(VitaminLocation newVit) { @@ -100,6 +126,9 @@ private void add(VitaminLocation newVit) { holder.removeVitamin(newVit); validateInput(); locationMap.remove(box); + CSG part = getCSG( newVit); + if(part!=null) + BowlerStudioController.removeObject(part); }); box.add(remove, 0, 0); box.add(new Label(newVit.getName()), 1, 0); @@ -270,4 +299,28 @@ public void onTransformChaging(TransformNR newTrans) { public void onTransformFinished(TransformNR newTrans) { selectedVitamin.setLocation(newTrans); } + + public Affine getLastLinkAffine() { + return lastLinkAffine; + } + + public void setLastLinkAffine(Affine lastLinkAffine) { + this.lastLinkAffine = lastLinkAffine; + } + + public Affine getManipulator() { + return manipulator; + } + + public void setManipulator(Affine manipulator) { + this.manipulator = manipulator; + } + + public TransformNR getOffset() { + return offset; + } + + public void setOffset(TransformNR offset) { + this.offset = offset; + } }