From 6545d193475b1156f24a9cf731fff86ac0dca0b6 Mon Sep 17 00:00:00 2001 From: KatKatKateryna Date: Tue, 2 Jul 2024 14:46:32 +0100 Subject: [PATCH] set offsets from GIS on receive --- .../Operations/Receive/HostObjectBuilder.cs | 2 +- .../ToHost/Raw/FeatureClassToHostConverter.cs | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs index cab08a6402..7e29d65ee6 100644 --- a/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs +++ b/DUI3-DX/Connectors/ArcGIS/Speckle.Connectors.ArcGIS3/Operations/Receive/HostObjectBuilder.cs @@ -48,7 +48,7 @@ CancellationToken cancellationToken // get active CRS & offsets on Receive SpatialReference activeSpatialRef = _contextStack.Current.Document.Map.SpatialReference; // Browse for any trace of geolocation in non-GIS apps (e.g. Revit: implemented, Blender: todo on Blender side, Civil3d: ?) - // ATM, GIS commit CRS is stored per layer, but should be moved to the Root level too + // ATM, GIS commit CRS is stored per layer (in FeatureClass converter), but should be moved to the Root level too CRSorigin? dataOrigin = null; // e.g. CRSorigin.FromRevitData(rootObject); if (dataOrigin is CRSorigin crsOrigin) { diff --git a/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/FeatureClassToHostConverter.cs b/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/FeatureClassToHostConverter.cs index 0436928629..c87f27314c 100644 --- a/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/FeatureClassToHostConverter.cs +++ b/DUI3-DX/Converters/ArcGIS/Speckle.Converters.ArcGIS3/ToHost/Raw/FeatureClassToHostConverter.cs @@ -89,7 +89,22 @@ public FeatureClass Convert(VectorLayer target) } // ATM, GIS commit CRS is stored per layer, but should be moved to the Root level too, and created once per Receive ACG.SpatialReference spatialRef = ACG.SpatialReferenceBuilder.CreateSpatialReference(wktString); - _contextStack.Current.Document.ActiveCRSoffsetRotation = new CRSoffsetRotation(spatialRef); + + double trueNorthRadians = System.Convert.ToDouble( + (target.crs == null || target.crs?.rotation == null) ? 0 : target.crs.rotation + ); + double latOffset = System.Convert.ToDouble( + (target.crs == null || target.crs?.offset_y == null) ? 0 : target.crs.offset_y + ); + double lonOffset = System.Convert.ToDouble( + (target.crs == null || target.crs?.offset_x == null) ? 0 : target.crs.offset_x + ); + _contextStack.Current.Document.ActiveCRSoffsetRotation = new CRSoffsetRotation( + spatialRef, + latOffset, + lonOffset, + trueNorthRadians + ); // create Fields List fields = _fieldsUtils.GetFieldsFromSpeckleLayer(target);