/// <summary> /// Initializes a new instance of the <see cref="SqlLiteDataConnection"/> class. /// </summary> /// <param name="filename">The filename</param> public SqlLiteDataConnection(string filename) { _connectionString = string.Format("Data Source={0}; Version=3;", filename); _tConverter = new StandardCLRConverter(); _commandGenerator = new SqliteCommandGenerator(this); _dConverter = new SQLiteDBConverter(); }
/// <summary> /// Initializes a new instance of the <see cref="PostgreSQLServerConnection"/> class. /// </summary> /// <param name="ConnectionString">The connection string.</param> public PostgreSQLServerConnection(string ConnectionString) { _commandGenerator = new PostgreCommandGenerator(); _connectionString = ConnectionString; _tConverter = new StandardCLRConverter(); _dConverter = new PostgreDBConverter(); }
/// <summary> /// Initializes a new instance of the <see cref="MySqlServerConnection"/> class. /// </summary> /// <param name="ConnectionString">The connection string.</param> public MySqlServerConnection(string ConnectionString) { _commandGenerator = new MySqlCommandGenerator(StorageEngine.InnoDB, this); _connectionString = ConnectionString; _tConverter = new StandardCLRConverter(); _dConverter = new MySqlServerDBConverter(); }
/// <summary> /// Initializes a new instance of the <see cref="SqlServerConnection"/> class. /// </summary> /// <param name="ConnectionString">The connection string.</param> public SqlServerConnection(string ConnectionString) { _commandGenerator = new SqlServerCommandGenerator(); _connectionString = ConnectionString; _tConverter = new SqlServerTypeConverter(); _dConverter = new SqlServerDBConverter(); }
public override void PrepareBuild(ICommandGenerator generator) { var bounds = TechProcess.ProcessingArea.Select(p => p.ObjectId).GetExtents(); generator.ZSafety = bounds.MaxPoint.Z + TechProcess.ZSafety; generator.ToolLocation.Point += Vector3d.ZAxis * generator.ZSafety; }
private void Cutting(ICommandGenerator generator, double x, double y) { generator.Move(x, y); generator.Move(z: ZEntry); var zMin = -Depth; double z = 0; int counter = 0; while (z >= zMin) { var feed = (int)((FeedMax - FeedMin) / zMin * (z * z / zMin - 2 * z) + FeedMax); generator.Cutting(x, y, z, feed); if (z <= -2) { if (++counter == 5) // Подъем на 1мм для охлаждения { counter = 0; generator.Pause(0.2); generator.Uplifting(z + 1); generator.Cutting(x, y, z + 0.2, (int)(FeedMax * 1.5)); generator.Cutting(x, y, z, feed); } } z -= 0.2; } generator.Pause(0.2); generator.Uplifting(); }
private void BuildPass(ICommandGenerator generator, List <Point3d> points) { var point0 = Algorithms.NullPoint3d; var point = Algorithms.NullPoint3d; foreach (var p in points) { if (generator.IsUpperTool) { generator.Move(p.X, p.Y, angleC: ((Disk3DTechProcess)TechProcess).Angle); } if (point.IsNull()) { if (generator.ToolLocation.Point != p) { generator.GCommand(CommandNames.Penetration, 1, point: p, feed: TechProcess.PenetrationFeed); } } else if (point0 != point && point != p && !point0.GetVectorTo(point).IsCodirectionalTo(point.GetVectorTo(p))) { generator.GCommand(CommandNames.Cutting, 1, point: point, feed: CuttingFeed); point0 = point; } if (point0.IsNull()) { point0 = p; } point = p; } generator.GCommand(CommandNames.Cutting, 1, point: point, feed: CuttingFeed); }
protected override void GivenThat() { base.GivenThat(); _controlFile = TestControlFileFactory.CreateControlFile(); _stateProvider = GenerateMock <IStateProvider>(); _state = GenerateMock <IState>(); _timeProvider = GenerateMock <ITimeProvider>(); _webClientFactory = GenerateMock <IWebClientFactory>(); _webClient = GenerateMock <IWebClient>(); _feedFactory = GenerateMock <IPodcastFeedFactory>(); _fileUtilities = GenerateMock <IFileUtilities>(); _podcastFeed = GenerateMock <IPodcastFeed>(); _directoryInfoProvider = GenerateMock <IDirectoryInfoProvider>(); _directoryInfo = GenerateMock <IDirectoryInfo>(); _commandGenerator = GenerateMock <ICommandGenerator>(); _pathUtilities = GenerateMock <IPathUtilities>(); SetupData(); SetupStubs(); _episodeFinder = new EpisodeFinder(_fileUtilities, _feedFactory, _webClientFactory, _timeProvider, _stateProvider, _directoryInfoProvider, _commandGenerator, _pathUtilities); _episodeFinder.StatusUpdate += new EventHandler <StatusUpdateEventArgs>(EpisodeFinderStatusUpdate); _latestUpdate = null; }
/// <summary> /// Initializes a new instance of the <see cref="iOSDataConnection"/> class. /// </summary> /// <param name="filename">The filename</param> public iOSDataConnection(string filename) { _connectionString = string.Format("Data Source={0}; Version=3;", filename); _tConverter = new iOSCLRConverter(); _commandGenerator = new iOSCommandGenerator(); _dConverter = new StandardDBConverter(); }
/// <summary> /// Initializes a new instance of the <see cref="DbSet{T}" /> class. /// </summary> /// <param name="commandGenerator">Generator to create commands.</param> /// <param name="provider">Provider to executing commands.</param> /// <param name="query">Query.</param> /// <param name="tableInfo">Information about table from database.</param> public DbSet(ICommandGenerator <T> commandGenerator, IQueryProvider provider, IQueryBase <T> query, TableInfo tableInfo) { _commandGenerator = Check.NotNull(commandGenerator, nameof(commandGenerator)); _provider = Check.NotNull(provider, nameof(provider)); _query = Check.NotNull(query, nameof(query)); _tableInfo = Check.NotNull(tableInfo, nameof(tableInfo)); }
/// <summary> /// Initializes a new instance of the <see cref="MySqlServerConnection"/> class. /// </summary> /// <param name="ConnectionString">The connection string.</param> /// <param name="engine">The storage engine to use when creating tables</param> public MySqlServerConnection(string ConnectionString, StorageEngine engine) { _commandGenerator = new MySqlCommandGenerator(engine); _connectionString = ConnectionString; _tConverter = new StandardCLRConverter(); _dConverter = new MySqlServerDBConverter(); }
public WifiControllerViewModel(ICommandGenerator commandGenerator, ISettingAccess settingAccess, INavigator navigator, IHTTPClient httpClient, IPlatformToast platformToast) : base(navigator) { _commandGenerator = commandGenerator; _settingAccess = settingAccess; _httpClient = httpClient; _platformToast = platformToast; InitializeCommands(); }
public KormDataReader(IEnumerable <T> data, ICommandGenerator <T> generator) { Check.NotNull(data, nameof(data)); Check.NotNull(generator, nameof(generator)); _data = data; DataEnumerator = _data.GetEnumerator(); _generator = generator; _columns = _generator.GetQueryColumns().ToList(); }
/// <summary> /// discover items to be downloaded from a feed /// </summary> public EpisodeFinder(IFileUtilities fileFinder, IPodcastFeedFactory feedFactory, IWebClientFactory webClientFactory, ITimeProvider timeProvider, IStateProvider stateProvider, IDirectoryInfoProvider directoryInfoProvider, ICommandGenerator commandGenerator) { _fileUtilities = fileFinder; _commandGenerator = commandGenerator; _directoryInfoProvider = directoryInfoProvider; _stateProvider = stateProvider; _timeProvider = timeProvider; _webClientFactory = webClientFactory; _feedFactory = feedFactory; }
public override void BuildProcessing(ICommandGenerator generator) { _disk3DTechProcess = (Disk3DTechProcess)TechProcess; var offsetSurface = CreateOffsetSurface(); var matrix = Matrix3d.Rotation(_disk3DTechProcess.Angle.ToRad(), Vector3d.ZAxis, Point3d.Origin); if (_disk3DTechProcess.Angle != 0) { offsetSurface.TransformBy(matrix); } var minPoint = offsetSurface.GeometricExtents.MinPoint; var maxPoint = offsetSurface.GeometricExtents.MaxPoint; var collections = GetPointCollections(offsetSurface, minPoint, maxPoint); offsetSurface.Dispose(); var zArray = GetZArray(collections, (maxPoint - minPoint).X); var passList = CalcPassList(zArray, minPoint); matrix = matrix.Inverse(); passList.ForEach(p => { var points = p; if (Departure > 0) { points.Insert(0, new Point3d((IsDepartureOnBorderSection ? points.First().X : minPoint.X) - Departure, points.First().Y, points.First().Z)); points.Add(new Point3d((IsDepartureOnBorderSection ? points.Last().X : maxPoint.X) + Departure, points.Last().Y, points.Last().Z)); } if (TechProcess.MachineType == MachineType.Donatoni) //Settongs.IsFrontPlaneZero { points = points.ConvertAll(x => new Point3d(x.X, x.Y - TechProcess.Tool.Thickness.Value, x.Z)); } if (_disk3DTechProcess.Angle != 0) { points = points.ConvertAll(x => x.TransformBy(matrix)); } var loc = generator.ToolLocation; if (loc.IsDefined && loc.Point.DistanceTo(points.First()) > loc.Point.DistanceTo(points.Last())) { points.Reverse(); } BuildPass(generator, points); if (IsUplifting) { generator.Uplifting(); } }); }
protected override void BuildProcessing(ICommandGenerator generator) { generator.ZSafety = ZSafety; generator.SetTool(1, Frequency); ProcessingArea.ForEach(p => { var arc = p.GetCurve() as Circle; Cutting(generator, arc.Center.X, arc.Center.Y); }); }
public ShellViewModel(IDialogCoordinator dialogCoordinator, ICommandGenerator commandGenerator, IConsole console, MotorFactory motorFactory) { _dialogCoordinator = dialogCoordinator ?? throw new ArgumentNullException(nameof(dialogCoordinator)); _commandGenerator = commandGenerator ?? throw new ArgumentNullException(nameof(commandGenerator)); _console = console ?? throw new ArgumentNullException(nameof(console)); _motorFactory = motorFactory ?? throw new ArgumentNullException(nameof(motorFactory)); _console.OutputDataReceived += (object sender, DataReceivedEventArgs e) => BusyText = e.Data; var lastSettings = Properties.Settings.Default.lastSettings; LoadConfigFromSerialized(lastSettings); }
private void BuildPass(ICommandGenerator generator, List <Point3d> points) { if (TechProcess.MachineType == MachineType.ScemaLogic) //Settongs.IsFrontPlaneZero { points = points.ConvertAll(p => new Point3d(p.X, p.Y + TechProcess.Tool.Thickness.Value, p.Z)); } var z = generator.ZSafety - TechProcess.ZSafety; bool isComplete; do { isComplete = true; z -= Penetration; var point0 = Algorithms.NullPoint3d; var point = Algorithms.NullPoint3d; foreach (var pt in points) { var p = pt; if (z > p.Z) { p = new Point3d(p.X, p.Y, z); isComplete = false; } if (generator.IsUpperTool) { generator.Move(p.X, p.Y, angleC: ((Disk3DTechProcess)TechProcess).Angle); } if (point.IsNull()) { if (generator.ToolLocation.Point != p) { generator.GCommand(CommandNames.Penetration, 1, point: p, feed: TechProcess.PenetrationFeed); } } else if (point0 != point && point != p && !point0.GetVectorTo(point).IsCodirectionalTo(point.GetVectorTo(p))) { generator.GCommand(CommandNames.Cutting, 1, point: point, feed: CuttingFeed); point0 = point; } if (point0.IsNull()) { point0 = p; } point = p; } generator.GCommand(CommandNames.Cutting, 1, point: point, feed: CuttingFeed); points.Reverse(); }while (!isComplete); generator.Uplifting(); }
/// <summary> /// Initializes a new instance of the <see cref="DbSet{T}" /> class. /// </summary> /// <param name="commandGenerator">Generator to create commands.</param> /// <param name="provider">Provider to executing commands.</param> /// <param name="query">Query.</param> /// <param name="tableInfo">Information about table from database.</param> public DbSet( ICommandGenerator <T> commandGenerator, IQueryProvider provider, IQueryBase <T> query, TableInfo tableInfo) { _commandGenerator = Check.NotNull(commandGenerator, nameof(commandGenerator)); _provider = Check.NotNull(provider, nameof(provider)); _query = Check.NotNull(query, nameof(query)); _tableInfo = Check.NotNull(tableInfo, nameof(tableInfo)); _primaryKeyPropertyType = new Lazy <Type>(GetPrimaryKeyType); }
public override void BuildProcessing(ICommandGenerator generator) { const int AngleA = 45; var tactileTechProcess = (TactileTechProcess)TechProcess; var contour = tactileTechProcess.GetContour(); var contourPoints = contour.GetPolyPoints().ToArray(); var ray = new Ray { BasePoint = ProcessingAngle == 45 ? contourPoints.Last() : contourPoints.First(), UnitDir = Vector3d.XAxis.RotateBy(Graph.ToRad(ProcessingAngle), Vector3d.ZAxis) }; var passDir = ray.UnitDir.GetPerpendicularVector(); if (ProcessingAngle >= 90) { passDir = passDir.Negate(); } ray.BasePoint += passDir * (tactileTechProcess.BandStart1.Value - tactileTechProcess.BandSpacing.Value); var step = tactileTechProcess.BandWidth.Value + tactileTechProcess.BandSpacing.Value; var tactileParams = tactileTechProcess.TactileTechProcessParams; var engineSide = ProcessingAngle < 90 ? Side.Right : Side.Left; while (true) { var points = new Point3dCollection(); ray.IntersectWith(contour, Intersect.ExtendThis, new Plane(), points, IntPtr.Zero, IntPtr.Zero); if (points.Count == 2 && !points[0].IsEqualTo(points[1])) { var vector = (points[1] - points[0]).GetNormal() * tactileParams.Departure; var startPoint = points[0] - vector - Vector3d.ZAxis * tactileParams.Depth; var endPoint = points[1] + vector - Vector3d.ZAxis * tactileParams.Depth; if (generator.IsUpperTool) { generator.Move(startPoint.X, startPoint.Y, angleC: BuilderUtils.CalcToolAngle(ProcessingAngle.ToRad(), engineSide), angleA: AngleA); } generator.Cutting(startPoint, endPoint, CuttingFeed, tactileParams.TransitionFeed); } else if (step > 0) { ray.BasePoint += passDir * tactileTechProcess.BandSpacing.Value; step = -step; generator.Uplifting(); engineSide = engineSide.Opposite(); } else { break; } ray.BasePoint += passDir * step; } }
public KormBulkInsertDataReader(IEnumerable <T> data, ICommandGenerator <T> generator, IIdGenerator idGenerator, TableInfo tableInfo) : base(data, generator) { _tableInfo = tableInfo; _idGenerator = idGenerator; _primaryKey = new Lazy <ColumnInfo>(() => { return(_tableInfo.PrimaryKey.Single(p => p.AutoIncrementMethodType == AutoIncrementMethodType.Custom)); }); }
public override void BuildProcessing(ICommandGenerator generator) { for (int i = 0; i < PointsX.Count; i++) { generator.GCommand(CommandNames.Fast, 0, x: PointsX[i], y: PointsY[i], z: 80); generator.Command($"G0 Z80"); generator.Command("M131"); generator.Command($"DBL THICK{i} = %TastL.ZLastra - %TastL.ZBanco", "Измерение"); generator.Command($"G0 Z(THICK{i}/1000 + 100)"); } var s = String.Join(" + ", Enumerable.Range(0, PointsX.Count).Select(p => $"THICK{p}")); generator.Command($"DBL THICK = ({s})/{PointsX.Count}/1000"); generator.WithThick = true; }
/// <summary> /// Initializes a new instance of the <see cref="SqlServerConnection"/> class with a connection string appropriate for sql server 2k8 /// </summary> /// <param name="Server">The server.</param> /// <param name="Catalog">The catalog.</param> /// <param name="User">The user.</param> /// <param name="Password">The password.</param> public SqlCompactConnection(string file) { _commandGenerator = new SqlCompactCommandGenerator(); _connectionString = string.Format("Data Source={0};Persist Security Info=False;", file); _tConverter = new SqlCompactTypeConverter(); _dConverter = new SqlCompactDBConverter(); if (!System.IO.File.Exists(file)) { using (SqlCeEngine engine = new SqlCeEngine(_connectionString)) { engine.CreateDatabase(); } } }
public KormBulkInsertDataReader(IEnumerable <T> data, ICommandGenerator <T> generator, IIdGenerator idGenerator, TableInfo tableInfo) : base(data, generator) { _tableInfo = tableInfo; _idGenerator = idGenerator; if (_idGenerator is not null) { _primaryKey = _tableInfo.PrimaryKey.Single(p => p.AutoIncrementMethodType == AutoIncrementMethodType.Custom); _primaryKeyOrdinal = GetOrdinal(_primaryKey.Name); } }
public SettingsViewModel(ISettingAccess settingAccess, ICommandGenerator commandGenerator, INavigator INavigator, IPlatformToast platformToast) : base(INavigator) { _settingAccess = settingAccess; _commandGenerator = commandGenerator; _platformToast = platformToast; SaveSettingsCommand = _commandGenerator.GenerateCommand(async() => { try { await SaveSettings(Settings); } catch (ArgumentNullException) { _platformToast.ShowToast("Could not save settings...try again"); } }); }
private void BuildPass(ICommandGenerator generator, List <Point3d> points) { if (TechProcess.MachineType == MachineType.ScemaLogic) //Settongs.IsFrontPlaneZero { points = points.ConvertAll(p => new Point3d(p.X, p.Y + TechProcess.Tool.Thickness.Value, p.Z)); } var point0 = Algorithms.NullPoint3d; var point = Algorithms.NullPoint3d; foreach (var p in points) { if (generator.IsUpperTool) { generator.Move(p.X, p.Y, angleC: ((Disk3DTechProcess)TechProcess).Angle); } if (point.IsNull()) { if (generator.ToolLocation.Point != p) { generator.GCommand(CommandNames.Penetration, 1, point: p, feed: TechProcess.PenetrationFeed); } } else if (point0 != point && point != p && !point0.GetVectorTo(point).IsCodirectionalTo(point.GetVectorTo(p))) { generator.GCommand(CommandNames.Cutting, 1, point: point, feed: CuttingFeed); point0 = point; } if (point0.IsNull()) { point0 = p; } point = p; } generator.GCommand(CommandNames.Cutting, 1, point: point, feed: CuttingFeed); }
public override void BuildProcessing(ICommandGenerator generator) { var tactileTechProcess = (TactileTechProcess)TechProcess; var tactileParams = ((TactileTechProcess)TechProcess).TactileTechProcessParams; var isDiag = tactileTechProcess.ProcessingAngle1 != 0; var contour = tactileTechProcess.GetContour(); var contourPoints = contour.GetPolyPoints().ToArray(); var point = tactileTechProcess.Objects.Select(p => p.GetCurve()).OfType <Circle>().Select(p => p.Center).OrderBy(p => (int)p.Y).ThenBy(p => p.X).First(); var x = point.X; var y = point.Y; var stepX = tactileTechProcess.BandSpacing.Value + tactileTechProcess.BandWidth.Value; var stepY = stepX; if (isDiag) { stepY /= Math.Sqrt(2); stepX = stepY * 2; } generator.SetTool(2, Frequency, 90, false); generator.ZSafety = ZSafety; while (y < contourPoints[1].Y) { Cutting(); x += stepX; if (x > contourPoints[3].X) { y += stepY; x -= stepY; stepX = -stepX; if (x > contourPoints[3].X) { x += stepX; } } if (x < contourPoints[1].X) { y += stepY; x += stepY; stepX = -stepX; if (x < contourPoints[1].X) { x += stepX; } } } void Cutting() { generator.Move(x, y); generator.Move(z: ZEntry); var zMin = -tactileParams.Depth; double z = 0; int counter = 0; while (z >= zMin) { var feed = (int)((FeedMax - FeedMin) / zMin * (z * z / zMin - 2 * z) + FeedMax); generator.Cutting(x, y, z, feed); if (z <= -2) { if (++counter == 5) // Подъем на 1мм для охлаждения { counter = 0; Pause(); generator.Uplifting(z + 1); generator.Cutting(x, y, z + 0.2, (int)(FeedMax * 1.5)); generator.Cutting(x, y, z, feed); } } z -= 0.2; } Pause(); generator.Uplifting(); void Pause() => generator.Command("G4 F0.2", "Пауза"); } contour.Dispose(); }
public ControllerRequirements(IQueryGenerator queryGenerator, ICommandGenerator commandGenerator) { QueryGenerator = queryGenerator; CommandGenerator = commandGenerator; }
public override void BuildProcessing(ICommandGenerator generator) { const int CornerIndentIncrease = 5; var techProcess = (SawingTechProcess)TechProcess; var curve = ProcessingArea.GetCurve(); var thickness = techProcess.Thickness.Value; var toolDiameter = techProcess.Tool.Diameter; var engineSide = Side.None; double offsetArc = 0; double angleA = 0; if (techProcess.MachineType == MachineType.ScemaLogic) { AngleA = 0; } switch (curve) { case Arc arc: CalcArc(arc); break; case Line line: CalcLine(line); break; case Polyline polyline: CalcPolyline(polyline); break; default: throw new InvalidOperationException($"Кривая типа {curve.GetType()} не может быть обработана."); } var outerSideSign = OuterSide == Side.Left ^ curve is Line ? -1 : 1; var offsetCoeff = Math.Tan(angleA) * outerSideSign; var depthCoeff = 1 / Math.Cos(angleA); var toolThickness = techProcess.Tool.Thickness.Value * depthCoeff; var compensation = (offsetArc + (engineSide == OuterSide ^ techProcess.MachineType == MachineType.Donatoni ? toolThickness : 0)) * outerSideSign; var shift = angleA > 0 ? -thickness * offsetCoeff : 0; var sumIndent = CalcIndent(thickness) * (Convert.ToInt32(IsExactlyBegin) + Convert.ToInt32(IsExactlyEnd)); if (sumIndent >= curve.Length()) { if (AngleA != 0) { throw new InvalidOperationException("Расчет намечания выполняется только при нулевом вертикальном угле."); } var point = Scheduling(); var angle = BuilderUtils.CalcToolAngle((curve.EndPoint - curve.StartPoint).ToVector2d().Angle, engineSide); generator.Move(point.X, point.Y, angleC: angle); generator.Cutting(point.X, point.Y, point.Z, techProcess.PenetrationFeed); return; } var modes = SawingModes.ConvertAll(p => new CuttingMode { Depth = p.Depth, DepthStep = p.DepthStep, Feed = p.Feed }); var passList = BuilderUtils.GetPassList(modes, thickness, !ProcessingArea.ObjectId.IsLine()).ToList(); Curve toolpathCurve = null; foreach (var item in passList) { CreateToolpath(item.Key, compensation + shift + item.Key * offsetCoeff); if (generator.IsUpperTool) { var point = engineSide == Side.Right ^ (passList.Count() % 2 == 1) ? toolpathCurve.EndPoint : toolpathCurve.StartPoint; var vector = Vector3d.ZAxis * (item.Key + generator.ZSafety); if (angleA != 0) { vector = vector.RotateBy(outerSideSign * angleA, ((Line)toolpathCurve).Delta) * depthCoeff; } var p0 = point + vector; var angleC = BuilderUtils.CalcToolAngle(toolpathCurve, point, engineSide); generator.Move(p0.X, p0.Y, angleC: angleC, angleA: Math.Abs(AngleA)); if (techProcess.MachineType == MachineType.ScemaLogic) { generator.Command("28;;XYCZ;;;;;;", "Цикл"); } } generator.Cutting(toolpathCurve, item.Value, techProcess.PenetrationFeed, engineSide); } generator.Uplifting(Vector3d.ZAxis.RotateBy(outerSideSign * angleA, toolpathCurve.EndPoint - toolpathCurve.StartPoint) * (thickness + generator.ZSafety) * depthCoeff); if (!IsExactlyBegin || !IsExactlyEnd) { var gashCurve = curve.GetOffsetCurves(shift)[0] as Curve; if (!IsExactlyBegin) { Acad.CreateGash(gashCurve, gashCurve.StartPoint, OuterSide, thickness * depthCoeff, toolDiameter, toolThickness); } if (!IsExactlyEnd) { Acad.CreateGash(gashCurve, gashCurve.EndPoint, OuterSide, thickness * depthCoeff, toolDiameter, toolThickness); } gashCurve.Dispose(); } // Local func ------------------------ void CalcArc(Arc arc) { AngleA = 0; var startSide = Math.Sign(Math.Cos(arc.StartAngle.Round(3))); var endSide = Math.Sign(Math.Cos(arc.EndAngle.Round(3))); var cornersOneSide = Math.Sign(startSide * endSide); if (arc.TotalAngle.Round(3) > Math.PI && cornersOneSide > 0) { throw new InvalidOperationException("Обработка дуги невозможна - дуга пересекает углы 90 и 270 градусов."); } if (cornersOneSide < 0) // дуга пересекает углы 90 или 270 градусов { if (techProcess.MachineType == MachineType.ScemaLogic) { throw new InvalidOperationException("Обработка дуги невозможна - дуга пересекает угол 90 или 270 градусов."); } engineSide = startSide > 0 ? Side.Left : Side.Right; } if (OuterSide == Side.Left) // внутренний рез дуги { if (techProcess.MachineType == MachineType.Donatoni && engineSide != Side.Left) // подворот диска при вн. резе дуги { engineSide = Side.Right; //var comp = arc.Radius - Math.Sqrt(arc.Radius * arc.Radius - thickness * (toolDiameter - thickness)); //AngleA = Math.Atan2(comp, thickness).ToDeg(); var R = arc.Radius; var t = thickness; var d = toolDiameter; var comp = (2 * R * t * t - Math.Sqrt(-d * d * d * d * t * t + 4 * d * d * R * R * t * t + d * d * t * t * t * t)) / (d * d - 4 * R * R); AngleA = -Math.Atan2(comp, thickness).ToDeg(); } else { offsetArc = arc.Radius - Math.Sqrt(arc.Radius * arc.Radius - thickness * (toolDiameter - thickness)); } } if (engineSide == Side.None) { engineSide = (startSide + endSide) > 0 ? Side.Right : Side.Left; } } void CalcLine(Line line) { angleA = AngleA.ToRad(); engineSide = AngleA == 0 ? BuilderUtils.CalcEngineSide(line.Angle) : AngleA > 0 ? OuterSide : OuterSide.Opposite(); } void CalcPolyline(Polyline polyline) { int sign = 0; for (int i = 0; i < polyline.NumberOfVertices; i++) { var point = polyline.GetPoint3dAt(i); var s = Math.Sign(Math.Sin(polyline.GetTangent(point).Angle.Round(6))); if (s == 0) { continue; } if (sign == 0) { sign = s; continue; } var bulge = polyline.GetBulgeAt(i - 1); if (bulge == 0) { bulge = polyline.GetBulgeAt(i); } if (s != sign) { if (techProcess.MachineType == MachineType.ScemaLogic) { throw new InvalidOperationException("Обработка полилинии невозможна - кривая пересекает углы 90 или 270 градусов."); } var side = sign > 0 ^ bulge < 0 ? Side.Left : Side.Right; if (engineSide != Side.None) { if (engineSide != side) { throw new InvalidOperationException("Обработка полилинии невозможна."); } } else { engineSide = side; } sign = s; } else if (Math.Abs(bulge) > 1) { throw new InvalidOperationException("Обработка невозможна - дуга полилинии пересекает углы 90 и 270 градусов."); } } if (engineSide == Side.None) { engineSide = BuilderUtils.CalcEngineSide(polyline.GetTangent(polyline.StartPoint).Angle); } } void CreateToolpath(double depth, double offset) { toolpathCurve = curve.GetOffsetCurves(offset)[0] as Curve; toolpathCurve.TransformBy(Matrix3d.Displacement(-Vector3d.ZAxis * depth)); if (!IsExactlyBegin && !IsExactlyEnd) { return; } var indent = CalcIndent(depth * depthCoeff); switch (toolpathCurve) { case Line l: if (IsExactlyBegin) { l.StartPoint = l.GetPointAtDist(indent); } if (IsExactlyEnd) { l.EndPoint = l.GetPointAtDist(l.Length - indent); } break; case Arc a: var indentAngle = indent / ((Arc)curve).Radius; if (IsExactlyBegin) { a.StartAngle = a.StartAngle + indentAngle; } if (IsExactlyEnd) { a.EndAngle = a.EndAngle - indentAngle; } break; case Polyline p: if (IsExactlyBegin) { p.SetPointAt(0, p.GetPointAtDist(indent).ToPoint2d()); } //p.StartPoint = p.GetPointAtDist(indent); if (IsExactlyEnd) { //p.EndPoint = p.GetPointAtDist(p.Length - indent); p.SetPointAt(p.NumberOfVertices - 1, p.GetPointAtDist(p.Length - indent).ToPoint2d()); } break; } ; } double CalcIndent(double depth) => Math.Sqrt(depth * (toolDiameter - depth)) + CornerIndentIncrease; /// <summary> /// Расчет точки намечания /// </summary> Point3d Scheduling() { var vector = curve.EndPoint - curve.StartPoint; var depth = thickness; var point = Point3d.Origin; if (IsExactlyBegin && IsExactlyEnd) { var l = vector.Length - 2 * CornerIndentIncrease; depth = (toolDiameter - Math.Sqrt(toolDiameter * toolDiameter - l * l)) / 2; point = curve.StartPoint + vector / 2; } else { var indentVector = vector.GetNormal() * (Math.Sqrt(depth * (toolDiameter - depth)) + CornerIndentIncrease); point = IsExactlyBegin ? curve.StartPoint + indentVector : curve.EndPoint - indentVector; Acad.CreateGash(curve, IsExactlyBegin ? curve.EndPoint : curve.StartPoint, OuterSide, depth, toolDiameter, toolThickness, point); } return(point + vector.GetPerpendicularVector().GetNormal() * compensation - Vector3d.ZAxis * depth); } }
public override void BuildProcessing(ICommandGenerator generator) { switch (CalcMethod) { case CalcMethodType.Average: for (int i = 0; i < PointsX.Count; i++) { generator.GCommand(CommandNames.Fast, 0, x: PointsX[i] + 230, y: PointsY[i] - 100 - TechProcess.Tool.Thickness.GetValueOrDefault()); generator.ToolLocation.Point -= new Vector3d(0, 0, 1); generator.GCommand("", 0, z: TechProcess.Thickness.GetValueOrDefault() + TechProcess.ZSafety); generator.Command("M131"); generator.Command($"DBL THICK{i} = %TastL.ZLastra - %TastL.ZBanco", "Измерение"); generator.Command($"G0 Z(THICK{i}/1000 + 100)"); } var s = String.Join(" + ", Enumerable.Range(0, PointsX.Count).Select(p => $"THICK{p}")); generator.Command($"DBL THICK = ({s})/{PointsX.Count}/1000"); break; case CalcMethodType.Minimum: for (int i = 0; i < PointsX.Count; i++) { generator.GCommand(CommandNames.Fast, 0, x: PointsX[i] + 230, y: PointsY[i] - 100 - TechProcess.Tool.Thickness.GetValueOrDefault()); generator.ToolLocation.Point -= new Vector3d(0, 0, 1); generator.GCommand("", 0, z: TechProcess.Thickness.GetValueOrDefault() + TechProcess.ZSafety); generator.Command("M131"); generator.Command($"DBL THICK{i} = %TastL.ZLastra - %TastL.ZBanco", "Измерение"); generator.Command($"G0 Z(THICK{i}/1000 + 100)"); if (i != 0) { generator.Command($"IF (THICK{i} < THICK0) THEN"); generator.Command($" THICK0 = THICK{i}"); generator.Command("ENDIF"); } } generator.Command("DBL THICK = THICK0/1000"); break; case CalcMethodType.Сorners: var points = PointsX.Select((p, i) => new Point2d(p, PointsY[i])).OrderBy(p => p.X).ToList(); var corners = points.Take(2).OrderBy(p => p.Y).Concat(points.Skip(2).OrderByDescending(p => p.Y)).ToList(); for (int i = 0; i < corners.Count; i++) { generator.GCommand(CommandNames.Fast, 0, x: corners[i].X + 230, y: corners[i].Y - 100 - TechProcess.Tool.Thickness.GetValueOrDefault()); generator.ToolLocation.Point -= new Vector3d(0, 0, 1); generator.GCommand("", 0, z: TechProcess.Thickness.GetValueOrDefault() + TechProcess.ZSafety); generator.Command("M131"); generator.Command($"DBL THICK{i} = (%TastL.ZLastra - %TastL.ZBanco)/1000", "Измерение"); generator.Command($"G0 Z(THICK{i} + 100)"); } var l1 = corners[3].X - corners[0].X; var l2 = corners[1].Y - corners[0].Y; generator.Command($"DBL KK1=(THICK3 - THICK0) / {l1}"); generator.Command($"DBL KK2=(THICK2 - THICK1) / {l1}"); generator.Command("DBL THICK"); generator.ThickCommand = $"THICK = (({{0}}-{corners[0].X})*KK2+THICK1)*({{1}}-{corners[0].Y})/{l2} + (({{0}}-{corners[0].X})*KK1+THICK0)*(1-({{1}}-{corners[0].Y})/{l2})"; break; } generator.WithThick = true; }
/// <summary> /// Initializes a new instance of the <see cref="SqlServerConnection"/> class. /// </summary> /// <param name="ConnectionString">The connection string.</param> public MsSqlServerConnection(string ConnectionString, bool isTransactional = false, IDataConnection con = null) { _commandGenerator = new MsSqlServerCommandGenerator(); _connectionString = ConnectionString; _tConverter = new TSqlTypeConverter(); _Istransactional = isTransactional; _connection = new SqlConnection(_connectionString); if (con != null) { _Istransactional = con.IsTransactional; _connection = con.GetConnection() as SqlConnection; if (con.IsTransactional) { _transaction = con.GetTransaction; } } }