【发布时间】:2021-08-12 14:50:28
【问题描述】:
我正在使用 ObjectARX C#.Net 框架为 AutoCAD 2021 开发插件应用程序。我正在尝试重构它/使代码更易于理解,因为我很快就会回到学校,而且我目前是我工作地点唯一的全职编码员。
我正在考虑用辅助函数替换我的一部分代码,以便在未来的 AutoCAD 项目中重复使用,但它目前依赖于 IDisposable“事务”对象来运行。
如果我从事务“使用”语句中调用函数,它会自动使用事务本身吗?或者,我需要将事务对象传递给函数吗?
编辑:在此处包含一些示例代码。
using (Transaction trans0 = destDB.TransactionManager.StartTransaction())
{
//Setup for CSV Export, following code reads control panel, may be replaced with helper function that reads control panel
int grain = -1;
int thickness = 0;
int aCounter = 0;
int bCounter = 0;
String material = "NOTINITIALIZED";
//End setup
BlockTable destBT = trans0.GetObject(destDB.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord destBTR = trans0.GetObject(destBT[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
List<Entity> Containers = new List<Entity>();
List<Entity> Selectors = new List<Entity>();
List<Entity> SelectorFrames = new List<Entity>();
foreach (ObjectId id1 in destBTR)
{
Entity en = trans0.GetObject(id1, OpenMode.ForRead) as Entity;
if ((en.Layer.Equals("MDF")) || (en.Layer.Equals("PFM")) || (en.Layer.Equals("x")) || (en.Layer.Equals("y") || (en.Layer.Equals("ng"))))
{
SelectorFrames.Add(trans0.GetObject(id1, OpenMode.ForRead) as Entity);
}
if (en.Layer.Equals("selector"))
{
Selectors.Add(trans0.GetObject(id1, OpenMode.ForRead) as Entity);
}
if (en.Layer.Equals("Container"))
{
Containers.Add(trans0.GetObject(id1, OpenMode.ForRead) as Entity);
}
if (en.Layer.Equals("tCounter"))
{
thickness++;
}
if (en.Layer.Equals("aCounter"))
{
aCounter++;
}
if (en.Layer.Equals("bCounter"))
{
aCounter++;
}
}
foreach (Entity selector in Selectors)
{
using (Trimmer trimmer = new Autodesk.AutoCAD.ExportLayout.Trimmer())
{
foreach (Entity sFrame in SelectorFrames)
{
trimmer.Trim(selector, sFrame);
if (trimmer.EntityCompletelyInside)
{
if (sFrame.Layer.Equals("x"))
{
grain = 1;
}
else if (sFrame.Layer.Equals("y"))
{
grain = 2;
}
else if (sFrame.Layer.Equals("ng"))
{
grain = 0;
}
else
{
material = sFrame.Layer;
}
}
}
}
}
... some code that's in the same scope but not related to this proposed helper function ...
}
【问题讨论】:
-
我有 90% 的把握答案是“不,IDisposable 不会导致任何东西自动与辅助函数关联”,但只是为了确保我理解,你能用例子编辑你的问题吗代码?您是否尝试过较小规模的提议?您遇到过任何具体问题吗?
-
A
using只是try/finally的语法糖,所以我猜这是“否”,但我需要查看您的代码才能确定。 -
只包含了一些示例代码 :)
标签: c# autocad-plugin