AutoCAD二次开发(.Net)之动态块

1、进入块编辑页面,添加可见性到块附近

2、点击可见性状态,添加可见性状态,如下图

3、根据定义的可见性,选择要显示的图形,右击-->对象可见性-->在当前状态中显示,更改当前的可见性状态(红色框选部分),对应显示隐藏图形即可。

4、动态块的读取

        public static void InitialZwBlockReference()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Database db = doc.Database;
            string fileName =  "动态块.dwg";
            ObjectIdCollection oids = new ObjectIdCollection();
            ObjectIdCollection newoids = new ObjectIdCollection();
            IdMapping idMap = new IdMapping();
            //将动态块拷贝到当前document,生成块定义
            using (Database srcDb = new Database(false, false))
            {
                srcDb.ReadDwgFile(fileName, System.IO.FileShare.Read, true, null);
                srcDb.CloseInput(true);
                using (Transaction tr = srcDb.TransactionManager.StartTransaction())
                {
                    BlockTable blockTbl = tr.GetObject(srcDb.BlockTableId, OpenMode.ForRead) as BlockTable;
                    BlockTableRecord modelSpace1 = tr.GetObject(blockTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
                    foreach (ObjectId oid in modelSpace1)
                    {
                        oids.Add(oid);
                    }
                }
                srcDb.WblockCloneObjects(oids, db.CurrentSpaceId, idMap, DuplicateRecordCloning.Ignore, false);
                foreach (ObjectId oid in oids)
                {
                    try
                    {
                        if (!newoids.Contains(idMap[oid].Value))
                        {
                            newoids.Add(idMap[oid].Value);
                        }
                    }
                    catch { }

                }
            }
            //设置显示的值
            using (DocumentLock dl = doc.LockDocument())
            {
                using (Transaction trans = doc.TransactionManager.StartTransaction())
                {
                    Entity ent = trans.GetObject(newoids[0], OpenMode.ForWrite) as Entity;
                    if (ent is BlockReference)
                    {
                        CheckBlockPropertyValue((BlockReference)ent,"圆");
                    }
                    trans.Commit();
                }
            }
        }
        



        //根据想要显示的值去显示
        public static void CheckBlockPropertyValue(BlockReference br, string blockName)
        {
            DynamicBlockReferencePropertyCollection properties = br.DynamicBlockReferencePropertyCollection;
            for (int i = 0; i < properties.Count; i++)
            {
                DynamicBlockReferenceProperty property = properties[i];
                foreach (object item in property.GetAllowedValues())
                {
                    if (item.ToString() == blockName)
                    {
                        property.Value = item;
                    }
                }
            }
        }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值