鲁班人[ Ben's Blog]

-专注于建筑钢结构技术的发展与应用

« 心声:"死了都要改"AutoCAD线型文件定义含文字线型的格式说明 »

用.Net在AutoCAD中创建包含文字的线型

  在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
        }
    }
}

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright 2002-2008 Ben’s Weblog™. Some Rights Reserved.