diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e172e64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Build outputs +bin/ +obj/ + +# Visual Studio +.vs/ +*.user +*.suo + +# Debugging and logs +*.pdb +*.log + +# Temporary/cache files +*.tmp +*.temp +*.cache + +# NuGet +packages/ +*.nupkg +project.lock.json +*.snupkg + +# ReSharper / Rider / VS tooling +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# AutoCAD related temp (safe to ignore) +*.bak +*.sv$ diff --git a/CadParamPluging.csproj b/CadParamPluging.csproj new file mode 100644 index 0000000..1b6d625 --- /dev/null +++ b/CadParamPluging.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {AD96D669-51E6-4EA0-A460-3667C13AE2D9} + Library + Properties + CadParamPluging + CadParamPluging + v4.5 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + C:\Program Files\Autodesk\AutoCAD 2014\accoremgd.dll + + + C:\Program Files\Autodesk\AutoCAD 2014\acdbmgd.dll + + + C:\Program Files\Autodesk\AutoCAD 2014\acmgd.dll + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CadParamPluging.sln b/CadParamPluging.sln new file mode 100644 index 0000000..f1f5984 --- /dev/null +++ b/CadParamPluging.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35303.130 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CadParamPluging", "CadParamPluging.csproj", "{AD96D669-51E6-4EA0-A460-3667C13AE2D9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AD96D669-51E6-4EA0-A460-3667C13AE2D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AD96D669-51E6-4EA0-A460-3667C13AE2D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD96D669-51E6-4EA0-A460-3667C13AE2D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AD96D669-51E6-4EA0-A460-3667C13AE2D9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {262AD728-3893-4960-9684-63A95DAEC88F} + EndGlobalSection +EndGlobal diff --git a/PackageContents.xml b/PackageContents.xml new file mode 100644 index 0000000..b1c1f8d --- /dev/null +++ b/PackageContents.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/Plan.md b/Plan.md new file mode 100644 index 0000000..c1eaf0d --- /dev/null +++ b/Plan.md @@ -0,0 +1,37 @@ +## 开发计划与里程碑(按 Readme 要求,模板为 CAD 文件路径) + +### 阶段 1:项目骨架与环境 +- 目标:插件可在 AutoCAD 2014 启动后自动加载,面板可见。 +- 里程碑:解决方案结构就绪(Plugin/Domain/Data/Common 或等效命名空间);实现 `IExtensionApplication`,PaletteSet 显示占位;`.bundle` 自动加载和 `PARAM_PANEL` 可用。 + +### 阶段 2:参数模型与业务入口 +- 目标:定义参数契约供 UI/算法使用。 +- 里程碑:完成 `TemplateParams`, `DrawingParams`, `TemplateInfo` 等模型;Domain 入口 `DomainFacade.SelectTemplate/ValidateParameters/DrawByParams` 定义(可先空实现)。 + +### 阶段 3:模板路径配置与匹配 +- 目标:以 CAD 模板文件路径为基础完成匹配,不依赖 JSON。 +- 里程碑:确定模板路径来源(常量/配置文件/app.config);实现 `ITemplateRepository`(按路径列表筛选);完成按 `TemplateParams` 匹配唯一模板并返回 `TemplateInfo`;UI 能点击“匹配模板”并显示结果。 + +### 阶段 4:CAD 封装与基本出图 +- 目标:打通最小绘图链路,基于模板新建图纸并绘制简单几何。 +- 里程碑:实现 `CadContext`、`CadDrawingService` 基础操作;`TemplateDrawingService` 支持基于模板文件创建新 Document;`DomainFacade.DrawByParams` 最小实现(示例几何)验证端到端。 + +### 阶段 5:UI 面板完善 +- 目标:完成 Readme 所述四区 UI。 +- 里程碑:模板参数区 + 匹配按钮与结果;出图参数区占位输入;操作区(生成图纸/保存/打开配置);日志区显示匹配、校验、出图进度与错误。 + +### 阶段 6:参数校验与错误提示 +- 目标:输入校验闭环。 +- 里程碑:`ValidateParameters` 校验必填/范围并抛业务异常;UI 捕获并日志提示具体字段问题。 + +### 阶段 7:生成与保存体验 +- 目标:生成成功提示并可保存 DWG。 +- 里程碑:生成完成提示;保存对话框调用 `Database.SaveAs()`;插件加载后面板自动显示,无需用户命令。 + +### 阶段 8:业务规则迭代 +- 目标:接入真实模板和绘图策略。 +- 里程碑:补充真实模板路径列表与匹配策略;扩展不同图纸类型的绘图策略类;可选:批量生成/指定目录一键生成。 + +### 阶段 9:测试与验收 +- 目标:覆盖匹配、校验、绘图、保存的自测。 +- 里程碑:多组参数验证匹配唯一性与错误提示;验证绘图随参数变化的结果与图层/文字/标注;验证保存的 DWG 可正常重开。 diff --git a/PluginEntry.cs b/PluginEntry.cs new file mode 100644 index 0000000..6eaed49 --- /dev/null +++ b/PluginEntry.cs @@ -0,0 +1,53 @@ +using System.Drawing; +using System.Windows.Forms; +using Autodesk.AutoCAD.Runtime; +using Autodesk.AutoCAD.Windows; + +namespace CadParamPluging +{ + public class PluginEntry : IExtensionApplication + { + private static PaletteSet _palette; + + public void Initialize() + { + ShowPalette(); + } + + public void Terminate() + { + // 可在此释放资源或记录日志 + } + + private void ShowPalette() + { + if (_palette == null) + { + _palette = new PaletteSet("参数化出图") + { + Style = PaletteSetStyles.ShowCloseButton | + PaletteSetStyles.ShowAutoHideButton | + PaletteSetStyles.Snappable + }; + + var placeholder = new Label + { + Text = "Param panel placeholder", + Dock = DockStyle.Fill, + TextAlign = ContentAlignment.MiddleCenter + }; + + _palette.Add("Main", placeholder); + _palette.MinimumSize = new Size(240, 200); + } + + _palette.Visible = true; + } + + [CommandMethod("PARAM_PANEL")] + public void ShowPanelCommand() + { + ShowPalette(); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..a21c284 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("CadParamPluging")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CadParamPluging")] +[assembly: AssemblyCopyright("Copyright © 2025")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("ad96d669-51e6-4ea0-a460-3667c13ae2d9")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")]