Esempio n. 1
0
 void GeomcopyJiaju(bool isPreview, NXOpen.Plane plane)
 {
     if (!isPreview)
     {
         if (toggleJiaju.Value)
         {
             var x     = expressionX.Value;
             var y     = expressionY.Value;
             var z     = expressionZ.Value;
             var trans = Snap.Geom.Transform.CreateTranslation(new Snap.Vector(x, y, z));
             selectionJiaju.SelectedObjects.ToList().ForEach(u => {
                 Snap.NX.Body snapU = Snap.NX.Body.Wrap(u.NXOpenTag);
                 if (snapU != null)
                 {
                     var jiaju    = snapU.Copy();
                     var firstPos = new Snap.Position((jiaju.Box.MinX + jiaju.Box.MaxX) / 2, (jiaju.Box.MinY + jiaju.Box.MaxY) / 2, (jiaju.Box.MinZ + jiaju.Box.MaxZ) / 2);
                     var twoPos   = firstPos.Copy(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal)));
                     jiaju.Move(Snap.Geom.Transform.CreateTranslation(twoPos - firstPos));
                     //if (toggle0.Value) //继承
                     //{
                     //    var firstPos = new Snap.Position((jiaju.Box.MinX + jiaju.Box.MaxX) / 2, (jiaju.Box.MinY + jiaju.Box.MaxY) / 2, (jiaju.Box.MinZ + jiaju.Box.MaxZ) / 2);
                     //    var twoPos = firstPos.Copy(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal)));
                     //    jiaju.Move(Snap.Geom.Transform.CreateTranslation(twoPos - firstPos));
                     //}
                     //else
                     //{
                     //    jiaju.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal)));
                     //}
                     jiaju.SetStringAttribute("EACT_MIRROR_ELECT", "Y");
                     jiaju.Move(trans);
                     snapU.Delete();
                 }
             });
         }
     }
 }
Esempio n. 2
0
        static PointData IsIntervene(ElecManage.Electrode elec, Snap.Position p, Snap.Vector pV, List <Snap.NX.Curve> curves, CMMConfig config, PointType pointType = PointType.UNKOWN, bool isBaseFace = false)
        {
            PointData result      = null;
            var       targetBody  = elec.ElecBody;
            var       maxZ        = config.ElecMaxZ + config.SafeDistance;
            var       minDistance = Helper.GetPointToEdgeMinDistance(p, curves);
            var       ProbeDatas  = config.ProbeDatas ?? new List <ProbeData>();

            if (isBaseFace)
            {
                var probeData = ProbeDatas.FirstOrDefault(u => u.IsBaseFaceProbe);
                if (probeData != null)
                {
                    ProbeDatas = new List <ProbeData> {
                        probeData
                    };
                }
            }

            foreach (var data in ProbeDatas)
            {
                if (result != null)
                {
                    break;
                }
                //过滤探球半径的点
                if (minDistance < config.MinEdgeDistance)
                {
                    continue;
                }
                var abs = data.GetABList(p, pV);
                foreach (var ab in abs)
                {
                    var toolBody         = data.GetBody(ab);
                    var lstTrans         = new List <Snap.Geom.Transform>();
                    var centreOfSphere   = data.GetCentreOfSphere(ab);
                    var inspectionPoints = new List <Position>();

                    //退点
                    var sRetreatPosition = p.Copy(Snap.Geom.Transform.CreateTranslation((data.D / 2) * pV));
                    lstTrans.Add(Snap.Geom.Transform.CreateTranslation(sRetreatPosition - centreOfSphere));
                    var mRetreatPosition = sRetreatPosition.Copy(Snap.Geom.Transform.CreateTranslation(config.RetreatPoint * pV));
                    lstTrans.Add(Snap.Geom.Transform.CreateTranslation(mRetreatPosition - sRetreatPosition));
                    var fRetreatPosition = new Snap.Position(mRetreatPosition.X, mRetreatPosition.Y, maxZ);
                    //lstTrans.Add(Snap.Geom.Transform.CreateTranslation(fRetreatPosition - mRetreatPosition));
                    if (config.RetreatPoint != config.EntryPoint)
                    {
                        //逼进拐点
                        var sEntryPosition = sRetreatPosition.Copy(Snap.Geom.Transform.CreateTranslation(config.EntryPoint * pV));
                        if (config.EntryPoint > 0)
                        {
                            lstTrans.Add(Snap.Geom.Transform.CreateTranslation(sEntryPosition - mRetreatPosition));
                        }
                        var fEntryPosition = new Snap.Position(sEntryPosition.X, sEntryPosition.Y, maxZ);
                        inspectionPoints.Add(fEntryPosition);
                        inspectionPoints.Add(sEntryPosition);
                    }
                    inspectionPoints.Add(sRetreatPosition);
                    inspectionPoints.Add(mRetreatPosition);
                    inspectionPoints.Add(fRetreatPosition);
                    if (config.IsInspectionPath)
                    {
                        if (data.CheckInspectionPath(ab, inspectionPoints, targetBody))
                        {
                            continue;
                        }
                    }
                    bool isHasInterference = false;
                    foreach (var trans in lstTrans)
                    {
                        toolBody.Move(trans);
                        if (Helper.CheckInterference(targetBody.NXOpenTag, toolBody.NXOpenTag))
                        {
                            isHasInterference = true;
                            break;
                        }
                    }

                    if (!isHasInterference)
                    {
                        result = new PointData()
                        {
                            Vector = pV, Position = p, A = ab.A, B = ab.B, Arrow = data.ProbeName
                        };
                        result.PointType = pointType;
                        break;
                    }
                }
            }

            return(result);
        }