|
在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
- }
- }
- }
复制代码 |
|
|