From 2c0f637306162d2a5d5e0bf4b930cf11d5969a1b Mon Sep 17 00:00:00 2001 From: enmerk4r Date: Mon, 6 Jan 2025 16:50:14 -0500 Subject: [PATCH 1/3] Headless doc working and tested --- src/compute.geometry/Config.cs | 7 +++++++ src/compute.geometry/ResthopperEndpoints.cs | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/compute.geometry/Config.cs b/src/compute.geometry/Config.cs index d783d0d1..1e45d856 100644 --- a/src/compute.geometry/Config.cs +++ b/src/compute.geometry/Config.cs @@ -34,6 +34,11 @@ static class Config /// public static int LogRetainDays { get; private set; } + /// + /// RHINO_COMPUTE_CREATE_HEADLESS_DOC: create a headless Rhino document for each request. + /// + public static bool CreateHeadlessDoc { get; private set; } + public static string[] GetDeprecationWarnings() => _warnings.ToArray(); /// @@ -50,6 +55,7 @@ public static void Load() ApiKey = GetEnvironmentVariable(RHINO_COMPUTE_KEY, null); LogPath = GetEnvironmentVariable(RHINO_COMPUTE_LOG_PATH, Path.Combine(Path.GetTempPath(), "Compute", "Logs"), COMPUTE_LOG_PATH); LogRetainDays = GetEnvironmentVariable(RHINO_COMPUTE_LOG_RETAIN_DAYS, 10, COMPUTE_LOG_RETAIN_DAYS); + CreateHeadlessDoc = GetEnvironmentVariable(RHINO_COMPUTE_CREATE_HEADLESS_DOC, false); #if DEBUG Debug = true; @@ -73,6 +79,7 @@ public static void Load() const string RHINO_COMPUTE_LOG_PATH = "RHINO_COMPUTE_LOG_PATH"; const string RHINO_COMPUTE_LOG_RETAIN_DAYS = "RHINO_COMPUTE_LOG_RETAIN_DAYS"; const string RHINO_COMPUTE_DEBUG = "RHINO_COMPUTE_DEBUG"; + const string RHINO_COMPUTE_CREATE_HEADLESS_DOC = "RHINO_COMPUTE_CREATE_HEADLESS_DOC"; // deprecated const string COMPUTE_BIND_URLS = "COMPUTE_BIND_URLS"; diff --git a/src/compute.geometry/ResthopperEndpoints.cs b/src/compute.geometry/ResthopperEndpoints.cs index e5f9fedd..1502e136 100644 --- a/src/compute.geometry/ResthopperEndpoints.cs +++ b/src/compute.geometry/ResthopperEndpoints.cs @@ -15,6 +15,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Rhino.Geometry; +using Rhino; namespace compute.geometry { @@ -75,6 +76,19 @@ static string GrasshopperSolveHelper(Schema input, string body, System.Diagnosti SetDefaultTolerances(input.AbsoluteTolerance, input.AngleTolerance); SetDefaultUnits(input.ModelUnits); + // Instantiate headless doc + if (Config.CreateHeadlessDoc) + { + RhinoDoc.ActiveDoc = RhinoDoc.CreateHeadless(null); + RhinoDoc.ActiveDoc.ModelAbsoluteTolerance = input.AbsoluteTolerance; + RhinoDoc.ActiveDoc.ModelAngleToleranceDegrees = input.AngleTolerance; + + if (Enum.TryParse(input.ModelUnits, out UnitSystem units)) + { + RhinoDoc.ActiveDoc.ModelUnitSystem = units; + } + } + int recursionLevel = input.RecursionLevel + 1; definition.Definition.DefineConstant("ComputeRecursionLevel", new Grasshopper.Kernel.Expressions.GH_Variant(recursionLevel)); From a00552f49ab6d242c6124e4f4cd9e5ae769a01d1 Mon Sep 17 00:00:00 2001 From: enmerk4r Date: Thu, 9 Jan 2025 11:49:55 -0500 Subject: [PATCH 2/3] Disposing compute document --- src/compute.geometry/ResthopperEndpoints.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/compute.geometry/ResthopperEndpoints.cs b/src/compute.geometry/ResthopperEndpoints.cs index 1502e136..ee69d49f 100644 --- a/src/compute.geometry/ResthopperEndpoints.cs +++ b/src/compute.geometry/ResthopperEndpoints.cs @@ -112,6 +112,11 @@ static string GrasshopperSolveHelper(Schema input, string body, System.Diagnosti DataCache.SetCachedSolveResults(body, returnJson, definition); } } + + // Dispose headless doc + if (RhinoDoc.ActiveDoc is object) + RhinoDoc.ActiveDoc.Dispose(); + return returnJson; } From 03bb1783864d1e53b328724c92f77fffaeba1a10 Mon Sep 17 00:00:00 2001 From: enmerk4r Date: Thu, 9 Jan 2025 11:51:14 -0500 Subject: [PATCH 3/3] Informing the user that a headless doc will be created for every call --- src/compute.geometry/Program.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compute.geometry/Program.cs b/src/compute.geometry/Program.cs index c5f43668..fdc16477 100644 --- a/src/compute.geometry/Program.cs +++ b/src/compute.geometry/Program.cs @@ -45,6 +45,10 @@ static void Main(string[] args) RhinoInside.Resolver.LoadRhino(); LogVersions(); + + if (Config.CreateHeadlessDoc) + Log.Information("Compute to use headless Rhino documents"); + var host = Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => {