diff --git a/autocad-plugin/FurnitureExporter/Commands.cs b/autocad-plugin/FurnitureExporter/Commands.cs
index e28f128c..f43bfc95 100644
--- a/autocad-plugin/FurnitureExporter/Commands.cs
+++ b/autocad-plugin/FurnitureExporter/Commands.cs
@@ -30,12 +30,13 @@ public class FurnitureExporterApp : IExtensionApplication
doc?.Editor.WriteMessage($"║ 家具导出插件 v{PluginVersion} 已加载 ║\n");
doc?.Editor.WriteMessage("║ ║\n");
doc?.Editor.WriteMessage("║ 命令: ║\n");
- doc?.Editor.WriteMessage("║ FEXPORT - 整套家具兼容导出 ║\n");
- doc?.Editor.WriteMessage("║ FEXPORTASSET - 单资产导出到资产中心 ║\n");
+ doc?.Editor.WriteMessage("║ FEXPORT - 单资产导出到资产中心 ║\n");
+ doc?.Editor.WriteMessage("║ FEXPORTASSET - 单资产导出别名 ║\n");
+ doc?.Editor.WriteMessage("║ FEXPORTPRODUCT - 整套家具兼容导出 ║\n");
doc?.Editor.WriteMessage("║ FINFO - 查看选中实体信息 ║\n");
doc?.Editor.WriteMessage("║ ║\n");
doc?.Editor.WriteMessage($"║ v{PluginVersion} 新功能: ║\n");
- doc?.Editor.WriteMessage("║ · 新增资产中心单资产导出模式 ║\n");
+ doc?.Editor.WriteMessage("║ · 默认进入资产中心单资产导出 ║\n");
doc?.Editor.WriteMessage("║ · 新增 assembly 装配语义导出层 ║\n");
doc?.Editor.WriteMessage("║ · 语义优先用孔位/五金/配合面推导 ║\n");
doc?.Editor.WriteMessage("║ · 安装顺序仍保留给 Web 端人工设定 ║\n");
@@ -372,7 +373,7 @@ public class Commands
///
/// 主导出命令 - 导出板材 GLB + 五金件位置 JSON
///
- [CommandMethod("FEXPORT")]
+ [CommandMethod("FEXPORTPRODUCT")]
public void ExportFurniture()
{
var doc = AcApp.DocumentManager.MdiActiveDocument;
@@ -414,7 +415,7 @@ public class Commands
ed.WriteMessage(" 1. 输入命令 UNITS 打开单位设置\n");
ed.WriteMessage(" 2. 将 '插入时的缩放单位' 改为 '毫米'\n");
ed.WriteMessage(" 3. 点击确定\n");
- ed.WriteMessage(" 4. 重新运行 FEXPORT 命令\n");
+ ed.WriteMessage(" 4. 重新运行 FEXPORTPRODUCT 命令\n");
ed.WriteMessage("\n");
// 询问是否继续(仅供高级用户)
@@ -454,7 +455,7 @@ public class Commands
panelIds = FilterSolids(panelIds, db);
if (panelIds.Length == 0)
{
- ed.WriteMessage(" ⚠️ 无法恢复板材(可能图纸已变更/实体被删除)。已清除会话,请重新运行 FEXPORT。\n");
+ ed.WriteMessage(" ⚠️ 无法恢复板材(可能图纸已变更/实体被删除)。已清除会话,请重新运行 FEXPORTPRODUCT。\n");
ExportSessionManager.Clear(docKey);
return;
}
@@ -555,7 +556,7 @@ public class Commands
ed.WriteMessage($" ✓ 已记录 {panelIds.Length} 个板材\n");
ed.WriteMessage("\n 你现在可以自由调整图层显示/冻结/隔离等操作。\n");
- ed.WriteMessage(" 调整完成后,再次运行 FEXPORT 继续第 2 步(选五金并导出)。\n");
+ ed.WriteMessage(" 调整完成后,再次运行 FEXPORTPRODUCT 继续第 2 步(选五金并导出)。\n");
var proceedOpt = new PromptKeywordOptions(
"\n是否现在直接继续第 2 步? [继续(C)/稍后(R)]",
@@ -567,7 +568,7 @@ public class Commands
if (proceedResult.Status != PromptStatus.OK || proceedResult.StringResult != "Continue")
{
- ed.WriteMessage("\n已暂停导出。提示:再次运行 FEXPORT 继续;运行 FEXPORTRESET 可清除暂存。\n");
+ ed.WriteMessage("\n已暂停导出。提示:再次运行 FEXPORTPRODUCT 继续;运行 FEXPORTRESET 可清除暂存。\n");
return;
}
}
@@ -857,8 +858,25 @@ public class Commands
}
}
+ [CommandMethod("FEXPORTBUNDLE")]
+ public void ExportFurnitureBundle()
+ {
+ ExportFurniture();
+ }
+
+ [CommandMethod("FEXPORT")]
+ public void ExportAssetDefault()
+ {
+ ExportSingleAssetCore();
+ }
+
[CommandMethod("FEXPORTASSET")]
public void ExportSingleAsset()
+ {
+ ExportSingleAssetCore();
+ }
+
+ private void ExportSingleAssetCore()
{
var doc = AcApp.DocumentManager.MdiActiveDocument;
if (doc == null)
@@ -1116,7 +1134,7 @@ public class Commands
var ed = doc.Editor;
var docKey = string.IsNullOrWhiteSpace(doc.Name) ? "Untitled" : doc.Name;
ExportSessionManager.Clear(docKey);
- ed.WriteMessage("\n已清除 FEXPORT 暂存会话。请重新运行 FEXPORT。\n");
+ ed.WriteMessage("\n已清除整套兼容导出暂存会话。请重新运行 FEXPORTPRODUCT。\n");
}
private static List GetEntityHandles(Database db, ObjectId[] ids)
diff --git a/autocad-plugin/FurnitureExporter/FurnitureExporter.Tests/CommandRegistrationTests.cs b/autocad-plugin/FurnitureExporter/FurnitureExporter.Tests/CommandRegistrationTests.cs
new file mode 100644
index 00000000..7d4f0be9
--- /dev/null
+++ b/autocad-plugin/FurnitureExporter/FurnitureExporter.Tests/CommandRegistrationTests.cs
@@ -0,0 +1,42 @@
+using System;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace FurnitureExporter.Tests
+{
+ public class CommandRegistrationTests
+ {
+ [Fact]
+ public void Fexport_DefaultsToSingleAssetExport()
+ {
+ var source = ReadCommandsSource();
+
+ Assert.Matches(CommandMethodPattern("FEXPORT", "ExportAssetDefault"), source);
+ Assert.Matches(CommandMethodPattern("FEXPORTASSET", "ExportSingleAsset"), source);
+ Assert.DoesNotMatch(CommandMethodPattern("FEXPORT", "ExportFurniture"), source);
+ }
+
+ [Fact]
+ public void LegacyProductBundleExport_UsesExplicitCompatibilityCommands()
+ {
+ var source = ReadCommandsSource();
+
+ Assert.Matches(CommandMethodPattern("FEXPORTPRODUCT", "ExportFurniture"), source);
+ Assert.Matches(CommandMethodPattern("FEXPORTBUNDLE", "ExportFurnitureBundle"), source);
+ }
+
+ private static string ReadCommandsSource()
+ {
+ var path = Path.GetFullPath(
+ Path.Combine(AppContext.BaseDirectory, @"..\..\..\..\Commands.cs"));
+ return File.ReadAllText(path);
+ }
+
+ private static Regex CommandMethodPattern(string commandName, string methodName)
+ {
+ return new Regex(
+ $@"\[CommandMethod\(""{Regex.Escape(commandName)}""\)\]\s+public\s+void\s+{Regex.Escape(methodName)}\s*\(",
+ RegexOptions.Multiline);
+ }
+ }
+}
diff --git a/autocad-plugin/README.md b/autocad-plugin/README.md
index d73a8737..a9df00e1 100644
--- a/autocad-plugin/README.md
+++ b/autocad-plugin/README.md
@@ -1,13 +1,13 @@
# AutoCAD 家具导出插件
-用于 AutoCAD 2024 的家具 3D 模型导出插件。导出板材模型和五金件安装位置,用于 Web 端 3D 展示和安装视频生成。
+用于 AutoCAD 2024 的家具 3D 模型导出插件。当前主流程是按资产中心口径导出单板材、单组件或单五金件,用于后续辅助装配和规格款入库。
## 功能特点
-- **只导出板材模型** - 五金件使用位置引用,文件体积小(1-3MB vs 30-50MB)
-- **自动分组五金件** - 按几何特征自动识别相同类型的五金件
-- **精确位置记录** - 记录每个五金件的安装位置和旋转角度
-- **服务端自动匹配** - 上传后自动匹配五金件库
+- **单资产导出** - `FEXPORT` 默认导出单板材、单组件或单五金件
+- **板材语义保留** - 导出孔位、孔组、吸附图样和吸附面,供辅助装配使用
+- **五金规格提取** - 单五金模式保留几何签名、图层类型和实例信息
+- **整套兼容保留** - 旧整套家具导出迁移到 `FEXPORTPRODUCT`
## 系统要求
@@ -20,7 +20,7 @@
### 方法 1:手动安装发版包(推荐给产品/实施)
1. 完全关闭 AutoCAD 2024
-2. 解压 `dist/家具导出插件-v2.3.1-一键安装版.zip`
+2. 解压 `dist/家具导出插件-v2.6.0-一键安装版.zip`
3. 将整个 `FurnitureExporter.bundle` 文件夹复制到:
```text
@@ -39,7 +39,7 @@
### 方法 2:一键安装
-双击 `dist/家具导出插件-v2.3.1-一键安装版/安装.bat`
+双击 `dist/家具导出插件-v2.6.0-一键安装版/安装.bat`
脚本会自动:
1. 复制插件到 `%AppData%\Autodesk\ApplicationPlugins\FurnitureExporter.bundle`
@@ -90,7 +90,7 @@ dotnet build -c Release
## 使用方法
-### FEXPORT - 导出家具模型
+### FEXPORT - 导出单资产到资产中心
```
命令: FEXPORT
@@ -98,13 +98,21 @@ dotnet build -c Release
**操作步骤:**
-1. **选择板材** - 框选所有板材实体,按 Enter 确认
-2. **选择五金件** - 框选所有五金件,按 Enter 确认(可跳过)
-3. **保存文件** - 选择保存位置
+1. **选择资产类型** - 板材 / 组件 / 五金
+2. **选择实体** - 框选该单资产包含的 3D Solid 或图块,按 Enter 确认
+3. **保存文件** - 选择 ZIP 保存位置
-**输出文件:** `xxx_export.zip`,包含:
-- `model.glb` - 板材 3D 模型
-- `hardware.json` - 五金件位置数据
+**输出文件:** `xxx_board_asset.zip` / `xxx_component_asset.zip` / `xxx_hardware_asset.zip`,包含:
+- `model.obj` - 单资产模型
+- `hardware.json` - 单资产结构化数据,包含 `exportMode: "single_asset"` 与 `assetTypeHint`
+
+### FEXPORTPRODUCT - 整套家具兼容导出
+
+```
+命令: FEXPORTPRODUCT
+```
+
+仅用于旧产品链路兼容。新资产中心和辅助装配测试请优先使用 `FEXPORT`。
### FINFO - 查看实体信息
@@ -120,36 +128,19 @@ dotnet build -c Release
```json
{
- "version": "1.0",
- "exportedAt": "2024-01-15T10:30:00Z",
- "sourceFile": "衣柜.dwg",
+ "version": "2.6",
+ "exportedAt": "2026-05-11T10:30:00Z",
+ "sourceFile": "桌腿.dwg",
"software": "AutoCAD 2024",
- "pluginVersion": "1.0.0",
- "modelFile": "model.glb",
- "panelCount": 12,
- "hardwareTypes": [
- {
- "typeId": "type_000",
- "signature": {
- "width": 35.0,
- "height": 12.0,
- "depth": 12.0,
- "volume": 4032.5
- },
- "instances": [
- {
- "position": { "x": 100.0, "y": 50.0, "z": 18.0 },
- "rotation": { "x": 0, "y": 0, "z": 1.5708 },
- "sourceLayer": "五金件"
- },
- {
- "position": { "x": 100.0, "y": 150.0, "z": 18.0 },
- "rotation": { "x": 0, "y": 0, "z": 1.5708 },
- "sourceLayer": "五金件"
- }
- ]
- }
- ]
+ "pluginVersion": "2.6.0",
+ "modelFile": "model.obj",
+ "exportMode": "single_asset",
+ "assetTypeHint": "COMPONENT",
+ "sourceEntityCount": 1,
+ "panelCount": 1,
+ "snapPatterns": [],
+ "snapSurfaces": [],
+ "hardwareTypes": []
}
```
@@ -160,17 +151,17 @@ dotnet build -c Release
─────── ──────
1. 打开 DWG 文件
2. FEXPORT
-3. 框选板材 ────────────────→
-4. 框选五金件 ──────────────→
-5. 保存 ZIP ────────────────→ 上传 ZIP
+3. 选择资产类型(板材/组件/五金)
+4. 框选单个资产实体 ───────→
+5. 保存 ZIP ────────────────→ 上传到资产中心
↓
自动解析
↓
- 匹配五金件库
+ 创建/更新资产族规格款
↓
保存到数据库
↓
- 3D 预览 ✓
+ 辅助装配可用 ✓
```
## 开发
diff --git a/autocad-plugin/build-installer.ps1 b/autocad-plugin/build-installer.ps1
index 8bb9be84..9f07084f 100644
--- a/autocad-plugin/build-installer.ps1
+++ b/autocad-plugin/build-installer.ps1
@@ -90,7 +90,7 @@ $PackageXml = @"
SchemaVersion="1.0"
AutodeskProduct="AutoCAD"
Name="$PluginName"
- Description="家具导出插件 v$Version - 支持整套兼容导出与资产中心单资产导出"
+ Description="家具导出插件 v$Version - 默认资产中心单资产导出,保留整套兼容导出"
Author="Furniture 3D System"
AppVersion="$Version"
FriendlyVersion="$Version"
@@ -119,7 +119,7 @@ $PackageXml = @"
AppName="$PluginName"
Version="$Version"
ModuleName="./Contents/$PluginName.dll"
- AppDescription="家具导出插件 - 支持整套兼容导出与资产中心单资产导出"
+ AppDescription="家具导出插件 - 默认资产中心单资产导出,保留整套兼容导出"
LoadOnAutoCADStartup="True"
AppType="Net" />
@@ -306,7 +306,7 @@ New-ItemProperty -Path $appKey -Name "DESCRIPTION" -PropertyType String -Value "
Write-Step "[3/3] 完成"
Write-Host ""
Write-Host "安装完成。请完全关闭 AutoCAD 后重新启动。" -ForegroundColor Green
-Write-Host "启动后命令行输入:FEXPORTASSET(单资产)或 FEXPORT(整套兼容)" -ForegroundColor Green
+Write-Host "启动后命令行输入:FEXPORT(单资产)或 FEXPORTPRODUCT(整套兼容)" -ForegroundColor Green
Write-Host ""
'@
Write-TextFileUtf8Bom -Path (Join-Path $InstallerDir "install.ps1") -Content $InstallPs1
@@ -480,8 +480,10 @@ $Readme = @"
使用方法
───────────────────────────────────────────────────────────────────────
打开 AutoCAD 后,命令行输入:
- FEXPORTASSET -> 单资产导出到资产中心(板材 / 组件 / 五金)
- FEXPORT -> 整套家具兼容导出
+ FEXPORT -> 单资产导出到资产中心(板材 / 组件 / 五金)
+ FEXPORTASSET -> 单资产导出别名
+ FEXPORTPRODUCT -> 整套家具兼容导出
+ FEXPORTBUNDLE -> 整套家具兼容导出别名
FINFO -> 查看实体信息
安装脚本做了什么(便于 IT/排查)
@@ -495,7 +497,7 @@ $Readme = @"
常见问题
───────────────────────────────────────────────────────────────────────
-Q: 提示“未知命令 FEXPORTASSET / FEXPORT”
+Q: 提示“未知命令 FEXPORT / FEXPORTPRODUCT”
A: 1) 确认已重启 AutoCAD(关闭再打开)
2) 确认插件目录存在:
%AppData%\Autodesk\ApplicationPlugins\FurnitureExporter.bundle\Contents\FurnitureExporter.dll
diff --git a/autocad-plugin/build.cmd b/autocad-plugin/build.cmd
index 7503da49..ba11b1c5 100644
--- a/autocad-plugin/build.cmd
+++ b/autocad-plugin/build.cmd
@@ -75,7 +75,8 @@ if %ERRORLEVEL% EQU 0 (
echo 1. 打开 AutoCAD 2024
echo 2. 输入命令: NETLOAD
echo 3. 选择上述 DLL 文件
- echo 4. 使用命令: FEXPORT 导出模型
+ echo 4. 使用命令: FEXPORT 导出单资产模型
+ echo 旧整套兼容导出: FEXPORTPRODUCT
echo.
) else (
echo.
diff --git a/autocad-plugin/build.ps1 b/autocad-plugin/build.ps1
index d3aba144..7520958e 100644
--- a/autocad-plugin/build.ps1
+++ b/autocad-plugin/build.ps1
@@ -84,7 +84,8 @@ try {
Write-Host " 1. 打开 AutoCAD 2024"
Write-Host " 2. 输入命令: NETLOAD"
Write-Host " 3. 选择上述 DLL 文件"
- Write-Host " 4. 使用命令: FEXPORT 导出模型"
+ Write-Host " 4. 使用命令: FEXPORT 导出单资产模型"
+ Write-Host " 旧整套兼容导出: FEXPORTPRODUCT"
Write-Host ""
}
else {
diff --git a/autocad-plugin/installer/FurnitureExporter.bundle/PackageContents.xml b/autocad-plugin/installer/FurnitureExporter.bundle/PackageContents.xml
index 2bdec4dd..3e479416 100644
--- a/autocad-plugin/installer/FurnitureExporter.bundle/PackageContents.xml
+++ b/autocad-plugin/installer/FurnitureExporter.bundle/PackageContents.xml
@@ -3,7 +3,7 @@
SchemaVersion="1.0"
AutodeskProduct="AutoCAD"
Name="FurnitureExporter"
- Description="家具导出插件 v2.6.0 - 支持整套兼容导出与资产中心单资产导出"
+ Description="家具导出插件 v2.6.0 - 默认资产中心单资产导出,保留整套兼容导出"
Author="Furniture 3D System"
AppVersion="2.6.0"
FriendlyVersion="2.6.0"
@@ -32,7 +32,7 @@
AppName="FurnitureExporter"
Version="2.6.0"
ModuleName="./Contents/FurnitureExporter.dll"
- AppDescription="家具导出插件 - 支持整套兼容导出与资产中心单资产导出"
+ AppDescription="家具导出插件 - 默认资产中心单资产导出,保留整套兼容导出"
LoadOnAutoCADStartup="True"
AppType="Net" />
diff --git a/autocad-plugin/installer/install.ps1 b/autocad-plugin/installer/install.ps1
index 4c1cc4c4..91bf0492 100644
--- a/autocad-plugin/installer/install.ps1
+++ b/autocad-plugin/installer/install.ps1
@@ -174,5 +174,5 @@ New-ItemProperty -Path $appKey -Name "DESCRIPTION" -PropertyType String -Value "
Write-Step "[3/3] 完成"
Write-Host ""
Write-Host "安装完成。请完全关闭 AutoCAD 后重新启动。" -ForegroundColor Green
-Write-Host "启动后命令行输入:FEXPORTASSET(单资产)或 FEXPORT(整套兼容)" -ForegroundColor Green
+Write-Host "启动后命令行输入:FEXPORT(单资产)或 FEXPORTPRODUCT(整套兼容)" -ForegroundColor Green
Write-Host ""
\ No newline at end of file
diff --git a/autocad-plugin/installer/使用说明.txt b/autocad-plugin/installer/使用说明.txt
index e2a66d95..06ac4c6e 100644
--- a/autocad-plugin/installer/使用说明.txt
+++ b/autocad-plugin/installer/使用说明.txt
@@ -16,8 +16,10 @@
使用方法
───────────────────────────────────────────────────────────────────────
打开 AutoCAD 后,命令行输入:
- FEXPORTASSET -> 单资产导出到资产中心(板材 / 组件 / 五金)
- FEXPORT -> 整套家具兼容导出
+ FEXPORT -> 单资产导出到资产中心(板材 / 组件 / 五金)
+ FEXPORTASSET -> 单资产导出别名
+ FEXPORTPRODUCT -> 整套家具兼容导出
+ FEXPORTBUNDLE -> 整套家具兼容导出别名
FINFO -> 查看实体信息
安装脚本做了什么(便于 IT/排查)
@@ -31,7 +33,7 @@
常见问题
───────────────────────────────────────────────────────────────────────
-Q: 提示“未知命令 FEXPORTASSET / FEXPORT”
+Q: 提示“未知命令 FEXPORT / FEXPORTPRODUCT”
A: 1) 确认已重启 AutoCAD(关闭再打开)
2) 确认插件目录存在:
%AppData%\Autodesk\ApplicationPlugins\FurnitureExporter.bundle\Contents\FurnitureExporter.dll