明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1682|回复: 1

[图元] 引线Leader为啥无法联动??

[复制链接]
发表于 2020-4-19 21:48:33 | 显示全部楼层 |阅读模式
我的代码可以生成一个带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标注用
    {
        //关联引线和注释
        [CommandMethod("AddLeaderAnnotation1")]
        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[BlockTableRecord.ModelSpace],
                    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();
            }
        }

发表于 2020-10-25 11:30:47 | 显示全部楼层
把这个acBlkTblRec.AppendEntity(acLdr);放到acLdr.Annotative = AnnotativeStates.True;之前
也就是说在引线附着文字之前要先把引线实体加入数据库
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:15 , Processed in 0.172657 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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