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; } }
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); } }
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); } }
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); } } } }
// 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); } } } }
internal void AttachToScope(SessionScope sessionScope) { sessionScope.Session = this; _ = disposableSet.Add(sessionScope); }
internal void ActivateInternally() { disposableSet.Add(new SessionScope(this)); }
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()); }