Skip to content

Commit

Permalink
Merge pull request #120 from ButterscotchV/bvh-recording
Browse files Browse the repository at this point in the history
Add simple BVH recording button
  • Loading branch information
Eirenliel committed Feb 7, 2022
2 parents 658fd29 + 0d90cf9 commit 753b12b
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions src/main/java/dev/slimevr/gui/VRServerGUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@
import dev.slimevr.gui.swing.EJBox;
import dev.slimevr.gui.swing.EJBoxNoStretch;
import dev.slimevr.vr.trackers.TrackerRole;
import dev.slimevr.posestreamer.BVHFileStream;
import dev.slimevr.posestreamer.PoseDataStream;
import dev.slimevr.posestreamer.ServerPoseStreamer;
import io.eiren.util.MacOSX;
import io.eiren.util.OperatingSystem;
import io.eiren.util.StringUtils;
import io.eiren.util.ann.AWTThread;
import io.eiren.util.logging.LogManager;

import java.awt.Component;
import java.awt.Container;
Expand All @@ -29,6 +33,8 @@
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -45,6 +51,10 @@ public class VRServerGUI extends JFrame {
private final SkeletonList skeletonList;
private JButton resetButton;
private EJBox pane;

private static File bvhSaveDir = new File("BVH Recordings");
private final ServerPoseStreamer poseStreamer;
private PoseDataStream poseDataStream = null;

private float zoom = 1.5f;
private float initZoom = zoom;
Expand Down Expand Up @@ -88,6 +98,8 @@ public VRServerGUI(VRServer server) {
this.trackersList = new TrackersList(server, this);
this.skeletonList = new SkeletonList(server, this);

this.poseStreamer = new ServerPoseStreamer(server);

add(new JScrollPane(pane = new EJBox(PAGE_AXIS), ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED));
GraphicsConfiguration gc = getGraphicsConfiguration();
Rectangle screenBounds = gc.getBounds();
Expand Down Expand Up @@ -136,6 +148,22 @@ public void run() {
});
}

private File getBvhFile() {
if (bvhSaveDir.isDirectory() || bvhSaveDir.mkdirs()) {
File saveRecording;
int recordingIndex = 1;
do {
saveRecording = new File(bvhSaveDir, "BVH-Recording" + recordingIndex++ + ".bvh");
} while(saveRecording.exists());

return saveRecording;
} else {
LogManager.log.severe("[BVH] Failed to create the recording directory \"" + bvhSaveDir.getPath() + "\".");
}

return null;
}

@AWTThread
private void build() {
pane.removeAll();
Expand All @@ -162,6 +190,37 @@ public void mouseClicked(MouseEvent e) {
});
}});
add(Box.createHorizontalGlue());
add(new JButton("Record BVH") {{
addMouseListener(new MouseInputAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (poseDataStream == null) {
File bvhFile = getBvhFile();
if (bvhFile != null) {
try {
poseDataStream = new BVHFileStream(bvhFile);
setText("Stop Recording BVH...");
poseStreamer.setOutput(poseDataStream, 1000L / 100L);
} catch (IOException e1) {
LogManager.log.severe("[BVH] Failed to create the recording file \"" + bvhFile.getPath() + "\".");
}
} else {
LogManager.log.severe("[BVH] Unable to get file to save to");
}
} else {
try {
poseStreamer.closeOutput(poseDataStream);
} catch (Exception e1) {
LogManager.log.severe("[BVH] Exception while closing poseDataStream", e1);
} finally {
poseDataStream = null;
setText("Record BVH");
}
}
}
});
}});
add(Box.createHorizontalGlue());
add(new JButton("GUI Zoom (x" + StringUtils.prettyNumber(zoom, 2) + ")") {{
addMouseListener(new MouseInputAdapter() {
@Override
Expand Down

0 comments on commit 753b12b

Please sign in to comment.