示例#1
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <Variant> variants)
     : this()
 {
     Language = lang;
     Region   = region;
     Variants = VariantCollection.Create(Language, Script, variants);
 }
示例#2
0
        /// <summary>
        /// Объекдинение полилиний.
        /// Полилинии должны быть замкнуты!
        /// </summary>
        /// <param name="pls">Поли</param>
        /// <param name="over">Контур который должен быть "над" объединенными полилиниями. Т.е. контур этой полилинии вырезается из полученного контура, если попадает на него.</param>
        public static Region?Union(this IEnumerable <Polyline>?pls, Region over)
        {
            if (pls?.Any() != true)
            {
                return(null);
            }
            var    regions = CreateRegion(pls !);
            Region?union   = null;

            try
            {
                union = UnionRegions(regions);
            }
            finally
            {
                if (union != null)
                {
                    regions.Remove(union);
                }

                foreach (var item in regions)
                {
                    item.Dispose();
                }
            }

            // Вырезание over региона
            if (over != null)
            {
                union?.BooleanOperation(BooleanOperationType.BoolSubtract, over);
            }

            return(union);
        }
示例#3
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Region?region, PrivateUseSubtags privateUseSubtags)
     : this()
 {
     Language   = lang;
     Region     = region;
     PrivateUse = privateUseSubtags;
 }
示例#4
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <ExtensionSubtag> extSubtags)
     : this()
 {
     Language   = lang;
     Region     = region;
     Extensions = new ExtensionSubtagCollection(extSubtags);
 }
示例#5
0
 /// <summary>
 /// Initializes a new instance of the ResponseIndexStatus class.
 /// </summary>
 /// <param name="region">Possible values include: 'Unknown',
 /// 'EastAsia', 'EastUS2', 'NorthCentralUS', 'NorthEurope', 'WestUS2',
 /// 'SoutheastAsia', 'AustraliaEast', 'AustraliaSoutheast',
 /// 'AustraliaCentral', 'AustraliaCentral2', 'BrazilSouth',
 /// 'CanadaCentral', 'CanadaEast', 'ChinaNorth', 'ChinaEast',
 /// 'ChinaNorth2', 'ChinaEast2', 'WestEurope', 'FranceCentral',
 /// 'FranceSouth', 'GermanyCentral', 'GermanyNortheast',
 /// 'CentralIndia', 'WestIndia', 'SouthIndia', 'JapanEast',
 /// 'JapanWest', 'KoreaCentral', 'KoreaSouth', 'EastUS', 'WestUS',
 /// 'CentralUS', 'SouthCentralUS', 'WestCentralUS', 'SouthAfricaNorth',
 /// 'SouthAfricaWest', 'UKWest', 'UKSouth', 'UAENorth',
 /// 'UAECentral'</param>
 /// <param name="provisioningState">The provisioning state for the
 /// index within the specified region. Possible values include:
 /// 'Unknown', 'NotStarted', 'Provisioning', 'Deprovisioning',
 /// 'Succeeded', 'Failed'</param>
 /// <param name="provisioningPercentage">The percentage of provisioning
 /// for the index withing the region.</param>
 public ResponseIndexStatus(Region?region = default(Region?), string provisioningState = default(string), double?provisioningPercentage = default(double?))
 {
     Region                 = region;
     ProvisioningState      = provisioningState;
     ProvisioningPercentage = provisioningPercentage;
     CustomInit();
 }
示例#6
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region)
     : this()
 {
     Language = lang;
     Script   = script;
     Region   = region;
 }
        /// <summary>
        ///  Gets the <see cref="Gdi32.HDC"/> from the the given <paramref name="deviceContext"/>.
        /// </summary>
        /// <remarks>
        ///  When a <see cref="Graphics"/> object is created from a <see cref="Gdi32.HDC"/> the clipping region and
        ///  the viewport origin are applied (<see cref="Gdi32.GetViewportExtEx(Gdi32.HDC, out Size)"/>). The clipping
        ///  region isn't reflected in <see cref="Graphics.Clip"/>, which is combined with the HDC HRegion.
        ///
        ///  The Graphics object saves and restores DC state when performing operations that would modify the DC to
        ///  maintain the DC in its original or returned state after <see cref="Graphics.ReleaseHdc()"/>.
        /// </remarks>
        /// <param name="applyGraphicsState">
        ///  Applies the origin transform and clipping region of the <paramref name="deviceContext"/> if it is an
        ///  object of type <see cref="Graphics"/>. Otherwise this is a no-op.
        /// </param>
        /// <param name="saveHdcState">
        ///  When true, saves and restores the <see cref="Gdi32.HDC"/> state.
        /// </param>
        public DeviceContextHdcScope(
            IDeviceContext deviceContext,
            bool applyGraphicsState = true,
            bool saveHdcState       = false)
        {
            DeviceContext = deviceContext ?? throw new ArgumentNullException(nameof(deviceContext));
            ApplyGraphicsProperties apply = applyGraphicsState ? ApplyGraphicsProperties.All : ApplyGraphicsProperties.None;

            _savedHdcState = 0;

            if (apply == ApplyGraphicsProperties.None || !(DeviceContext is Graphics graphics))
            {
                // GetHdc() locks the Graphics object, it cannot be used until ReleaseHdc() is called
                HDC            = (Gdi32.HDC)DeviceContext.GetHdc();
                _savedHdcState = saveHdcState ? Gdi32.SaveDC(HDC) : 0;
                return;
            }

            bool applyTransform = apply.HasFlag(ApplyGraphicsProperties.TranslateTransform);
            bool applyClipping  = apply.HasFlag(ApplyGraphicsProperties.Clipping);

            // This API is very expensive
            object[]? data = applyTransform || applyClipping ? (object[])graphics.GetContextInfo() : null;

            using Region? clipRegion     = (Region?)data?[0];
            using Matrix? worldTransform = (Matrix?)data?[1];

            // elements (XFORM) = [eM11, eM12, eM21, eM22, eDx, eDy], eDx/eDy specify the translation offset.
            float[]? elements = applyTransform ? worldTransform?.Elements : null;
            int dx = elements != null ? (int)elements[4] : 0;
            int dy = elements != null ? (int)elements[5] : 0;

            applyTransform = applyTransform && elements != null && (dx != 0 || dy != 0);

            using var graphicsRegion = applyClipping ? new Gdi32.RegionScope(clipRegion !, graphics) : default;
示例#8
0
    public Region GetNearestRegion(float x, float z)
    {
        Vector2    worldPosition   = new Vector2(x, z);
        Vector2Int regionId        = Vector2Int.FloorToInt(worldPosition / REGION_SIZE);
        Region?    nearestRegion   = null;
        float      nearestDistance = float.MaxValue;

        for (int dx = -1; dx <= 1; dx++)
        {
            for (int dz = -1; dz <= 1; dz++)
            {
                Region region = GetOrGenerateRegion(regionId + new Vector2Int(dx, dz));

                if (nearestRegion == null)
                {
                    nearestRegion   = region;
                    nearestDistance = Vector2.Distance(region.VoronoiWorldPoint, worldPosition);
                    continue;
                }

                float distance = Vector2.Distance(region.VoronoiWorldPoint, worldPosition);

                if (nearestDistance > distance)
                {
                    nearestDistance = distance;
                    nearestRegion   = region;
                }
            }
        }
        return((Region)nearestRegion);
    }
示例#9
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, PrivateUseSubtags privateUseSubtags)
     : this()
 {
     Language   = lang;
     Script     = script;
     Region     = region;
     PrivateUse = privateUseSubtags;
 }
示例#10
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <Variant> variants, PrivateUseSubtags privateUseSubtags)
     : this()
 {
     Language   = lang;
     Region     = region;
     Variants   = VariantCollection.Create(Language, Script, variants);
     PrivateUse = privateUseSubtags;
 }
示例#11
0
 public bool Equals(Region?r1, Region?r2)
 {
     return((r1, r2) switch {
         (null, null) => true,
         (null, _) => false,
         (_, null) => false,
         (Region x, Region y) => Enumerable.SequenceEqual(x.Points, y.Points, new PointEqualityComparer())
     });
示例#12
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <Variant> variants, IEnumerable <ExtensionSubtag> extSubtags)
     : this()
 {
     Language   = lang;
     Region     = region;
     Variants   = VariantCollection.Create(Language, Script, variants);
     Extensions = new ExtensionSubtagCollection(extSubtags);
 }
示例#13
0
        public static WindowsGraphics FromGraphics(Graphics g, ApplyGraphicsProperties properties)
        {
            Debug.Assert(g != null, "null Graphics object.");

            WindowsRegion?wr = null;

            PointF offset = default;

            if (properties != ApplyGraphicsProperties.None)
            {
                Region?clip = null;

                if (properties.HasFlag(ApplyGraphicsProperties.Clipping))
                {
                    g.GetContextInfo(out offset, out clip);
                }
                else
                {
                    g.GetContextInfo(out offset);
                }

                if (clip is not null)
                {
                    // We have to create the WindowsRegion and dipose the Region object before locking the Graphics object,
                    // in case of an unlikely exception before releasing the WindowsRegion, the finalizer will do it for us.
                    // (no try-finally block since this method is used frequently - perf).

                    // If clipping has not been set (Region.IsInfinite) GetContextInfo will return a null Region.

                    wr = WindowsRegion.FromRegion(clip, g); // WindowsRegion will take ownership of the hRegion.
                    clip.Dispose();                         // Disposing the Region object doesn't destroy the hRegion.
                }
            }

            WindowsGraphics wg = FromHdc(g.GetHdc()); // This locks the Graphics object.

            wg._graphics = g;

            // Apply transform and clip
            if (wr is not null)
            {
                using (wr)
                {
                    // If the Graphics object was created from a native DC the actual clipping region is the intersection
                    // beteween the original DC clip region and the GDI+ one - for display Graphics it is the same as
                    // Graphics.VisibleClipBounds.
                    wg.DeviceContext.IntersectClip(wr);
                }
            }

            if (offset != default)
            {
                // elements (XFORM) = [eM11, eM12, eM21, eM22, eDx, eDy], eDx/eDy specify the translation offset.
                wg.DeviceContext.TranslateTransform((int)offset.X, (int)offset.Y);
            }

            return(wg);
        }
示例#14
0
        /// <summary>
        /// Initializes new value of <see cref="LanguageTag"/>
        /// </summary>
        private LanguageTag(
            Language?language,
            Script?script,
            Region?region,
            VariantCollection variants,
            ExtensionSubtagCollection extensions,
            ExtensionSubtag privateUse)
        {
            if (language != null && script != null)
            {
                var suppressScript = language.SuppressScript;
                if (suppressScript != null && suppressScript == script)
                {
                    script = null;
                }
            }

            Language   = language;
            Script     = script;
            Region     = region;
            Variants   = variants;
            Extensions = extensions;
            PrivateUse = privateUse;

            var fields = Field.None;

            if (language != null)
            {
                fields |= Field.Language;
            }
            if (script != null)
            {
                fields |= Field.Script;
            }
            if (region != null)
            {
                fields |= Field.Region;
            }
            if (!variants.IsEmpty)
            {
                fields |= Field.Variants;
            }
            if (!extensions.IsEmpty)
            {
                fields |= Field.Extensions;
            }
            if (!privateUse.IsEmpty)
            {
                if (!privateUse.PrivateUse)
                {
                    throw new ArgumentOutOfRangeException(nameof(privateUse), "must be a private use subtag");
                }
                fields |= Field.PrivateUse;
            }

            Fields = fields;
        }
示例#15
0
 /// <summary>
 /// Create the LanguageTag instance
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this()
 {
     Language   = lang;
     Script     = script;
     Region     = region;
     Extensions = new ExtensionSubtagCollection(extSubtags);
     PrivateUse = privateUseSubtags;
 }
示例#16
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <Variant>?variants, IEnumerable <ExtensionSubtag>?extSubtags)
     : this(
         lang,
         script,
         region,
         VariantCollection.Create(lang, script, variants),
         new ExtensionSubtagCollection(extSubtags),
         default)
 {
 }
示例#17
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <Variant>?variants)
     : this(
         lang,
         script,
         region,
         VariantCollection.Create(lang, script, variants),
         default,
         default)
 {
 }
示例#18
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 public LanguageTag(Language lang, Region?region)
     : this(
         (Language?)lang,
         null,
         region,
         default,
         default,
         default)
 {
 }
示例#19
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, ExtensionSubtag privateUseSubtags)
     : this(
         lang,
         script,
         region,
         default,
         default,
         privateUseSubtags)
 {
 }
示例#20
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <Variant> variants, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         VariantCollection.Create(lang, script, variants),
         new ExtensionSubtagCollection(extSubtags),
         privateUseSubtags)
 {
 }
示例#21
0
            /// <summary>
            ///  Release any resources held by this Object.
            /// </summary>
            public void Dispose()
            {
                if (_region is not null)
                {
                    _region.Dispose();
                    _region = null;
                }

                _icon.Dispose();
            }
示例#22
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <ExtensionSubtag> extSubtags, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         default,
         new ExtensionSubtagCollection(extSubtags),
         privateUseSubtags)
 {
 }
示例#23
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <Variant> variants, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         VariantCollection.Create(lang, script, variants),
         default,
         privateUseSubtags)
 {
 }
示例#24
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region)
     : this(
         (Language?)lang,
         script,
         region,
         default,
         default,
         default)
 {
 }
示例#25
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Script?script, Region?region, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         script,
         region,
         default,
         default,
         privateUseSubtags)
 {
 }
示例#26
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <Variant> variants)
     : this(
         (Language?)lang,
         null,
         region,
         VariantCollection.Create(lang, null, variants),
         default,
         default)
 {
 }
示例#27
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="variants">enumarate of variant subtags</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <Variant> variants, IEnumerable <ExtensionSubtag> extSubtags)
     : this(
         (Language?)lang,
         null,
         region,
         VariantCollection.Create(lang, null, variants),
         new ExtensionSubtagCollection(extSubtags),
         default)
 {
 }
示例#28
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 public LanguageTag(Language lang, Region?region, IEnumerable <ExtensionSubtag> extSubtags)
     : this(
         (Language?)lang,
         null,
         region,
         default,
         new ExtensionSubtagCollection(extSubtags),
         default)
 {
 }
示例#29
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="region">region subtag</param>
 /// <param name="privateUseSubtags">private use subtag</param>
 public LanguageTag(Language lang, Region?region, PrivateUseSubtags privateUseSubtags)
     : this(
         (Language?)lang,
         null,
         region,
         default,
         default,
         privateUseSubtags)
 {
 }
示例#30
0
 /// <summary>
 /// Initializes new value of <see cref="LanguageTag"/>
 /// </summary>
 /// <param name="lang">primary language</param>
 /// <param name="script">script subtag</param>
 /// <param name="region">region subtag</param>
 /// <param name="extSubtags">enumarate of extensions subtags</param>
 public LanguageTag(Language lang, Script?script, Region?region, IEnumerable <ExtensionSubtag>?extSubtags)
     : this(
         lang,
         script,
         region,
         default,
         new ExtensionSubtagCollection(extSubtags),
         default)
 {
 }
 public override void Deserialize(Dictionary<string,object> json)
 {
     Region = (Region?)JsonUtil.GetEnum<Region>(json, "Region");
     BuildVersion = (string)JsonUtil.Get<string>(json, "BuildVersion");
     IncludeState = (string)JsonUtil.Get<string>(json, "IncludeState");
 }
 public override void Deserialize(Dictionary<string,object> json)
 {
     BuildVersion = (string)JsonUtil.Get<string>(json, "BuildVersion");
     Region = (Region?)JsonUtil.GetEnum<Region>(json, "Region");
     GameMode = (string)JsonUtil.Get<string>(json, "GameMode");
     LobbyId = (string)JsonUtil.Get<string>(json, "LobbyId");
     EnableQueue = (bool?)JsonUtil.Get<bool?>(json, "EnableQueue");
 }
 public override void Deserialize(Dictionary<string,object> json)
 {
     Region = (Region?)JsonUtil.GetEnum<Region>(json, "Region");
     Name = (string)JsonUtil.Get<string>(json, "Name");
     Available = (bool)JsonUtil.Get<bool?>(json, "Available");
     PingUrl = (string)JsonUtil.Get<string>(json, "PingUrl");
 }