Exemplo n.º 1
0
        public static Plane ToRhino(this NXOpen.Plane value)
        {
            var rhino = RawDecoder.ToRhino(value);

            UnitConverter.Scale(ref rhino, UnitConverter.NXToRhinoUnitsRatio);
            return(rhino);
        }
Exemplo n.º 2
0
    /// <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());
    }
Exemplo n.º 3
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();
                 }
             });
         }
     }
 }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
    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);
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
0
 public static Plane ToRhino(NXOpen.Plane plane)
 {
     return(new Plane(plane.Origin.ToRhino(),
                      ToRhino(plane.Matrix.GetAxisX()),
                      ToRhino(plane.Matrix.GetAxisY())));
 }