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

萧闫子 发表于 2014-1-8 14:44:37

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



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

代码如下:
/// <summary>
/// 创建带文字的线型
/// </summary>
/// <returns>返回线型ID</returns>
public static ObjectId CreateLineTypeWithText()
{
    Document doc =
         Autodesk.AutoCAD.ApplicationServices.
             Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;
    Editor ed = doc.Editor;
    Transaction tr =db.TransactionManager.StartTransaction();
    using (tr)
    {
      // 读出文字样式表
      TextStyleTable tt =
          (TextStyleTable)tr.GetObject(db.TextStyleTableId,
               OpenMode.ForRead);
      // 读出线型表
      LinetypeTable lt =
          (LinetypeTable)tr.GetObject(db.LinetypeTableId,
                OpenMode.ForWrite);

      if (lt.Has("Ben"))
      {
            return lt["Ben"];
      }
      else
      {
            // 创建新的线型记录.
            LinetypeTableRecord ltr = new LinetypeTableRecord();
            // ...设置线型记录特性
            ltr.Name = "Ben";
            ltr.AsciiDescription =
                   "Ben Supply ---- Ben ---- Ben ---- Ben ----";
            ltr.PatternLength = 1.1;
            ltr.NumDashes = 3; //分为三段
            // 线段Dash #1
            ltr.SetDashLengthAt(0, 0.5);
            // 线段Dash #2
            ltr.SetDashLengthAt(1, -0.3);
            ltr.SetShapeStyleAt(1, tt["Standard"]);//文字样式设定
            ltr.SetShapeNumberAt(1, 0);
            //文字位置设定,用一二维向量控制
            ltr.SetShapeOffsetAt(1, new Vector2d(-0.1, -0.05));
            ltr.SetShapeScaleAt(1, 0.1);//文字比例
            ltr.SetShapeIsUcsOrientedAt(1, false);
            ltr.SetShapeRotationAt(1, 0);//文字方向,0为顺直接方向
            ltr.SetTextAt(1, "Ben");//文字内容
            // 线段Dash #3
            ltr.SetDashLengthAt(2, -0.3);
            // 添加新的线型记录到线型表
            ObjectId ltId = lt.Add(ltr);
            tr.AddNewlyCreatedDBObject(ltr, true);
            tr.Commit();

            return ltId;//返回线型记录ID
      }
    }
}

页: [1]
查看完整版本: [实体对象] 创建包含文字的线型