#0001 初版提交

This commit is contained in:
zhengxuan.zhang
2026-03-07 16:11:57 +08:00
commit 4632f5a8c1
53 changed files with 2450 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36811.4 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XplorePlane", "XplorePlane\XplorePlane.csproj", "{07978DB9-4B88-4F42-9054-73992742BD6A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07978DB9-4B88-4F42-9054-73992742BD6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07978DB9-4B88-4F42-9054-73992742BD6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07978DB9-4B88-4F42-9054-73992742BD6A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {DB6D69BA-49FD-432F-8069-2A8F64933CDE}
EndGlobalSection
EndGlobal
+7
View File
@@ -0,0 +1,7 @@
<Application x:Class="XplorePlane.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XplorePlane">
<Application.Resources>
</Application.Resources>
</Application>
+37
View File
@@ -0,0 +1,37 @@
using System.Windows;
using XplorePlane.Views;
using XplorePlane.ViewModels;
using Prism.Ioc;
using Prism.DryIoc;
namespace XplorePlane
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
// Initialize Prism with DryIoc
var bootstrapper = new AppBootstrapper();
bootstrapper.Run();
}
}
public class AppBootstrapper : PrismBootstrapper
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<MainWindow>();
containerRegistry.Register<MainViewModel>();
}
}
}
View File
+287
View File
@@ -0,0 +1,287 @@
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
namespace XplorePlane.Models
{
// ── Navigation Tree Models ────────────────────────────────────────
public class NavGroupNode : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get => _name;
set { _name = value; OnPropertyChanged(); }
}
private ObservableCollection<object> _children;
public ObservableCollection<object> Children
{
get => _children;
set { _children = value; OnPropertyChanged(); }
}
public NavGroupNode(string name)
{
Name = name;
Children = new ObservableCollection<object>();
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
public class NavLeafNode : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get => _name;
set { _name = value; OnPropertyChanged(); }
}
private string _iconColor;
public string IconColor
{
get => _iconColor;
set { _iconColor = value; OnPropertyChanged(); }
}
private bool _isSelected;
public bool IsSelected
{
get => _isSelected;
set { _isSelected = value; OnPropertyChanged(); }
}
public NavLeafNode(string name, string IconColor = "#888888", bool IsSelected = false)
{
Name = name;
this.IconColor = IconColor;
this.IsSelected = IsSelected;
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
// ── Inspection Callout Models ─────────────────────────────────────
public class InspectionCalloutVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _featureName;
public string FeatureName
{
get => _featureName;
set { _featureName = value; OnPropertyChanged(); }
}
private double _x;
public double X
{
get => _x;
set { _x = value; OnPropertyChanged(); }
}
private double _y;
public double Y
{
get => _y;
set { _y = value; OnPropertyChanged(); }
}
private ObservableCollection<CalloutRowVM> _rows;
public ObservableCollection<CalloutRowVM> Rows
{
get => _rows;
set { _rows = value; OnPropertyChanged(); }
}
public InspectionCalloutVM(string featureName, double x, double y, CalloutRowVM[] rows)
{
FeatureName = featureName;
X = x;
Y = y;
Rows = new ObservableCollection<CalloutRowVM>(rows);
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
public class CalloutRowVM : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _label;
public string Label
{
get => _label;
set { _label = value; OnPropertyChanged(); }
}
private string _nominal;
public string Nominal
{
get => _nominal;
set { _nominal = value; OnPropertyChanged(); }
}
private string _measured;
public string Measured
{
get => _measured;
set { _measured = value; OnPropertyChanged(); }
}
private string _tolerance;
public string Tolerance
{
get => _tolerance;
set { _tolerance = value; OnPropertyChanged(); }
}
private string _deviation;
public string Deviation
{
get => _deviation;
set { _deviation = value; OnPropertyChanged(); }
}
private bool _isPass;
public bool IsPass
{
get => _isPass;
set { _isPass = value; OnPropertyChanged(); }
}
public CalloutRowVM(string label, string nominal, string measured, string tolerance, string deviation, bool isPass)
{
Label = label;
Nominal = nominal;
Measured = measured;
Tolerance = tolerance;
Deviation = deviation;
IsPass = isPass;
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
// ── Feature Properties Model ──────────────────────────────────────
public class FeatureProperties : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _name;
public string Name
{
get => _name;
set { _name = value; OnPropertyChanged(); }
}
private string _datumLabel;
public string DatumLabel
{
get => _datumLabel;
set { _datumLabel = value; OnPropertyChanged(); }
}
private double _x;
public double X
{
get => _x;
set { _x = value; OnPropertyChanged(); }
}
private double _y;
public double Y
{
get => _y;
set { _y = value; OnPropertyChanged(); }
}
private double _z;
public double Z
{
get => _z;
set { _z = value; OnPropertyChanged(); }
}
private double _nrX;
public double NrX
{
get => _nrX;
set { _nrX = value; OnPropertyChanged(); }
}
private double _nrY;
public double NrY
{
get => _nrY;
set { _nrY = value; OnPropertyChanged(); }
}
private double _nrZ;
public double NrZ
{
get => _nrZ;
set { _nrZ = value; OnPropertyChanged(); }
}
private double _height;
public double Height
{
get => _height;
set { _height = value; OnPropertyChanged(); }
}
private double _radius;
public double Radius
{
get => _radius;
set { _radius = value; OnPropertyChanged(); }
}
private double _diameter;
public double Diameter
{
get => _diameter;
set { _diameter = value; OnPropertyChanged(); }
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
// ── RelayCommand Implementation ───────────────────────────────────
public class RelayCommand : ICommand
{
private readonly Action<object> _execute;
private readonly Predicate<object> _canExecute;
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
{
_execute = execute ?? throw new ArgumentNullException(nameof(execute));
_canExecute = canExecute;
}
public bool CanExecute(object parameter) => _canExecute?.Invoke(parameter) ?? true;
public void Execute(object parameter) => _execute(parameter);
}
}
+312
View File
@@ -0,0 +1,312 @@
// MainViewModel.cs
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Input;
using XplorePlane.Models;
namespace XplorePlane.ViewModels
{
/// <summary>
/// Root ViewModel for the MainWindow.
/// Implements INotifyPropertyChanged for two-way data binding.
/// </summary>
public class MainViewModel : INotifyPropertyChanged
{
// ── INotifyPropertyChanged ────────────────────────────────────
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
// ── Constructor ───────────────────────────────────────────────
public MainViewModel()
{
// Seed navigation tree
NavigationTree = new ObservableCollection<NavGroupNode>
{
new NavGroupNode("参考模型")
{
Children = new ObservableCollection<object>
{
new NavGroupNode("007模型.stp")
{
Children = new ObservableCollection<object>
{
new NavLeafNode("圆柱 2 -ref", IconColor: "#00AAFF"),
new NavLeafNode("圆柱 1 -ref", IconColor: "#00AAFF"),
new NavLeafNode("球 1 -ref", IconColor: "#FFAA00"),
new NavLeafNode("圆 1 -ref", IconColor: "#888888"),
new NavLeafNode("圆 2 -ref", IconColor: "#888888"),
new NavLeafNode("圆 3 -ref", IconColor: "#888888"),
new NavLeafNode("圆 4 -ref", IconColor: "#888888"),
}
}
}
},
new NavGroupNode("目标模型")
{
Children = new ObservableCollection<object>
{
new NavGroupNode("007数据.sti")
{
Children = new ObservableCollection<object>
{
new NavLeafNode("圆柱 2 -tgt", IconColor: "#00AAFF"),
new NavLeafNode("圆柱 1 -tgt", IconColor: "#00AAFF", IsSelected: true),
new NavLeafNode("球 1 -tgt", IconColor: "#FFAA00"),
new NavLeafNode("圆 1 -tgt", IconColor: "#888888"),
new NavLeafNode("圆 2 -tgt", IconColor: "#888888"),
new NavLeafNode("圆 3 -tgt", IconColor: "#888888"),
new NavLeafNode("圆 4 -tgt", IconColor: "#888888"),
}
}
}
},
new NavGroupNode("特征分类")
{
Children = new ObservableCollection<object>
{
new NavLeafNode("默认特征分页", IconColor: "#888888")
}
}
};
// Seed inspection callouts
InspectionCallouts = new ObservableCollection<InspectionCalloutVM>
{
new InspectionCalloutVM("圆柱 1 -ref", 310, 270,
new[]
{
new CalloutRowVM("X", "20.0001", "19.7591", "±0.1000", "-0.2410", false),
new CalloutRowVM("Y", "79.9998", "79.2057", "±0.1000", "-0.7941", false),
new CalloutRowVM("Z", "12.0000", "12.6008", "±0.1000", "0.6008", false),
new CalloutRowVM("半径","5.0000", "4.9933", "±0.1000", "-0.0067", true),
new CalloutRowVM("圆3","300", "9.9866", "±0.1000", "-0.0134", true),
new CalloutRowVM("高度","15.0001","15.0028", "±0.1000", "0.0027", true),
}),
new InspectionCalloutVM("圆柱 2 -ref", 665, 270,
new[]
{
new CalloutRowVM("X", "180.0000","179.8487","±0.1000","-0.1513", false),
new CalloutRowVM("Y", "79.9999", "81.0710", "±0.1000", "1.0711", false),
new CalloutRowVM("Z", "35.0000", "27.3757", "±0.1000","-7.6243", false),
new CalloutRowVM("半径","5.0000", "4.9656", "±0.1000","-0.0344", true),
new CalloutRowVM("直径","10.0000","9.9311", "±0.1000","-0.0689", true),
new CalloutRowVM("高度","15.0001","15.0014", "±0.1000", "0.0013", true),
}),
new InspectionCalloutVM("球 1 -ref", 455, 415,
new[]
{
new CalloutRowVM("X", "60.0000","60.0000","±0.1000", "0.0000", true),
new CalloutRowVM("Y", "20.0000","20.0000","±0.1000","-0.0000",true),
new CalloutRowVM("Z", "20.0000","20.0000","±0.1000", "0.0000", true),
new CalloutRowVM("半径","12.0000","11.8959","±0.1000","-0.1041",false),
}),
};
// Selected feature (matches 圆柱 1)
SelectedFeature = new FeatureProperties
{
Name = "圆柱 1",
DatumLabel = "空",
X = 19.7591,
Y = 79.2067,
Z = 12.6008,
NrX = 0.0163,
NrY = 0.1049,
NrZ = 0.9943,
Height = 15.0028,
Radius = 4.9933,
Diameter = 9.9866,
};
// Status bar defaults
LicenseInfo = "软件购买类型: 通用;截止日期: 2025/6/30";
ConnectionStatus = "Polyworks未连接";
FpsInfo = "Fps = 0";
TempInfo = "TempS = 0 ℃";
CurrentTime = "AM 38%";
ZoomLevel = 38;
}
// ── Navigation Tree ───────────────────────────────────────────
public ObservableCollection<NavGroupNode> NavigationTree { get; }
// ── Inspection Callouts ───────────────────────────────────────
public ObservableCollection<InspectionCalloutVM> InspectionCallouts { get; }
// ── Selected Feature Properties ───────────────────────────────
private FeatureProperties _selectedFeature = new();
public FeatureProperties SelectedFeature
{
get => _selectedFeature;
set { _selectedFeature = value; OnPropertyChanged(); }
}
// ── Status Bar ────────────────────────────────────────────────
private string _licenseInfo = string.Empty;
public string LicenseInfo
{
get => _licenseInfo;
set { _licenseInfo = value; OnPropertyChanged(); }
}
private string _connectionStatus = string.Empty;
public string ConnectionStatus
{
get => _connectionStatus;
set { _connectionStatus = value; OnPropertyChanged(); }
}
private string _fpsInfo = string.Empty;
public string FpsInfo
{
get => _fpsInfo;
set { _fpsInfo = value; OnPropertyChanged(); }
}
private string _tempInfo = string.Empty;
public string TempInfo
{
get => _tempInfo;
set { _tempInfo = value; OnPropertyChanged(); }
}
private string _currentTime = string.Empty;
public string CurrentTime
{
get => _currentTime;
set { _currentTime = value; OnPropertyChanged(); }
}
private int _zoomLevel = 100;
public int ZoomLevel
{
get => _zoomLevel;
set { _zoomLevel = value; OnPropertyChanged(); }
}
// ── Geometry Selection Flags ──────────────────────────────────
private bool _isPointSelected;
public bool IsPointSelected
{
get => _isPointSelected;
set { _isPointSelected = value; OnPropertyChanged(); }
}
private bool _isPlaneSelected;
public bool IsPlaneSelected
{
get => _isPlaneSelected;
set { _isPlaneSelected = value; OnPropertyChanged(); }
}
private bool _isCylinderSelected;
public bool IsCylinderSelected
{
get => _isCylinderSelected;
set { _isCylinderSelected = value; OnPropertyChanged(); }
}
private bool _isSurfacePointSelected;
public bool IsSurfacePointSelected
{
get => _isSurfacePointSelected;
set { _isSurfacePointSelected = value; OnPropertyChanged(); }
}
private bool _isCircleSelected;
public bool IsCircleSelected
{
get => _isCircleSelected;
set { _isCircleSelected = value; OnPropertyChanged(); }
}
private bool _isSphereSelected;
public bool IsSphereSelected
{
get => _isSphereSelected;
set { _isSphereSelected = value; OnPropertyChanged(); }
}
private bool _isLineSelected;
public bool IsLineSelected
{
get => _isLineSelected;
set { _isLineSelected = value; OnPropertyChanged(); }
}
private bool _isSlotSelected;
public bool IsSlotSelected
{
get => _isSlotSelected;
set { _isSlotSelected = value; OnPropertyChanged(); }
}
private bool _isFaceSelected;
public bool IsFaceSelected
{
get => _isFaceSelected;
set { _isFaceSelected = value; OnPropertyChanged(); }
}
// ── Commands ──────────────────────────────────────────────────
public ICommand OpenFileCommand => new RelayCommand(_ => OpenFile());
public ICommand ExportCommand => new RelayCommand(_ => Export());
public ICommand ClearCommand => new RelayCommand(_ => Clear());
public ICommand OpenTemplateCommand => new RelayCommand(_ => OpenTemplate());
public ICommand SaveTemplateCommand => new RelayCommand(_ => SaveTemplate());
public ICommand TemplateInspectCommand => new RelayCommand(_ => TemplateInspect());
public ICommand GdtInspectCommand => new RelayCommand(_ => GdtInspect());
public ICommand AutoAlignCommand => new RelayCommand(_ => AutoAlign());
public ICommand NPointAlignCommand => new RelayCommand(_ => NPointAlign());
public ICommand FeatureAlignCommand => new RelayCommand(_ => FeatureAlign());
public ICommand RpsAlignCommand => new RelayCommand(_ => RpsAlign());
public ICommand AxisAlignCommand => new RelayCommand(_ => AxisAlign());
public ICommand ImportMatrixCommand => new RelayCommand(_ => ImportMatrix());
public ICommand CalcColorDiffCommand => new RelayCommand(_ => CalcColorDiff());
public ICommand AnnotateCommand => new RelayCommand(_ => Annotate());
public ICommand ReportInfoCommand => new RelayCommand(_ => ReportInfo());
public ICommand SavePdfCommand => new RelayCommand(_ => SavePdf());
public ICommand SaveCsvCommand => new RelayCommand(_ => SaveCsv());
public ICommand NavigateHomeCommand => new RelayCommand(_ => NavigateHome());
public ICommand NavigateInspectCommand => new RelayCommand(_ => NavigateInspect());
public ICommand ToggleFullScreenCommand=> new RelayCommand(_ => ToggleFullScreen());
public ICommand OpenOptionsCommand => new RelayCommand(_ => OpenOptions());
public ICommand CollapseNavCommand => new RelayCommand(_ => CollapseNav());
public ICommand EditPropertiesCommand => new RelayCommand(_ => EditProperties());
public ICommand ClosePropertiesCommand => new RelayCommand(_ => CloseProperties());
public ICommand ClearAnnotationsCommand=> new RelayCommand(_ => ClearAnnotations());
public ICommand DeleteSelectionCommand => new RelayCommand(_ => DeleteSelection());
// ── Command Handlers (stub — wire up your services here) ──────
private void OpenFile() { /* Open file dialog */ }
private void Export() { /* Export dialog */ }
private void Clear() { /* Clear scene */ }
private void OpenTemplate() { /* Load template project */ }
private void SaveTemplate() { /* Save template project */ }
private void TemplateInspect() { /* Run template inspection */ }
private void GdtInspect() { /* GD&T inspection dialog */ }
private void AutoAlign() { /* Auto alignment */ }
private void NPointAlign() { /* N-point alignment dialog */ }
private void FeatureAlign() { /* Feature alignment */ }
private void RpsAlign() { /* RPS alignment */ }
private void AxisAlign() { /* Axis alignment */ }
private void ImportMatrix() { /* Import alignment matrix */ }
private void CalcColorDiff() { /* Calculate color difference */ }
private void Annotate() { /* Add annotation */ }
private void ReportInfo() { /* Report info dialog */ }
private void SavePdf() { /* Save PDF report */ }
private void SaveCsv() { /* Save CSV report */ }
private void NavigateHome() { /* Switch to Home tab */ }
private void NavigateInspect() { /* Switch to Inspect tab */ }
private void ToggleFullScreen(){ /* Toggle fullscreen */ }
private void OpenOptions() { /* Open options dialog */ }
private void CollapseNav() { /* Collapse navigation panel */ }
private void EditProperties() { /* Edit selected feature props */ }
private void CloseProperties() { /* Close properties panel */ }
private void ClearAnnotations(){ /* Clear all viewport annotations */ }
private void DeleteSelection() { /* Delete selected item */ }
}
}
@@ -0,0 +1,19 @@
using Prism.Mvvm;
namespace XplorePlane.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private string _title = "Prism Application";
public string Title
{
get { return _title; }
set { SetProperty(ref _title, value); }
}
public MainWindowViewModel()
{
}
}
}
+151
View File
@@ -0,0 +1,151 @@
<Window x:Class="XplorePlane.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:XplorePlane.ViewModels"
mc:Ignorable="d"
Title="检测系统"
Height="768" Width="1136"
Background="#F5F5F5"
WindowStartupLocation="CenterScreen">
<Window.DataContext>
<vm:MainViewModel />
</Window.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
<RowDefinition Height="82"/>
<RowDefinition Height="*"/>
<RowDefinition Height="24"/>
</Grid.RowDefinitions>
<!-- Row 0: Tab Menu Bar -->
<Grid Grid.Row="0" Background="#E8E8E8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal">
<Button Content="主页" Command="{Binding NavigateHomeCommand}" Width="60" Background="#FFFFFF" Foreground="#333333" BorderBrush="#CCCCCC"/>
<Button Content="检测" Command="{Binding NavigateInspectCommand}" Width="60" Background="#0078D4" Foreground="White" BorderBrush="#0078D4"/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center" Margin="0,0,6,0">
<Button Content="全屏" Command="{Binding ToggleFullScreenCommand}" Width="46" Background="Transparent" Foreground="#333333" BorderBrush="#CCCCCC"/>
<Button Content="选项" Command="{Binding OpenOptionsCommand}" Width="46" Background="Transparent" Foreground="#333333" BorderBrush="#CCCCCC"/>
</StackPanel>
</Grid>
<!-- Row 1: Toolbar -->
<Border Grid.Row="1" Background="#FAFAFA" BorderBrush="#DDDDDD" BorderThickness="0,0,0,1">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="4,2">
<Button Content="打开" Command="{Binding OpenFileCommand}" Width="44" Background="#FFFFFF" Foreground="#333333" BorderBrush="#CCCCCC" Margin="2"/>
<Button Content="导出" Command="{Binding ExportCommand}" Width="44" Background="#FFFFFF" Foreground="#333333" BorderBrush="#CCCCCC" Margin="2"/>
<Button Content="清空" Command="{Binding ClearCommand}" Width="44" Background="#FFFFFF" Foreground="#333333" BorderBrush="#CCCCCC" Margin="2"/>
</StackPanel>
</Border>
<!-- Row 2: Main Content -->
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="180" MinWidth="120"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="180" MinWidth="140"/>
</Grid.ColumnDefinitions>
<!-- Navigation Panel -->
<Grid Grid.Column="0" Background="#FFFFFF">
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#F0F0F0" BorderBrush="#DDDDDD" BorderThickness="0,0,0,1">
<TextBlock Text="导航" Foreground="#333333" VerticalAlignment="Center" Margin="8,0" FontWeight="SemiBold"/>
</Border>
<TreeView Grid.Row="1" ItemsSource="{Binding NavigationTree}" Background="Transparent" BorderThickness="0" Foreground="#333333"/>
</Grid>
<!-- 3D Viewport -->
<Grid Grid.Column="1" Background="#E8E8E8">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="90"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#FFFFFF" BorderBrush="#DDDDDD" BorderThickness="1">
<TextBlock Text="3D Viewport" Foreground="#666666" VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="16"/>
</Border>
<Border Grid.Row="1" Background="#F5F5F5" BorderBrush="#DDDDDD" BorderThickness="0,1,0,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="16,0">
<TextBlock Text="旋转" Foreground="#666666"/>
<TextBlock Text="平移" Foreground="#666666" Margin="16,0,0,0"/>
<TextBlock Text="缩放" Foreground="#666666" Margin="16,0,0,0"/>
</StackPanel>
</Border>
</Grid>
<!-- Properties Panel -->
<Grid Grid.Column="2" Background="#FFFFFF">
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
<RowDefinition Height="*"/>
<RowDefinition Height="28"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="#F0F0F0" BorderBrush="#DDDDDD" BorderThickness="0,0,0,1">
<TextBlock Text="属性" Foreground="#333333" VerticalAlignment="Center" Margin="8,0" FontWeight="SemiBold"/>
</Border>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<StackPanel Margin="4">
<Grid Margin="0,1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="名称" Foreground="#666666"/>
<TextBlock Grid.Column="1" Text="{Binding SelectedFeature.Name}" Foreground="#333333"/>
</Grid>
<Grid Margin="0,1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="X" Foreground="#666666"/>
<TextBlock Grid.Column="1" Text="{Binding SelectedFeature.X, StringFormat=F4}" Foreground="#333333"/>
</Grid>
</StackPanel>
</ScrollViewer>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Right" Margin="4,2">
<Button Content="修改属性" Command="{Binding EditPropertiesCommand}" Margin="0,0,4,0" Background="#0078D4" Foreground="White" BorderBrush="#0078D4"/>
<Button Content="关闭" Command="{Binding ClosePropertiesCommand}" Background="#FFFFFF" Foreground="#333333" BorderBrush="#CCCCCC"/>
</StackPanel>
</Grid>
</Grid>
<!-- Row 3: Status Bar -->
<Border Grid.Row="3" Background="#F0F0F0" BorderBrush="#DDDDDD" BorderThickness="0,1,0,0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding LicenseInfo}" Foreground="#666666" Margin="8,0" VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="{Binding ConnectionStatus}" Foreground="#666666" Margin="8,0" VerticalAlignment="Center"/>
<Border Grid.Column="2" Background="#0078D4" CornerRadius="2" Margin="4,3">
<TextBlock Text="{Binding ZoomLevel, StringFormat={}{0}%}" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" Padding="4,0"/>
</Border>
</Grid>
</Border>
</Grid>
</Window>
+15
View File
@@ -0,0 +1,15 @@
using System.Windows;
namespace XplorePlane.Views
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
+12
View File
@@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
<RootNamespace>XplorePlane</RootNamespace>
<AssemblyName>XplorePlane</AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Prism.DryIoc" Version="8.1.97" />
</ItemGroup>
</Project>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,109 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"XplorePlane/1.0.0": {
"dependencies": {
"Prism.DryIoc": "8.1.97"
},
"runtime": {
"XplorePlane.dll": {}
}
},
"DryIoc.dll/4.7.7": {
"runtime": {
"lib/netstandard2.0/DryIoc.dll": {
"assemblyVersion": "4.7.7.0",
"fileVersion": "4.7.7.0"
}
}
},
"Microsoft.Xaml.Behaviors.Wpf/1.1.31": {
"runtime": {
"lib/net5.0-windows7.0/Microsoft.Xaml.Behaviors.dll": {
"assemblyVersion": "1.1.0.0",
"fileVersion": "1.1.31.10800"
}
}
},
"Prism.Core/8.1.97": {
"runtime": {
"lib/net5.0/Prism.dll": {
"assemblyVersion": "8.1.97.5141",
"fileVersion": "8.1.97.5141"
}
}
},
"Prism.DryIoc/8.1.97": {
"dependencies": {
"DryIoc.dll": "4.7.7",
"Prism.Wpf": "8.1.97"
},
"runtime": {
"lib/net5.0-windows7.0/Prism.DryIoc.Wpf.dll": {
"assemblyVersion": "8.1.97.5141",
"fileVersion": "8.1.97.5141"
}
}
},
"Prism.Wpf/8.1.97": {
"dependencies": {
"Microsoft.Xaml.Behaviors.Wpf": "1.1.31",
"Prism.Core": "8.1.97"
},
"runtime": {
"lib/net5.0-windows7.0/Prism.Wpf.dll": {
"assemblyVersion": "8.1.97.5141",
"fileVersion": "8.1.97.5141"
}
}
}
}
},
"libraries": {
"XplorePlane/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"DryIoc.dll/4.7.7": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GC2JdW0mN3wTcbcteP7LWwfU1eao0If/vMozCXSbcNZbHQD7kBjcKFO82g0OLssr7gGPWS4+vWpNZ1oOy54JKw==",
"path": "dryioc.dll/4.7.7",
"hashPath": "dryioc.dll.4.7.7.nupkg.sha512"
},
"Microsoft.Xaml.Behaviors.Wpf/1.1.31": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LZpuf82ACZWldmfMuv3CTUMDh3o0xo0uHUaybR5HgqVLDBJJ9RZLykplQ/bTJd0/VDt3EhD4iDgUgbdIUAM+Kg==",
"path": "microsoft.xaml.behaviors.wpf/1.1.31",
"hashPath": "microsoft.xaml.behaviors.wpf.1.1.31.nupkg.sha512"
},
"Prism.Core/8.1.97": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EP5zrvWddw3eSq25Y7hHnDYdmLZEC2Z/gMrvmHzUuLbitmA1UaS7wQUlSwNr9Km8lzJNCvytFnaGBEFukHgoHg==",
"path": "prism.core/8.1.97",
"hashPath": "prism.core.8.1.97.nupkg.sha512"
},
"Prism.DryIoc/8.1.97": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8hdeAoZ+x1eBNIg+nMzox01uGUR4HnbCCR1iClNKwDfCWQ4ZtjEjsyeTXHcXKtG45xXqiERmJVew5tJmCdVPWw==",
"path": "prism.dryioc/8.1.97",
"hashPath": "prism.dryioc.8.1.97.nupkg.sha512"
},
"Prism.Wpf/8.1.97": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZEa6S1mK35h8/blyb0uR0ed3wkpHtPdhB4eniXINJnTiJMWlGl/As6SVlFFdOPD+qsEdWNYV3xgyQD/ue5cvBA==",
"path": "prism.wpf/8.1.97",
"hashPath": "prism.wpf.8.1.97.nupkg.sha512"
}
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,15 @@
{
"runtimeOptions": {
"tfm": "net6.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "6.0.0"
}
]
}
}
@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
@@ -0,0 +1,55 @@
#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "29E506DCACBE5B68283BEFEAB2660A0DF4EC4E29"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Controls.Ribbon;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Shell;
using XplorePlane;
namespace XplorePlane {
/// <summary>
/// App
/// </summary>
public partial class App : System.Windows.Application {
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.1.0")]
public static void Main() {
XplorePlane.App app = new XplorePlane.App();
app.Run();
}
}
}
@@ -0,0 +1,75 @@
#pragma checksum "..\..\..\..\Views\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "CC4673611DE44ABFBA8B04D808735390B2CF0671"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Automation;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Controls.Ribbon;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Effects;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Media.TextFormatting;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Shell;
using XplorePlane.ViewModels;
namespace XplorePlane.Views {
/// <summary>
/// MainWindow
/// </summary>
public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
private bool _contentLoaded;
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.1.0")]
public void InitializeComponent() {
if (_contentLoaded) {
return;
}
_contentLoaded = true;
System.Uri resourceLocater = new System.Uri("/XplorePlane;component/views/mainwindow.xaml", System.UriKind.Relative);
#line 1 "..\..\..\..\Views\MainWindow.xaml"
System.Windows.Application.LoadComponent(this, resourceLocater);
#line default
#line hidden
}
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "10.0.1.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
this._contentLoaded = true;
}
}
}
@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("XplorePlane")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("XplorePlane")]
[assembly: System.Reflection.AssemblyTitleAttribute("XplorePlane")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// 由 MSBuild WriteCodeFragment 类生成。
@@ -0,0 +1 @@
ba1aa2b628af9362fa0d453fd8ab75213c6a6e2b2a8f3b40eb811522fb2e83ef
@@ -0,0 +1,18 @@
is_global = true
build_property.TargetFramework = net6.0-windows
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v6.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = XplorePlane
build_property.ProjectDir = C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
build_property.EffectiveAnalysisLevelStyle = 6.0
build_property.EnableCodeStyleSeverity =
@@ -0,0 +1 @@
01f95940c0fa45050b1d6bb5a9bf1bb0a8865ed99950cc8529b1ca6298179f57
@@ -0,0 +1,28 @@
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\XplorePlane.exe
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\XplorePlane.deps.json
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\XplorePlane.runtimeconfig.json
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\XplorePlane.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\XplorePlane.pdb
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\DryIoc.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\Microsoft.Xaml.Behaviors.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\Prism.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\Prism.DryIoc.Wpf.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\bin\Debug\net6.0-windows\Prism.Wpf.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.csproj.AssemblyReference.cache
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\Views\MainWindow.g.cs
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\App.g.cs
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\GeneratedInternalTypeHelper.g.cs
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane_MarkupCompile.cache
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane_MarkupCompile.lref
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\Views\MainWindow.baml
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.g.resources
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.AssemblyInfoInputs.cache
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.AssemblyInfo.cs
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.csproj.CoreCompileInputs.cache
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePl.321B731D.Up2Date
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\refint\XplorePlane.dll
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.pdb
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\XplorePlane.genruntimeconfig.cache
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\ref\XplorePlane.dll
Binary file not shown.
@@ -0,0 +1 @@
d6134c01254919f927d21dc49cf0a049d99b315044f5276c0c67f526ba6ebd4d
Binary file not shown.
@@ -0,0 +1,20 @@
XplorePlane
winexe
C#
.cs
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\
XplorePlane
none
false
TRACE;DEBUG;NET;NET6_0;NETCOREAPP;WINDOWS;WINDOWS7_0;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER;WINDOWS7_0_OR_GREATER
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\App.xaml
1-1644662438
5-1233227688
1991178502162
Views\MainWindow.xaml;
False
@@ -0,0 +1,4 @@
C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\obj\Debug\net6.0-windows\GeneratedInternalTypeHelper.g.cs
FC:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\Views\MainWindow.xaml;;
@@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("XplorePlane")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("XplorePlane")]
[assembly: System.Reflection.AssemblyTitleAttribute("XplorePlane")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
// 由 MSBuild WriteCodeFragment 类生成。
@@ -0,0 +1 @@
ba1aa2b628af9362fa0d453fd8ab75213c6a6e2b2a8f3b40eb811522fb2e83ef
@@ -0,0 +1,18 @@
is_global = true
build_property.TargetFramework = net6.0-windows
build_property.TargetFrameworkIdentifier = .NETCoreApp
build_property.TargetFrameworkVersion = v6.0
build_property.TargetPlatformMinVersion = 7.0
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = XplorePlane
build_property.ProjectDir = C:\Users\zhengxuan.zhang\source\repos\BlankApp1\XplorePlane\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
build_property.EffectiveAnalysisLevelStyle = 6.0
build_property.EnableCodeStyleSeverity =
Binary file not shown.
@@ -0,0 +1,82 @@
{
"format": 1,
"restore": {
"C:\\Users\\zhengxuan.zhang\\source\\repos\\BlankApp1\\XplorePlane\\XplorePlane.csproj": {}
},
"projects": {
"C:\\Users\\zhengxuan.zhang\\source\\repos\\BlankApp1\\XplorePlane\\XplorePlane.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\zhengxuan.zhang\\source\\repos\\BlankApp1\\XplorePlane\\XplorePlane.csproj",
"projectName": "XplorePlane",
"projectPath": "C:\\Users\\zhengxuan.zhang\\source\\repos\\BlankApp1\\XplorePlane\\XplorePlane.csproj",
"packagesPath": "C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\",
"outputPath": "C:\\Users\\zhengxuan.zhang\\source\\repos\\BlankApp1\\XplorePlane\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\zhengxuan.zhang\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0-windows"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"net6.0-windows7.0": {
"targetAlias": "net6.0-windows",
"dependencies": {
"Prism.DryIoc": {
"target": "Package",
"version": "[8.1.97, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
},
"Microsoft.WindowsDesktop.App.WPF": {
"privateAssets": "none"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.101\\RuntimeIdentifierGraph.json"
}
}
}
}
}
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\zhengxuan.zhang\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\zhengxuan.zhang\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_Xaml_Behaviors_Wpf Condition=" '$(PkgMicrosoft_Xaml_Behaviors_Wpf)' == '' ">C:\Users\zhengxuan.zhang\.nuget\packages\microsoft.xaml.behaviors.wpf\1.1.31</PkgMicrosoft_Xaml_Behaviors_Wpf>
</PropertyGroup>
</Project>
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" />
File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
{
"version": 2,
"dgSpecHash": "KjD9lSKskd0=",
"success": true,
"projectFilePath": "C:\\Users\\zhengxuan.zhang\\source\\repos\\BlankApp1\\XplorePlane\\XplorePlane.csproj",
"expectedPackageFiles": [
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\dryioc.dll\\4.7.7\\dryioc.dll.4.7.7.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\microsoft.netcore.platforms\\1.1.0\\microsoft.netcore.platforms.1.1.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\microsoft.xaml.behaviors.wpf\\1.1.31\\microsoft.xaml.behaviors.wpf.1.1.31.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\prism.core\\8.1.97\\prism.core.8.1.97.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\prism.dryioc\\8.1.97\\prism.dryioc.8.1.97.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\prism.wpf\\8.1.97\\prism.wpf.8.1.97.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.reflection.emit.ilgeneration\\4.3.0\\system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.reflection.emit.lightweight\\4.3.0\\system.reflection.emit.lightweight.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512",
"C:\\Users\\zhengxuan.zhang\\.nuget\\packages\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512"
],
"logs": []
}
+44
View File
@@ -0,0 +1,44 @@
InspectionApp/
├── InspectionApp.csproj # .NET 8 WPF project file
├── App.xaml # Application + global ResourceDictionary
├── App.xaml.cs
├── Views/
│ └── MainWindow.xaml # Main window (Grid + StackPanel layout)
│ └── MainWindow.xaml.cs # Code-behind (minimal only TreeView event)
├── ViewModels/
│ └── MainViewModel.cs # Root VM: navigation, callouts, props, commands
│ └── NavGroupNode.cs # Tree group node VM
│ └── NavLeafNode.cs # Tree leaf node VM
│ └── InspectionCalloutVM.cs # Overlay callout card VM
│ └── CalloutRowVM.cs # Single callout data row VM
│ └── RelayCommand.cs # ICommand implementation
├── Models/
│ └── FeatureProperties.cs # Bindable domain model for right panel
└── Assets/
└── Icons/ # 28×28 toolbar icon PNGs
├── open.png
├── export.png
├── clear.png
├── template_open.png
├── template_save.png
├── template_inspect.png
├── gdt.png
├── auto_align.png
├── npoint.png
├── feature_align.png
├── rps.png
├── axis_align.png
├── matrix.png
├── color_diff.png
├── annotate.png
├── report_info.png
├── pdf.png
├── csv.png
├── distance.png
├── angle.png
└── mouse_rotate.png