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
    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);
    }
Esempio n. 3
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);
    }
    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);
    }
Esempio n. 5
0
    void Perform(bool isHighlighted = false)
    {
        var workPart  = theSession.Parts.Work;
        var body      = selection0.SelectedObjects.FirstOrDefault() as Snap.NX.Body;
        var jiajuBody = selectionJiaju.SelectedObjects.FirstOrDefault() as Snap.NX.Body;

        tempObjs.ForEach(u => {
            Snap.NX.NXObject snapU = u;
            snapU.Delete();
        });
        tempObjs.Clear();

        if (body != null)
        {
            Snap.NX.Body snapBody = body;
            //电极原点
            var tempElecOrigin = SnapEx.Helper.GetElecMidPosition(workPart, body);
            if (tempElecOrigin == null)
            {
                theUI.NXMessageBox.Show("提示", NXOpen.NXMessageBox.DialogType.Information, "该电极未发现基准点!");
                return;
            }
            var elecOrgin = (Snap.Position)tempElecOrigin;


            if (isHighlighted)
            {
                SnapEx.Create.DisplayModification(tempObjs);
            }

            bool isPatter = false;
            if (enum01.SelectedItem == "平移")
            {
                isPatter = toggleMovePatter.Value;
            }
            else
            {
                isPatter = toggleRotationPatter.Value;
            }
            int sum = 0;

            if (isPatter)
            {
                sum = (int)(expressionPatterSum.Value < 0?0:expressionPatterSum.Value);
            }

            double distance = expressionPatterDistance.Value;
            var    vector   = Snap.Vector.Unit(vectorPatter.Direction);

            if (body.NXOpenBody.OwningComponent != null && snapBody.Prototype != null)
            {
                var snapComponent = snapBody.OwningComponent;;
                NXOpen.Assemblies.Component component = snapComponent;


                var transForm = GetTransform(elecOrgin);

                for (int i = 0; i < sum + 1; i++)
                {
                    Snap.NX.Component newComponent = workPart.ComponentAssembly.CopyComponents(new List <NXOpen.Assemblies.Component> {
                        component
                    }.ToArray()).First();
                    newComponent.Prototype.Bodies.First().SetDateTimeAttribute(EACT_POSITIONING_DATE, DateTime.Now);
                    tempObjs.Add(newComponent);

                    //平移旋转
                    var       trans  = transForm.Matrix;
                    Matrix3x3 matrix = new Matrix3x3();
                    matrix.Xx = trans[0]; matrix.Xy = trans[4]; matrix.Xz = trans[8];
                    matrix.Yx = trans[1]; matrix.Yy = trans[5]; matrix.Yz = trans[9];
                    matrix.Zx = trans[2]; matrix.Zy = trans[6]; matrix.Zz = trans[10];
                    workPart.ComponentAssembly.MoveComponent(newComponent, new Vector3d(trans[3], trans[7], trans[11]), matrix);

                    if (i != 0)
                    {
                        workPart.ComponentAssembly.MoveComponent(newComponent, (distance * i) * vector, new Snap.Orientation());
                    }
                }
            }
            else
            {
                NXOpen.Point point = null;
                if (!isHighlighted)
                {
                    var tempPoint = SnapEx.Helper.GetElecMidPointInPart(Snap.Globals.WorkPart, snapBody);
                    if (tempPoint != null)
                    {
                        point = tempPoint;
                    }
                }
                for (int i = 0; i < sum + 1; i++)
                {
                    var newBody = snapBody.Copy();
                    var guid    = Guid.NewGuid().ToString();
                    newBody.SetStringAttribute(SnapEx.EactConstString.EACT_ELECT_GROUP, guid);
                    newBody.SetDateTimeAttribute(EACT_POSITIONING_DATE, DateTime.Now);
                    tempObjs.Add(newBody);
                    var transForm = GetTransform(elecOrgin);
                    if (i != 0)
                    {
                        transForm = Snap.Geom.Transform.Composition(transForm, Snap.Geom.Transform.CreateTranslation((distance * i) * vector));
                    }

                    newBody.Move(transForm);
                    if (point != null)
                    {
                        Snap.NX.Point newPoint = Snap.NX.Point.Wrap(point.Tag).Copy();
                        newPoint.SetStringAttribute(SnapEx.EactConstString.EACT_ELECT_GROUP, guid);
                        newPoint.Move(transForm);
                    }
                }
            }

            if (toggleJiaju.Value && jiajuBody != null)
            {
                for (int i = 0; i < sum + 1; i++)
                {
                    Snap.NX.Body snapJiajuBody = jiajuBody;
                    var          newJiajuBody  = snapJiajuBody.Copy();
                    var          guid          = Guid.NewGuid().ToString();
                    newJiajuBody.Layer = body.Layer;
                    newJiajuBody.SetDateTimeAttribute(EACT_POSITIONING_DATE, DateTime.Now);
                    tempObjs.Add(newJiajuBody);
                    elecOrgin = new Snap.Position((snapBody.Box.MaxX + snapBody.Box.MinX) / 2, (snapBody.Box.MaxY + snapBody.Box.MinY) / 2, snapBody.Box.MinZ);
                    var transForm = GetTransform(elecOrgin);
                    if (i != 0)
                    {
                        transForm = Snap.Geom.Transform.Composition(transForm, Snap.Geom.Transform.CreateTranslation((distance * i) * vector));
                    }

                    newJiajuBody.Move(transForm);
                }
            }


            if (isHighlighted)
            {
                SnapEx.Create.DisplayModification(tempObjs);
            }
        }
    }