public override void Apply() { if (string.IsNullOrEmpty(sMODELNUMBER.Value)) { ShowMessage("模具编号不能为空!"); return; } if (string.IsNullOrEmpty(sMRNUMBER.Value)) { ShowMessage("钢件编号不能为空!"); return; } if (eMATERAL.SelectedIndex < 0) { ShowMessage("钢件材质不能为空!"); return; } Snap.NX.Body steel = GetSteel(); steel.SetStringAttribute("MODEL_NUMBER", sMODELNUMBER.Value); steel.SetStringAttribute("MR_NUMBER", sMRNUMBER.Value); steel.SetStringAttribute("MR_MATERAL", _items[eMATERAL.SelectedIndex]); MouldInfo = EactBom.EactBomBusiness.Instance.GetMouldInfo(steel); if (enum0.SelectedItem == "指定") { MouldInfo.Origin = coord_system0.SpecifiedCsys.Origin; MouldInfo.Orientation = coord_system0.SpecifiedCsys.Orientation; } else if (enum0.SelectedItem == "绝对") { MouldInfo.Origin = new Snap.Position(); MouldInfo.Orientation = Snap.Orientation.Identity; } else if (enum0.SelectedItem == "工作") { MouldInfo.Origin = Snap.Globals.Wcs.Origin; MouldInfo.Orientation = Snap.Globals.Wcs.Orientation; } else //TODO 默认 { var box = steel.Box; MouldInfo.Orientation = Snap.Orientation.Identity; MouldInfo.Origin = new Snap.Position((box.MinX + box.MaxX) / 2, (box.MinY + box.MaxY) / 2, box.MaxZ); } //Snap.Globals.Wcs.Origin = MouldInfo.Origin; NXOpen.UF.UFSession.GetUFSession().Csys.SetOrigin(Snap.Globals.Wcs.NXOpenTag, MouldInfo.Origin.Array); Snap.Globals.WcsOrientation = MouldInfo.Orientation; Result = System.Windows.Forms.DialogResult.OK; }
/// <summary> /// 设置镜像属性 /// </summary> void SetGeomcopyAttr(Snap.NX.Body body, NXOpen.Plane plane, bool isJC) { if (isJC) { return; } var electrode = ElecManage.Electrode.GetElectrode(body); if (electrode == null) { return; } electrode.InitAllFace(); //var transRef = Snap.Geom.Transform.CreateReflection(new Snap.Geom.Surface.Plane(plane.Origin, plane.Normal)); Snap.NX.Face preXFace = null, preYFace = null; body.Faces.ToList().ForEach(u => { if (u.GetAttributeInfo().Where(m => m.Title == "EACT_ELECT_X_FACE").Count() > 0) { u.DeleteAttributes(Snap.NX.NXObject.AttributeType.String, "EACT_ELECT_X_FACE"); u.DeleteAttributes(Snap.NX.NXObject.AttributeType.String, "EACT_ELECT_Y_FACE"); preXFace = u; } else if (u.GetAttributeInfo().Where(m => m.Title == "EACT_ELECT_Y_FACE").Count() > 0) { u.DeleteAttributes(Snap.NX.NXObject.AttributeType.String, "EACT_ELECT_X_FACE"); u.DeleteAttributes(Snap.NX.NXObject.AttributeType.String, "EACT_ELECT_Y_FACE"); preYFace = u; } }); //if (preXFace == null || preYFace == null) return; var topDir = -electrode.BaseFace.GetFaceDirection(); var orientation = ElecManage.Electrode.GetSidelongOrientation(new Snap.Orientation(topDir)); var xFace = electrode.BaseSideFaces.FirstOrDefault(u => SnapEx.Helper.Equals(orientation.AxisX, u.GetFaceDirection())); var yFace = electrode.BaseSideFaces.FirstOrDefault(u => SnapEx.Helper.Equals(orientation.AxisY, u.GetFaceDirection())); if (xFace != null && yFace != null) { xFace.SetStringAttribute("EACT_ELECT_X_FACE", "1"); yFace.SetStringAttribute("EACT_ELECT_Y_FACE", "1"); } body.SetStringAttribute("EACT_EDM_OPERATE_DIR", ElecManage.Electrode.GetCNC_DIRECTION(topDir)); body.SetStringAttribute("EACT_ELEC_QUADRANT_OF_CHAMFER", ((int)electrode.GetQuadrantType(orientation) + 1).ToString()); }
void Apply() { Snap.NX.Body selectedObj = bodySelect0.GetSelectedObjects().FirstOrDefault() as NXOpen.Body; var workPart = Snap.Globals.WorkPart; selectedObj.SetStringAttribute("2323", "3333"); var templateName = _paramFileList.Where(u => u.Contains(selectTemplate0.ValueAsString)).FirstOrDefault(); //新建图纸页 var ds = SnapEx.Create.DrawingSheet("test_dds", templateName); //var baseView = SnapEx.Create.BaseView(Snap.Globals.WorkPart, new NXOpen.Point2d(expressionX.Value, expressionY.Value)); CreateBaseView(ds, selectedObj); //解决位置固定问题 var topView1 = CreateView(ds, Snap.Globals.WorkPart.Bodies.Where(u => u.NXOpenTag != selectedObj.NXOpenTag).FirstOrDefault(), workPart.NXOpenPart.ModelingViews.FindObject("TOP").Tag, new Snap.Position(40, 60)); var size = GetBorderSize(topView1); var theUFSession = NXOpen.UF.UFSession.GetUFSession(); theUFSession.Draw.SetViewScale(topView1, 40 / size.X); theUFSession.Draw.UpdateOneView(ds.Tag, topView1); Test(ds); }
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); }
public override void Apply() { if (string.IsNullOrEmpty(sMODELNUMBER.Value)) { ShowMessage("模具编号不能为空!"); return; } if (string.IsNullOrEmpty(sMRNUMBER.Value)) { ShowMessage("钢件编号不能为空!"); return; } if (eMATERAL.SelectedIndex < 0) { ShowMessage("钢件材质不能为空!"); return; } Snap.NX.Body steel = GetSteel(); steel.SetStringAttribute("MODEL_NUMBER", sMODELNUMBER.Value.Trim().ToUpper()); steel.SetStringAttribute("MR_NUMBER", sMRNUMBER.Value.Trim().ToUpper()); steel.SetStringAttribute("MR_MATERAL", _items[eMATERAL.SelectedIndex]); MouldInfo = EactBom.EactBomBusiness.Instance.GetMouldInfo(steel); if (enum0.SelectedItem == "指定") { MouldInfo.Origin = coord_system0.SpecifiedCsys.Origin; MouldInfo.Orientation = coord_system0.SpecifiedCsys.Orientation; } else if (enum0.SelectedItem == "绝对") { MouldInfo.Origin = new Snap.Position(); MouldInfo.Orientation = Snap.Orientation.Identity; } else if (enum0.SelectedItem == "工作") { MouldInfo.Origin = Snap.Globals.Wcs.Origin; MouldInfo.Orientation = Snap.Globals.Wcs.Orientation; } else //TODO 默认 { var box = steel.Box; MouldInfo.Orientation = Snap.Orientation.Identity; MouldInfo.Origin = new Snap.Position((box.MinX + box.MaxX) / 2, (box.MinY + box.MaxY) / 2, box.MaxZ); } if (toggleSInsert.Value) { if (integerSInsertLayer.Show) { var bodies = Snap.Globals.WorkPart.Bodies.Where(u => u.Layer == integerSInsertLayer.Value).ToList(); bodies = bodies.Where(u => u.NXOpenTag != steel.NXOpenTag).ToList(); //foreach (var item in bodies.ToList()) //{ // var distance = Snap.Compute.Distance(steel, item); // bool isContact = distance <= SnapEx.Helper.Tolerance; // if (!isContact) // { // bodies.RemoveAll(u=>u.NXOpenTag==item.NXOpenTag); // } //} MouldInfo.SInsertBodies = bodies; } else { MouldInfo.SInsertBodies = Enumerable.Select(selectionSInsert.SelectedObjects, u => Snap.NX.Body.Wrap(u.NXOpenTag)).ToList(); } } if (groupElec.Show) { MouldInfo.ElecBodies = Enumerable.Select(selectElec.SelectedObjects, u => Snap.NX.Body.Wrap(u.NXOpenTag)).ToList(); } else if (groupElecLayer.Show) { MouldInfo.ElecBodies = Snap.Globals.WorkPart.Bodies.Where(u => u.Layer >= integerElecStartLayer.Value && u.Layer <= integerElecEndLayer.Value).ToList(); } NXOpen.UF.UFSession.GetUFSession().Csys.SetOrigin(Snap.Globals.Wcs.NXOpenTag, MouldInfo.Origin.Array); Snap.Globals.WcsOrientation = MouldInfo.Orientation; ElecManage.Entry.Instance.DefaultQuadrantType = (QuadrantType)enumSelectedXX.SelectedIndex; ElecManage.Entry.Instance.IsDistinguishSideElec = EactBom.EactBomBusiness.Instance.ConfigData.IsDistinguishSideElec; ElecManage.Entry.Edition = EactBom.EactBomBusiness.Instance.ConfigData.Edition; steel.SetIntegerAttribute(EactBom.EactBomBusiness.EACT_DEFAULTQUADRANTTYPE, enumSelectedXX.SelectedIndex); Result = System.Windows.Forms.DialogResult.OK; }
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, 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); }