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); } }