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())); } }
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); }
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); }
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())); } }
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 }
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 }
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 }