乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 33|回复: 2

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

[复制链接]

2

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
10
发表于 2011-10-27 17:40:00 | 显示全部楼层 |阅读模式
一般情况下我们用程序生成的对象都在模型空间里显示,我需要在图纸空间的输出一段文字,请教一下,需要怎样才能实现呢?我用的是vb.net,C#的实现方法也可以,谢谢大家!
回复

使用道具 举报

5

主题

23

帖子

2

银币

初来乍到

Rank: 1

铜币
43
发表于 2011-10-28 14:08:00 | 显示全部楼层

       ///
        /// 开始当前事务处理
        ///
        /// 开始当前事务处理
        public static Autodesk.AutoCAD.DatabaseServices.Transaction  StartTransaction
        {
            get
            {
                return Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction();
            }
        }
///
        /// 图元添加到模型空间
        ///
        public static ObjectId AddToModelSpace(this Autodesk.AutoCAD.DatabaseServices.Entity ent)
        {
            return ent.AddToSomeSpace("Model");
        }
        ///
        /// 图元添加到任意空间
        ///
        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
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2011-10-28 23:13:00 | 显示全部楼层
  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
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 17:24 , Processed in 2.129441 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表