明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3214|回复: 2

请问大家如何在图纸空间中添加对象

[复制链接]
发表于 2011-10-27 17:40:10 | 显示全部楼层 |阅读模式
一般情况下我们用程序生成的对象都在模型空间里显示,我需要在图纸空间的输出一段文字,请教一下,需要怎样才能实现呢?我用的是vb.net,C#的实现方法也可以,谢谢大家!
发表于 2011-10-28 14:08:49 | 显示全部楼层
本帖最后由 gulong2001 于 2011-10-28 14:17 编辑

       /// <summary>
        /// 开始当前事务处理
        /// </summary>
        /// <returns>开始当前事务处理</returns>
        public static Autodesk.AutoCAD.DatabaseServices.Transaction  StartTransaction
        {
            get
            {
                return Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction();
            }
        }
/// <summary>
        /// 图元添加到模型空间
        /// </summary>
        public static ObjectId AddToModelSpace(this Autodesk.AutoCAD.DatabaseServices.Entity ent)
        {
            return ent.AddToSomeSpace("Model");
        }
        /// <summary>
        /// 图元添加到任意空间
        /// </summary>
        public static ObjectId AddToSomeSpace(this Autodesk.AutoCAD.DatabaseServices.Entity ent, string LayoutName)
        {
            ObjectId entId = ObjectId.Null;
            using (Transaction trans = StartTransaction)
            {
                DBDictionary dict = (DBDictionary)trans.GetObject(CurrentDatabase.LayoutDictionaryId, OpenMode.ForRead);//得到所有空间,包括模型及布局
                ObjectId lyid = dict.GetAt(LayoutName);
                Layout ly = (Layout)trans.GetObject(lyid, OpenMode.ForRead);
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(ly.BlockTableRecordId, OpenMode.ForWrite);
                entId = btr.AppendEntity(ent);
                trans.AddNewlyCreatedDBObject(ent, true);
                trans.Commit();
            }
            return entId;
        }
代码一看就应该明白。可以添加到任意空间,用了扩展方法(你不用就修改下)ent的AddToSomeSpace,参数里面加上空间的名字即可加到对应空间具体可见:http://blog.sina.com.cn/s/blog_69e8fdf00100zv4r.html
发表于 2011-10-28 23:13:30 | 显示全部楼层
本帖最后由 guohq 于 2011-10-28 23:14 编辑
  1.     '''
  2.     ''' 向任意空间添加多个对象
  3.     '''
  4.     '''
  5.     '''
  6.     '''
  7.     '''
  8.     Public Function AppendEntity(ByVal Ents() As Entity, ByVal LayoutName As String) As ObjectId()
  9.         Dim rtnIDs(Ents.Length - 1) As ObjectId
  10.         Using Trans As Transaction = DB.TransactionManager.StartTransaction
  11.             Dim DictLy As DBDictionary = Trans.GetObject(DB.LayoutDictionaryId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead)
  12.             If DictLy.Contains(LayoutName) = False Then
  13.                 For I As Integer = 0 To rtnIDs.Length - 1
  14.                     rtnIDs(I) = ObjectId.Null
  15.                 Next
  16.                 Trans.Commit()
  17.                 Return rtnIDs
  18.             End If
  19.             Dim Lyid As ObjectId = DictLy.GetAt(LayoutName)
  20.             Dim Ly As Layout = Trans.GetObject(Lyid, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead)
  21.             Dim BTR As BlockTableRecord = Trans.GetObject(Ly.BlockTableRecordId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite)
  22.             Dim Ent As Entity = Nothing
  23.             For I As Integer = 0 To Ents.Length - 1
  24.                 Ent = Ents(I)
  25.                 rtnIDs(I) = BTR.AppendEntity(Ent)
  26.                 Trans.AddNewlyCreatedDBObject(Ent, True)
  27.             Next
  28.             Trans.Commit()
  29.         End Using
  30.         Return rtnIDs
  31.     End Function

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 19:40 , Processed in 0.172235 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表