Skip to content

Commit

Permalink
Merge pull request #21 from deltacv/release-candidate-3.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
puravdatta-sudo authored Jun 26, 2021
2 parents 5d30a04 + 9c199ef commit a13ae2d
Show file tree
Hide file tree
Showing 43 changed files with 1,292 additions and 440 deletions.
12 changes: 6 additions & 6 deletions EOCV-Sim/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ dependencies {
implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
implementation 'org.openpnp:opencv:4.3.0-2'

implementation 'com.google.code.gson:gson:2.8.6'
implementation 'io.github.classgraph:classgraph:4.8.94'
implementation 'com.google.code.gson:gson:2.8.7'
implementation 'io.github.classgraph:classgraph:4.8.108'

implementation 'com.formdev:flatlaf:0.45'
implementation 'com.formdev:flatlaf-intellij-themes:0.45'
implementation 'com.formdev:flatlaf:1.2'
implementation 'com.formdev:flatlaf-intellij-themes:1.2'

implementation 'net.lingala.zip4j:zip4j:2.7.0'
implementation 'net.lingala.zip4j:zip4j:2.8.0'

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-swing:$kotlinx_coroutines_version"
Expand All @@ -66,7 +66,7 @@ task(writeBuildClassJava) {
"\n" +
"/*\n" +
" * Autogenerated file! Do not manually edit this file. This file\n" +
" * regenerated any time the build task is run.\n" +
" * is regenerated any time the build task is run.\n" +
" *\n" +
" * Based from PhotonVision PhotonVersion generator task\n"+
" */\n" +
Expand Down
31 changes: 23 additions & 8 deletions EOCV-Sim/src/main/java/com/github/serivesmejia/eocvsim/EOCVSim.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ import com.github.serivesmejia.eocvsim.util.exception.MaxActiveContextsException
import com.github.serivesmejia.eocvsim.util.exception.handling.EOCVSimUncaughtExceptionHandler
import com.github.serivesmejia.eocvsim.util.extension.plus
import com.github.serivesmejia.eocvsim.util.fps.FpsLimiter
import com.github.serivesmejia.eocvsim.util.io.EOCVSimFolder
import com.github.serivesmejia.eocvsim.workspace.WorkspaceManager
import com.github.serivesmejia.eocvsim.workspace.util.VSCodeLauncher
import nu.pattern.OpenCV
import org.opencv.core.Size
import java.awt.Dimension
Expand All @@ -57,8 +57,7 @@ class EOCVSim(val params: Parameters = Parameters()) {
const val VERSION = Build.versionString
const val DEFAULT_EOCV_WIDTH = 320
const val DEFAULT_EOCV_HEIGHT = 240
@JvmField
val DEFAULT_EOCV_SIZE = Size(DEFAULT_EOCV_WIDTH.toDouble(), DEFAULT_EOCV_HEIGHT.toDouble())
@JvmField val DEFAULT_EOCV_SIZE = Size(DEFAULT_EOCV_WIDTH.toDouble(), DEFAULT_EOCV_HEIGHT.toDouble())

private const val TAG = "EOCVSim"

Expand Down Expand Up @@ -97,15 +96,13 @@ class EOCVSim(val params: Parameters = Parameters()) {
val pipelineManager = PipelineManager(this)
@JvmField
val tunerManager = TunerManager(this)

@JvmField
val workspaceManager = WorkspaceManager(this)

val config: Config
get() = configManager.config

var currentRecordingSession: VideoRecordingSession? = null

val fpsLimiter = FpsLimiter(30.0)

lateinit var eocvSimThread: Thread
Expand All @@ -114,12 +111,27 @@ class EOCVSim(val params: Parameters = Parameters()) {
private val hexCode = Integer.toHexString(hashCode())

enum class DestroyReason {
USER_REQUESTED, THEME_CHANGING, RESTART, CRASH
USER_REQUESTED, RESTART, CRASH
}

fun init() {
eocvSimThread = Thread.currentThread()

if(!EOCVSimFolder.couldLock) {
Log.error(TAG,
"Couldn't finally claim lock file in \"${EOCVSimFolder.absolutePath}\"! " +
"Is the folder opened by another EOCV-Sim instance?"
)

Log.error(TAG, "Unable to continue with the execution, the sim will exit now.")
exitProcess(-1)
} else {
Log.info(TAG, "Confirmed claiming of the lock file in ${EOCVSimFolder.absolutePath}")
Log.blank()
}

DialogFactory.createSplashScreen(visualizer.onInitFinished)

Log.info(TAG, "Initializing EasyOpenCV Simulator v$VERSION ($hexCode)")
Log.blank()

Expand Down Expand Up @@ -212,7 +224,7 @@ class EOCVSim(val params: Parameters = Parameters()) {
visualizer.telemetryPanel.updateTelemetry(pipelineManager.currentTelemetry)

//limit FPS
fpsLimiter.maxFPS = configManager.config.maxFps.toDouble()
fpsLimiter.maxFPS = config.pipelineMaxFps.fps.toDouble()
fpsLimiter.sync()
}

Expand Down Expand Up @@ -257,7 +269,10 @@ class EOCVSim(val params: Parameters = Parameters()) {

fun startRecordingSession() {
if (currentRecordingSession == null) {
currentRecordingSession = VideoRecordingSession(fpsLimiter.maxFPS, configManager.config.videoRecordingSize)
currentRecordingSession = VideoRecordingSession(
config.videoRecordingFps.fps.toDouble(), config.videoRecordingSize
)

currentRecordingSession!!.startRecordingSession()

Log.info(TAG, "Recording session started")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
@file:JvmName("Main")

package com.github.serivesmejia.eocvsim

fun main() = EOCVSim().init()
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,25 @@
import com.github.serivesmejia.eocvsim.gui.component.tuner.TunableFieldPanel;
import com.github.serivesmejia.eocvsim.gui.component.tuner.TunableFieldPanelConfig;
import com.github.serivesmejia.eocvsim.gui.theme.Theme;
import com.github.serivesmejia.eocvsim.pipeline.PipelineFps;
import com.github.serivesmejia.eocvsim.pipeline.PipelineTimeout;
import com.github.serivesmejia.eocvsim.pipeline.compiler.CompiledPipelineManager;
import com.github.serivesmejia.eocvsim.tuner.TunableField;
import org.opencv.core.Size;

import java.io.File;
import java.util.HashMap;

public class Config {
public volatile Theme simTheme = Theme.Light;

public volatile double zoom = 1;
public volatile boolean storeZoom = true;

public volatile int maxFps = 30;
public volatile PipelineFps pipelineMaxFps = PipelineFps.MEDIUM;
public volatile PipelineTimeout pipelineTimeout = PipelineTimeout.MEDIUM;

public volatile boolean pauseOnImages = true;

public volatile Size videoRecordingSize = new Size(640, 480);
public volatile PipelineFps videoRecordingFps = PipelineFps.MEDIUM;

public volatile String workspacePath = CompiledPipelineManager.Companion.getDEF_WORKSPACE_FOLDER().getAbsolutePath();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,13 @@

import com.github.serivesmejia.eocvsim.EOCVSim;
import com.github.serivesmejia.eocvsim.gui.dialog.*;
import com.github.serivesmejia.eocvsim.gui.dialog.SplashScreen;
import com.github.serivesmejia.eocvsim.gui.dialog.source.CreateCameraSource;
import com.github.serivesmejia.eocvsim.gui.dialog.source.CreateImageSource;
import com.github.serivesmejia.eocvsim.gui.dialog.source.CreateSource;
import com.github.serivesmejia.eocvsim.gui.dialog.source.CreateVideoSource;
import com.github.serivesmejia.eocvsim.input.SourceType;
import com.github.serivesmejia.eocvsim.util.event.EventHandler;

import javax.swing.*;
import javax.swing.filechooser.FileFilter;
Expand Down Expand Up @@ -93,8 +95,33 @@ public static void createAboutDialog(EOCVSim eocvSim) {
invokeLater(() -> new About(eocvSim.visualizer.frame, eocvSim));
}

public static void createOutput(EOCVSim eocvSim, boolean wasManuallyOpened) {
invokeLater(() -> {
if(!Output.Companion.isAlreadyOpened())
new Output(eocvSim.visualizer.frame, eocvSim, Output.Companion.getLatestIndex(), wasManuallyOpened);
});
}

public static void createOutput(EOCVSim eocvSim) {
createOutput(eocvSim, false);
}

public static void createBuildOutput(EOCVSim eocvSim) {
invokeLater(() -> new BuildOutput(eocvSim.visualizer.frame, eocvSim));
invokeLater(() -> {
if(!Output.Companion.isAlreadyOpened())
new Output(eocvSim.visualizer.frame, eocvSim, 1);
});
}

public static void createPipelineOutput(EOCVSim eocvSim) {
invokeLater(() -> {
if(!Output.Companion.isAlreadyOpened())
new Output(eocvSim.visualizer.frame, eocvSim, 0);
});
}

public static void createSplashScreen(EventHandler closeHandler) {
invokeLater(() -> new SplashScreen(closeHandler));
}

public static FileAlreadyExists.UserChoice createFileAlreadyExistsDialog(EOCVSim eocvSim) {
Expand Down
55 changes: 29 additions & 26 deletions EOCV-Sim/src/main/java/com/github/serivesmejia/eocvsim/gui/Icons.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,27 +36,40 @@ object Icons {
private val icons = HashMap<String, ImageIcon>()
private val resizedIcons = HashMap<String, ImageIcon>()

private val futureIcons = mutableListOf<FutureIcon>()

private var colorsInverted = false

private const val TAG = "Icons"

init {
addImage("ico_img", "/images/icon/ico_img.png")
addImage("ico_cam", "/images/icon/ico_cam.png")
addImage("ico_vid", "/images/icon/ico_vid.png")
addFutureImage("ico_eocvsim", "/images/icon/ico_eocvsim.png")

addImage("ico_config", "/images/icon/ico_config.png")
addImage("ico_slider", "/images/icon/ico_slider.png")
addImage("ico_textbox", "/images/icon/ico_textbox.png")
addImage("ico_colorpick", "/images/icon/ico_colorpick.png")
addFutureImage("ico_img", "/images/icon/ico_img.png")
addFutureImage("ico_cam", "/images/icon/ico_cam.png")
addFutureImage("ico_vid", "/images/icon/ico_vid.png")

addImage("ico_gears", "/images/icon/ico_gears.png")
addImage("ico_hammer", "/images/icon/ico_hammer.png")
addFutureImage("ico_config", "/images/icon/ico_config.png")
addFutureImage("ico_slider", "/images/icon/ico_slider.png")
addFutureImage("ico_textbox", "/images/icon/ico_textbox.png")
addFutureImage("ico_colorpick", "/images/icon/ico_colorpick.png")

addImage("ico_colorpick_pointer", "/images/icon/ico_colorpick_pointer.png")
addFutureImage("ico_gears", "/images/icon/ico_gears.png")
addFutureImage("ico_hammer", "/images/icon/ico_hammer.png")

printIconsList()
addFutureImage("ico_colorpick_pointer", "/images/icon/ico_colorpick_pointer.png")
}

fun getImage(name: String): ImageIcon {
for(futureIcon in futureIcons.toTypedArray()) {
if(futureIcon.name == name) {
Log.info(TAG, "Loading future icon $name")
addImage(futureIcon.name, futureIcon.resourcePath)

futureIcons.remove(futureIcon)
}
}

if(!icons.containsKey(name)) {
throw NoSuchElementException("Image $name is not loaded into memory")
}
Expand Down Expand Up @@ -84,6 +97,8 @@ object Icons {
return icon!!
}

fun addFutureImage(name: String, path: String) = futureIcons.add(FutureIcon(name, path))

fun addImage(name: String, path: String) {
val buffImg = GuiUtil.loadBufferedImage(path)
if(colorsInverted) {
Expand All @@ -108,24 +123,12 @@ object Icons {
}
}

fun printIconsList() {
val builder = StringBuilder()

for((name, _) in icons) {
builder.appendLine(name)
}

for((name, _) in resizedIcons) {
builder.appendLine(name)
}

Log.info("Icons", "Loaded icons:\n" + builder.toString())
}

fun invertAll() {
private fun invertAll() {
for((_, img) in bufferedImages) {
GuiUtil.invertBufferedImageColors(img)
}
}

data class FutureIcon(val name: String, val resourcePath: String)

}
Loading

0 comments on commit a13ae2d

Please sign in to comment.