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(); } }); } } }
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); }