fix(cad): make FEXPORT default to single asset export
This commit is contained in:
parent
e2766b2cfb
commit
2c06163575
@ -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
|
||||
/// <summary>
|
||||
/// 主导出命令 - 导出板材 GLB + 五金件位置 JSON
|
||||
/// </summary>
|
||||
[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<string> GetEntityHandles(Database db, ObjectId[] ids)
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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 预览 ✓
|
||||
辅助装配可用 ✓
|
||||
```
|
||||
|
||||
## 开发
|
||||
|
||||
@ -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" />
|
||||
</Components>
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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" />
|
||||
</Components>
|
||||
|
||||
@ -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 ""
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user