数字孪生

利用物理模型、传感器数据、历史数据等在虚拟空间中完成映射,反映相对应实体装备的全生命周期过程。

1、开发工具.NET或者Unity

  • Windows 使用WPF (windows Present Framework)
  • macOS/linux使用maui (multi platform application UI)是WPF的扩展
  • 安装maui
    • dotnet workload install maui

2、通信仿真

3、创建项目

  • 创建解决方案(一个解决方案下可以有多个项目)

dotnet new sln -n 解决方案名

  • 创建maui项目

dotnet new maui -n 项目名

  • 配置task.json和launch.json 配置时参考命令

  • task.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
{
"version": "2.0.0",
"tasks": [
{
"label": "build maui-ios",
"command": "dotnet",
"type": "shell",
"args": [
"build",
"-t:Build",//target
// "-p:Configuration=Debug",//Property
"-c", "Debug",//configuration 和上边的等价
"-f", "net10.0-ios", //framework
"-r", "iossimulator-arm64",//runtime 运行时架构,ios模拟器设备
// "--runtime", "ios-arm64",
// "-p:MauiTargetProject=${workspaceFolder}/FirstProject/FirstProject.csproj", //项目配置文件,指定 MAUI 目标项目文件路径
// "-p:XamlTools=/Users/liuchuanxi/.vscode/extensions/ms-dotnettools.csharp-2.110.4-darwin-arm64/.xamlTools",//指定 C# 扩展提供的 XAML 工具路径
// "-p:EnableDiagnostics=True", //启用诊断功能
// "-p:EnableMauiXamlDiagnostics=True",
"${workspaceFolder}/FirstProject/FirstProject.csproj"//要构建的项目文件完整路径
],
"problemMatcher": "$msCompile"
},
{
"label": "build maui-mac",
"command": "dotnet",
"type": "shell",
"args": [
"build",
"-t:Build",//target
// "-p:Configuration=Debug",//Property
"-c", "Debug",//configuration 和上边的等价
"-f", "net10.0-maccatalyst", //framework
"-r", "maccatalyst-arm64",//runtime 运行时架构
// "-p:MauiTargetProject=${workspaceFolder}/FirstProject/FirstProject.csproj", //项目配置文件,指定 MAUI 目标项目文件路径
// "-p:XamlTools=/Users/liuchuanxi/.vscode/extensions/ms-dotnettools.csharp-2.110.4-darwin-arm64/.xamlTools",//指定 C# 扩展提供的 XAML 工具路径
// "-p:EnableDiagnostics=True", //启用诊断功能
// "-p:EnableMauiXamlDiagnostics=True",
"${workspaceFolder}/FirstProject/FirstProject.csproj"//要构建的项目文件完整路径
],
"problemMatcher": "$msCompile"
},
// {
// "label": "build Lesson-snl",
// "command": "dotnet",
// "type": "shell",
// "args": [
// "build",
// "${workspaceRoot}/CSharp-Lesson.slnx"
// ],
// "problemMatcher": "$msCompile"
// }
]
}
  • launch.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Run iOS Simulator",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build maui-ios",
"program": "dotnet",
"args": [
"build",
"-t:run", //运行,需要提前构建项目
// "--project",
// "${workspaceFolder}/FirstProject/FirstProject.csproj", //不使用--project开关
"--framework",
"net10.0-ios",
// "-p:RuntimeIdentifier=ios-arm64",
"-r", "iossimulator-arm64",//此处要和task构建的运行时架构一致否则报错
"-p:_DeviceName=:v2:udid=6E2F2C58-D041-4097-BF2E-791E169DC1B9"//模拟器udid, 通过xcode->windows->simulor查udid
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal"
},
{
"name": "Run Mac Catalyst",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build maui-mac",
"program": "dotnet",
"args": [
"run", //一键式构建+运行
"--project",
"${workspaceFolder}/FirstProject/FirstProject.csproj",
"--framework",
"net10.0-maccatalyst",
"--runtime",
"maccatalyst-arm64"
],
"cwd": "${workspaceFolder}",
"console": "integratedTerminal"
}
// {
// "name": "iOS Simulator",
// "type": "dotnet-maui",
// "request": "launch",
// "project": "${workspaceFolder}/FirstProject/FirstProject.csproj",
// "target": "ios-simulator",
// "framework": "net10.0-ios",
// "runtimeIdentifier": "iossimulator-arm64",
// "preLaunchTask": "build maui-ios"
// },
// {
// "name": "Mac Catalyst",
// "type": "dotnet-maui",
// "request": "launch",
// "project": "${workspaceFolder}/FirstProject/FirstProject.csproj",
// "target": "maccatalyst",
// "framework": "net10.0-maccatalyst",
// "runtimeIdentifier": "maccatalyst-arm64",
// "preLaunchTask": "build maui-mac"
// }
]
}
  • 常用命令

    1
    2
    3
    4
    5
    6
    dotnet workload install <工作负荷> --version 10.0.1 #安装平台应用
    dotnet workload uninstall <工作负荷> #卸载平台应用
    dotnet workload search #查询可用平台应用
    dotnet workload list #已安装的平台
    dotnet --info #dotnet信息
    dotnet new globaljson --sdk-version 10.0.100 --force #切换dotnet版本

4、vscode创建项目

5、(1)创建项目时要联网,否则一些依赖配置无法下载

​ (2)运行环境macos系统是15+,.Net10+, Xcode 26+

​ (3) 各类型项目(例如maui)sdk的版本要和dotnet sdk版本一致否则报错

​ (4)MAUI 采用‌原生控件渲染‌,直接利用平台特定的 UI 组件(如 Android 的 Android.Views 或 iOS 的 UIKit),从而实现接近原生的性能和外观,但需为每个平台编写或适配特定代码;而 MAUI Blazor 将 Blazor(一种基于 Web 技术的框架)集成到 MAUI 中,使用‌HTML/CSS/JavaScript 渲染 UI‌,通过 WebView 在原生外壳中显示内容,使 UI 保持跨平台一致性,但可能引入 Web 技术的性能开销。‌

工程项目讲解

image-20260109165230285
  • App.xaml

    image-20260109165504581

  • MainPage.xaml主窗口

3D空间

  • 概念:坐标系,点线面,三角顶点网格,材质(贴图),光源,相机
  • 模型结构:MeshGemetry3D, Positions, TriangleIndices, Material
  • 相机:透视相机、正交相机
  • 光源:环境光、平行光、点光源、聚光灯
  • 对象容器:ViewPort3D