Add explicit exit for rail assembly workflow
This commit is contained in:
parent
c9744699b1
commit
c3b103c159
@ -222,11 +222,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
{
|
||||
// 路径变更时清除选中的路径点
|
||||
SelectedPathPoint = null;
|
||||
ClearAssemblyReferenceLineVisuals();
|
||||
ClearAssemblyInstallationReferenceVisuals();
|
||||
|
||||
// 重置 Rail 编辑状态
|
||||
SetRailAssemblyWorkflowMode(RailAssemblyWorkflowMode.None);
|
||||
ResetRailAssemblyWorkflowState(announce: false);
|
||||
|
||||
// 🔧 修复:同步PathPlanningManager的CurrentRoute
|
||||
if (_pathPlanningManager != null && value != null)
|
||||
@ -1082,6 +1078,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
public ICommand SelectAssemblyInstallationPointForCreateCommand { get; private set; }
|
||||
public ICommand SelectAssemblyInstallationPointForEditCommand { get; private set; }
|
||||
public ICommand ClearAssemblyReferenceRodCommand { get; private set; }
|
||||
public ICommand CancelRailAssemblyWorkflowCommand { get; private set; }
|
||||
public ICommand AnalyzeAssemblyTerminalFaceForCreateCommand { get; private set; }
|
||||
public ICommand AnalyzeAssemblyTerminalFaceForEditCommand { get; private set; }
|
||||
public ICommand DecreaseSelectedRailNormalOffsetCommand { get; private set; }
|
||||
@ -1114,7 +1111,8 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
public bool CanExecuteEndEdit => (_pathPlanningManager?.PathEditState == PathEditState.Creating ||
|
||||
_pathPlanningManager?.PathEditState == PathEditState.Editing ||
|
||||
_pathPlanningManager?.PathEditState == PathEditState.AddingPoints ||
|
||||
_pathPlanningManager?.PathEditState == PathEditState.EditingPoint);
|
||||
_pathPlanningManager?.PathEditState == PathEditState.EditingPoint) ||
|
||||
CanCancelRailAssemblyWorkflow;
|
||||
|
||||
public bool CanExecuteClearPath => SelectedPathRoute != null && SelectedPathRoute.Points.Count > 0;
|
||||
|
||||
@ -1173,6 +1171,13 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
: "选安装点";
|
||||
|
||||
public bool IsSelectingAssemblyEndFacePoints => _isSelectingAssemblyEndFacePoints;
|
||||
public bool CanCancelRailAssemblyWorkflow => _railAssemblyWorkflowMode != RailAssemblyWorkflowMode.None ||
|
||||
HasAssemblyTerminalObject ||
|
||||
_isSelectingAssemblyStartPoint ||
|
||||
_isSelectingAssemblyEndFacePoints ||
|
||||
_isSelectingAssemblyInstallationPoint ||
|
||||
_hasAssemblyEndFaceAnalysis ||
|
||||
_hasAssemblyInstallationReference;
|
||||
|
||||
private bool IsRailCreateWorkflowActive => _railAssemblyWorkflowMode == RailAssemblyWorkflowMode.CreateNewRailPath;
|
||||
private bool IsRailEditingWorkflowActive => _railAssemblyWorkflowMode == RailAssemblyWorkflowMode.EditSelectedRail;
|
||||
@ -1343,6 +1348,8 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
OnPropertyChanged(nameof(CanSelectAssemblyInstallationPointForEdit));
|
||||
OnPropertyChanged(nameof(CreateAssemblyInstallationPointButtonText));
|
||||
OnPropertyChanged(nameof(EditAssemblyInstallationPointButtonText));
|
||||
OnPropertyChanged(nameof(CanCancelRailAssemblyWorkflow));
|
||||
OnPropertyChanged(nameof(CanExecuteEndEdit));
|
||||
}
|
||||
|
||||
private bool HasSelectedRailInstallationReference()
|
||||
@ -1717,6 +1724,7 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
SelectAssemblyInstallationPointForCreateCommand = new RelayCommand(async () => await ExecuteSelectAssemblyInstallationPointAsync(RailAssemblyWorkflowMode.CreateNewRailPath), () => CanSelectAssemblyInstallationPointForCreate);
|
||||
SelectAssemblyInstallationPointForEditCommand = new RelayCommand(async () => await ExecuteSelectAssemblyInstallationPointAsync(RailAssemblyWorkflowMode.EditSelectedRail), () => CanSelectAssemblyInstallationPointForEdit);
|
||||
ClearAssemblyReferenceRodCommand = new RelayCommand(() => ExecuteClearAssemblyReferenceRod());
|
||||
CancelRailAssemblyWorkflowCommand = new RelayCommand(() => ExecuteCancelRailAssemblyWorkflow(), () => CanCancelRailAssemblyWorkflow);
|
||||
AnalyzeAssemblyTerminalFaceForCreateCommand = new RelayCommand(async () => await ExecuteAnalyzeAssemblyTerminalFaceAsync(RailAssemblyWorkflowMode.CreateNewRailPath), () => CanAnalyzeAssemblyTerminalFaceForCreate);
|
||||
AnalyzeAssemblyTerminalFaceForEditCommand = new RelayCommand(async () => await ExecuteAnalyzeAssemblyTerminalFaceAsync(RailAssemblyWorkflowMode.EditSelectedRail), () => CanAnalyzeAssemblyTerminalFaceForEdit);
|
||||
DecreaseSelectedRailNormalOffsetCommand = new RelayCommand(() => AdjustSelectedRailNormalOffset(-RailNormalOffsetNudgeStepInMeters));
|
||||
@ -2306,6 +2314,55 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetRailAssemblyWorkflowState(bool announce, string statusMessage = null, string logMessage = null)
|
||||
{
|
||||
CleanupAssemblyReferenceSelection();
|
||||
CleanupAssemblyEndFaceSelection(clearVisuals: true);
|
||||
CleanupAssemblyInstallationSelection(clearVisuals: true);
|
||||
ClearAssemblyReferenceLineVisuals();
|
||||
ClearAssemblyEndFaceAnalysisVisuals();
|
||||
ClearAssemblyInstallationReferenceVisuals();
|
||||
ResetAssemblyEndFaceAnalysisState();
|
||||
ResetAssemblyInstallationReferenceState();
|
||||
|
||||
_assemblyTerminalObject = null;
|
||||
_assemblyStartPoint = Point3D.Origin;
|
||||
HasAssemblyTerminalObject = false;
|
||||
AssemblyTerminalObjectName = "未选择";
|
||||
AssemblyTerminalObjectInfo = "请选择终点处已安装箱体";
|
||||
AssemblyStartPointText = "未选择";
|
||||
|
||||
SetRailAssemblyWorkflowMode(RailAssemblyWorkflowMode.None);
|
||||
OnPropertyChanged(nameof(CanGenerateAssemblyReferenceRod));
|
||||
NotifyRailAssemblyCommandStateChanged();
|
||||
|
||||
if (announce && !string.IsNullOrWhiteSpace(statusMessage))
|
||||
{
|
||||
UpdateMainStatus(statusMessage);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(logMessage))
|
||||
{
|
||||
LogManager.Info(logMessage);
|
||||
}
|
||||
}
|
||||
|
||||
private void ExecuteCancelRailAssemblyWorkflow()
|
||||
{
|
||||
try
|
||||
{
|
||||
ResetRailAssemblyWorkflowState(
|
||||
announce: true,
|
||||
statusMessage: "已取消 Rail 装配流程",
|
||||
logMessage: "[直线装配] 已取消 Rail 装配流程并清理状态");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"[直线装配] 取消 Rail 装配流程失败: {ex.Message}", ex);
|
||||
UpdateMainStatus($"取消 Rail 装配流程失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private Point3D GetAssemblyTerminalAnchorPoint()
|
||||
{
|
||||
if (_assemblyTerminalObject == null || !ModelItemAnalysisHelper.IsModelItemValid(_assemblyTerminalObject))
|
||||
@ -4798,6 +4855,13 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
{
|
||||
if (!CanExecuteEndEdit) return;
|
||||
|
||||
if ((_pathPlanningManager == null || _pathPlanningManager.PathEditState == PathEditState.Viewing) &&
|
||||
CanCancelRailAssemblyWorkflow)
|
||||
{
|
||||
ExecuteCancelRailAssemblyWorkflow();
|
||||
return;
|
||||
}
|
||||
|
||||
await SafeExecuteAsync(async () =>
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
@ -499,6 +499,10 @@ NavisworksTransport 路径编辑页签视图 - 采用与动画控制和分层管
|
||||
<Button Content="隐藏辅助线"
|
||||
Command="{Binding ClearAssemblyReferenceRodCommand}"
|
||||
Style="{StaticResource SecondaryButtonStyle}"/>
|
||||
<Button Content="取消装配"
|
||||
Command="{Binding CancelRailAssemblyWorkflowCommand}"
|
||||
Style="{StaticResource SecondaryButtonStyle}"
|
||||
IsEnabled="{Binding CanCancelRailAssemblyWorkflow}"/>
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
</Expander>
|
||||
@ -580,6 +584,12 @@ NavisworksTransport 路径编辑页签视图 - 采用与动画控制和分层管
|
||||
Command="{Binding RepositionRailStartPointCommand}"
|
||||
IsEnabled="{Binding CanRepositionRailStartPoint}"
|
||||
Style="{StaticResource SecondaryButtonStyle}"/>
|
||||
<Button Content="取消装配"
|
||||
Padding="10,2"
|
||||
Margin="10,0,0,0"
|
||||
Command="{Binding CancelRailAssemblyWorkflowCommand}"
|
||||
IsEnabled="{Binding CanCancelRailAssemblyWorkflow}"
|
||||
Style="{StaticResource SecondaryButtonStyle}"/>
|
||||
</WrapPanel>
|
||||
<Label Grid.Column="0"
|
||||
Grid.Row="2"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user