明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2506|回复: 2

[图元] 创建多重引线样式和绘制多重引线的问题

[复制链接]
发表于 2014-10-12 21:00:44 | 显示全部楼层 |阅读模式
下列代码创建多重引线样式和绘制多重引线
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.Colors;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.Runtime;
  6. using 创建多重引线;

  7. [assembly: CommandClass(typeof (Class1))]

  8. namespace 创建多重引线
  9. {
  10.     public class Class1
  11.     {
  12.         [CommandMethod("AddML")]
  13.         public static void DrawMleader()
  14.         {
  15.             var MLStyleId = CreateMleaderStyle("xuguang");
  16.             //获取当前数据库
  17.             var acDoc = Application.DocumentManager.MdiActiveDocument;
  18.             var acCurDb = acDoc.Database;
  19.             //启动事务
  20.             using (var acTrans = acCurDb.TransactionManager.StartTransaction())
  21.             {
  22.                 //以读模式打开块表
  23.                 var acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead) as BlockTable;

  24.                 //以写模式打开块表记录模型空间
  25.                 var acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
  26.                     OpenMode.ForWrite) as BlockTableRecord;

  27.                 var pMLeader = new MLeader();
  28.                 pMLeader.SetDatabaseDefaults();
  29.                 pMLeader.MLeaderStyle = MLStyleId;
  30.                 var pos = new Point3d(200, 200, 200);
  31.                 var posTmp = new Point3d(220, 220, 0);
  32.                 var sn = pMLeader.AddLeaderLine(pos);
  33.                 pMLeader.AddFirstVertex(sn, pos);
  34.                 pMLeader.SetFirstVertex(sn, pos);
  35.                 pMLeader.SetLastVertex(sn, posTmp);

  36.                 //创建多行文字(MText)注释
  37.                 var pMtext = new MText();
  38.                 pMtext.Contents = "创建多重引线";
  39.                 pMtext.TextHeight = 3;
  40.                 pMtext.TextStyleId = acCurDb.Textstyle;

  41.                 pMtext.Location = posTmp;
  42.                 pMLeader.MText = pMtext;
  43.               
  44.                 //添加新对象到模型空间,记录事务
  45.                 acBlkTblRec.AppendEntity(pMLeader);
  46.                 acTrans.AddNewlyCreatedDBObject(pMLeader, true);

  47.                 //提交修改,回收内存
  48.                 acTrans.Commit();
  49.             }
  50.             acDoc.Editor.Regen();
  51.         }

  52.         private static ObjectId CreateMleaderStyle(string MlName)
  53.         {
  54.             var acDoc = Application.DocumentManager.MdiActiveDocument;
  55.             var db = HostApplicationServices.WorkingDatabase;

  56.             using (var acTrans = acDoc.TransactionManager.StartTransaction())
  57.             {
  58.                 var DbDictionary = acTrans.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForWrite) as DBDictionary;
  59.                 //获取所有样式
  60.                 if (DbDictionary.Contains(MlName))
  61.                 {
  62.                     return DbDictionary.GetAt(MlName);
  63.                 }
  64.                 var newMleadStyle = new MLeaderStyle();
  65.                 newMleadStyle.TextAlignAlwaysLeft = true;
  66.                 newMleadStyle.Annotative = AnnotativeStates.True;
  67.                 newMleadStyle.DrawMLeaderOrderType = DrawMLeaderOrderType.DrawLeaderFirst;
  68.                 newMleadStyle.TextAttachmentType = TextAttachmentType.AttachmentMiddle; //Text连接方式
  69.                 newMleadStyle.TextAttachmentDirection = TextAttachmentDirection.AttachmentHorizontal; //文字水平排列
  70.                 newMleadStyle.TextAlignmentType = TextAlignmentType.CenterAlignment; //Text排列方式
  71.                 newMleadStyle.LeaderLineColor =
  72.                     Color.FromColorIndex(ColorMethod.ByLayer, 256);
  73.                 newMleadStyle.LeaderLineType = LeaderType.StraightLeader;
  74.                 newMleadStyle.ContentType = ContentType.MTextContent;
  75.                 newMleadStyle.ArrowSize = 3.0; //箭头大小
  76.                 newMleadStyle.BreakSize = 0.6; //基线打断大小
  77.                 newMleadStyle.DoglegLength = 1.25; //基线距离
  78.                 newMleadStyle.EnableLanding = true;
  79.                 newMleadStyle.EnableDogleg = true; //显示基线
  80.                 newMleadStyle.EnableFrameText = true; //显示文本框
  81.                 newMleadStyle.LandingGap = 1; //基线间隙
  82.                 newMleadStyle.MaxLeaderSegmentsPoints = 2; //最大引线点数
  83.                 newMleadStyle.TextStyleId = acDoc.Database.Textstyle; //文字样式
  84.                 newMleadStyle.TextHeight = 3.0;
  85.                 newMleadStyle.PostMLeaderStyleToDb(db, MlName);
  86.                 newMleadStyle.DowngradeOpen();
  87.                 acTrans.Commit();
  88.                 return newMleadStyle.ObjectId;
  89.             }
  90.         }
  91.     }
  92. }
效果如图

问题是
1:程序起始生成的多重引线文字为何右对齐,需拖动后才显示正确的效果。
2:样式里面的文字连接位置-右怎样才可以设置为在文字中间,指在代码里设置。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-10-13 18:51:58 来自手机 | 显示全部楼层
试下用两个事务分别生成式样和mleader
 楼主| 发表于 2014-10-14 09:53:34 | 显示全部楼层
雪山飞狐_lzh 发表于 2014-10-13 18:51
试下用两个事务分别生成式样和mleader
  1. var pMLeader = new MLeader();
  2.                 pMLeader.SetDatabaseDefaults();
  3.                 //pMLeader.MLeaderStyle = MLStyleId;
  4.                 pMLeader.MLeaderStyle = acCurDb.MLeaderstyle;
  5.                 var pos = new Point3d(200, 200, 200);
  6.                 var posTmp = new Point3d(220, 220, 0);
  7.                 var sn = pMLeader.AddLeaderLine(pos);
  8.                 pMLeader.AddFirstVertex(sn, pos);
  9.                 pMLeader.SetFirstVertex(sn, pos);
  10.                 pMLeader.SetLastVertex(sn, posTmp);
复制代码
可还不是这个问题
用系统默认的样式standard生成还是显示右对齐,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 12:28 , Processed in 0.167262 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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