找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1502|回复: 1

[分享] How to create MLeader objects in .Net?

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-26 18:26:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
How to create MLeader objects in .Net?                                                        By Philippe Leefsma
  
    Below are two samples that illustrates MLeader creation in C#:
  The first creates a MLeader with a MText content:
  1. [CommandMethod("netTextMLeader")]
  2. public static void netTextMLeader()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  8.     {
  9.         BlockTable table = Tx.GetObject(
  10.             db.BlockTableId,
  11.             OpenMode.ForRead)
  12.                 as BlockTable;
  13.         BlockTableRecord model = Tx.GetObject(
  14.             table[BlockTableRecord.ModelSpace],
  15.             OpenMode.ForWrite)
  16.                 as BlockTableRecord;
  17.         MLeader leader = new MLeader();
  18.         leader.SetDatabaseDefaults();
  19.         leader.ContentType = ContentType.MTextContent;
  20.         MText mText = new MText();
  21.         mText.SetDatabaseDefaults();
  22.         mText.Width = 100;
  23.         mText.Height = 50;
  24.         mText.SetContentsRtf("MLeader");
  25.         mText.Location = new Point3d(4, 2, 0);
  26.         leader.MText = mText;
  27.         int idx = leader.AddLeaderLine(new Point3d(1, 1, 0));
  28.         leader.AddFirstVertex(idx, new Point3d(0, 0, 0));
  29.         model.AppendEntity(leader);
  30.         Tx.AddNewlyCreatedDBObject(leader, true);
  31.         Tx.Commit();
  32.     }
  33. }

he second creates a MLeader with a Block content. It also handles the case where the MLeader block contains attributes and set them to a default value:
  1. [CommandMethod("netBlockMLeader")]

  2. public static void netBlockMLeader()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;

  7.     using (Transaction Tx = db.TransactionManager.StartTransaction())
  8.     {
  9.         BlockTable table = Tx.GetObject(
  10.             db.BlockTableId,
  11.             OpenMode.ForRead)
  12.                 as BlockTable;

  13.         BlockTableRecord model = Tx.GetObject(
  14.             table[BlockTableRecord.ModelSpace],
  15.             OpenMode.ForWrite)
  16.                 as BlockTableRecord;
  17.         if (!table.Has("BlkLeader"))
  18.         {
  19.             ed.WriteMessage(
  20.                 "\nYou need to define a \"BlkLeader\" first...");
  21.             return;
  22.         }

  23.         MLeader leader = new MLeader();
  24.         leader.SetDatabaseDefaults();
  25.         leader.ContentType = ContentType.BlockContent;
  26.         leader.BlockContentId = table["BlkLeader"];
  27.         leader.BlockPosition = new Point3d(4, 2, 0);

  28.         int idx = leader.AddLeaderLine(new Point3d(1, 1, 0));
  29.         leader.AddFirstVertex(idx, new Point3d(0, 0, 0));

  30.         //Handle Block Attributes
  31.         int AttNumber = 0;

  32.         BlockTableRecord blkLeader = Tx.GetObject(
  33.             leader.BlockContentId,
  34.             OpenMode.ForRead)
  35.                 as BlockTableRecord;

  36.         //Doesn't take in consideration oLeader.BlockRotation
  37.         Matrix3d Transfo = Matrix3d.Displacement(
  38.             leader.BlockPosition.GetAsVector());

  39.         foreach (ObjectId blkEntId in blkLeader)
  40.         {
  41.             AttributeDefinition AttributeDef = Tx.GetObject(
  42.                 blkEntId,
  43.                 OpenMode.ForRead)
  44.                     as AttributeDefinition;

  45.             if (AttributeDef != null)
  46.             {
  47.                 AttributeReference AttributeRef =
  48.                     new AttributeReference();
  49.                 AttributeRef.SetAttributeFromBlock(
  50.                     AttributeDef,
  51.                     Transfo);

  52.                 AttributeRef.Position =
  53.                     AttributeDef.Position.TransformBy(Transfo);
  54.                 AttributeRef.TextString = "Attrib #" + (++AttNumber);
  55.                 leader.SetBlockAttribute(blkEntId, AttributeRef);
  56.             }
  57.         }

  58.         model.AppendEntity(leader);
  59.         Tx.AddNewlyCreatedDBObject(leader, true);
  60.         Tx.Commit();

  61.     }

  62. }


评分

参与人数 1D豆 +2 收起 理由
ScmTools + 2 很给力!资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1632个

财富等级: 堆金积玉

发表于 2013-5-26 20:36:55 | 显示全部楼层
这个稍加修改就可以用在实际工作中了;P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:39 , Processed in 0.170391 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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