NXOpen.DisplayableObject GeomcopyElec(bool isPreview, NXOpen.Body body, NXOpen.Plane plane, int order) { Snap.NX.Body SnapBody = body; var oldWorkPart = theSession.Parts.Work; var objs = new List <NXOpen.NXObject> { body }; Snap.NX.Body newBody = null; if (body.OwningComponent != null && body.Prototype != null) { //析出 SnapEx.Create.ExtractObject(objs, oldWorkPart.FullPath, false, false); newBody = oldWorkPart.Bodies.ToArray().FirstOrDefault(u => u.Name == body.Name); } else { newBody = Snap.NX.Body.Wrap(oldWorkPart.Bodies.ToArray().FirstOrDefault(u => u.Name == body.Name).Tag).Copy(); } if (newBody == null) { return(newBody); } var guid = Guid.NewGuid().ToString(); //TODO 修改名称 修改属性 newBody.Name = GetElecName(order - 1); newBody.SetStringAttribute("EACT_ELEC_NAME", newBody.Name); newBody.SetStringAttribute("EACT_ELECT_GROUP", guid); newBody.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal))); newBody.Layer = order; Snap.Globals.LayerStates[order] = isPreview ? Snap.Globals.LayerState.Visible : Snap.Globals.LayerState.Selectable; if (toggle0.Value) //继承 { var markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "reflectionBody"); var topFace = SnapEx.Helper.GetTopFace(newBody); var minU = topFace.BoxUV.MinU; var minV = topFace.BoxUV.MinV; var maxU = topFace.BoxUV.MaxU; var maxV = topFace.BoxUV.MaxV; var centerPosition = topFace.Position((minU + maxU) / 2, (minV + maxV) / 2); var normal = topFace.Normal(minU, minV); var point = topFace.Position(minU, minV); var datumPlane = Snap.Create.DatumPlane(point, normal); var splitBody = Snap.Create.SplitBody(newBody, datumPlane); var topBody = splitBody.Bodies.FirstOrDefault(b => SnapEx.Helper.GetTopFace(b) == null); var reflectionBody = splitBody.Bodies.FirstOrDefault(b => SnapEx.Helper.GetTopFace(b) != null); var newDatumPlane = Snap.Create.DatumPlane(centerPosition, new Snap.Orientation(normal).AxisY); reflectionBody.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(centerPosition, newDatumPlane.Normal))); var result = Snap.Create.Unite(reflectionBody, topBody); result.Orphan(); datumPlane.Delete(); newDatumPlane.Delete(); theSession.UpdateManager.DoUpdate(markId1); theSession.DeleteUndoMark(markId1, null); newBody = reflectionBody; } var x = expressionX.Value; var y = expressionY.Value; var z = expressionZ.Value; var trans = Snap.Geom.Transform.CreateTranslation(new Snap.Vector(x, y, z)); newBody.Move(trans); if (!isPreview) { newBody.SetStringAttribute("EACT_MIRROR_ELECT", "Y"); var topFace = SnapEx.Helper.GetTopFace(newBody); if (topFace != null) { SetJZJAttr(topFace, newBody); } var newPoint = SnapEx.Helper.GetElecMidPoint(Snap.Globals.WorkPart, body); if (newPoint != null) { newPoint.SetStringAttribute(SnapEx.EactConstString.EACT_ELECT_GROUP, guid); newPoint.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal))); newPoint.Move(trans); } if (toggleJiaju.Value && selectionJiaju.Show) { Snap.NX.Body jiaju = selectionJiaju.GetSelectedObjects().FirstOrDefault() as NXOpen.Body; if (jiaju != null) { jiaju = jiaju.Copy(); jiaju.Layer = order; jiaju.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal))); jiaju.SetStringAttribute("EACT_MIRROR_ELECT", "Y"); jiaju.Move(trans); } } } return(newBody); }
NXOpen.DisplayableObject GeomcopyElec(bool isPreview, NXOpen.Body body, NXOpen.Plane plane) { Snap.NX.Body SnapBody = body; var oldWorkPart = theSession.Parts.Work; var objs = new List <NXOpen.NXObject> { body }; Snap.NX.Body newBody = null; if (body.OwningComponent != null && body.Prototype != null) { //析出 SnapEx.Create.ExtractObject(objs, oldWorkPart.FullPath, false, false); newBody = oldWorkPart.Bodies.ToArray().FirstOrDefault(u => u.Name == body.Name); } else { newBody = SnapBody.Copy(); } if (newBody == null) { return(newBody); } var guid = Guid.NewGuid().ToString(); var tempElecOrigin = SnapEx.Helper.GetElecMidPosition(oldWorkPart, body); if (tempElecOrigin == null) { theUI.NXMessageBox.Show("提示", NXOpen.NXMessageBox.DialogType.Information, "该电极未发现基准点!"); return(null); } var transRef = Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal)); var topFace = SnapEx.Helper.GetTopFace(newBody); var bottomFace = SnapEx.Helper.GetBottomFace(newBody); var minU = topFace.BoxUV.MinU; var minV = topFace.BoxUV.MinV; var maxU = topFace.BoxUV.MaxU; var maxV = topFace.BoxUV.MaxV; var centerPosition = (Snap.Position)tempElecOrigin; var movePosition = centerPosition.Copy(transRef); bool isJC = toggle0.Value && topFace.NXOpenTag != bottomFace.NXOpenTag; if (isJC) //继承 { var markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "reflectionBody"); var normal = topFace.Normal(minU, minV); var point = topFace.Position(minU, minV); var datumPlane = Snap.Create.DatumPlane(point, normal); var splitBody = Snap.Create.SplitBody(newBody, datumPlane); var topBody = splitBody.Bodies.FirstOrDefault(b => SnapEx.Helper.GetTopFace(b) == null).Copy(); var reflectionBody = splitBody.Bodies.FirstOrDefault(b => SnapEx.Helper.GetTopFace(b) != null).Copy(); splitBody.Delete(); newBody.Delete(); topBody.Move(transRef); reflectionBody.Move(Snap.Geom.Transform.CreateTranslation(movePosition - centerPosition)); var result = Snap.Create.Unite(reflectionBody, topBody); result.Orphan(); datumPlane.Delete(); theSession.UpdateManager.DoUpdate(markId1); theSession.DeleteUndoMark(markId1, null); newBody = reflectionBody; } else { newBody.Move(transRef); } var x = expressionX.Value; var y = expressionY.Value; var z = expressionZ.Value; var trans = Snap.Geom.Transform.CreateTranslation(new Snap.Vector(x, y, z)); newBody.Move(trans); if (!isPreview) { newBody.SetStringAttribute("EACT_MIRROR_ELECT", "Y"); if (topFace != null) { //SetJZJAttr(topFace, newBody); SetGeomcopyAttr(newBody, plane, isJC); } var oldPoint = SnapEx.Helper.GetElecMidPointInPart(Snap.Globals.WorkPart, body); var newPoint = SnapEx.Helper.GetElecMidPoint(Snap.Globals.WorkPart, body); if (newPoint != null) { //newPoint.SetStringAttribute(SnapEx.EactConstString.EACT_ELECT_GROUP, guid); newPoint.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal))); newPoint.Move(trans); } if (body.OwningComponent != null && body.Prototype != null) { } else { if (oldPoint != null) { oldPoint.Delete(); } SnapBody.Delete(); } } return(newBody); }
NXOpen.DisplayableObject GeomcopyElec(bool isPreview, NXOpen.Body body, NXOpen.Plane plane, int order) { Snap.NX.Body SnapBody = body; var oldWorkPart = theSession.Parts.Work; var objs = new List <NXOpen.NXObject> { body }; Snap.NX.Body newBody = null; if (body.OwningComponent != null && body.Prototype != null) { //析出 SnapEx.Create.ExtractObject(objs, oldWorkPart.FullPath, false, false); newBody = oldWorkPart.Bodies.ToArray().FirstOrDefault(u => u.Name == body.Name); } else { newBody = SnapBody.Copy(); } if (newBody == null) { return(newBody); } var tempElecOrigin = SnapEx.Helper.GetElecMidPosition(oldWorkPart, body); if (tempElecOrigin == null) { theUI.NXMessageBox.Show("提示", NXOpen.NXMessageBox.DialogType.Information, "该电极未发现基准点!"); return(null); } var guid = Guid.NewGuid().ToString(); //TODO 修改名称 修改属性 newBody.Name = GetElecName(order - 1); newBody.SetStringAttribute("EACT_ELEC_NAME", newBody.Name); newBody.SetStringAttribute("EACT_ELECT_GROUP", guid); newBody.Layer = order; Snap.Globals.LayerStates[order] = isPreview ? Snap.Globals.LayerState.Visible : Snap.Globals.LayerState.Selectable; var transRef = Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal)); var topFace = SnapEx.Helper.GetTopFace(newBody); var bottomFace = SnapEx.Helper.GetBottomFace(newBody); var minU = topFace.BoxUV.MinU; var minV = topFace.BoxUV.MinV; var maxU = topFace.BoxUV.MaxU; var maxV = topFace.BoxUV.MaxV; var centerPosition = (Snap.Position)tempElecOrigin; var movePosition = centerPosition.Copy(transRef); bool isJC = toggle0.Value && topFace.NXOpenTag != bottomFace.NXOpenTag; if (isJC) //继承 { var markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "reflectionBody"); var normal = topFace.Normal(minU, minV); var point = topFace.Position(minU, minV); var datumPlane = Snap.Create.DatumPlane(point, normal); var splitBody = Snap.Create.SplitBody(newBody, datumPlane); var topBody = splitBody.Bodies.FirstOrDefault(b => SnapEx.Helper.GetTopFace(b) == null).Copy(); var reflectionBody = splitBody.Bodies.FirstOrDefault(b => SnapEx.Helper.GetTopFace(b) != null).Copy(); splitBody.Delete(); newBody.Delete(); topBody.Move(transRef); reflectionBody.Move(Snap.Geom.Transform.CreateTranslation(movePosition - centerPosition)); var result = Snap.Create.Unite(reflectionBody, topBody); result.Orphan(); datumPlane.Delete(); theSession.UpdateManager.DoUpdate(markId1); theSession.DeleteUndoMark(markId1, null); newBody = reflectionBody; } else { newBody.Move(transRef); } var x = expressionX.Value; var y = expressionY.Value; var z = expressionZ.Value; var trans = Snap.Geom.Transform.CreateTranslation(new Snap.Vector(x, y, z)); newBody.Move(trans); if (!isPreview) { newBody.SetStringAttribute("EACT_MIRROR_ELECT", "Y"); topFace = SnapEx.Helper.GetTopFace(newBody); if (topFace != null) { SetGeomcopyAttr(newBody, plane, isJC); } var newPoint = SnapEx.Helper.GetElecMidPoint(Snap.Globals.WorkPart, body); if (newPoint != null) { newPoint.SetStringAttribute(SnapEx.EactConstString.EACT_ELECT_GROUP, guid); newPoint.Layer = order; newPoint.Move(Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal))); newPoint.Move(trans); } if (toggleJiaju.Value && selectionJiaju.Show) { var tempJiaju = selectionJiaju.SelectedObjects.FirstOrDefault(); Snap.NX.Body jiaju = tempJiaju == null ? null : Snap.NX.Body.Wrap(tempJiaju.NXOpenTag); if (jiaju != null) { jiaju = jiaju.Copy(); jiaju.Layer = order; jiaju.Move(Snap.Geom.Transform.CreateTranslation(movePosition - centerPosition)); //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); } } } return(newBody); }