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())); } }
void HandleBeginDrag(VrEventArgs args) { _frameGfx.Visible = false; var hitInstruction = args.HitResult as HitResult <RsMoveInstruction>; var hitSegment = args.HitResult as HitResult <PathSegment>; if (hitInstruction != null) { _dragOffset = args.Frame.InverseRigid() * hitInstruction.HitObject.GetToTarget().Transform.GlobalMatrix; WithUndo("VR Drag", () => PathEditingHelper.MoveInstructionToFrame(hitInstruction.HitObject, args.Frame * _dragOffset)); _newHighlightTarget = hitInstruction?.HitObject?.GetToTarget(); } else if (hitSegment != null) { WithUndo("VR Drag", () => _newInstruction = PathEditingHelper.InsertMoveInstruction(hitSegment.HitObject, args.Frame)); } else if (args.HitResult != null) { throw new InvalidOperationException("unrecognized HitResult"); } else { WithUndo("VR Create Instruction", () => _newInstruction = PathEditingHelper.CreateNewInstructionInActivePath(args.Frame)); _dragOffset = Matrix4.Identity; args.CreatedObject = () => new HitResult <RsMoveInstruction>(_newInstruction, 0, args.Frame.Translation); } }
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); }
private void ClearHover() { if (_highlightTarget != null) { _highlightTarget.ResetHighlight(); _highlightTarget = 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 override void Update(VrUpdateArgs args) { var session = args.Session; _newHighlightTarget = null; _forceUpdateLine = false; base.Update(args); var view = (GraphicView)GraphicControl.ActiveGraphicControl.GetView(); if (_newHighlightTarget != _highlightTarget) { ClearHover(); _highlightTarget = _newHighlightTarget; _newHighlightTarget = null; _highlightTarget?.Highlight(System.Drawing.Color.FromArgb(128, 255, 255, 255)); if (_highlightTarget != null) { _frameGfx.Visible = false; _pointerToSelGfx = view.OpenVRAddAttachedLine( VrAttachedTo.RightController, session.RightController.PointerOffsetTransform.Translation, System.Drawing.Color.White, VrAttachedTo.Station, _highlightTarget.Transform.GlobalMatrix.Translation, System.Drawing.Color.Orange); } else { _frameGfx.Visible = true; if (_pointerToSelGfx != IntPtr.Zero) { view.OpenVRRemoveAttachedLine(_pointerToSelGfx); } _pointerToSelGfx = IntPtr.Zero; } } else if (_forceUpdateLine && _highlightTarget != null) { view.OpenVRRemoveAttachedLine(_pointerToSelGfx); _pointerToSelGfx = view.OpenVRAddAttachedLine( VrAttachedTo.RightController, session.RightController.PointerOffsetTransform.Translation, System.Drawing.Color.White, VrAttachedTo.Station, _highlightTarget.Transform.GlobalMatrix.Translation, System.Drawing.Color.White); } }
void HandleDeltaDrag(VrEventArgs args) { //_frameGfx.Visible = false; var hitInstruction = args.HitResult as HitResult <RsMoveInstruction>; var hitSegment = args.HitResult as HitResult <PathSegment>; if (hitInstruction != null) { WithUndoAppend("VR Drag", () => PathEditingHelper.MoveInstructionToFrame(hitInstruction.HitObject, args.Frame * _dragOffset)); _newHighlightTarget = hitInstruction?.HitObject?.GetToTarget(); _forceUpdateLine = true; } else if (hitSegment != null) { WithUndoAppend("VR Drag", () => PathEditingHelper.MoveInstructionToFrame(_newInstruction, args.Frame)); } else if (args.HitResult != null) { throw new InvalidOperationException("unrecognized HitResult"); } }
public async Task <double[]> CalulateIK(DGeom.Plane targetPlane) { double[] jointRot = new double[6]; RsTarget rst = CreateTarget(targetPlane); try { //robot.CalculateInverseKinematicsAsync(rst, rsTask.ActiveTool, true); var jData = await robot.Task.Mechanism.CalculateInverseKinematicsAsync(rst, rsTask.ActiveTool, false); return(jData); } catch (ABB.Robotics.BaseException exception) { throw; } catch (Exception exception) { throw; } return(jointRot); }
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 }
void HandleHover(VrEventArgs args) { var hitInstruction = args.HitResult as HitResult <RsMoveInstruction>; _newHighlightTarget = hitInstruction?.HitObject?.GetToTarget(); }
public PathSegment(RsTarget previousTarget, RsMoveInstruction moveInstruction) { PreviousTarget = previousTarget; MoveInstruction = moveInstruction; }