public virtual void SetUp()
 {
     if (DoNotActivateSharedSession)
     {
         return;
     }
     disposables = new DisposableSet();
     _           = disposables.Add(Session = Domain.OpenSession());
     _           = disposables.Add(Session.OpenTransaction());
 }
 protected void CreateSessionAndTransaction()
 {
     try {
         disposables = new DisposableSet();
         var session = Domain.OpenSession();
         disposables.Add(session);
         var transaction = session.OpenTransaction();
         disposables.Add(transaction);
     }
     catch {
         disposables.DisposeSafely();
         disposables = null;
         throw;
     }
 }
Exemple #3
0
        public void AddPart(CommandPart part)
        {
            if (prepared)
            {
                throw new InvalidOperationException("Unable to change command: it is already prepared");
            }

            statements.Add(part.Statement);

            foreach (var parameter in part.Parameters)
            {
                underlyingCommand.Parameters.Add(parameter);
            }

            if (part.Resources.Count == 0)
            {
                return;
            }

            if (resources == null)
            {
                resources = new DisposableSet();
            }
            foreach (var resource in part.Resources)
            {
                resources.Add(resource);
            }
        }
Exemple #4
0
        public void AddPart(CommandPart part)
        {
            if (prepared)
            {
                throw new InvalidOperationException(Strings.ExUnableToChangeCommandItIsAlreadyPrepared);
            }

            statements.Add(part.Statement);

            foreach (var parameter in part.Parameters)
            {
                _ = underlyingCommand.Parameters.Add(parameter);
            }

            if (part.Resources.Count == 0)
            {
                return;
            }

            resources ??= new DisposableSet();

            foreach (var resource in part.Resources)
            {
                _ = resources.Add(resource);
            }
        }
 public void RegisterResource(IDisposable resource)
 {
     ArgumentValidator.EnsureArgumentNotNull(resource, "resource");
     lock (resourcesSyncRoot) {
         resources.Add(resource);
     }
 }
Exemple #6
0
        public static void Check(Map map)
        {
            dictChecked = new Dictionary <ObjectId, HashSet <ObjectId> >();
            using (var regions = new DisposableSet <Region>())
                using (var contours = new DisposableSet <Polyline>())
                {
                    foreach (var build in map.Buildings)
                    {
                        dictChecked.Add(build.Building.IdEnt, new HashSet <ObjectId>());
                        build.InitContour();
                        if (build.Contour == null)
                        {
                            Inspector.AddError($"Не определен контур здания - {NetLib.StringExt.ClearString(build.GetInfo())}, слой '{build.Building.Layer}'. Проверка наложения зданий.",
                                               build.Building.IdEnt, System.Drawing.SystemIcons.Error);
                            continue;
                        }
                        contours.Add(build.Contour);
                        try
                        {
                            var reg = BrepExtensions.CreateRegion(build.Contour);
                            build.Region = reg;
                            regions.Add(reg);
                        }
                        catch (Exception ex)
                        {
                            Inspector.AddError($"Ошибка определения контура здания - '{NetLib.StringExt.ClearString(build.GetInfo())}', слой '{build.Building.Layer}'. {ex.Message}. Проверка наложения зданий.",
                                               build.Building.IdEnt, System.Drawing.SystemIcons.Error);
                        }
                    }
                    foreach (var build in map.Buildings.Where(w => w.Region != null))
                    {
                        // здания в границах текущего здания
                        var nearest = map.GetBuildingsInExtents(build.ExtentsInModel);
                        if (!nearest.Any())
                        {
                            continue;
                        }
                        nearest.Remove(build);
                        // Проверка наложение с каждым ближайшим зданием
                        foreach (var nearBuild in nearest)
                        {
                            // Чтобы не проверять два взаимно пересекающихся дома 2 раза
                            if (dictChecked[build.Building.IdEnt].Contains(nearBuild.Building.IdEnt))
                            {
                                continue;
                            }
                            dictChecked[nearBuild.Building.IdEnt].Add(build.Building.IdEnt);

                            CheckIntersect(build, nearBuild);
                        }
                    }
                }
        }
Exemple #7
0
        // Dispose implementation

        public override void Dispose()
        {
            using (var toDispose = new DisposableSet()) {
                foreach (var pair in instances)
                {
                    var service    = pair.Value;
                    var disposable = service as IDisposable;
                    if (disposable != null)
                    {
                        toDispose.Add(disposable);
                    }
                }
            }
        }
Exemple #8
0
 internal void AttachToScope(SessionScope sessionScope)
 {
     sessionScope.Session = this;
     _ = disposableSet.Add(sessionScope);
 }
 internal void ActivateInternally()
 {
     disposableSet.Add(new SessionScope(this));
 }
Exemple #10
0
        public static DisposableSet <HatchLoopPl> GetPolylines2(
            [NotNull] this Hatch ht,
            Tolerance weddingTolerance,
            HatchLoopTypes loopType = (HatchLoopTypes)119,
            bool wedding            = false)
        {
            var loops  = new DisposableSet <HatchLoopPl>();
            var nloops = ht.NumberOfLoops;

            for (var i = 0; i < nloops; i++)
            {
                var loop = ht.GetLoopAt(i);
                if (loopType.HasAny(loop.LoopType))
                {
                    Debug.WriteLine($"GetPolylines2 HasFlag {loop.LoopType}!");
                    var poly   = new Polyline();
                    var vertex = 0;
                    if (loop.IsPolyline)
                    {
                        foreach (BulgeVertex bv in loop.Polyline)
                        {
                            poly.AddVertexAt(vertex++, bv.Vertex, bv.Bulge, 0.0, 0.0);
                        }
                    }
                    else
                    {
                        foreach (Curve2d curve in loop.Curves)
                        {
                            if (curve is LinearEntity2d l)
                            {
                                if (NeedAddVertexToPl(poly, vertex - 1, l.StartPoint, weddingTolerance))
                                {
                                    poly.AddVertexAt(vertex++, l.StartPoint, 0, 0, 0);
                                }

                                poly.AddVertexAt(vertex++, l.EndPoint, 0, 0, 0);
                            }
                            else if (curve is CircularArc2d arc)
                            {
                                if (arc.IsCircle())
                                {
                                    loops.Add(new HatchLoopPl {
                                        Loop = arc.CreateCircle(), Types = loop.LoopType
                                    });
                                    continue;
                                }

                                var bulge = arc.GetBulge(arc.IsClockWise);
                                if (NeedAddVertexToPl(poly, vertex - 1, arc.StartPoint, weddingTolerance))
                                {
                                    poly.AddVertexAt(vertex++, arc.StartPoint, bulge, 0, 0);
                                }
                                else
                                {
                                    poly.SetBulgeAt(vertex - 1, bulge);
                                }

                                poly.AddVertexAt(vertex++, arc.EndPoint, 0, 0, 0);
                            }
                            else
                            {
                                Inspector.AddError($"Тип сегмента штриховки не поддерживается {curve}", ht);
                            }
                        }
                    }

                    if (poly.NumberOfVertices != 0)
                    {
                        if (wedding)
                        {
                            poly.Wedding(weddingTolerance);
                        }

                        if (!poly.Closed)
                        {
                            poly.Closed = true;
                        }
                        loops.Add(new HatchLoopPl {
                            Loop = poly, Types = loop.LoopType
                        });
                    }
                }
            }

            return(loops);
        }
        public ObjectId CreateContour2(BlockTableRecord btr)
        {
            if (panelBtr.ExtentsByTile.Diagonal() < endOffset)
            {
                return ObjectId.Null;
            }

            // из всех плиток отделить торцевые плитки????
            // дерево границ плиток
            TreeTiles = new RTree<Tuple<ObjectId, Extents3d>>();
            foreach (var item in panelBtr.Tiles)
            {
                try
                {
                    var r = new Rectangle(Math.Round(item.Item2.MinPoint.X, 1), Math.Round(item.Item2.MinPoint.Y, 1),
                        Math.Round(item.Item2.MaxPoint.X, 1), Math.Round(item.Item2.MaxPoint.Y, 1), 0, 0);
                    TreeTiles.Add(r, item);
                }
                catch { }
            }

            // Отфильтровать плитки - панели от торцевых.
            using (var colPlTiles = new DisposableSet<Polyline>())
            {
                //List<Polyline> colPlTile = new List<Polyline>();
                foreach (var item in panelBtr.Tiles)
                {
                    // Проверить наличие плиток справа и слева - если есть плитка с одной из сторон то это плитка панели а не торца
                    // Проверка наличия плиток слева от этой
                    double yCenter = ((Math.Round(item.Item2.MaxPoint.Y, 1) - Math.Round(item.Item2.MinPoint.Y, 1)) * 0.5);
                    var ptCenterLeft = new Point(Math.Round(item.Item2.MinPoint.X, 1), yCenter, 0);
                    var finds = TreeTiles.Nearest(ptCenterLeft, distTileMinInPanel);
                    if (!finds.Skip(1).Any())
                    {
                        // Нет плиток слева, проверка плиток справа
                        var ptCenterRight = new Point(Math.Round(item.Item2.MaxPoint.X, 1), yCenter, 0);
                        finds = TreeTiles.Nearest(ptCenterRight, distTileMinInPanel);
                        if (!finds.Skip(1).Any())
                        {
                            // Нет плиток справа
                            // Проверка - торцевые плитки могут быть только у граней панели
                            if ((item.Item2.MinPoint.X - panelBtr.ExtentsByTile.MinPoint.X) < distTileMinInPanel ||
                                panelBtr.ExtentsByTile.MaxPoint.X - item.Item2.MaxPoint.X < distTileMinInPanel ||
                                item.Item2.MinPoint.Y - panelBtr.ExtentsByTile.MinPoint.Y < distTileMinInPanel ||
                                panelBtr.ExtentsByTile.MaxPoint.Y - item.Item2.MaxPoint.Y < distTileMinInPanel)
                            {
                                continue;
                            }
                        }
                    }
                    // Плитка панели, а не торца
                    Polyline pl = item.Item2.GetPolyline();
                    colPlTiles.Add(pl);
                }

                using (var regUnion = BrepExtensions.Union(colPlTiles, null))
                {
                    var plUnion = regUnion.GetPolylines().FirstOrDefault(f => f.Value == BrepLoopType.LoopExterior);
                    //var pl3d = colPlTiles.GetExteriorContour();
                    if (plUnion.Key != null)
                    {
                        if (panelBtr.CPS != null)
                        {
                            plUnion.Key.LayerId = panelBtr.CPS.IdLayerContour;
                        }
                        btr.AppendEntity(plUnion.Key);
                        btr.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(plUnion.Key, true);

                        panelBtr.ExtentsNoEnd = plUnion.Key.GeometricExtents;
                        return plUnion.Key.Id;
                    }
                }
            }
            return ObjectId.Null;
        }
        public ObjectId CreateContour2(BlockTableRecord btr)
        {
            if (panelBtr.ExtentsByTile.Diagonal() < endOffset)
            {
                return(ObjectId.Null);
            }

            // из всех плиток отделить торцевые плитки????
            // дерево границ плиток
            TreeTiles = new RTree <Tuple <ObjectId, Extents3d> >();
            foreach (var item in panelBtr.Tiles)
            {
                try
                {
                    var r = new Rectangle(Math.Round(item.Item2.MinPoint.X, 1), Math.Round(item.Item2.MinPoint.Y, 1),
                                          Math.Round(item.Item2.MaxPoint.X, 1), Math.Round(item.Item2.MaxPoint.Y, 1), 0, 0);
                    TreeTiles.Add(r, item);
                }
                catch { }
            }

            // Отфильтровать плитки - панели от торцевых.
            using (var colPlTiles = new DisposableSet <Polyline>())
            {
                //List<Polyline> colPlTile = new List<Polyline>();
                foreach (var item in panelBtr.Tiles)
                {
                    // Проверить наличие плиток справа и слева - если есть плитка с одной из сторон то это плитка панели а не торца
                    // Проверка наличия плиток слева от этой
                    double yCenter      = ((Math.Round(item.Item2.MaxPoint.Y, 1) - Math.Round(item.Item2.MinPoint.Y, 1)) * 0.5);
                    var    ptCenterLeft = new Point(Math.Round(item.Item2.MinPoint.X, 1), yCenter, 0);
                    var    finds        = TreeTiles.Nearest(ptCenterLeft, distTileMinInPanel);
                    if (!finds.Skip(1).Any())
                    {
                        // Нет плиток слева, проверка плиток справа
                        var ptCenterRight = new Point(Math.Round(item.Item2.MaxPoint.X, 1), yCenter, 0);
                        finds = TreeTiles.Nearest(ptCenterRight, distTileMinInPanel);
                        if (!finds.Skip(1).Any())
                        {
                            // Нет плиток справа
                            // Проверка - торцевые плитки могут быть только у граней панели
                            if ((item.Item2.MinPoint.X - panelBtr.ExtentsByTile.MinPoint.X) < distTileMinInPanel ||
                                panelBtr.ExtentsByTile.MaxPoint.X - item.Item2.MaxPoint.X < distTileMinInPanel ||
                                item.Item2.MinPoint.Y - panelBtr.ExtentsByTile.MinPoint.Y < distTileMinInPanel ||
                                panelBtr.ExtentsByTile.MaxPoint.Y - item.Item2.MaxPoint.Y < distTileMinInPanel)
                            {
                                continue;
                            }
                        }
                    }
                    // Плитка панели, а не торца
                    Polyline pl = item.Item2.GetPolyline();
                    colPlTiles.Add(pl);
                }

                using (var regUnion = BrepExtensions.Union(colPlTiles, null))
                {
                    var plUnion = regUnion.GetPolylines().FirstOrDefault(f => f.Value == BrepLoopType.LoopExterior);
                    //var pl3d = colPlTiles.GetExteriorContour();
                    if (plUnion.Key != null)
                    {
                        if (panelBtr.CPS != null)
                        {
                            plUnion.Key.LayerId = panelBtr.CPS.IdLayerContour;
                        }
                        btr.AppendEntity(plUnion.Key);
                        btr.Database.TransactionManager.TopTransaction.AddNewlyCreatedDBObject(plUnion.Key, true);

                        panelBtr.ExtentsNoEnd = plUnion.Key.GeometricExtents;
                        return(plUnion.Key.Id);
                    }
                }
            }
            return(ObjectId.Null);
        }
 public virtual void SetUp()
 {
     disposables             = new DisposableSet();
     disposables.Add(Session = Domain.OpenSession());
     disposables.Add(Session.OpenTransaction());
 }