找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 869|回复: 6

[求助] C# 如何修改 多重引线的 端点坐标 和 多行文字内容

[复制链接]
发表于 2017-7-7 21:34:34 | 显示全部楼层 |阅读模式

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

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

×
Point3d startPt = new Point3d(100, 100, 0);
            Point3d endPt = new Point3d(90, 110, 0);

            // Create the MLeader  创建一个新的引线
            MLeader mld = new MLeader();

            int ldNum = mld.AddLeader();
            int lnNum = mld.AddLeaderLine(ldNum);

            mld.AddFirstVertex(lnNum, startPt);
            mld.AddLastVertex(lnNum, endPt);

            rtx1.AppendText("引线的终点:" + mld.GetLastVertex(lnNum).ToString() + "\n");

            // Create the MText 创建多行文字
            MText mt = new MText();
            mt.Contents = "AAA";

            mt.TextHeight = 1;

            mt.Location = endPt;

            mld.ContentType = ContentType.MTextContent;
            mld.MText = mt;

            //mld.EnableDogleg = FALSE;
            mld.DoglegLength = 0;
            mld.LandingGap = 0;

            //直到此时,引线的 endpoint 坐标依然是对的
            rtx1.AppendText("引线的终点:" + mld.GetLastVertex(lnNum).ToString());


            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                using (doc.LockDocument()) // 以非模态对话框打开的时候,要先锁定CAD文档
                {
                    BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
                    BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                    // Add the MLeader 向模型空间中加入 这个新创建的 多重引线
                    btr.AppendEntity(mld);
                    tr.AddNewlyCreatedDBObject(mld, true);
                }
                tr.Commit();
            }

            rtx1.AppendText("用事务加入这个新创建的多重引线后,引线的终点莫名其妙改变了:" + mld.GetLastVertex(lnNum).ToString() + "\n");

            //尝试重新修改这个 多重引线
            using (Transaction tr = db.TransactionManager.StartTransaction())
            {
                using (doc.LockDocument()) // 以非模态对话框打开的时候,要先锁定CAD文档
                {
                    MLeader xx = (MLeader)mld.ObjectId.GetObject(OpenMode.ForWrite);

                    //跟踪调试发现,何执行完这句后,多行文本的 Contents 还是原来的“AAA”,而不是"BBB",为什么?
                    xx.MText.Contents = "BBB";

                    //修改 多重引线的 端点坐标,这句是成功的
                    xx.SetLastVertex(lnNum, endPt);

                    // 以下两句是不能写的,否则 端点坐标会再次发生变化,
                    // 猜测,多重引线的端点坐标是受下面两个参数影响的。 具体是怎么个计算关系???

                    //mld.DoglegLength = 0;
                    //mld.LandingGap = 0;

                    xx.DowngradeOpen();
                }
                tr.Commit();
            }

            rtx1.AppendText("重新修改后的 引线端点坐标" + mld.GetLastVertex(lnNum).ToString() + "\n");


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

已领礼包: 13个

财富等级: 恭喜发财

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

使用道具 举报

 楼主| 发表于 2017-7-7 21:57:02 | 显示全部楼层

具体怎么弄 ?

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-7-7 22:06:16 | 显示全部楼层
本帖最后由 LoveArx 于 2017-7-7 22:10 编辑

创建一个MTEXT对象,设置好内容,然后把这个MTEXT对象设置到MLEADER

  1.         MLeader oLeader = new MLeader();
  2.         oLeader.SetDatabaseDefaults();

  3.         oLeader.ContentType = ContentType.MTextContent;MText oMText = new MText();
  4.         oMText.SetDatabaseDefaults();
  5.         oMText.Width = 100;
  6.         oMText.Height = 50;
  7.         oMText.SetContentsRtf("MLeader");
  8.         oMText.Location = new Point3d(4, 2, 0);

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

使用道具 举报

 楼主| 发表于 2017-7-7 22:32:47 | 显示全部楼层

多谢。确实可以。

但是 mtext 的 contents 不能修改,确实奇怪。

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

使用道具 举报

已领礼包: 13个

财富等级: 恭喜发财

发表于 2017-7-7 23:30:32 | 显示全部楼层

不用奇怪,就是这么规定的,只能通过创建一个MTEXT对象,然后设置到MLEADER的方法修改MTEXT的属性。你如果用ARX,就知道了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

发表于 2017-7-8 08:19:40 | 显示全部楼层
何执行完这句后,多行文本
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 16:48 , Processed in 0.314698 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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