コード例 #1
0
 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()
     });
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 public static string ToJson(this BuildingInformation buildingInformation)
 {
     return(JsonUtility.ToJson(buildingInformation.ToBuildingInformationDto()));
 }