cad.net 属性块(二)

AutoCAD .Net 通过块参照获取块名
https://blog.csdn.net/hisinwang/article/details/78764581
CAD.NET调整属性块中文字宽度
https://www.cnblogs.com/swtool/p/3832332.html
AutoCAD .NET: 遍历模型空间
https://blog.csdn.net/u011511587/article/details/78956421

        /// <summary>
        /// 插入一个块参照到CAD图形中
        /// </summary>
        /// <param name="spaceId">模型空间Id</param>
        /// <param name="layer">要插入的图层名</param>
        /// <param name="blockName">块名</param>
        /// <param name="postion">插入点</param>
        /// <param name="scale">缩放比例</param>
        /// <param name="rotateAngle">旋转角度</param>
        /// <returns></returns>
        public static ObjectId InsertBlockTableRecord(this ObjectId spaceId, string layer, string blockName, Point3d postion, Scale3d scale, double rotateAngle)
        {
 
            ObjectId blockRefId;//存储要插入的块参照的Id
 
            Database db = spaceId.Database;//获取数据库对象
 
            BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
 
            if (!bt.Has(blockName))
 
                return ObjectId.Null;//如果没有blockName的块,程序返回
 
            //以写的方式打开空间
            BlockTableRecord space = spaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
            //创建块参照的插入点
            BlockReference br = new BlockReference(postion, bt[blockName]);
            br.ScaleFactors = scale;
 
            br.Layer = layer;
 
            br.Rotation = rotateAngle;
            blockRefId = space.AppendEntity(br);
 
            db.TransactionManager.AddNewlyCreatedDBObject(br, true);
 
            space.DowngradeOpen();
 
            return blockRefId;//返回添加的块参照的ID 
 
        }

        /// <summary>
        /// 插入一个块参照到CAD图形中
        /// </summary>
        /// <param name="spaceId">模型空间Id</param>
        /// <param name="layer">要插入的图层名</param>
        /// <param name="blockName">块名</param>
        /// <param name="postion">插入点</param>
        /// <param name="scale">缩放比例</param>
        /// <param name="rotateAngle">旋转角度</param>
        /// <returns></returns>
        public static ObjectId InsertBlockTableRecord(this ObjectId spaceId, string layer, string blockName, Point3d postion, Scale3d scale, double rotateAngle)
        {
 
            ObjectId blockRefId;//存储要插入的块参照的Id
 
            Database db = spaceId.Database;//获取数据库对象
 
            BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForRead) as BlockTable;
 
            if (!bt.Has(blockName))
 
                return ObjectId.Null;//如果没有blockName的块,程序返回
 
            //以写的方式打开空间
            BlockTableRecord space = spaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
            //创建块参照的插入点
            BlockReference br = new BlockReference(postion, bt[blockName]);
            br.ScaleFactors = scale;
 
            br.Layer = layer;
 
            br.Rotation = rotateAngle;
            blockRefId = space.AppendEntity(br);
 
            db.TransactionManager.AddNewlyCreatedDBObject(br, true);
 
            space.DowngradeOpen();
 
            return blockRefId;//返回添加的块参照的ID 
 
        }
 
 
 
在CAD中插入一个块参照
 
 
/// <summary>
        /// 创建一个块,添加到数据库中
        /// </summary>
        /// <param name="db"></param>
        /// <param name="blockName"></param>
        /// <param name="ents"></param>
        /// <returns></returns>
        public static ObjectId AddBlockTableRecord(this Database db, string blockName, List<Entity> ents)
        {
            BlockTable bt = (BlockTable)db.BlockTableId.GetObject(OpenMode.ForRead);
 
            if (!bt.Has(blockName))
            {
                BlockTableRecord btr = new BlockTableRecord();
 
                btr.Name = blockName;
                //将列表中的实体加入到新建的BlockTableRecord
                ents.ForEach(ent => btr.AppendEntity(ent));
               
                bt.UpgradeOpen();//切换块为写的状态
 
                bt.Add(btr);
 
                db.TransactionManager.AddNewlyCreatedDBObject(btr, true);
 
                bt.DowngradeOpen();//切换块为读的状态
 
            }
 
            return bt[blockName];
        }


AutoCAD二次开发之属性操作(1) 写属性
https://blog.csdn.net/missingshirely/article/details/11780685

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值