diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..dfeda7d
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,19 @@
+name: Publish
+
+on:
+ workflow_dispatch:
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-dotnet@v1
+ with:
+ dotnet-version: '6.0.x'
+ - run: /home/runner/.dotnet/dotnet build "build/Robots.Build/Robots.Build.csproj"
+ - run: sudo /home/runner/.dotnet/dotnet run --no-build --project "build/Robots.Build/Robots.Build.csproj" test build package publish release
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ YAK_TOKEN: ${{ secrets.YAK_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 4f60479..8137f5a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,9 @@
.DS_Store
nupkg/
+secrets*
+
+# Build results
+artifacts/
# Visual Studio Code
.vscode
@@ -7,14 +11,11 @@ nupkg/
# Rider
.idea
+# Visual Studio
+.vs/
+
# User-specific files
*.suo
*.user
*.userosscache
-*.sln.docstates
-
-# Build results
-artifacts/
-
-# Visual Studio 2015
-.vs/
\ No newline at end of file
+*.sln.docstates
\ No newline at end of file
diff --git a/Directory.Build.Props b/Directory.Build.props
similarity index 79%
rename from Directory.Build.Props
rename to Directory.Build.props
index fd67af3..995971c 100644
--- a/Directory.Build.Props
+++ b/Directory.Build.props
@@ -2,11 +2,11 @@
Robots
- 1.0.1
- Create and simulate programs for ABB, KUKA, UR and Staubli robots.
+ 1.0.2
+ Create and simulate ABB, KUKA, UR and Staubli robot programs.
Copyright (c) 2021
Robots Authors
- https://github.com/visose/robots/discussions
+ https://github.com/visose/robots
Robots;ABB;KUKA;UR;Staubli
https://github.com/visose/robots/raw/master/build/Assets/iconRobot.png
$(Authors) - $(Url)
diff --git a/Robots.sln b/Robots.sln
index 4137199..f37f1c3 100644
--- a/Robots.sln
+++ b/Robots.sln
@@ -15,7 +15,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{101C8522-302F-4233-A875-F76C3758F693}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
- Directory.Build.Props = Directory.Build.Props
+ Directory.Build.props = Directory.Build.props
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Robots.Tests", "tests\Robots.Tests\Robots.Tests.csproj", "{16C2E987-7825-42F8-A2C7-8695F7964335}"
diff --git a/build/Robots.Build/Commands.cs b/build/Robots.Build/Commands.cs
index 503d975..f499ff1 100644
--- a/build/Robots.Build/Commands.cs
+++ b/build/Robots.Build/Commands.cs
@@ -1,4 +1,5 @@
-using static Robots.Build.Util;
+using Octokit;
+using static Robots.Build.Util;
namespace Robots.Build;
@@ -14,7 +15,7 @@ public static int Build()
return Run("dotnet", "build src/Robots.Grasshopper/Robots.Grasshopper.csproj -c Release");
}
- public static int Package()
+ public static async Task PackageAsync()
{
// Pacakge folder
if (Directory.Exists(PackageFolder))
@@ -40,23 +41,70 @@ public static int Package()
Manifest.CreateAndSave(path);
// Build package
- string yak = GetYakPath();
+ string yak = await GetYakPathAsync();
return Run(yak, "build", PackageFolder);
}
- public static int Publish()
+ public static async Task PublishAsync()
{
string packagePath = Directory.EnumerateFiles(PackageFolder)
.Single(f => Path.GetExtension(f) == ".yak");
string packageFile = Path.GetFileName(packagePath);
- string yak = GetYakPath();
+ string yak = await GetYakPathAsync();
return Run(yak, $"push {packageFile}", PackageFolder);
}
- static string GetYakPath()
+ public static async Task ReleaseAsync()
{
- // Download: http://files.mcneel.com/yak/tools/latest/yak.exe
- return "C:/Program Files/Rhino 7/System/Yak.exe";
+ string version = Manifest.GetVersion();
+
+ var client = new GitHubClient(new ProductHeaderValue("visose"))
+ {
+ Credentials = new Credentials(GetSecret("GITHUB_TOKEN"))
+ };
+
+ var latest = await client.Repository.Release.GetLatest("visose", "Robots");
+
+ if (latest.TagName == version)
+ {
+ Log($"Error: Release {version} already exists.");
+ return 1;
+ }
+
+ const string body = @"This **release** can only be installed through the package manager in **Rhino 7** using the `_PackageManager` command.
+ > Check the [readme](../../blob/master/.github/README.md) for more details.";
+
+ var release = new NewRelease(version)
+ {
+ Name = version,
+ Body = body,
+ Prerelease = false
+ };
+
+ var result = await client.Repository.Release.Create("visose", "Robots", release);
+ Log($"Created release id: {result.Id}");
+ return 0;
+ }
+
+ static async Task GetYakPathAsync()
+ {
+ const string yak = "Yak.exe";
+ const string rhino = "C:/Program Files/Rhino 7/System/Yak.exe";
+
+ if (File.Exists(rhino))
+ return rhino;
+
+ if (File.Exists(yak))
+ return Path.GetFullPath(yak);
+
+ var http = new HttpClient();
+ var response = await http.GetAsync($"http://files.mcneel.com/yak/tools/latest/yak.exe");
+ response.EnsureSuccessStatusCode();
+ await using var ms = await response.Content.ReadAsStreamAsync();
+ await using var fs = File.Create(yak);
+ ms.Seek(0, SeekOrigin.Begin);
+ ms.CopyTo(fs);
+ return Path.GetFullPath(yak);
}
}
\ No newline at end of file
diff --git a/build/Robots.Build/Manifest.cs b/build/Robots.Build/Manifest.cs
index 810b09c..815c2ac 100644
--- a/build/Robots.Build/Manifest.cs
+++ b/build/Robots.Build/Manifest.cs
@@ -13,6 +13,10 @@ public static void CreateAndSave(string fileName)
var text = manifest.ToYaml();
File.WriteAllText(fileName, text);
}
+ public static string GetVersion()
+ {
+ return new Manifest().Version;
+ }
public string Name { get; private set; }
public string Version { get; private set; }
@@ -28,7 +32,7 @@ public static void CreateAndSave(string fileName)
private Manifest()
{
- var doc = XDocument.Load("Directory.Build.Props");
+ var doc = XDocument.Load("Directory.Build.props");
XElement props = doc.Root?.Descendants().First() ??
throw new NullReferenceException();
diff --git a/build/Robots.Build/Program.cs b/build/Robots.Build/Program.cs
index e869045..6738f99 100644
--- a/build/Robots.Build/Program.cs
+++ b/build/Robots.Build/Program.cs
@@ -1,16 +1,18 @@
using Robots.Build;
+using static Robots.Build.Util;
-var commandList = new Dictionary>
+var commandList = new Dictionary
{
{ "test", Commands.Test },
{ "build", Commands.Build },
- { "package", Commands.Package },
- { "publish", Commands.Publish },
+ { "package", Commands.PackageAsync },
+ { "publish", Commands.PublishAsync },
+ { "release", Commands.ReleaseAsync }
};
if (args.Length == 0)
{
- Console.WriteLine($"Specify a command: {string.Join(", ", commandList.Keys)}");
+ Log($"Specify a command: {string.Join(", ", commandList.Keys)}");
return 1;
}
@@ -18,17 +20,22 @@
{
if (!commandList.TryGetValue(arg, out var action))
{
- Console.WriteLine($"Command '{arg}' doesn't exist.");
+ Log($"Command '{arg}' doesn't exist.");
return 1;
}
- Console.WriteLine($"Starting {arg}...");
- int result = action();
+ Log($"Starting {arg}...");
- if (result != 0)
+ var result = action.DynamicInvoke() ?? throw new NullReferenceException();
+
+ int code = action.Method.ReturnType == typeof(int)
+ ? (int)result
+ : await (Task)result;
+
+ if (code != 0)
{
- Console.WriteLine("Premature exit.");
- return result;
+ Log("Premature exit.");
+ return code;
}
}
diff --git a/build/Robots.Build/Robots.Build.csproj b/build/Robots.Build/Robots.Build.csproj
index f70befe..b79e482 100644
--- a/build/Robots.Build/Robots.Build.csproj
+++ b/build/Robots.Build/Robots.Build.csproj
@@ -1,12 +1,13 @@
-
- Exe
- net6.0
-
+
+ Exe
+ net6.0
+
-
-
-
+
+
+
+
diff --git a/build/Robots.Build/Util.cs b/build/Robots.Build/Util.cs
index ddabf80..6fa43f6 100644
--- a/build/Robots.Build/Util.cs
+++ b/build/Robots.Build/Util.cs
@@ -1,13 +1,19 @@
using System.Diagnostics;
+using System.Text.Json;
namespace Robots.Build;
static class Util
{
- public static string ArtifactsFolder => "Artifacts";
+ public static string ArtifactsFolder => "artifacts";
public static string BuildFolder => Path.Combine(ArtifactsFolder, "bin", "Robots.Grasshopper", "net48");
public static string PackageFolder => Path.Combine(ArtifactsFolder, "package");
+ public static void Log(string? text)
+ {
+ Console.WriteLine(text);
+ }
+
public static int Run(string file, string args, string? setCurrentDir = null)
{
var currentDir = Directory.GetCurrentDirectory();
@@ -27,8 +33,8 @@ public static int Run(string file, string args, string? setCurrentDir = null)
StartInfo = startInfo
};
- process.OutputDataReceived += (o, e) => Console.WriteLine(e.Data);
- process.ErrorDataReceived += (o, e) => Console.WriteLine(e.Data);
+ process.OutputDataReceived += (o, e) => Log(e.Data);
+ process.ErrorDataReceived += (o, e) => Log(e.Data);
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
@@ -37,4 +43,17 @@ public static int Run(string file, string args, string? setCurrentDir = null)
Directory.SetCurrentDirectory(currentDir);
return process.ExitCode;
}
+
+ public static string GetSecret(string key)
+ {
+ string? value = Environment.GetEnvironmentVariable(key);
+
+ if (value is not null)
+ return value;
+
+ var json = File.ReadAllText("build/Robots.Build/secrets.json");
+ var doc = JsonDocument.Parse(json);
+ var prop = doc.RootElement.GetProperty(key);
+ return prop.GetString() ?? throw new NullReferenceException($"Secret {key} not found.");
+ }
}
\ No newline at end of file
diff --git a/lib/ABB.Robotics.Controllers.PC.dll b/lib/ABB.Robotics.Controllers.PC.dll
new file mode 100644
index 0000000..40cb5a8
Binary files /dev/null and b/lib/ABB.Robotics.Controllers.PC.dll differ
diff --git a/src/Robots.Grasshopper/Assets/icons/iconLine To Aligned Plane.png b/src/Robots.Grasshopper/Assets/icons/iconLine To Aligned Plane.png
deleted file mode 100644
index 71b363d..0000000
Binary files a/src/Robots.Grasshopper/Assets/icons/iconLine To Aligned Plane.png and /dev/null differ
diff --git a/src/Robots.Grasshopper/Properties/Resources.resx b/src/Robots.Grasshopper/Properties/Resources.resx
index 2d38f0d..5d3693e 100644
--- a/src/Robots.Grasshopper/Properties/Resources.resx
+++ b/src/Robots.Grasshopper/Properties/Resources.resx
@@ -119,141 +119,138 @@
- ..\Assets\icons\iconangles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconAngles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcheckcollisions.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCheckCollisions.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcheckprogram.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCheckProgram.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcollision.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCollision.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcommandparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCommandParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcreateprogram.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCreateProgram.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcreatetarget.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCreateTarget.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcustomcode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCustomCode.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconcustomcommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconCustomCommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icondeconstructprogramtarget.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconDeconstructProgramTarget.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icondeconstructtarget.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconDeconstructTarget.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconframe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconFrame.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconframeparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconFrameParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icongetplane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconGetPlane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icongroupcommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconGroupCommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconio.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconIO.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconkinematics.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
-
- ..\Assets\icons\iconline to aligned plane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconKinematics.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconmessage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconMessage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconoutbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconOutbox.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconparamprogram.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconParamProgram.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconplay.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconPlay.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconprogramparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconProgramParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconpulsedo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconPulseDO.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconrobot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconRobot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconrobotlist.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconRobotList.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconrobotparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconRobotParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconsave.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSave.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconsetao.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSetAO.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconsetdo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSetDO.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconsimpletrail.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSimpleTrail.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconsimulation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSimulation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconsortpaths.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSortPaths.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconspeed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSpeed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconspeedparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconSpeedParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconstopcommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconStopCommand.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icontargetparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconTargetParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icontool.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconTool.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icontoolparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconToolParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\icontoplane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconToPlane.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconupload.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconUpload.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconurremote.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconURRemote.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconwait.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconWait.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconwaitdi.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconWaitDI.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
- ..\Assets\icons\iconzoneparam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ ..\Assets\icons\iconZoneParam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/src/Robots.Grasshopper/Robots.Grasshopper.csproj b/src/Robots.Grasshopper/Robots.Grasshopper.csproj
index 902e5c4..7c91a28 100644
--- a/src/Robots.Grasshopper/Robots.Grasshopper.csproj
+++ b/src/Robots.Grasshopper/Robots.Grasshopper.csproj
@@ -1,10 +1,10 @@
-
+
net48
true
Robots Grasshopper
-
+
@@ -28,8 +28,8 @@
-
-
+
+
-
+
diff --git a/src/Robots/Robots.csproj b/src/Robots/Robots.csproj
index 1d361fe..b5a9174 100644
--- a/src/Robots/Robots.csproj
+++ b/src/Robots/Robots.csproj
@@ -14,7 +14,7 @@
- C:\Program Files (x86)\ABB\SDK\PCSDK 2021\ABB.Robotics.Controllers.PC.dll
+ ..\..\lib\ABB.Robotics.Controllers.PC.dll
diff --git a/tests/Robots.Tests/ProgramTests.cs b/tests/Robots.Tests/ProgramTests.cs
index a4ef841..b3fc375 100644
--- a/tests/Robots.Tests/ProgramTests.cs
+++ b/tests/Robots.Tests/ProgramTests.cs
@@ -29,7 +29,7 @@ public ProgramTests()
public void BasicProgramCorrectDuration()
{
const double expected = 1.6432545251573487;
- Assert.AreEqual(_program.Duration, expected);
+ Assert.AreEqual(_program.Duration, expected, 1e-14);
}
[Test]
@@ -49,7 +49,7 @@ public void BasicProgramCorrectJoints()
for (int i = 0; i < 6; i++)
{
- Assert.AreEqual(actual[i], expected[i]);
+ Assert.AreEqual(actual[i], expected[i], 1e-14);
}
}