Beispiel #1
0
        public override void ToMachining(double associateDist, Entities.ToolFile toolFile)
        {
            FindAssociatedFaces(associateDist);

            PartFace pf = this.Part.GetPartFaceByNumber(FaceNumber);

            if (pf.AssociatedPartFaces.Count != 0)//数量不为0,说明有关联的板件
            {
                List <HDrilling> TempHDrills = new List <HDrilling>();

                foreach (double d in this.PointsPosition)
                {
                    HDrilling hdrill = new HDrilling(this.FaceNumber, this.EdgeBoreDiameter, this.EdgeBoreDepth, d, this.ZValue, Part);
                    TempHDrills.Add(hdrill);
                }

                foreach (StructXY xy in this.ListCamVBoreXY)
                {
                    VDrilling vdrill = new VDrilling(this.CamFaceNumber, xy.X, xy.Y, this.CamFaceBoreDiameter, this.CamFaceBoreDepth, Part);
                    Part.VDrillings.Add(vdrill);
                }

                foreach (PartFace f in pf.AssociatedPartFaces)
                {
                    if (!f.IsHorizontalFace)//如果关联的面是面5或面6
                    {
                        foreach (HDrilling hdrill in TempHDrills)
                        {
                            Point3d holeposition = hdrill.GetBorePosition();
                            holeposition = holeposition.TransformBy(Matrix3d.AlignCoordinateSystem(new Point3d(), Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis, hdrill.Part.MPPoint, hdrill.Part.MPXAxis, hdrill.Part.MPYAxis, hdrill.Part.MPZAxis));
                            holeposition = Math.MathHelper.GetRotatedAndMovedPoint(holeposition, Part.TXRotation, Part.TYRotation, Part.TZRotation, Part.CenterVector);
                            holeposition = holeposition.TransformBy(Matrix3d.AlignCoordinateSystem(f.Part.MovedMPPoint, f.Part.MovedMPXAxis, f.Part.MovedMPYAxis, f.Part.MovedMPZAxis, new Point3d(), Vector3d.XAxis, Vector3d.YAxis, Vector3d.ZAxis));
                            double dimx = holeposition.X;
                            double dimy = holeposition.Y;

                            VDrilling vdrill = new VDrilling(f.FaceNumber, dimx, dimy, this.FaceBoreDiameter, this.FaceBoreDepth, f.Part);
                            f.Part.VDrillings.Add(vdrill);
                        }
                    }
                    else//TODO:如果关联的面是水平面
                    {
                    }
                }

                if (this.EdgeBoreDiameter > 0 && this.EdgeBoreDepth > 0)
                {
                    Part.HDrillings.AddRange(TempHDrills);
                }
            }
        }
Beispiel #2
0
        //重写ToMachining方法,将Token转换为Machining
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //step1 查找关联的板件
            //step2 建立一个临时的水平孔列表,把孔位坐标转换为水平机加工
            //setp3 把关联的垂直钻添加到关联的板件
            FindAssociatedFaces(AssociatedDist);

            PartFace pf = this.Part.GetPartFaceByNumber(FaceNumber);

            if (pf.AssociatedPartFaces.Count != 0)//数量不为0,说明有关联的板件
            {
                List <HDrilling> TempHDrills = new List <HDrilling>();

                if (this.EdgeBoreDepth > 0 && this.EdgeBoreDiameter > 0)
                {
                    foreach (double d in this.PointsPosition)//遍历所欲的孔位坐标
                    {
                        HDrilling hdrill = new HDrilling(this.FaceNumber, this.EdgeBoreDiameter, this.EdgeBoreDepth, d, this.ZValue, Part);
                        TempHDrills.Add(hdrill);
                    }
                }

                if (this.FaceBoreDepth > 0 && this.FaceBoreDiameter > 0)
                {
                    foreach (PartFace f in pf.AssociatedPartFaces)
                    {
                        if (!f.IsHorizontalFace)//如果关联的面是面5或面6
                        {
                            foreach (var hdrill in TempHDrills)
                            {
                                Point3d holeposition = hdrill.GetBorePosition();
                                holeposition = holeposition.TransformBy(Matrix3d.AlignCoordinateSystem(new Point3d(),
                                                                                                       Vector3d.XAxis,
                                                                                                       Vector3d.YAxis,
                                                                                                       Vector3d.ZAxis,
                                                                                                       hdrill.Part.MPPoint,
                                                                                                       hdrill.Part.MPXAxis,
                                                                                                       hdrill.Part.MPYAxis,
                                                                                                       hdrill.Part.MPZAxis));
                                holeposition = Math.MathHelper.GetRotatedAndMovedPoint(holeposition, Part.TXRotation, Part.YRotation, Part.ZRotation, Part.CenterVector);
                                holeposition = holeposition.TransformBy(Matrix3d.AlignCoordinateSystem(f.Part.MovedMPPoint,
                                                                                                       f.Part.MovedMPXAxis,
                                                                                                       f.Part.MovedMPYAxis,
                                                                                                       f.Part.MovedMPZAxis,
                                                                                                       new Point3d(),
                                                                                                       Vector3d.XAxis,
                                                                                                       Vector3d.YAxis,
                                                                                                       Vector3d.ZAxis));
                                double dimx = holeposition.X;
                                double dimy = holeposition.Y;

                                VDrilling vdrill = new VDrilling(f.FaceNumber, dimx, dimy, this.FaceBoreDiameter, this.FaceBoreDepth, f.Part);
                                f.Part.VDrillings.Add(vdrill);
                            }
                        }
                        else//TODO:如果关联的面是水平面
                        {
                        }
                    }
                }

                this.Part.HDrillings.AddRange(TempHDrills);
            }
        }