From d02f7cfb2294e671d5c442e6bcdcc71c0d245430 Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Wed, 17 Aug 2022 00:41:10 +0000 Subject: [PATCH 1/8] =?UTF-8?q?CAD.NET=E4=B8=AD=E4=BD=BF=E7=94=A8XBindXref?= =?UTF-8?q?s=E3=80=81BindXrefs=E5=8F=8C=E9=87=8D=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=8F=82=E7=85=A7=E7=9A=84=E6=8E=A2=E8=AE=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx | 198 +++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 src/IFoxCAD.Cad/ExtensionMethod/XrefEx diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx new file mode 100644 index 0000000..1ebd608 --- /dev/null +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx @@ -0,0 +1,198 @@ +using Autodesk.AutoCAD.DatabaseServices; +using System.Collections.Generic; +using AcCoreAp = Autodesk.AutoCAD.ApplicationServices.Core.Application; +namespace IFoxCAD.Cad; +{ + //对XBindXrefs、BindXrefs双重绑定参照释义的具体解析详个人第一原创的博客随笔“CAD.NET中使用XBindXrefs、BindXrefs双重绑定参照的探讨” + //链接:https://www.cnblogs.com/SHUN-ONCET/p/16593360.html + public static class XrefEx + { + /// + /// XBindXrefs、BindXrefs双重绑定参照。增加绑定符号表累计的选择;增加储存嵌套参照被卸载的字典ref方式 + /// + /// 数据库 + /// 累计要绑定的符号表数量,默认为0。最小为0,最大为4。具体【0为"图层表",1为"文字样式表",2为"线型表",3为"注册应用程序表",4为"标注样式表"】 + /// 储存嵌套参照被卸载的字典 + public static void XBindXrefs(Database db, ref Dictionary isNestedNodeNameDic, int symbolTableRecordNum = 0) + { + //数据库转换 + var workingDb = HostApplicationServices.WorkingDatabase; + HostApplicationServices.WorkingDatabase = db; + + string errorRemark = db.OriginalFileName;//标记可能出错的文件名,在异常时使用; + Dictionary isNestedNodeName = isNestedNodeNameDic; + try + { + db.ResolveXrefs(false, false);//解析数据库 + var bindXrefsIds = new ObjectIdCollection();//声明要BindXrefs的集合 + var xBindXrefsIds = new ObjectIdCollection();//声明要XBindXrefs的集合 + ObjectIdCollection isNestedIds = new ObjectIdCollection();//20220815 + using (var tr = db.TransactionManager.StartTransaction()) + { + #region MyRegion20220815-批注原块表参照的id集合获取 + var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);//块表 + foreach (ObjectId id in bt) + { + var btr = (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead); + if (btr.IsFromExternalReference && btr.IsResolved) + bindXrefsIds.Add(id); + } + #endregion + #region MyRegion20220815补充是否被嵌套卸载的处理 + XrefGraph xg = db.GetHostDwgXrefGraph(true); + int xrefcount = xg.NumNodes; + for (int j = 0; j < xrefcount; j++) + { + XrefGraphNode xrNode = xg.GetXrefNode(j); + if (xrNode.XrefStatus == XrefStatus.Unloaded)//若文件已卸载 + { + ObjectId deTachId = xrNode.BlockTableRecordId; + BlockTableRecord btr = (BlockTableRecord)tr.GetObject(deTachId, OpenMode.ForRead); + if (btr.IsFromExternalReference) + { + if (!xrNode.IsNested)//若为非嵌套参照 + { + db.DetachXref(deTachId);//拆离已经卸载的非嵌套文件 + } + if (xrNode.IsNested)//若为嵌套参照 + { + isNestedIds.Add(deTachId); + isNestedNodeName.Add(deTachId.Handle, xrNode.Name);//有嵌套参照,添加关键信息进字典,以传出方法供绑定后删除处理 + } + } + } + if (xrNode.XrefStatus == XrefStatus.Unreferenced)//若文件未参照 + { + db.DetachXref(xrNode.BlockTableRecordId);//拆离未参照的文件 + } + #region MyRegion使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) + //if (xrNode.XrefStatus == XrefStatus.Resolved)//若文件已解析 + //{ + // ObjectId bindXrefId = xrNode.BlockTableRecordId; + // BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bindXrefId, OpenMode.ForRead); + // if (btr.IsFromExternalReference) + // { + // xrefIds.Add(bindXrefId); + // } + //} + #endregion + } + #endregion + #region MyRegion20220814添加XBindXrefs符号表记录id。根据symbolTableRecordNum值范围0~4动态控制5个符号表记录累加绑定需求 + if (symbolTableRecordNum >= 0)//为0时被本人称为“无敌绑定”项 + { + LayerTable layert = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;//图层表 + foreach (ObjectId id in layert) + { + LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead); + if (ltr.IsResolved) + { + xBindXrefsIds.Add(ltr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 1) + { + TextStyleTable textstylet = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;//文字样式表 + foreach (ObjectId id1 in textstylet) + { + TextStyleTableRecord textstyletr = (TextStyleTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (textstyletr.IsResolved) + { + xBindXrefsIds.Add(textstyletr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 3) + { + LinetypeTable linetypet = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;//线型表 + foreach (ObjectId id1 in linetypet) + { + LinetypeTableRecord linetr = (LinetypeTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (linetr.IsResolved) + { + xBindXrefsIds.Add(linetr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 2) + { + DimStyleTable dimt = tr.GetObject(db.DimStyleTableId, OpenMode.ForRead) as DimStyleTable;//标注样式表 + foreach (ObjectId id1 in dimt) + { + DimStyleTableRecord dtr = (DimStyleTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (dtr.IsResolved) + { + xBindXrefsIds.Add(dtr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 4) + { + RegAppTable regappt = tr.GetObject(db.RegAppTableId, OpenMode.ForRead) as RegAppTable;//注册应用程序表 + foreach (ObjectId id1 in regappt) + { + RegAppTableRecord regapptr = (RegAppTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (regapptr.IsResolved) + { + xBindXrefsIds.Add(regapptr.ObjectId); + } + } + } + #region MyRegion20220814起初测试是将9大符号表记录均加入的,但经实测不行。所以根据截取帮助文件中描述,仅添加了块表外的5表记录id + ///xrefSymbolIds可能包含以下符号表记录类型的 ObjectId: + ///BlockTableRecord、LayerTableRecord、LinetypeTableRecord、TextStyleTableRecord(如果它不代表形状文件)、RegAppTableRecord和DimStyleTableRecord。 + ///20220814 + + //ViewportTable viewport = tr.GetObject(db.ViewportTableId, OpenMode.ForRead) as ViewportTable;//视口表 + //foreach (ObjectId id1 in viewport) + //{ + // ViewportTableRecord viewportr = (ViewportTableRecord)tr.GetObject(id1, OpenMode.ForRead); + // if (viewportr.IsResolved) + // { + // xrefIds1.Add(viewportr.ObjectId); + // } + //} + //ViewTable viewt = tr.GetObject(db.ViewTableId, OpenMode.ForRead) as ViewTable;// 视图表 + //foreach (ObjectId id1 in viewt) + //{ + // ViewTableRecord viewtr = (ViewTableRecord)tr.GetObject(id1, OpenMode.ForRead); + // if (viewtr.IsResolved) + // { + // xrefIds1.Add(viewtr.ObjectId); + // } + //} + //UcsTable ucst = tr.GetObject(db.UcsTableId, OpenMode.ForRead) as UcsTable;// 用户坐标系表 + //foreach (ObjectId id1 in ucst) + //{ + // UcsTableRecord ucstr = (UcsTableRecord)tr.GetObject(id1, OpenMode.ForRead); + // if (ucstr.IsResolved) + // { + // xrefIds1.Add(ucstr.ObjectId); + // } + //} + #endregion + #endregion + } + if (isNestedIds.Count > 0)//若有嵌套参照被卸载,重载 + { + db.ReloadXrefs(isNestedIds); + } + #region MyRegion20220814此处即为二者结合使用,且顺序非常重要。若交换秩序,则会绑定无效,切勿交换!!! + db.XBindXrefs(xBindXrefsIds, true);//20220814建议为true + db.BindXrefs(bindXrefsIds, true);//20220814建议为true + #endregion + } + catch (System.Exception ex) + { +          throw new System.Exception(ex.Message); +          //AcCoreAp.ShowAlertDialog("Error: " + ex.Message); +       } +       finally +       { +         isNestedNodeNameDic = isNestedNodeName;//20220815 +         HostApplicationServices.WorkingDatabase = workingDb; +       } +    } +  } +} \ No newline at end of file -- Gitee From 9d33e62ff7c5e28c30fbee83c1e27ec0dcd3f531 Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Wed, 17 Aug 2022 00:42:09 +0000 Subject: [PATCH 2/8] =?UTF-8?q?CAD.NET=E4=B8=AD=E4=BD=BF=E7=94=A8XBindXref?= =?UTF-8?q?s=E3=80=81BindXrefs=E5=8F=8C=E9=87=8D=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E5=8F=82=E7=85=A7=E7=9A=84=E6=8E=A2=E8=AE=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx index 1ebd608..abffca1 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx @@ -3,7 +3,7 @@ using System.Collections.Generic; using AcCoreAp = Autodesk.AutoCAD.ApplicationServices.Core.Application; namespace IFoxCAD.Cad; { - //对XBindXrefs、BindXrefs双重绑定参照释义的具体解析详个人第一原创的博客随笔“CAD.NET中使用XBindXrefs、BindXrefs双重绑定参照的探讨” + //对XBindXrefs、BindXrefs双重绑定参照释义的具体解析详个人第一原创的博客随笔“CAD.NET中使用XBindXrefs、BindXrefs双重绑定参照的探讨” //链接:https://www.cnblogs.com/SHUN-ONCET/p/16593360.html public static class XrefEx { -- Gitee From c2c74d8014a4ed6c6f26f99425cc82ba9993c241 Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Fri, 19 Aug 2022 15:41:27 +0000 Subject: [PATCH 3/8] =?UTF-8?q?rename=20src/IFoxCAD.Cad/ExtensionMethod/Xr?= =?UTF-8?q?efEx=20to=20src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs.=20?= =?UTF-8?q?=E6=A0=B9=E6=8D=AEifoxcad=E5=AE=8C=E5=96=84XBindXrefs=E3=80=81B?= =?UTF-8?q?indXrefs=E5=8F=8C=E9=87=8D=E7=BB=91=E5=AE=9A=E5=8F=82=E7=85=A7?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx | 198 ---------- src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs | 462 ++++++++++++++++++++++ 2 files changed, 462 insertions(+), 198 deletions(-) delete mode 100644 src/IFoxCAD.Cad/ExtensionMethod/XrefEx create mode 100644 src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx deleted file mode 100644 index abffca1..0000000 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx +++ /dev/null @@ -1,198 +0,0 @@ -using Autodesk.AutoCAD.DatabaseServices; -using System.Collections.Generic; -using AcCoreAp = Autodesk.AutoCAD.ApplicationServices.Core.Application; -namespace IFoxCAD.Cad; -{ - //对XBindXrefs、BindXrefs双重绑定参照释义的具体解析详个人第一原创的博客随笔“CAD.NET中使用XBindXrefs、BindXrefs双重绑定参照的探讨” - //链接:https://www.cnblogs.com/SHUN-ONCET/p/16593360.html - public static class XrefEx - { - /// - /// XBindXrefs、BindXrefs双重绑定参照。增加绑定符号表累计的选择;增加储存嵌套参照被卸载的字典ref方式 - /// - /// 数据库 - /// 累计要绑定的符号表数量,默认为0。最小为0,最大为4。具体【0为"图层表",1为"文字样式表",2为"线型表",3为"注册应用程序表",4为"标注样式表"】 - /// 储存嵌套参照被卸载的字典 - public static void XBindXrefs(Database db, ref Dictionary isNestedNodeNameDic, int symbolTableRecordNum = 0) - { - //数据库转换 - var workingDb = HostApplicationServices.WorkingDatabase; - HostApplicationServices.WorkingDatabase = db; - - string errorRemark = db.OriginalFileName;//标记可能出错的文件名,在异常时使用; - Dictionary isNestedNodeName = isNestedNodeNameDic; - try - { - db.ResolveXrefs(false, false);//解析数据库 - var bindXrefsIds = new ObjectIdCollection();//声明要BindXrefs的集合 - var xBindXrefsIds = new ObjectIdCollection();//声明要XBindXrefs的集合 - ObjectIdCollection isNestedIds = new ObjectIdCollection();//20220815 - using (var tr = db.TransactionManager.StartTransaction()) - { - #region MyRegion20220815-批注原块表参照的id集合获取 - var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);//块表 - foreach (ObjectId id in bt) - { - var btr = (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead); - if (btr.IsFromExternalReference && btr.IsResolved) - bindXrefsIds.Add(id); - } - #endregion - #region MyRegion20220815补充是否被嵌套卸载的处理 - XrefGraph xg = db.GetHostDwgXrefGraph(true); - int xrefcount = xg.NumNodes; - for (int j = 0; j < xrefcount; j++) - { - XrefGraphNode xrNode = xg.GetXrefNode(j); - if (xrNode.XrefStatus == XrefStatus.Unloaded)//若文件已卸载 - { - ObjectId deTachId = xrNode.BlockTableRecordId; - BlockTableRecord btr = (BlockTableRecord)tr.GetObject(deTachId, OpenMode.ForRead); - if (btr.IsFromExternalReference) - { - if (!xrNode.IsNested)//若为非嵌套参照 - { - db.DetachXref(deTachId);//拆离已经卸载的非嵌套文件 - } - if (xrNode.IsNested)//若为嵌套参照 - { - isNestedIds.Add(deTachId); - isNestedNodeName.Add(deTachId.Handle, xrNode.Name);//有嵌套参照,添加关键信息进字典,以传出方法供绑定后删除处理 - } - } - } - if (xrNode.XrefStatus == XrefStatus.Unreferenced)//若文件未参照 - { - db.DetachXref(xrNode.BlockTableRecordId);//拆离未参照的文件 - } - #region MyRegion使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) - //if (xrNode.XrefStatus == XrefStatus.Resolved)//若文件已解析 - //{ - // ObjectId bindXrefId = xrNode.BlockTableRecordId; - // BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bindXrefId, OpenMode.ForRead); - // if (btr.IsFromExternalReference) - // { - // xrefIds.Add(bindXrefId); - // } - //} - #endregion - } - #endregion - #region MyRegion20220814添加XBindXrefs符号表记录id。根据symbolTableRecordNum值范围0~4动态控制5个符号表记录累加绑定需求 - if (symbolTableRecordNum >= 0)//为0时被本人称为“无敌绑定”项 - { - LayerTable layert = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;//图层表 - foreach (ObjectId id in layert) - { - LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead); - if (ltr.IsResolved) - { - xBindXrefsIds.Add(ltr.ObjectId); - } - } - } - if (symbolTableRecordNum >= 1) - { - TextStyleTable textstylet = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;//文字样式表 - foreach (ObjectId id1 in textstylet) - { - TextStyleTableRecord textstyletr = (TextStyleTableRecord)tr.GetObject(id1, OpenMode.ForRead); - if (textstyletr.IsResolved) - { - xBindXrefsIds.Add(textstyletr.ObjectId); - } - } - } - if (symbolTableRecordNum >= 3) - { - LinetypeTable linetypet = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;//线型表 - foreach (ObjectId id1 in linetypet) - { - LinetypeTableRecord linetr = (LinetypeTableRecord)tr.GetObject(id1, OpenMode.ForRead); - if (linetr.IsResolved) - { - xBindXrefsIds.Add(linetr.ObjectId); - } - } - } - if (symbolTableRecordNum >= 2) - { - DimStyleTable dimt = tr.GetObject(db.DimStyleTableId, OpenMode.ForRead) as DimStyleTable;//标注样式表 - foreach (ObjectId id1 in dimt) - { - DimStyleTableRecord dtr = (DimStyleTableRecord)tr.GetObject(id1, OpenMode.ForRead); - if (dtr.IsResolved) - { - xBindXrefsIds.Add(dtr.ObjectId); - } - } - } - if (symbolTableRecordNum >= 4) - { - RegAppTable regappt = tr.GetObject(db.RegAppTableId, OpenMode.ForRead) as RegAppTable;//注册应用程序表 - foreach (ObjectId id1 in regappt) - { - RegAppTableRecord regapptr = (RegAppTableRecord)tr.GetObject(id1, OpenMode.ForRead); - if (regapptr.IsResolved) - { - xBindXrefsIds.Add(regapptr.ObjectId); - } - } - } - #region MyRegion20220814起初测试是将9大符号表记录均加入的,但经实测不行。所以根据截取帮助文件中描述,仅添加了块表外的5表记录id - ///xrefSymbolIds可能包含以下符号表记录类型的 ObjectId: - ///BlockTableRecord、LayerTableRecord、LinetypeTableRecord、TextStyleTableRecord(如果它不代表形状文件)、RegAppTableRecord和DimStyleTableRecord。 - ///20220814 - - //ViewportTable viewport = tr.GetObject(db.ViewportTableId, OpenMode.ForRead) as ViewportTable;//视口表 - //foreach (ObjectId id1 in viewport) - //{ - // ViewportTableRecord viewportr = (ViewportTableRecord)tr.GetObject(id1, OpenMode.ForRead); - // if (viewportr.IsResolved) - // { - // xrefIds1.Add(viewportr.ObjectId); - // } - //} - //ViewTable viewt = tr.GetObject(db.ViewTableId, OpenMode.ForRead) as ViewTable;// 视图表 - //foreach (ObjectId id1 in viewt) - //{ - // ViewTableRecord viewtr = (ViewTableRecord)tr.GetObject(id1, OpenMode.ForRead); - // if (viewtr.IsResolved) - // { - // xrefIds1.Add(viewtr.ObjectId); - // } - //} - //UcsTable ucst = tr.GetObject(db.UcsTableId, OpenMode.ForRead) as UcsTable;// 用户坐标系表 - //foreach (ObjectId id1 in ucst) - //{ - // UcsTableRecord ucstr = (UcsTableRecord)tr.GetObject(id1, OpenMode.ForRead); - // if (ucstr.IsResolved) - // { - // xrefIds1.Add(ucstr.ObjectId); - // } - //} - #endregion - #endregion - } - if (isNestedIds.Count > 0)//若有嵌套参照被卸载,重载 - { - db.ReloadXrefs(isNestedIds); - } - #region MyRegion20220814此处即为二者结合使用,且顺序非常重要。若交换秩序,则会绑定无效,切勿交换!!! - db.XBindXrefs(xBindXrefsIds, true);//20220814建议为true - db.BindXrefs(bindXrefsIds, true);//20220814建议为true - #endregion - } - catch (System.Exception ex) - { -          throw new System.Exception(ex.Message); -          //AcCoreAp.ShowAlertDialog("Error: " + ex.Message); -       } -       finally -       { -         isNestedNodeNameDic = isNestedNodeName;//20220815 -         HostApplicationServices.WorkingDatabase = workingDb; -       } -    } -  } -} \ No newline at end of file diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs new file mode 100644 index 0000000..36e5918 --- /dev/null +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs @@ -0,0 +1,462 @@ +namespace IFoxCAD.Cad; +//对XBindXrefs,BindXrefs双重绑定参照释义的具体解析详个人第一原创的博客随笔 +// + +/// +/// 双重绑定参照扩展类 +/// +public static class XrefEx +{ + /// + /// 利用两个原生方法双重绑定参照 + /// 可内部删除被卸载的嵌套参照 + /// 该方法仅用于"无敌绑定"项,其他项有异常eWasOpenForNotify + /// + /// 数据库 + /// 询问是否删除被卸载的嵌套参照,默认为true + /// 主要用于处理要绑定图纸中存在嵌套参照被卸载的情况 + /// 若为false,则嵌套参照将被重载绑定后保留在图纸中 + /// returns>无返回值 + public static void XBindXrefs(Database db, bool isEaseNested = true) + { + var workingDb = HostApplicationServices.WorkingDatabase;//数据库转换 + HostApplicationServices.WorkingDatabase = db;//数据库转换 + + db.ResolveXrefs(false, false);//解析数据库 + + var bindXrefsIds = new ObjectIdCollection();//要BindXrefs的集合 + var xBindXrefsIds = new ObjectIdCollection();//要XBindXrefs的集合 + + var isNestedNodeNameList = new List();//要处理的嵌套参照名称列表 + var isNestedIds = new ObjectIdCollection();//要处理的嵌套参照ObjectId集合 + + using (var tr = db.TransactionManager.StartTransaction()) + { + #region 原块表参照的id集合获取 + var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);//块表 + foreach (ObjectId id in bt) + { + var btr = (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead); + if (btr.IsFromExternalReference && btr.IsResolved) + bindXrefsIds.Add(id); + } + #endregion + + #region 补充是否被嵌套卸载的处理 + XrefGraph xg = db.GetHostDwgXrefGraph(true); + int xrefcount = xg.NumNodes; + for (int j = 0; j < xrefcount; j++) + { + XrefGraphNode xrNode = xg.GetXrefNode(j); + if (xrNode.XrefStatus == XrefStatus.Unloaded)//若文件已卸载 + { + ObjectId deTachId = xrNode.BlockTableRecordId; + BlockTableRecord btr = (BlockTableRecord)tr.GetObject(deTachId, OpenMode.ForRead); + if (btr.IsFromExternalReference) + { + if (!xrNode.IsNested)//若为非嵌套参照 + { + db.DetachXref(deTachId);//拆离已经卸载的非嵌套文件 + } + if (xrNode.IsNested)//若为嵌套参照 + { + isNestedIds.Add(deTachId); + isNestedNodeNameList.Add(xrNode.Name);//有嵌套参照,添加名称进列表,以供绑定后是否做删除处理 + } + } + } + if (xrNode.XrefStatus == XrefStatus.Unreferenced)//若文件未参照 + { + db.DetachXref(xrNode.BlockTableRecordId);//拆离未参照的文件 + } + #region MyRegion使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) + //if (xrNode.XrefStatus == XrefStatus.Resolved)//若文件已解析 + //{ + // ObjectId bindXrefId = xrNode.BlockTableRecordId; + // BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bindXrefId, OpenMode.ForRead); + // if (btr.IsFromExternalReference) + // { + // xrefIds.Add(bindXrefId); + // } + //} + #endregion + } + #endregion + + #region "无敌绑定"项 + LayerTable layert = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;//图层表 + foreach (ObjectId id in layert) + { + LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead); + if (ltr.IsResolved) + { + xBindXrefsIds.Add(ltr.ObjectId); + } + } + #endregion + + if (isNestedIds.Count > 0)//若有嵌套参照被卸载,重载 + { + db.ReloadXrefs(isNestedIds); + } + + #region 此处即为二者结合使用,且顺序非常重要。若交换秩序,则会绑定无效,切勿交换 + db.XBindXrefs(xBindXrefsIds, true);//建议为true + db.BindXrefs(bindXrefsIds, true);//建议为true + #endregion + + #region 内部删除嵌套参照的块操作 + if (isEaseNested) + { + if (isNestedNodeNameList.Count > 0 && isNestedNodeNameList != null) + { + isNestedNodeNameList.ForEach(blockName => + { + if (bt.Has(blockName)) + { + BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[blockName], OpenMode.ForWrite); + if (btr != null) + { + btr.Erase(); + } + } + }); + } + } + #endregion + } + HostApplicationServices.WorkingDatabase = workingDb;//数据库转换 + } + /// + /// 利用两个原生方法双重绑定参照 + /// 1.增加绑定符号表累计的选择,LayerTable=0时,即单选图层表为"无敌绑定"项 + /// 2.增加储存被卸载嵌套参照名称及句柄的字典,以ref方式传出方法 + /// 提供外部处理嵌套参照的数据,绑定后若不处理,则将被保留在图纸中 + /// + /// 数据库 + /// 储存被卸载嵌套参照名称及句柄的字典 + /// 主要用于处理要绑定图纸中存在嵌套参照被卸载的情况 + /// 累计要绑定的符号表数量,默认为LayerTable=0"无敌绑定"项.最小为0,最大为4 + /// 具体【0为"图层表",1为"文字样式表",2为"标注样式表",3为"线型表",4为"注册应用程序表"】 + /// returns>无返回值,以ref方式传出被卸载嵌套参照名称及句柄的字典 + public static void XBindXrefs(Database db, ref Dictionary isNestedNodeNameDic, XrefSymTabTypeNum xrefSymTabTypeNum = XrefSymTabTypeNum.LayerTable) + { + var workingDb = HostApplicationServices.WorkingDatabase;//数据库转换 + HostApplicationServices.WorkingDatabase = db;//数据库转换 + + db.ResolveXrefs(false, false);//解析数据库 + + Dictionary isNestedNodeName = isNestedNodeNameDic;//要处理的嵌套参照的数据字典 + + var bindXrefsIds = new ObjectIdCollection();//声明要BindXrefs的集合 + var xBindXrefsIds = new ObjectIdCollection();//声明要XBindXrefs的集合 + var isNestedIds = new ObjectIdCollection();//要处理的嵌套参照ObjectId集合 + + using (var tr = db.TransactionManager.StartTransaction()) + { + #region MyRegion20220815-批注原块表参照的id集合获取 + var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);//块表 + foreach (ObjectId id in bt) + { + var btr = (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead); + if (btr.IsFromExternalReference && btr.IsResolved) + bindXrefsIds.Add(id); + } + #endregion + + #region 补充是否被嵌套卸载的处理 + XrefGraph xg = db.GetHostDwgXrefGraph(true); + int xrefcount = xg.NumNodes; + for (int j = 0; j < xrefcount; j++) + { + XrefGraphNode xrNode = xg.GetXrefNode(j); + if (xrNode.XrefStatus == XrefStatus.Unloaded)//若文件已卸载 + { + ObjectId deTachId = xrNode.BlockTableRecordId; + BlockTableRecord btr = (BlockTableRecord)tr.GetObject(deTachId, OpenMode.ForRead); + if (btr.IsFromExternalReference) + { + if (!xrNode.IsNested)//若为非嵌套参照 + { + db.DetachXref(deTachId);//拆离已经卸载的非嵌套文件 + } + if (xrNode.IsNested)//若为嵌套参照 + { + isNestedIds.Add(deTachId); + isNestedNodeName.Add(deTachId.Handle, xrNode.Name);//有嵌套参照,添加关键信息进字典,以传出方法供绑定后删除处理 + } + } + } + if (xrNode.XrefStatus == XrefStatus.Unreferenced)//若文件未参照 + { + db.DetachXref(xrNode.BlockTableRecordId);//拆离未参照的文件 + } + #region MyRegion使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) + //if (xrNode.XrefStatus == XrefStatus.Resolved)//若文件已解析 + //{ + // ObjectId bindXrefId = xrNode.BlockTableRecordId; + // BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bindXrefId, OpenMode.ForRead); + // if (btr.IsFromExternalReference) + // { + // xrefIds.Add(bindXrefId); + // } + //} + #endregion + } + #endregion + + #region 添加XBindXrefs符号表记录id。根据symbolTableRecordNum值范围0~4动态控制5个符号表记录累加绑定需求 + int symbolTableRecordNum = 0; + switch (xrefSymTabTypeNum) + { + case XrefSymTabTypeNum.LayerTable: + symbolTableRecordNum = 0; + break; + case XrefSymTabTypeNum.TextStyleTable: + symbolTableRecordNum = 1; + break; + case XrefSymTabTypeNum.DimStyleTable: + symbolTableRecordNum = 2; + break; + case XrefSymTabTypeNum.LinetypeTable: + symbolTableRecordNum = 3; + break; + case XrefSymTabTypeNum.RegAppTable: + symbolTableRecordNum = 4; + break; + } + if (symbolTableRecordNum >= 0)//为0时被本人称为"无敌绑定"项 + { + LayerTable layert = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable;//图层表 + foreach (ObjectId id in layert) + { + LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead); + if (ltr.IsResolved) + { + xBindXrefsIds.Add(ltr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 1) + { + TextStyleTable textstylet = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable;//文字样式表 + foreach (ObjectId id1 in textstylet) + { + TextStyleTableRecord textstyletr = (TextStyleTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (textstyletr.IsResolved) + { + xBindXrefsIds.Add(textstyletr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 2) + { + LinetypeTable linetypet = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;//线型表 + foreach (ObjectId id1 in linetypet) + { + LinetypeTableRecord linetr = (LinetypeTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (linetr.IsResolved) + { + xBindXrefsIds.Add(linetr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 3) + { + DimStyleTable dimt = tr.GetObject(db.DimStyleTableId, OpenMode.ForRead) as DimStyleTable;//标注样式表 + foreach (ObjectId id1 in dimt) + { + DimStyleTableRecord dtr = (DimStyleTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (dtr.IsResolved) + { + xBindXrefsIds.Add(dtr.ObjectId); + } + } + } + if (symbolTableRecordNum >= 4) + { + RegAppTable regappt = tr.GetObject(db.RegAppTableId, OpenMode.ForRead) as RegAppTable;//注册应用程序表 + foreach (ObjectId id1 in regappt) + { + RegAppTableRecord regapptr = (RegAppTableRecord)tr.GetObject(id1, OpenMode.ForRead); + if (regapptr.IsResolved) + { + xBindXrefsIds.Add(regapptr.ObjectId); + } + } + } + #region 起初测试是将9大符号表记录均加入的,但经实测不行。所以根据截取帮助文件中描述,仅添加了块表外的5表记录id + ///xrefSymbolIds可能包含以下符号表记录类型的 ObjectId: + ///BlockTableRecord、LayerTableRecord、LinetypeTableRecord、TextStyleTableRecord(如果它不代表形状文件)、RegAppTableRecord和DimStyleTableRecord。 + + //ViewportTable viewport = tr.GetObject(db.ViewportTableId, OpenMode.ForRead) as ViewportTable;//视口表 + //foreach (ObjectId id1 in viewport) + //{ + // ViewportTableRecord viewportr = (ViewportTableRecord)tr.GetObject(id1, OpenMode.ForRead); + // if (viewportr.IsResolved) + // { + // xrefIds1.Add(viewportr.ObjectId); + // } + //} + //ViewTable viewt = tr.GetObject(db.ViewTableId, OpenMode.ForRead) as ViewTable;// 视图表 + //foreach (ObjectId id1 in viewt) + //{ + // ViewTableRecord viewtr = (ViewTableRecord)tr.GetObject(id1, OpenMode.ForRead); + // if (viewtr.IsResolved) + // { + // xrefIds1.Add(viewtr.ObjectId); + // } + //} + //UcsTable ucst = tr.GetObject(db.UcsTableId, OpenMode.ForRead) as UcsTable;// 用户坐标系表 + //foreach (ObjectId id1 in ucst) + //{ + // UcsTableRecord ucstr = (UcsTableRecord)tr.GetObject(id1, OpenMode.ForRead); + // if (ucstr.IsResolved) + // { + // xrefIds1.Add(ucstr.ObjectId); + // } + //} + #endregion + #endregion + } + + if (isNestedIds.Count > 0)//若有嵌套参照被卸载,重载 + { + db.ReloadXrefs(isNestedIds); + } + + #region 此处即为二者结合使用,且顺序非常重要。若交换秩序,则会绑定无效,切勿交换 + db.XBindXrefs(xBindXrefsIds, true);//建议为true + db.BindXrefs(bindXrefsIds, true);//建议为true + #endregion + + isNestedNodeNameDic = isNestedNodeName; + HostApplicationServices.WorkingDatabase = workingDb; + } + /// + /// 清理符号7表(块表,标注样式表,图层表,线型表,文字样式表,视口样式表,注册应用表) + ///注:视图样式表和坐标系表不能这样清理,有异常 + /// + /// 数据库 + /// 无返回值 + public static void Purge(Database db) + { + ObjectIdCollection ids; + ObjectIdCollection ids1; + ObjectIdCollection ids2; + ObjectIdCollection ids3; + ObjectIdCollection ids4; + ObjectIdCollection ids5; + //ObjectIdCollection ids6; + //ObjectIdCollection ids7; + ObjectIdCollection ids8; + using (Transaction tr = db.TransactionManager.StartTransaction()) + { + //块表 + BlockTable blockt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; + //标注样式表1 + DimStyleTable dimt = tr.GetObject(db.DimStyleTableId, OpenMode.ForRead) as DimStyleTable; + //图层表2 + LayerTable layert = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; + //线型表3 + LinetypeTable linetypet = tr.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable; + //文字样式4 + TextStyleTable textstylet = tr.GetObject(db.TextStyleTableId, OpenMode.ForRead) as TextStyleTable; + //视口样式表5 + ViewportTable viewport = tr.GetObject(db.ViewportTableId, OpenMode.ForRead) as ViewportTable; + //注册应用表8 + RegAppTable regappt = tr.GetObject(db.RegAppTableId, OpenMode.ForRead) as RegAppTable; + + #region 开始清理 + do + { + ids = new ObjectIdCollection(blockt.Cast().ToArray()); + db.Purge(ids); + if (ids != null) + { + foreach (ObjectId id in ids) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + ids1 = new ObjectIdCollection(dimt.Cast().ToArray()); + db.Purge(ids1); + if (ids1 != null) + { + foreach (ObjectId id in ids1) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + ids2 = new ObjectIdCollection(layert.Cast().ToArray()); + db.Purge(ids2); + if (ids2 != null) + { + foreach (ObjectId id in ids2) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + ids3 = new ObjectIdCollection(linetypet.Cast().ToArray()); + db.Purge(ids3); + if (ids3 != null) + { + foreach (ObjectId id in ids3) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + ids4 = new ObjectIdCollection(textstylet.Cast().ToArray()); + db.Purge(ids4); + if (ids4 != null) + { + foreach (ObjectId id in ids4) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + ids5 = new ObjectIdCollection(viewport.Cast().ToArray()); + db.Purge(ids5); + if (ids5 != null) + { + foreach (ObjectId id in ids5) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + #region 经测试视图样式表和坐标系表不能这样清理,不然有异常 + ////视图样式表6 + //ViewTable viewt = tr.GetObject(db.ViewTableId, OpenMode.ForRead) as ViewTable; + //ids6 = new ObjectIdCollection(viewt.Cast().ToArray()); + //db.Purge(ids6); + //foreach (ObjectId id in ids6) + //{ + // ViewTableRecord btr6 = (ViewTableRecord)tr.GetObject(id, OpenMode.ForWrite); + // btr6.Erase(); + //} + ////坐标系表7 + //UcsTable ucst = tr.GetObject(db.UcsTableId, OpenMode.ForRead) as UcsTable; + //ids7 = new ObjectIdCollection(ucst.Cast().ToArray()); + //db.Purge(ids7); + //foreach (ObjectId id in ids7) + //{ + // UcsTableRecord btr7 = (UcsTableRecord)tr.GetObject(id, OpenMode.ForWrite); + // btr7.Erase(); + //} + #endregion + ids8 = new ObjectIdCollection(regappt.Cast().ToArray()); + db.Purge(ids8); + if (ids8 != null) + { + foreach (ObjectId id in ids8) + { + tr.GetObject(id, OpenMode.ForWrite).Erase(); + } + } + } while (ids.Count > 0 || ids1.Count > 0 || ids2.Count > 0 || ids3.Count > 0 || ids4.Count > 0 || ids5.Count > 0 || ids8.Count > 0); + #endregion + + tr.Commit();//提交事务 + } + } +} \ No newline at end of file -- Gitee From 1f542981bcdf0cedbd1e6c7615e9856259a02545 Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Fri, 19 Aug 2022 15:48:06 +0000 Subject: [PATCH 4/8] =?UTF-8?q?update=20src/IFoxCAD.Cad/ExtensionMethod/Xr?= =?UTF-8?q?efEx.cs.=20=E5=AF=B9XBindXrefs,BindXrefs=E5=8F=8C=E9=87=8D?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E5=8F=82=E7=85=A7=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs index 36e5918..28c7603 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs @@ -69,7 +69,7 @@ public static void XBindXrefs(Database db, bool isEaseNested = true) { db.DetachXref(xrNode.BlockTableRecordId);//拆离未参照的文件 } - #region MyRegion使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) + #region 使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) //if (xrNode.XrefStatus == XrefStatus.Resolved)//若文件已解析 //{ // ObjectId bindXrefId = xrNode.BlockTableRecordId; @@ -154,7 +154,7 @@ public static void XBindXrefs(Database db, ref Dictionary isNest using (var tr = db.TransactionManager.StartTransaction()) { - #region MyRegion20220815-批注原块表参照的id集合获取 + #region 原块表参照的id集合获取 var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);//块表 foreach (ObjectId id in bt) { @@ -191,7 +191,7 @@ public static void XBindXrefs(Database db, ref Dictionary isNest { db.DetachXref(xrNode.BlockTableRecordId);//拆离未参照的文件 } - #region MyRegion使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) + #region 使用此方法添加的xrNode.BlockTableRecordId,绑定中会随机出现异常(勿用) //if (xrNode.XrefStatus == XrefStatus.Resolved)//若文件已解析 //{ // ObjectId bindXrefId = xrNode.BlockTableRecordId; -- Gitee From d5d1a3d73ac3e1910fb2cbaa0ff9733bfd2466a1 Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Fri, 19 Aug 2022 16:02:50 +0000 Subject: [PATCH 5/8] =?UTF-8?q?=E8=A1=A5=E5=85=85=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E9=80=89=E9=A1=B9=E7=9A=84=E7=AC=A6=E5=8F=B7=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs index 28c7603..65b938c 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs @@ -2,6 +2,36 @@ namespace IFoxCAD.Cad; //对XBindXrefs,BindXrefs双重绑定参照释义的具体解析详个人第一原创的博客随笔 // +/// +/// 表示累计要绑定符号表类型数量的枚举 +/// 最小为0,最大为4 +/// 具体【0为"图层表",1为"文字样式表",2为"标注样式表",3为"线型表",4为"注册应用程序表"】 +/// 如选择TextStyleTable = 1,则表示累计要绑定图层表和文字样式表,以此类推 +/// +public enum XrefSymTabTypeNum +{ + /// + /// 图层表,"无敌绑定"项 + /// + LayerTable = 0, + /// + /// 文字样式表 + /// + TextStyleTable = 1, + /// + /// 标注样式表 + /// + DimStyleTable = 2, + /// + /// 线性表 + /// + LinetypeTable = 3, + /// + /// 注册应用程序表 + /// + RegAppTable = 4 +} + /// /// 双重绑定参照扩展类 /// -- Gitee From 7b26c50a0dd853d4099c7827334a5c6306b0d4bd Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Fri, 19 Aug 2022 16:29:14 +0000 Subject: [PATCH 6/8] update src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs. Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs index 65b938c..741945a 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs @@ -46,7 +46,7 @@ public static class XrefEx /// 询问是否删除被卸载的嵌套参照,默认为true /// 主要用于处理要绑定图纸中存在嵌套参照被卸载的情况 /// 若为false,则嵌套参照将被重载绑定后保留在图纸中 - /// returns>无返回值 + /// 无返回值 public static void XBindXrefs(Database db, bool isEaseNested = true) { var workingDb = HostApplicationServices.WorkingDatabase;//数据库转换 @@ -168,7 +168,7 @@ public static void XBindXrefs(Database db, bool isEaseNested = true) /// 主要用于处理要绑定图纸中存在嵌套参照被卸载的情况 /// 累计要绑定的符号表数量,默认为LayerTable=0"无敌绑定"项.最小为0,最大为4 /// 具体【0为"图层表",1为"文字样式表",2为"标注样式表",3为"线型表",4为"注册应用程序表"】 - /// returns>无返回值,以ref方式传出被卸载嵌套参照名称及句柄的字典 + /// 无返回值,以ref方式传出被卸载嵌套参照名称及句柄的字典 public static void XBindXrefs(Database db, ref Dictionary isNestedNodeNameDic, XrefSymTabTypeNum xrefSymTabTypeNum = XrefSymTabTypeNum.LayerTable) { var workingDb = HostApplicationServices.WorkingDatabase;//数据库转换 -- Gitee From 1594e1bc9bfee048599feaff43993fa4f9ccfe9a Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Fri, 19 Aug 2022 17:06:15 +0000 Subject: [PATCH 7/8] update src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs. Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs index 741945a..159c8fb 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs @@ -88,7 +88,7 @@ public static void XBindXrefs(Database db, bool isEaseNested = true) { db.DetachXref(deTachId);//拆离已经卸载的非嵌套文件 } - if (xrNode.IsNested)//若为嵌套参照 + else//若为嵌套参照 { isNestedIds.Add(deTachId); isNestedNodeNameList.Add(xrNode.Name);//有嵌套参照,添加名称进列表,以供绑定后是否做删除处理 @@ -210,7 +210,7 @@ public static void XBindXrefs(Database db, ref Dictionary isNest { db.DetachXref(deTachId);//拆离已经卸载的非嵌套文件 } - if (xrNode.IsNested)//若为嵌套参照 + else//若为嵌套参照 { isNestedIds.Add(deTachId); isNestedNodeName.Add(deTachId.Handle, xrNode.Name);//有嵌套参照,添加关键信息进字典,以传出方法供绑定后删除处理 -- Gitee From b79e4fcd21dabd677082fdd3482af7802d6b9013 Mon Sep 17 00:00:00 2001 From: SHUN007 <1039574776@qq.com> Date: Fri, 19 Aug 2022 17:10:32 +0000 Subject: [PATCH 8/8] update src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs. Signed-off-by: SHUN007 <1039574776@qq.com> --- src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs index 159c8fb..2a39873 100644 --- a/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs +++ b/src/IFoxCAD.Cad/ExtensionMethod/XrefEx.cs @@ -240,20 +240,20 @@ public static void XBindXrefs(Database db, ref Dictionary isNest switch (xrefSymTabTypeNum) { case XrefSymTabTypeNum.LayerTable: - symbolTableRecordNum = 0; - break; + symbolTableRecordNum = 0; + break; case XrefSymTabTypeNum.TextStyleTable: - symbolTableRecordNum = 1; - break; + symbolTableRecordNum = 1; + break; case XrefSymTabTypeNum.DimStyleTable: - symbolTableRecordNum = 2; - break; + symbolTableRecordNum = 2; + break; case XrefSymTabTypeNum.LinetypeTable: - symbolTableRecordNum = 3; - break; + symbolTableRecordNum = 3; + break; case XrefSymTabTypeNum.RegAppTable: - symbolTableRecordNum = 4; - break; + symbolTableRecordNum = 4; + break; } if (symbolTableRecordNum >= 0)//为0时被本人称为"无敌绑定"项 { -- Gitee