Ejemplo n.º 1
0
        public virtual void BuildProcessing()
        {
            using (var generator = CommandGeneratorFactory.Create <T>(MachineType.Value))
            {
                generator.StartTechProcess(this);

                //if (Tool != null)
                //    generator.SetTool(
                //        MachineType.Value != CAM.MachineType.Donatoni ? Tool.Number : 1,
                //        Frequency);

                BuildProcessing(generator);

                TechOperations.FindAll(p => p.Enabled && p.CanProcess).ForEach(p =>
                {
                    generator.SetTechOperation(p);

                    //    p.PrepareBuild(generator);
                    p.BuildProcessing(generator);

                    //    if (!generator.IsUpperTool)
                    //        generator.Uplifting();
                });
                generator.FinishTechProcess();
                ProcessCommands = generator.ProcessCommands;
            }
            UpdateFromCommands();
        }
Ejemplo n.º 2
0
        private void CreateFilePassword()
        {
            TechOperations.CheckIfSettingsExists();

            string readJson  = File.ReadAllText(TechOperations.CurrentWorkingFile);
            var    decrypted = SecureHelper.DecryptString(readJson);

            var desJson = JsonConvert.DeserializeObject <List <PasswordModel> >(decrypted);

            if (desJson == null)
            {
                desJson = new List <PasswordModel>();
            }

            var pass = new PasswordModel {
                Username = this.FileName, Password = this.FilePassword
            };

            desJson.Add(pass);

            var json = JsonConvert.SerializeObject(desJson);

            using (var writer = new StreamWriter(TechOperations.SettingsFileLocation, true))
            {
                var text = SecureHelper.EncryptString(json);
                writer.Write(text);
            }
        }
Ejemplo n.º 3
0
        public virtual void SerializeInit()
        {
            if (OriginX != 0 || OriginY != 0)
            {
                OriginObject = Acad.CreateOriginObject(new Point3d(OriginX, OriginY, 0));
            }

            AcadObject.LoadAcadProps(this);

            TechOperations.ForEach(p =>
            {
                AcadObject.LoadAcadProps(p);
                p.TechProcessBase = this;
                p.SerializeInit();
            });
        }
Ejemplo n.º 4
0
        public void DeleteProcessing()
        {
            ToolpathObjectsGroup?.DeleteGroup();
            ToolpathObjectsGroup = null;

            TechOperations.Select(p => p.ToolpathObjectsGroup).Delete();
            TechOperations.ForEach(p =>
            {
                p.ToolpathObjectsGroup = null;
                p.ProcessCommandIndex  = null;
            });
            ExtraObjectsGroup?.DeleteGroup();
            ExtraObjectsGroup = null;

            ToolpathObjectIds = null;
            ProcessCommands   = null;
        }
Ejemplo n.º 5
0
 private void Delete()
 {
     TechOperations.DeleteEntry(SelectedGrid.Name);
     MessageBox.Show("Your entry has been deleted!", "Info", MessageBoxButton.OK, MessageBoxImage.Information);
 }
Ejemplo n.º 6
0
        private void CopyPassword()
        {
            var pass = TechOperations.GetPassword(SelectedGrid.Name);

            Clipboard.SetText(pass);
        }
Ejemplo n.º 7
0
        public List <Border> CreateExtraObjects(params ObjectId[] ids)
        {
            ExtraObjectsGroup?.DeleteGroup();
            ExtraObjectsGroup = null;

            var techOperations = TechOperations.FindAll(p => p.ProcessingArea != null);

            techOperations.FindAll(p => ids.Contains(p.ProcessingArea.ObjectId)).ForEach(p => ((SawingTechOperation)p).OuterSide = Side.None);
            _borders = ids.Except(techOperations.Select(p => p.ProcessingArea.ObjectId)).Select(p => new Border(p)).ToList();
            var borders = _borders.Concat(techOperations.Select(p => new Border((SawingTechOperation)p))).ToList();

            borders.ForEach(p => p.Curve = Acad.OpenForRead(p.ObjectId));
            ProcessingArea = AcadObject.CreateList(borders.Select(p => p.ObjectId));

            while ((borders.Find(p => p.OuterSide != Side.None) ?? borders.FirstOrDefault()) is Border startBorder)
            {
                if (startBorder.OuterSide == Side.None)
                {
                    startBorder.OuterSide = GetOuterSide(startBorder.Curve);
                }
                var contour = CalcBordersChain(startBorder, Corner.End);
                if (borders.Contains(startBorder))
                {
                    var contourBack = CalcBordersChain(startBorder, Corner.Start);
                    contourBack.Reverse();
                    contourBack.Add(startBorder.Curve);
                    contourBack.AddRange(contour);
                    contour = contourBack;
                    borders.Remove(startBorder);
                }
                var sign = startBorder.OuterSide == Side.Left ? 1 : -1;

                var hatchId = Graph.CreateHatch(contour, sign);
                if (hatchId.HasValue)
                {
                    ExtraObjectsGroup = ExtraObjectsGroup.AppendToGroup(hatchId.Value);
                }
            }
            return(_borders);

            List <Curve> CalcBordersChain(Border border, Corner corner)
            {
                var point   = border.Curve.GetPoint(corner);
                var contour = new List <Curve>();

                while (borders.SingleOrDefault(p => p != border && p.Curve.HasPoint(point)) is Border nextBorder)
                {
                    contour.Add(nextBorder.Curve);
                    borders.Remove(nextBorder);
                    var nextCorner = nextBorder.Curve.GetCorner(point);
                    nextBorder.OuterSide = nextCorner != corner ? border.OuterSide : border.OuterSide.Opposite();

                    if (border.MustCalc || nextBorder.MustCalc)
                    {
                        var isExactly = CalcIsExactly(border, corner, nextBorder, nextCorner, point);
                        border.SetIsExactly(corner, isExactly);
                        nextBorder.SetIsExactly(nextCorner, isExactly);
                    }
                    border = nextBorder;
                    corner = nextCorner.Swap();
                    point  = border.Curve.GetPoint(corner);
                }
                return(contour);
            }

            bool CalcIsExactly(Border border, Corner corner, Border nextBorder, Corner nextCorner, Point3d point)
            {
                var v1               = border.Curve.GetTangent(corner);
                var v2               = nextBorder.Curve.GetTangent(nextCorner);
                var isLeftTurn       = v1.MinusPiToPiAngleTo(v2) > Consts.Epsilon;
                var isLeftOuterSide  = border.OuterSide == Side.Left;
                var isNextStartPoint = nextCorner == Corner.Start;

                return(isLeftTurn ^ isLeftOuterSide ^ isNextStartPoint);
            }

            Side GetOuterSide(Curve curve)
            {
                var startPoint = curve.GetPointAtParameter((curve.EndParam + curve.StartParam) / 2);
                var point      = Interaction.GetLineEndPoint("Выберите направление внешней нормали к объекту", startPoint);
                var vector     = curve.GetTangent(startPoint);

                return(vector.IsTurnRight((point - startPoint).ToVector2d()) ? Side.Right : Side.Left);
            }
        }
Ejemplo n.º 8
0
        protected override void BuildProcessing(CableCommandGenerator generator)
        {
            Tool = new Tool {
                Type = ToolType.Cable, Diameter = ToolThickness, Thickness = ToolThickness
            };
            var z0 = ProcessingArea.Select(p => p.ObjectId).GetExtents().MaxPoint.Z + ZSafety;

            generator.IsExtraRotate = IsExtraRotate;

            //if (OriginObject == null)
            //{
            //    var center = ProcessingArea.Select(p => p.ObjectId).GetCenter();
            //    OriginX = center.X.Round(2);
            //    OriginY = center.Y.Round(2);
            //    OriginObject = Acad.CreateOriginObject(new Point3d(OriginX, OriginY, 0));
            //}


            //var surface1 = ProcessingArea.First().ObjectId.QOpenForRead<Autodesk.AutoCAD.DatabaseServices.Surface>();
            //var bounds = surface1.Bounds;
            //var min = bounds.Value.MinPoint;
            //var max = bounds.Value.MaxPoint;
            //var cnt = 500;
            //var cntz = 20;
            //for (int i = 0; i < cntz; i++)
            //{
            //    for (int j = 0; j < cnt; j++)
            //    {
            //        var pt = new Point3d(min.X, min.Y + (max.Y - min.Y) / cnt * j, min.Z + (max.Z - min.Z) / cntz * i);
            //        surface1.RayTest(pt, Vector3d.XAxis, 0.0001, out SubentityId[] col, out DoubleCollection par);
            //        if (par.Count == 1)
            //        {
            //            App.LockAndExecute(() => Draw.Circle(pt + Vector3d.XAxis * par[0], 1));
            //        }
            //    }
            //}
            //return;
            //surface1.Intersect(new)



            generator.S    = S;
            generator.Feed = CuttingFeed;
            var z00 = ProcessingArea.Select(p => p.ObjectId).GetExtents().MaxPoint.Z + ZSafety;

            generator.SetToolPosition(new Point3d(OriginX, OriginY, 0), 0, 0, z00);
            generator.Command($"G92");
            CableSawingTechOperation last = null;

            foreach (var operation in TechOperations.FindAll(p => p.Enabled && p.CanProcess).Cast <CableSawingTechOperation>())
            {
                SetOperationParams(operation);
                generator.Feed = operation.CuttingFeed;

                if (operation is LineSawingTechOperation lineSawingTechOperation)
                {
                    lineSawingTechOperation.BuildProcessing(generator);
                    continue;
                }

                if (operation is ArcSawingTechOperation arcSawingTechOperation)
                {
                    arcSawingTechOperation.BuildProcessing(generator);
                    continue;
                }

                //Curve[] railCurves = new Curve[2];
                //var entityes = operation.AcadObjects.ConvertAll(p => p.ObjectId.QOpenForRead<Entity>());
                //var offsetDistance = ToolThickness / 2 + operation.Delta;

                //if (entityes.Count == 2)
                //{
                //    //railCurves = entityes.Cast<Curve>().ToArray();
                //    //var offsetCurve0 = railCurves[0].GetOffsetCurves(offsetDistance)[0] as Curve;
                //    //if (offsetCurve0.StartPoint.DistanceTo(Center.ToPoint3d()) < railCurves[0].StartPoint.DistanceTo(Center.ToPoint3d()))
                //    //    offsetCurve0 = railCurves[0].GetOffsetCurves(-offsetDistance)[0] as Curve;
                //    //var offsetCurve1 = railCurves[1].GetOffsetCurves(offsetDistance)[0] as Curve;
                //    //if (offsetCurve1.StartPoint.DistanceTo(Center.ToPoint3d()) < railCurves[1].StartPoint.DistanceTo(Center.ToPoint3d()))
                //    //    offsetCurve1 = railCurves[1].GetOffsetCurves(-offsetDistance)[0] as Curve;
                //    var matrix = Matrix3d.Displacement(Vector3d.ZAxis * offsetDistance);
                //    railCurves = entityes.Select(p => (Curve)p.GetTransformedCopy(matrix)).ToArray();
                //}
                //else
                //{
                //    var entity = entityes.First();
                //    if (entity is Region region)
                //    {
                //        entity = new PlaneSurface();
                //        ((PlaneSurface)entity).CreateFromRegion(region);
                //    }
                //    if (operation.IsRevereseOffset)
                //        offsetDistance *= -1;
                //    var surface = DbSurface.CreateOffsetSurface(entity, offsetDistance) as DbSurface;

                //    var collection = new DBObjectCollection();
                //    surface.Explode(collection);
                //    var curves = collection.Cast<Curve>().ToList();
                //    railCurves = operation.GetRailCurves(curves);
                //}
                ////if (railCurves[1].StartPoint.DistanceTo(railCurves[0].StartPoint) > railCurves[1].StartPoint.DistanceTo(railCurves[0].EndPoint))
                //if (railCurves[0].StartPoint.GetVectorTo(railCurves[0].EndPoint).GetAngleTo(railCurves[1].StartPoint.GetVectorTo(railCurves[1].EndPoint)) > Math.PI / 2)
                //    railCurves[1].ReverseCurve();

                //if (railCurves[0] is Line)
                //{
                //    var dz = Math.Abs(railCurves[0].StartPoint.Z - railCurves[1].StartPoint.Z); // TODO dz
                //    if (dz > 1)
                //    {
                //        if (railCurves[0].StartPoint.Z > railCurves[1].StartPoint.Z)
                //            railCurves[1].StartPoint = railCurves[1].StartPoint.GetExtendedPoint(railCurves[1].EndPoint, dz);
                //        else
                //            railCurves[0].StartPoint = railCurves[0].StartPoint.GetExtendedPoint(railCurves[0].EndPoint, dz);
                //    }
                //}

                //var points0 = GetRailPoints(railCurves[0], operation);
                //var points1 = GetRailPoints(railCurves[1], operation);

                //var direction = new Line2d(points0[1].ToPoint2d(), points1[1].ToPoint2d()).Direction;

                //if (!isStarted)
                //{
                //    generator.SetToolPosition(new Point3d(OriginX, OriginY, 0), 0, 0, z0);
                //    generator.Command($"G92");
                //}
                //int? xSign = null;
                //for (int i = 0; i < points0.Count; i++)
                //{
                //    var line = new Line2d(points0[i].ToPoint2d(), points1[i].ToPoint2d());
                //    var pNearest = line.GetClosestPointTo(Center).Point;
                //    var vector = pNearest - Center;
                //    if (xSign == null)
                //        xSign = vector.X.Round(6) > 0 ? -1 : 1;
                //    var xSignNew = vector.X.Round(6) > 0 ? -1 : 1;
                //    if (xSignNew != xSign)
                //        xSign *= -1;
                //    var u = vector.Length * xSign.Value;
                //    var z = (points0[i] + (points1[i] - points0[i]) / 2).Z;
                //    //var angle = Vector2d.XAxis.Negate().ZeroTo2PiAngleTo(vector).ToDeg();

                //    //if (operation is ArcSawingTechOperation)
                //    //{
                //    //    if (angle - generator.Angle > 150)
                //    //    {
                //    //        angle -= 180;
                //    //        u *= -1;
                //    //    }
                //    //    if (generator.Angle - angle > 150)
                //    //    {
                //    //        angle += 180;
                //    //        u *= -1;
                //    //    }
                //    //}

                //    //if (angle > 180)
                //    //{
                //    //    angle -= 180;
                //    //    u *= -1;
                //    //}
                //    //if (i != 0 && generator.Angle - angle > 150)
                //    //{
                //    //    //angle += 360;
                //    //    u *= -1;
                //    //}
                //    //if (operation == TechOperations.Last())
                //    //{
                //    //    angle += 180;
                //    //    //u *= -1;
                //    //}

                //    if (!(railCurves[0] is Line))
                //        direction = line.Direction;

                //    if (!isStarted)
                //    {
                //        generator.GCommandAngle(direction, operation.S);
                //        //generator.GCommand(0, u);
                //        //generator.GCommand(0, u, z);
                //        generator.Command($"M03", "Включение");
                //        isStarted = true;
                //    }
                //    else
                //    {
                //        //generator.GCommand(1, u, z, operation.CuttingFeed);
                //        generator.GCommandAngle(direction, operation.S);
                //    }
                //}
            }
            generator.Command($"G04 P{last?.Delay ?? Delay}", "Задержка");
            generator.Command($"M05", "Выключение");
            generator.Command($"M00", "Пауза");

            //foreach (Region region in regions)
            //{
            //    var z1 = region.Bounds.Value.MinPoint.Z;
            //    var z2 = region.Bounds.Value.MaxPoint.Z;

            //    var collection = new DBObjectCollection();
            //    region.Explode(collection);
            //    var ofsset = region.Normal * (ToolThickness / 2 + Delta);
            //    var lines = collection.Cast<Line>()
            //        .Where(p => Math.Abs(p.StartPoint.Z - p.EndPoint.Z) < 1)
            //        .Where(p => Math.Abs(z1 - p.StartPoint.Z) < 1 || Math.Abs(z2 - p.StartPoint.Z) < 1)
            //        .OrderByDescending(p => p.Length)
            //        .Take(2)
            //        .Select(p => p.GetStartEndPoints().Select(pt => pt + ofsset).ToArray())
            //        .OrderBy(p => p[0].Z)
            //        .ToList();
            //    //if (lines.Count != 2)
            //    //    throw new Exception("Задана некорректная область");

            //    var line1 = new Line(lines[0][0].ToPoint2d().ToPoint3d(), lines[0][1].ToPoint2d().ToPoint3d());
            //    var pNearest = line1.GetClosestPointTo(origin, true);
            //    var vector = (pNearest - origin).ToVector2d();
            //    var u1 = vector.Length;
            //    var angle = Vector2d.XAxis.Negate().ZeroTo2PiAngleTo(vector).ToDeg(2);
            //    generator.GCommandAngle(angle, S);

            //    var line2 = new Line2d(lines[1][0].ToPoint2d(), lines[1][1].ToPoint2d());
            //    var u2 = line2.GetDistanceTo(origin.ToPoint2d());

            //    var coeff = (u2 - u1) / (z2 - z1);
            //    var u3 = u2 + ZSafety * coeff;
            //    var z3 = z2 + ZSafety;
            //    generator.GCommand(0, u3, z3);

            //    generator.Command($"M03", "Включение");

            //    var u0 = u1 - Departure * coeff;
            //    var z0 = z1 - Departure;
            //    generator.GCommand(1, u0, z0, PenetrationFeed);

            //    generator.Command($"G04 P60", "Задержка");
            //    generator.Command($"M05", "Выключение");
            //    generator.Command($"M00", "Пауза");

            //    generator.GCommand(1, u3, z3, CuttingFeed);
            //}
        }
Ejemplo n.º 9
0
 public bool MoveBackwardTechOperation(int index) => TechOperations.SwapPrev(index);
Ejemplo n.º 10
0
 public bool MoveForwardTechOperation(int index) => TechOperations.SwapNext(index);
Ejemplo n.º 11
0
 public void RemoveTechOperation(int index)
 {
     DeleteProcessing();
     TechOperations[index].Teardown();
     TechOperations.RemoveAt(index);
 }
Ejemplo n.º 12
0
 public void AddTechOperation(TechOperation techOperation)
 {
     TechOperations.Add((TechOperation <T>)techOperation);
 }
Ejemplo n.º 13
0
 public virtual void Teardown()
 {
     Acad.DeleteObjects(OriginObject);
     TechOperations.ForEach(to => to.Teardown());
 }