cad.net 外部参照功能

2021-04-11 22:28

阅读:485

标签:return   status   cad   block   switch   lock   var   resid   iso   

啥也不说,放代码

 

namespace JoinBox
{
    public enum XrefEnum
    {
        /// 
        /// 卸载
        /// 
        UnloadXrefs,
        /// 
        /// 重载
        /// 
        ReloadXrefs, 
        /// 
        /// 拆离
        /// 
        DetachXref,
        /// 
        /// 绑定
        /// 
        BindXrefs, 
    }

    public static class XrefTool
    {
        /// 
        /// 修改外部参照
        /// 
        /// 数据库
        /// 设置的枚举状态
        /// 要处理的参照名称,null就处理所有的参照
        public static void SetXref(this Database db, XrefEnum xe, IEnumerablestring> names = null)
        {
            db.ResolveXrefs(false, true);//解析外部参照(使用线性引擎,只做新的) 
            var ids = new ObjectIdCollection();
            var xg = db.GetHostDwgXrefGraph(true);//神马是僵尸参照
            for (int i = 0; i )
            {
                var xNode = xg.GetXrefNode(i) as XrefGraphNode;
                // if (xNode.XrefStatus != XrefStatus.Resolved) //状态判断
                if (xNode.BlockTableRecordId.IsOk())
                {
                    if (names != null)
                    {
                        foreach (var item in names)
                        {
                            //只加入名称相同的
                            if (item.ToUpper() == xNode.Name.ToUpper())
                            {
                                ids.Add(xNode.BlockTableRecordId);
                            }
                        }
                    }
                    else
                    {
                        //每个都加入
                        ids.Add(xNode.BlockTableRecordId);
                    }
                }
            }

            // btRec.IsFromOverlayReference //是覆盖?  
            // XrefStatus 外部参照状态
            // GetXrefDatabase 外部参照数据库
            if (ids.Count == 0)
            {
                return;
            }
            switch (xe)
            {
                case XrefEnum.BindXrefs://绑定后会自动拆离
                    {
                        db.BindXrefs(ids, true);
                    }
                    break;
                case XrefEnum.DetachXref: //拆离
                    {
                        foreach (ObjectId item in ids)
                        {
                            db.DetachXref(item);
                        }
                    }
                    break;
                case XrefEnum.UnloadXrefs://卸载
                    {
                        db.UnloadXrefs(ids);  
                    }
                    break;
                case XrefEnum.ReloadXrefs://重载
                    {
                        db.ReloadXrefs(ids);
                    }
                    break;
            }
        }
    }
}

        /// 
        /// id有效,未被删除
        /// 
        /// 
        /// 
        public static bool IsOk(this ObjectId id)
        {
            return !id.IsNull && id.IsValid && !id.IsErased && !id.IsEffectivelyErased && id.IsResident;
        }

 

cad.net 外部参照功能

标签:return   status   cad   block   switch   lock   var   resid   iso   

原文地址:https://www.cnblogs.com/JJBox/p/12407217.html


评论


亲,登录后才可以留言!