EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 621|回复: 0
打印 上一主题 下一主题

[实体对象] 创建包含文字的线型

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-8 14:44:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在Kean这篇文章(Creating a complex AutoCAD linetype containing text using .NET)的启发下,修改了一个创建文字线型的函数,按自己的理解补充了一些注释;增加了重复添加线型记录时出现错误的修。在绘图时把图形实体指定为本线型就可以了。

代码如下:

  1. /// <summary>
  2. /// 创建带文字的线型
  3. /// </summary>
  4. /// <returns>返回线型ID</returns>
  5. public static ObjectId CreateLineTypeWithText()
  6. {
  7.     Document doc =
  8.          Autodesk.AutoCAD.ApplicationServices.
  9.              Application.DocumentManager.MdiActiveDocument;
  10.     Database db = doc.Database;
  11.     Editor ed = doc.Editor;
  12.     Transaction tr =db.TransactionManager.StartTransaction();
  13.     using (tr)
  14.     {
  15.         // 读出文字样式表
  16.         TextStyleTable tt =  
  17.           (TextStyleTable)tr.GetObject(db.TextStyleTableId,
  18.                  OpenMode.ForRead);
  19.         // 读出线型表
  20.         LinetypeTable lt =  
  21.           (LinetypeTable)tr.GetObject(db.LinetypeTableId,  
  22.                 OpenMode.ForWrite);

  23.         if (lt.Has("Ben"))
  24.         {
  25.             return lt["Ben"];
  26.         }
  27.         else
  28.         {
  29.             // 创建新的线型记录.
  30.             LinetypeTableRecord ltr = new LinetypeTableRecord();
  31.             // ...设置线型记录特性
  32.             ltr.Name = "Ben";
  33.             ltr.AsciiDescription =  
  34.                    "Ben Supply ---- Ben ---- Ben ---- Ben ----";
  35.             ltr.PatternLength = 1.1;
  36.             ltr.NumDashes = 3; //分为三段
  37.             // 线段Dash #1
  38.             ltr.SetDashLengthAt(0, 0.5);
  39.             // 线段Dash #2
  40.             ltr.SetDashLengthAt(1, -0.3);
  41.             ltr.SetShapeStyleAt(1, tt["Standard"]);//文字样式设定
  42.             ltr.SetShapeNumberAt(1, 0);
  43.             //文字位置设定,用一二维向量控制
  44.             ltr.SetShapeOffsetAt(1, new Vector2d(-0.1, -0.05));
  45.             ltr.SetShapeScaleAt(1, 0.1);//文字比例
  46.             ltr.SetShapeIsUcsOrientedAt(1, false);
  47.             ltr.SetShapeRotationAt(1, 0);//文字方向,0为顺直接方向
  48.             ltr.SetTextAt(1, "Ben");//文字内容
  49.             // 线段Dash #3
  50.             ltr.SetDashLengthAt(2, -0.3);
  51.             // 添加新的线型记录到线型表
  52.             ObjectId ltId = lt.Add(ltr);
  53.             tr.AddNewlyCreatedDBObject(ltr, true);
  54.             tr.Commit();

  55.             return ltId;//返回线型记录ID
  56.         }
  57.     }
  58. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-16 12:46

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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