Пример #1
0
        private static void ShowTarget(Vector3 position, Vector3 orientation)
        {
            try
            {
                //get the active station
                Station station = Project.ActiveProject as Station;

                //create robtarget
                RsRobTarget robTarget = new RsRobTarget();
                robTarget.Name = station.ActiveTask.GetValidRapidName("Target", "_", 10);

                //translation
                robTarget.Frame.Translation = position;

                // Otrienting the targets and converts the orientation to radians
                robTarget.Frame.RX = (orientation.x * (Math.PI / 180));
                robTarget.Frame.RY = (orientation.y * (Math.PI / 180));
                robTarget.Frame.RZ = (orientation.z * (Math.PI / 180));

                //add robtargets to datadeclaration
                station.ActiveTask.DataDeclarations.Add(robTarget);

                //create target
                RsTarget target = new RsTarget(station.ActiveTask.ActiveWorkObject, robTarget);
                target.Name = robTarget.Name;
                target.Attributes.Add(target.Name, true);

                //add targets to active task
                station.ActiveTask.Targets.Add(target);
            }
            catch (Exception exception)
            {
                Logger.AddMessage(new LogMessage(exception.Message.ToString()));
            }
        }
Пример #2
0
        public RsTarget CreateTarget(DGeom.Plane targetPlane)
        {
            try
            {
                //create robtarget
                RsRobTarget robTarget = new RsRobTarget();
                robTarget.Name = rsTask.GetValidRapidName("Target", "_", 1);

                //translation
                double[] trans = PlaneToTransform(targetPlane);
                robTarget.Frame.Translation = new Vector3(trans[0], trans[1], trans[2]);
                robTarget.Frame.RX          = trans[3];
                robTarget.Frame.RY          = trans[4];
                robTarget.Frame.RZ          = trans[5];

                //add robtargets to datadeclaration
                // rsTask.DataDeclarations.Add(robTarget);

                //create target
                RsTarget target = new RsTarget(rsWobj, robTarget);
                target.Name = robTarget.Name;
                target.Attributes.Add(target.Name, true);

                //add targets to active task
                //rsTask.Targets.Add(target);

                return(target);
            }
            catch (Exception exception)
            {
            }
            return(null);
        }
Пример #3
0
        static RsRobTarget CreateRobTargetAndTarget(Matrix4 frame, RsTask task, RsWorkObject wobj)
        {
            if (!_targetNumberInitialized)
            {
                InitializeTargetNumber(task);
            }
            var robTarget = new RsRobTarget();

            robTarget.Frame.GlobalMatrix = frame;
            robTarget.Name = TargetNamePrefix + _targetNumber++;
            // HACK: Ensure that eax values are set for conveyor. *Will* lead to issues with other
            // external axes.
            robTarget.SetExternalAxes(new ExternalAxisValues
            {
                Eax_a = 0,
                Eax_b = 0,
                Eax_c = 0,
                Eax_d = 0,
                Eax_e = 0,
                Eax_f = 0
            }, false);
            task.DataDeclarations.Add(robTarget);

            var target = new RsTarget(wobj, robTarget);

            target.Transform.GlobalMatrix = frame;

            task.Targets.Add(target);
            return(robTarget);
        }
Пример #4
0
        private static void ShowTarget(string targetName, Vector3 position)
        {
            try
            {
                //get the active station
                Station station = Project.ActiveProject as Station;

                //create robtarget
                RsRobTarget robTarget = new RsRobTarget();
                robTarget.Name = station.ActiveTask.GetValidRapidName(targetName, "_", 10);

                //translation
                robTarget.Frame.Translation = position;

                //add robtargets to datadeclaration
                station.ActiveTask.DataDeclarations.Add(robTarget);
                //create target
                RsTarget target = new RsTarget(station.ActiveTask.ActiveWorkObject, robTarget);
                target.Name = robTarget.Name;
                target.Attributes.Add(target.Name, true);

                //add targets to active task
                station.ActiveTask.Targets.Add(target);

                // add target to list
                targets.Add(target);
            }
            catch (Exception exception)
            {
                Logger.AddMessage(new LogMessage(exception.Message.ToString()));
            }
        }
Пример #5
0
        public static void ObtainPosition()
        {
            #region Get the position of the selected object
            Project.UndoContext.BeginUndoStep("Get the position of the selected object");
            try
            {
                // Get the selected Part.
                #region SelectPart1
                Part selectedPart = Selection.SelectedObjects.SingleSelectedObject as Part;
                #endregion

                // Get the selected WorkObject.
                #region SelectWorkObject1
                RsWorkObject selectedWorkObject = Selection.SelectedObjects.SingleSelectedObject as RsWorkObject;
                #endregion

                // Get the selected RsTarget.
                #region SelectRsTarget1
                RsTarget selectedRsTarget = Selection.SelectedObjects.SingleSelectedObject as RsTarget;
                #endregion

                // Check if there is a part selected.
                #region SelectPart2
                if (selectedPart != null)
                {
                    // Asign the object position and orientation values to the vars
                    PosX = selectedPart.Transform.X;
                    PosY = selectedPart.Transform.Y;
                    PosZ = selectedPart.Transform.Z;

                    DegX = selectedPart.Transform.RX;
                    DegY = selectedPart.Transform.RY;
                    DegZ = selectedPart.Transform.RZ;

                    Logger.AddMessage(new LogMessage(selectedPart.Name.ToString() + " Position copied" +
                                                     " [X = " + selectedPart.Transform.X * 1000 +
                                                     ", Y = " + selectedPart.Transform.Y * 1000 +
                                                     ", Z = " + selectedPart.Transform.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(selectedPart.Transform.RX) +
                                                     ", Ry = " + Globals.RadToDeg(selectedPart.Transform.RY) +
                                                     ", Rz = " + Globals.RadToDeg(selectedPart.Transform.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion

                // Check if there is a RsTarget selected.
                #region SelectRsTarget2
                if (selectedRsTarget != null)
                {
                    // The position obtained in RsRobTarget is relative to its WorkObject and we want it from the station origin (World).
                    // We can get the relative distance betwen the Target and the station origin with "GetRelativeTrasform"
                    RsWorkObject myWobj        = new RsWorkObject();                  // New WorkObject without position (it'll be created at 0,0,0) to define the RsTarget
                    RsRobTarget  myRsRobTarget = new RsRobTarget();                   // New RsRobTarget without position to define the RsTarget.
                    RsTarget     myRsTarget    = new RsTarget(myWobj, myRsRobTarget); // New RsTarget to use in the "GetRelativeTransform"

                    Matrix4 relMx = (selectedRsTarget.Transform.GetRelativeTransform(myRsTarget));

                    // Asing the objetc values to the position and orientation vars
                    PosX = relMx.Translation.x;
                    PosY = relMx.Translation.y;
                    PosZ = relMx.Translation.z;

                    DegX = relMx.EulerZYX.x;
                    DegY = relMx.EulerZYX.y;
                    DegZ = relMx.EulerZYX.z;

                    // RsTarget copied message
                    Logger.AddMessage(new LogMessage(selectedRsTarget.Name.ToString() + " Position copied" +
                                                     " [X = " + relMx.Translation.x * 1000 +
                                                     ", Y = " + relMx.Translation.y * 1000 +
                                                     ", Z = " + relMx.Translation.z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(relMx.EulerZYX.x) +
                                                     ", Ry = " + Globals.RadToDeg(relMx.EulerZYX.y) +
                                                     ", Rz = " + Globals.RadToDeg(relMx.EulerZYX.z) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion

                // Check if there is a WorkObject selected.
                #region SelectedWorkObject2
                if (selectedWorkObject != null)
                {
                    // Asign the object position and orientation values to the vars
                    PosX = selectedWorkObject.UserFrame.X;
                    PosY = selectedWorkObject.UserFrame.Y;
                    PosZ = selectedWorkObject.UserFrame.Z;

                    DegX = selectedWorkObject.UserFrame.RX;
                    DegY = selectedWorkObject.UserFrame.RY;
                    DegZ = selectedWorkObject.UserFrame.RZ;

                    Logger.AddMessage(new LogMessage(selectedWorkObject.Name.ToString() + " Position copied" +
                                                     " [X = " + selectedWorkObject.UserFrame.X * 1000 +
                                                     ", Y = " + selectedWorkObject.UserFrame.Y * 1000 +
                                                     ", Z = " + selectedWorkObject.UserFrame.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RX) +
                                                     ", Ry = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RY) +
                                                     ", Rz = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }

                else
                {
                    MessageBox.Show("Please, select a Part, a Target or a WorkObject.");
                }
            }
            catch
            {
                Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
                throw;
            }
            finally
            {
                Project.UndoContext.EndUndoStep();
            }
            #endregion

            #endregion
        }
Пример #6
0
        public static void SetPosition()
        {
            #region Set the position of the selected object
            Project.UndoContext.BeginUndoStep("Set the position of the selected object");
            try
            {
                // Get the selected Part.
                #region SelectPart1
                Part selectedPart = Selection.SelectedObjects.SingleSelectedObject as Part;
                #endregion

                // Get the selected WorkObject.
                #region SelectWorkObject1
                RsWorkObject selectedWorkObject = Selection.SelectedObjects.SingleSelectedObject as RsWorkObject;
                #endregion

                // Get the selected RsTarget.
                #region SelectRsTarget1
                RsTarget selectedRsTarget = Selection.SelectedObjects.SingleSelectedObject as RsTarget;
                #endregion

                // Check if there is a part selected.
                #region SelectPart2
                if (selectedPart != null)

                {
                    #region Log Position and Orientation
                    // Asign the var values to the object position and orientation
                    selectedPart.Transform.X = PosX;
                    selectedPart.Transform.Y = PosY;
                    selectedPart.Transform.Z = PosZ;

                    selectedPart.Transform.RX = DegX;
                    selectedPart.Transform.RY = DegY;
                    selectedPart.Transform.RZ = DegZ;
                    #endregion

                    Logger.AddMessage(new LogMessage("Position applied to " + selectedPart.Name.ToString() +
                                                     " [X = " + selectedPart.Transform.X * 1000 +
                                                     ", Y = " + selectedPart.Transform.Y * 1000 +
                                                     ", Z = " + selectedPart.Transform.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(selectedPart.Transform.RX) +
                                                     ", Ry = " + Globals.RadToDeg(selectedPart.Transform.RY) +
                                                     ", Rz = " + Globals.RadToDeg(selectedPart.Transform.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion


                // Check if there is a RsTarget selected.
                #region SelectRsTarget2
                if (selectedRsTarget != null)
                {
                    RsWorkObject myWobj_origen        = selectedRsTarget.WorkObject;
                    RsRobTarget  myRsRobTarget_origen = new RsRobTarget();
                    RsTarget     myRsTarget_origen    = new RsTarget(myWobj_origen, myRsRobTarget_origen);

                    RsWorkObject myWobj_dest        = new RsWorkObject();
                    RsRobTarget  myRsRobTarget_dest = new RsRobTarget();
                    myRsRobTarget_dest.Frame.X  = PosX;
                    myRsRobTarget_dest.Frame.Y  = PosY;
                    myRsRobTarget_dest.Frame.Z  = PosZ;
                    myRsRobTarget_dest.Frame.RX = DegX;
                    myRsRobTarget_dest.Frame.RY = DegY;
                    myRsRobTarget_dest.Frame.RZ = DegZ;
                    RsTarget myRsTarget_dest = new RsTarget(myWobj_dest, myRsRobTarget_dest);

                    Matrix4 relMx = (myRsTarget_dest.Transform.GetRelativeTransform(myRsTarget_origen));

                    // Asign the var values to the object position and orientation
                    selectedRsTarget.Transform.X = relMx.Translation.x;
                    selectedRsTarget.Transform.Y = relMx.Translation.y;
                    selectedRsTarget.Transform.Z = relMx.Translation.z;

                    selectedRsTarget.Transform.RX = relMx.EulerZYX.x;
                    selectedRsTarget.Transform.RY = relMx.EulerZYX.y;
                    selectedRsTarget.Transform.RZ = relMx.EulerZYX.z;

                    Logger.AddMessage(new LogMessage("Position applied to " + selectedRsTarget.Name.ToString() +
                                                     " [X = " + myRsTarget_dest.Transform.X * 1000 +
                                                     ", Y = " + myRsTarget_dest.Transform.Y * 1000 +
                                                     ", Z = " + myRsTarget_dest.Transform.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(myRsTarget_dest.Transform.RX) +
                                                     ", Ry = " + Globals.RadToDeg(myRsTarget_dest.Transform.RY) +
                                                     ", Rz = " + Globals.RadToDeg(myRsTarget_dest.Transform.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion

                // Check if there is a WorkObject selected.
                #region SelectedWorkObject2
                if (selectedWorkObject != null)
                {
                    // Asign the object values to the vars position and orientation
                    selectedWorkObject.UserFrame.X = PosX;
                    selectedWorkObject.UserFrame.Y = PosY;
                    selectedWorkObject.UserFrame.Z = PosZ;

                    selectedWorkObject.UserFrame.RX = DegX;
                    selectedWorkObject.UserFrame.RY = DegY;
                    selectedWorkObject.UserFrame.RZ = DegZ;

                    Logger.AddMessage(new LogMessage("Position applied to " + selectedWorkObject.Name.ToString() +
                                                     " [X = " + selectedWorkObject.UserFrame.X * 1000 +
                                                     ", Y = " + selectedWorkObject.UserFrame.Y * 1000 +
                                                     ", Z = " + selectedWorkObject.UserFrame.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RX) +
                                                     ", Ry = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RY) +
                                                     ", Rz = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion

                else
                {
                    MessageBox.Show("Please, select a Part, a Target or a WorkObject.");
                }
            }
            catch (Exception execption)
            {
                Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
                Logger.AddMessage(new LogMessage(execption.Message.ToString()));
                throw;
            }
            finally
            {
                Project.UndoContext.EndUndoStep();
            }
            #endregion
        }
Пример #7
0
        public static void ObtainPosition()
        {
            #region Get the position of the selected object
            Project.UndoContext.BeginUndoStep("Get the position of the selected object");
            try
            {
                // Get the selected Part.
                #region SelectPart1
                Part selectedPart = Selection.SelectedObjects.SingleSelectedObject as Part;
                #endregion

                // Get the selected WorkObject.
                #region SelectWorkObject1
                RsWorkObject selectedWorkObject = Selection.SelectedObjects.SingleSelectedObject as RsWorkObject;
                #endregion

                // Get the selected RsTarget.
                #region SelectRsTarget1
                RsTarget selectedRsTarget = Selection.SelectedObjects.SingleSelectedObject as RsTarget;
                #endregion

                // Check if there is a part selected.
                #region SelectPart2
                if (selectedPart != null)
                {
                    // Asignamos los valores del objeto a las variables de posición y orientación
                    PosX = selectedPart.Transform.X;
                    PosY = selectedPart.Transform.Y;
                    PosZ = selectedPart.Transform.Z;

                    DegX = selectedPart.Transform.RX;
                    DegY = selectedPart.Transform.RY;
                    DegZ = selectedPart.Transform.RZ;

                    // Mensaje del part copiado
                    // (rselectedPart.Transform.RX * 180) / System.Math.PI
                    // Globals.RadToDeg(selectedPart.Transform.RX)

                    Logger.AddMessage(new LogMessage(selectedPart.Name.ToString() + " Position copied" +
                                                     " [X = " + selectedPart.Transform.X * 1000 +
                                                     ", Y = " + selectedPart.Transform.Y * 1000 +
                                                     ", Z = " + selectedPart.Transform.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(selectedPart.Transform.RX) +
                                                     ", Ry = " + Globals.RadToDeg(selectedPart.Transform.RY) +
                                                     ", Rz = " + Globals.RadToDeg(selectedPart.Transform.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion

                // Check if there is a RsTarget selected.
                #region SelectRsTarget2
                if (selectedRsTarget != null)
                {
                    // La posición que nos muestra directamenta el RsRobTarget es relativo a su WorkObject y nosotros lo queremos
                    // relativo al origen de la estación (mundo).
                    // Obtenemos la distancia relativa entre el punto y el origen de la estación con "GetRelativeTransform"

                    RsWorkObject myWobj        = new RsWorkObject();                  // Declaramos un WorkObject sin definirle posición para que lo cree en el 0,0,0 (para definir el RsTarget)
                    RsRobTarget  myRsRobTarget = new RsRobTarget();                   // Declaramos un RsRobTarget sin posición (para definir el RsTarget)
                    RsTarget     myRsTarget    = new RsTarget(myWobj, myRsRobTarget); // Declaramos el RsTarget para utilizarlo en "GetRelativeTransform"

                    Matrix4 relMx = (selectedRsTarget.Transform.GetRelativeTransform(myRsTarget));

                    // Asignamos los valores del objeto a las variables de posición y orientación

                    PosX = relMx.Translation.x;
                    PosY = relMx.Translation.y;
                    PosZ = relMx.Translation.z;

                    DegX = relMx.EulerZYX.x;
                    DegY = relMx.EulerZYX.y;
                    DegZ = relMx.EulerZYX.z;

                    // Mensaje del RsTarget copiado

                    Logger.AddMessage(new LogMessage(selectedRsTarget.Name.ToString() + " Position copied" +
                                                     " [X = " + relMx.Translation.x * 1000 +
                                                     ", Y = " + relMx.Translation.y * 1000 +
                                                     ", Z = " + relMx.Translation.z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(relMx.EulerZYX.x) +
                                                     ", Ry = " + Globals.RadToDeg(relMx.EulerZYX.y) +
                                                     ", Rz = " + Globals.RadToDeg(relMx.EulerZYX.z) +
                                                     "]", "Puime's Add-in"));
                    return;
                }
                #endregion

                // Check if there is a WorkObject selected.
                #region SelectedWorkObject2
                if (selectedWorkObject != null)
                {
                    // Asignamos los valores del objeto a las variables de posición y orientación
                    PosX = selectedWorkObject.UserFrame.X;
                    PosY = selectedWorkObject.UserFrame.Y;
                    PosZ = selectedWorkObject.UserFrame.Z;

                    DegX = selectedWorkObject.UserFrame.RX;
                    DegY = selectedWorkObject.UserFrame.RY;
                    DegZ = selectedWorkObject.UserFrame.RZ;

                    // Mensaje del WorkObject copiado
                    Logger.AddMessage(new LogMessage(selectedWorkObject.Name.ToString() + " Position copied" +
                                                     " [X = " + selectedWorkObject.UserFrame.X * 1000 +
                                                     ", Y = " + selectedWorkObject.UserFrame.Y * 1000 +
                                                     ", Z = " + selectedWorkObject.UserFrame.Z * 1000 +
                                                     ", Rx = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RX) +
                                                     ", Ry = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RY) +
                                                     ", Rz = " + Globals.RadToDeg(selectedWorkObject.UserFrame.RZ) +
                                                     "]", "Puime's Add-in"));
                    return;
                }

                else
                {
                    MessageBox.Show("Please, select a Part, a Target or a WorkObject.");
                }
            }
            catch
            {
                Project.UndoContext.CancelUndoStep(CancelUndoStepType.Rollback);
                throw;
            }
            finally
            {
                Project.UndoContext.EndUndoStep();
            }
            #endregion

            #endregion
        }