乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 50|回复: 2

创建多重引线样式和绘制多重引线的问题

[复制链接]
xgr

56

主题

302

帖子

8

银币

中流砥柱

Rank: 25

铜币
526
发表于 2014-10-12 21:00:00 | 显示全部楼层 |阅读模式
下列代码创建多重引线样式和绘制多重引线
  1. using Autodesk..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. }
效果如图

y0fce3muifo.gif

y0fce3muifo.gif


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

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-10-13 18:51:00 | 显示全部楼层
试下用两个事务分别生成式样和mleader
回复

使用道具 举报

xgr

56

主题

302

帖子

8

银币

中流砥柱

Rank: 25

铜币
526
发表于 2014-10-14 09:53:00 | 显示全部楼层
复制代码可还不是这个问题
用系统默认的样式standard生成还是显示右对齐,
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 20:28 , Processed in 0.867774 second(s), 61 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表