/// <summary>
 /// Execute the frame creation process
 /// </summary>
 /// <param name="obj">Not in use</param>
 private void FrameCreationExecuted(object obj)
 {
     if (ReferenceFrame != null && ReferenceFrame != originalFrame)
     {
         TxApplication.ActiveDocument.WorkingFrame = ReferenceFrame;
     }
     try
     {
         foreach (RwFrameCreationViewModel frameViewModel in FramesData)
         {
             TxTransformation    location          = RwMathUtilities.CreateRpyTransformation(frameViewModel.X, frameViewModel.Y, frameViewModel.Z, frameViewModel.Rx, frameViewModel.Ry, frameViewModel.Rz, true);
             TxFrameCreationData frameCreationData = new TxFrameCreationData(frameViewModel.Name, location);
             TxApplication.ActiveDocument.PhysicalRoot.CreateFrame(frameCreationData);
         }
         string message = $"Successsfully created {FramesData.Count} frames";
         TxMessageBox.Show(message, "Frame creation", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
     }
     catch
     {
         string message = "An error occured during frame creation";
         TxMessageBox.Show(message, "Frame creation", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
     }
     finally
     {
         TxApplication.ActiveDocument.WorkingFrame = originalFrame;
     }
 }
 /// <summary>
 /// Execute the frame creation process
 /// </summary>
 /// <param name="obj">Not in use</param>
 private void FrameCreationExecuted(object obj)
 {
     if (ReferenceFrame != null && ReferenceFrame != originalFrame)
     {
         TxApplication.ActiveDocument.WorkingFrame = ReferenceFrame;
     }
     try
     {
         foreach (RwFrameCreationData frameData in FramesData)
         {
             //TxVector translation = new TxVector(frameData.X, frameData.Y, frameData.Z);
             //TxVector rotation = new TxVector(RwMath.Deg2Rad(frameData.Rx), RwMath.Deg2Rad(frameData.Ry), RwMath.Deg2Rad(frameData.Rz));
             //TxTransformation location = new TxTransformation(translation, rotation, TxTransformation.TxRotationType.RPY_XYZ);
             TxTransformation    location          = RwMath.CreateRpyTransformation(frameData.X, frameData.Y, frameData.Z, frameData.Rx, frameData.Ry, frameData.Rz, true);
             TxFrameCreationData frameCreationData = new TxFrameCreationData(frameData.Name, location);
             TxApplication.ActiveDocument.PhysicalRoot.CreateFrame(frameCreationData);
         }
         string message = $"Successsfully created {FramesData.Count} frames";
         TxMessageBox.Show(message, "Frame creation", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information);
     }
     catch
     {
         string message = "An error occured during frame creation";
         TxMessageBox.Show(message, "Frame creation", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
     }
     finally
     {
         TxApplication.ActiveDocument.WorkingFrame = originalFrame;
     }
 }
 /// <summary>
 /// Create an instance of the frame creation command
 /// </summary>
 public RwCreateFramesFromListViewModel()
 {
     FrameGroupBoxHeader           = "Frame data";
     SourceFilename                = string.Empty;
     FramesData                    = new ObservableCollection <RwFrameCreationViewModel>();
     FramePrefix                   = "fr_";
     FrameSuffix                   = string.Empty;
     ReferenceFrame                = null;
     originalFrame                 = TxApplication.ActiveDocument.WorkingFrame;
     ChooseSourceFileCommand       = new RwActionCommand(ChooseSourceFileExecuted, ChooseSourceFileCanExecute);
     ExecuteFrameCreationCommand   = new RwActionCommand(FrameCreationExecuted, FrameCreationCanExecute);
     ReferenceFramePickedEvent     = new RwActionCommand(ReferenceFramePickedExecuted, ReferenceFramePickedCanExecute);
     FramesData.CollectionChanged += FrameCollectionChanged;
 }
        private void CheckA1Singularity(ITxRobot irobot)
        {
            TxTransformation currentWorkingFrame = TxApplication.ActiveDocument.WorkingFrame;
            TxRobot          robot = irobot as TxRobot;

            if (robot != null)
            {
                if (location is ITxLocatableObject locateableLocation)
                {
                    TxApplication.ActiveDocument.WorkingFrame = robot.AbsoluteLocation;
                    double locationXvalue = locateableLocation.LocationRelativeToWorkingFrame.Translation.X;
                    double locationYvalue = locateableLocation.LocationRelativeToWorkingFrame.Translation.Y;
                    double xyValue        = RwMathUtilities.Length(locationXvalue, locationYvalue, 0.0);
                    if (RwMathUtilities.Abs(xyValue) < deltaA1Singularity)
                    {
                        AxisLimitsResult = string.IsNullOrEmpty(AxisLimitsResult)
                            ? $"A1 Singularity: {xyValue:F1}"
                            : string.Join("; ", AxisLimitsResult, $"A1 Singularity: {xyValue:F1}");
                    }
                    TxApplication.ActiveDocument.WorkingFrame = currentWorkingFrame;
                }
            }
        }