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

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

代码如下:

[code=csharp]///

/// 创建带文字的线型 /// /// 返回线型ID 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 } } }[/code]