public static BuildingInformationDto ToBuildingInformationDto(this BuildingInformation buildingInformation) { return(new BuildingInformationDto() { buildingId = buildingInformation.BuildingId, buildingDimensions = buildingInformation.BuildingDimensions.ToBuildingDimensionsDto(), buildingContours = buildingInformation.BuildingContours.Select(_x => _x.ToBuildingContourDto()).ToArray() }); }
internal void SetBuildingInformation(BuildingInformation buildingInformation) { m_buildingInformation = buildingInformation; if (string.IsNullOrEmpty(buildingInformation.BuildingId)) { // discard highlight if empty building information Discard(); } if (this.BuildingInformationReceivedDelegate != null) { this.BuildingInformationReceivedDelegate(this); } }
private BuildingInformation TryFetchBuildingInformationForHighlight(int buildingHighlightId) { BuildingInformation buildingInformation = null; BuildingInformationInterop buildingInfoInterop = new BuildingInformationInterop(); // call C++ api point to populate buffer size fields var success = NativeBuildingsApi_TryGetBuildingInformation(NativePluginRunner.API, buildingHighlightId, ref buildingInfoInterop); if (success) { // alloc + pin buffers var buildingIdBuffer = new byte[buildingInfoInterop.BuildingIdSize]; var buildingIdBufferGCHandle = GCHandle.Alloc(buildingIdBuffer, GCHandleType.Pinned); buildingInfoInterop.BuildingId = buildingIdBufferGCHandle.AddrOfPinnedObject(); var contourPointsBuffer = new LatLongInterop[buildingInfoInterop.ContourPointsSize]; var contourPointsBufferGCHandle = GCHandle.Alloc(contourPointsBuffer, GCHandleType.Pinned); buildingInfoInterop.ContourPoints = contourPointsBufferGCHandle.AddrOfPinnedObject(); var buildingContoursBuffer = new BuildingContourInterop[buildingInfoInterop.BuildingContoursSize]; var buildingContoursBufferGCHandle = GCHandle.Alloc(buildingContoursBuffer, GCHandleType.Pinned); buildingInfoInterop.BuildingContours = buildingContoursBufferGCHandle.AddrOfPinnedObject(); // call C++ api point again to populate buffers success = NativeBuildingsApi_TryGetBuildingInformation(NativePluginRunner.API, buildingHighlightId, ref buildingInfoInterop); if (success) { buildingInformation = CreateBuildingInformation(buildingInfoInterop, contourPointsBuffer, buildingContoursBuffer); } buildingIdBufferGCHandle.Free(); contourPointsBufferGCHandle.Free(); buildingContoursBufferGCHandle.Free(); } return(buildingInformation); }
private static BuildingInformation CreateBuildingInformation( BuildingInformationInterop buildingInfoInterop, LatLongInterop[] contourPointsBuffer, BuildingContourInterop[] buildingContoursBuffer) { var buildingContours = new List <BuildingContour>(); var contourPointsOffset = 0; for (int i = 0; i < buildingInfoInterop.BuildingContoursSize; ++i) { var buildingContourInterop = buildingContoursBuffer[i]; var pointCount = buildingContourInterop.PointCount; var points = new List <LatLong>(); for (int j = 0; j < pointCount; ++j) { points.Add(contourPointsBuffer[contourPointsOffset + j].ToLatLong()); } var buildingContour = new BuildingContour( buildingContourInterop.BottomAltitude, buildingContourInterop.TopAltitude, points.AsReadOnly()); buildingContours.Add(buildingContour); contourPointsOffset += pointCount; } var buildingInformation = new BuildingInformation( Marshal.PtrToStringAnsi(buildingInfoInterop.BuildingId, buildingInfoInterop.BuildingIdSize - 1), buildingInfoInterop.BuildingDimensions.ToBuildingDimensions(), buildingContours.AsReadOnly() ); return(buildingInformation); }
public static string ToJson(this BuildingInformation buildingInformation) { return(JsonUtility.ToJson(buildingInformation.ToBuildingInformationDto())); }