bluefires 发表于 2020-4-19 21:48:33

引线Leader为啥无法联动??

我的代码可以生成一个带Mtext的标注。标注采用引线Leader生成,但是存在一个问题,就是你拖动Mtext的时候引线不会跟着动,请问代码是否存在问题??我用arxdbg工具查看的时候,发现Mtext的softpoints没有关联leader。如果用cad本身带的命令生成leader,是可以联动的,并且Mtext的softpoints关联leader。代码如下,请大家帮忙看看。




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
namespace myCsharpARX
{
    public class 引线leader标注用
    {
      //关联引线和注释
      
      public static void AddLeaderAnnotation()
      {
            // 获取当前数据库
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            Database acCurDb = acDoc.Database;
            // 启动事务
            using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
            {
                // 以读模式打开块表
                BlockTable acBlkTbl;
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
                OpenMode.ForRead) as BlockTable;
                // 以写模式打开块表记录模型空间
                BlockTableRecord acBlkTblRec;
                acBlkTblRec = acTrans.GetObject(acBlkTbl,
                  OpenMode.ForWrite) as BlockTableRecord;
                // 创建多行文字(MText)注释
                MText acMText = new MText();
                acMText.Contents = "Hello, World.";
                acMText.Location = new Point3d(350, 250, 0);
                acMText.Width = 2;
                //// 添加新对象到模型空间,记录事务
                acBlkTblRec.AppendEntity(acMText);
                acTrans.AddNewlyCreatedDBObject(acMText, true);
                // 创建带注释的引线
                Leader acLdr = new Leader();
                acLdr.AppendVertex(new Point3d(0, 0, 0));
                acLdr.AppendVertex(new Point3d(60, 50, 0));
                acLdr.AppendVertex(new Point3d(100, 80, 0));
                acLdr.HasArrowHead = true;
                // 添加新对象到模型空间,记录事务
                acLdr.Annotative = AnnotativeStates.True;
               
                acLdr.Annotation = acMText.ObjectId;
               
                //// 添加新对象到模型空间,记录事务
                acBlkTblRec.AppendEntity(acLdr);
                acTrans.AddNewlyCreatedDBObject(acLdr, true);
                // 给引线对象附加注释
               
                //acLdr.EvaluateLeader();
                // 提交修改,回收内存
                acTrans.Commit();
            }
      }

mkhsj928 发表于 2020-10-25 11:30:47

把这个acBlkTblRec.AppendEntity(acLdr);放到acLdr.Annotative = AnnotativeStates.True;之前
也就是说在引线附着文字之前要先把引线实体加入数据库
页: [1]
查看完整版本: 引线Leader为啥无法联动??