明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1929|回复: 4

[JIG] 动态标注jig示例

  [复制链接]
发表于 2023-2-26 16:37:52 | 显示全部楼层 |阅读模式
本帖最后由 Dani1988 于 2023-10-25 20:42 编辑

先看效果,再发源码。。。。。

  1. [CommandMethod(nameof(CS5))]
  2.         public static void CS5()
  3.         {
  4.             // 创建文字
  5.             var db = Env.Database;
  6.             DBText upText = new DBText();
  7.             DBText downText = new DBText();
  8.             upText.SetDatabaseDefaults(db);
  9.             downText.SetDatabaseDefaults(db);
  10.             upText.TextString = "我是升哥2018";
  11.             downText.TextString = "QQ:674971560";
  12.             double textHeight = 300;
  13.             upText.Height = downText.Height = textHeight;
  14.             // 设置对齐
  15.             upText.HorizontalMode = downText.HorizontalMode = TextHorizontalMode.TextLeft;
  16.             upText.VerticalMode = downText.VerticalMode = TextVerticalMode.TextVerticalMid;
  17.             upText.AdjustAlignment(db);
  18.             downText.AdjustAlignment(db);
  19.             // 调整位置
  20.             upText.Move(upText.Position, Point3d.Origin + new Vector3d(0, textHeight*0.2, 0));
  21.             downText.Move(downText.Position, Point3d.Origin + new Vector3d(0, -textHeight*1.2, 0));
  22.             // 计算高度
  23.             var textWidth = Math.Max(upText.GeometricExtents.MaxPoint.X - upText.GeometricExtents.MinPoint.X, downText.GeometricExtents.MaxPoint.X - downText.GeometricExtents.MinPoint.X);
  24.             // 创建文字线
  25.             Line textLine = new Line(Point3d.Origin, new Point3d(textWidth, 0, 0));
  26.             //textLine.ColorIndex = 3;
  27.             textLine.SetDatabaseDefaults(db);
  28.             // 获取标注位置
  29.             var r1 = Env.Editor.GetPoint("\n选择点1");
  30.             if (r1.Status != PromptStatus.OK)
  31.                 return;
  32.             var pt1 = r1.Value.Ucs2Wcs();
  33.             // 创建引线
  34.             Line leaderLine = new Line(pt1, Point3d.Origin);
  35.             //leaderLine.ColorIndex = 3;
  36.             leaderLine.SetDatabaseDefaults(db);
  37.             // 创建拖拽类
  38.             using var j1 = new JigEx((mpw, _) =>
  39.             {
  40.                 var pt2 = mpw;
  41.                 leaderLine.EndPoint = pt2;
  42.                 leaderLine.ColorIndex = 3;
  43.                 textLine.ColorIndex = 3;
  44.                 Matrix3d mt = Matrix3d.Displacement(pt2 - (pt2.X >= pt1.X ? textLine.StartPoint : textLine.EndPoint));
  45.                 textLine.TransformBy(mt);
  46.                 upText.TransformBy(mt);
  47.                 downText.TransformBy(mt);
  48.             });
  49.             j1.DatabaseEntityDraw(wd =>
  50.             {
  51.                 wd.Geometry.Draw(textLine);
  52.                 wd.Geometry.Draw(leaderLine);
  53.                 wd.Geometry.Draw(upText);
  54.                 wd.Geometry.Draw(downText);
  55.             });
  56.             j1.SetOptions(pt1, CursorType.Crosshair, "\n选择下一点");
  57.             // 开始拖拽
  58.             var r2 = Env.Editor.Drag(j1);
  59.             if (r2.Status != PromptStatus.OK)
  60.                 return;
  61.             // 加入数据库
  62.             using var tr = new DBTrans();
  63.             tr.CurrentSpace.AddEntity(leaderLine, textLine, upText, downText);
  64.         }

发表于 2023-3-12 21:50:08 | 显示全部楼层
本帖最后由 yupeng_dyp 于 2023-3-12 21:59 编辑

// 同样的功能不同的写法


[CommandMethod("TestCmd")]
public static void TestCmd()
{
    using var tr = new DBTrans();
    var resPt = Env.Editor.GetPoint("\n指定第一点");
    if (resPt.Status != PromptStatus.OK) return;

    var basePt = resPt.Value.Ucs2Wcs();
    var textHeight = 300;
    var textOffset = textHeight * 0.2;
    var textStyle = tr.TextStyleTable[(string)Acap.GetSystemVariable("TEXTSTYLE")].GetObject(OpenMode.ForRead).ObjectId;
    var upString = "上面:IFoxCad学习";
    var downString = "下面:Jig模拟引线标注";

    using var jigEx = new JigEx((mousePt, entities) => {
        var upText = new DBText() { TextString = upString, Height = textHeight };
        var downText = new DBText() { TextString = downString, Height = textHeight };
        var leaderLine = new Line(basePt, mousePt);
        var textLine = new Line(mousePt, mousePt);

#if NET35
        upText.TextStyle = textStyle;
        downText.TextStyle = textStyle;
#else
        upText.TextStyleId = textStyle;
        downText.TextStyleId = textStyle;
#endif

        var upSize = upText.GeometricExtents.GetSize();
        var downSize = downText.GeometricExtents.GetSize();

        if (mousePt.X >= basePt.X) {
            upText.HorizontalMode = downText.HorizontalMode = TextHorizontalMode.TextLeft;
            upText.Move(upText.GeometricExtents.MinPoint, mousePt + new Vector3d(textOffset, textOffset, 0));
            downText.Move(downText.GeometricExtents.MinPoint,
                mousePt + new Vector3d(textOffset, -downSize.Height - textOffset, 0));
            textLine.EndPoint = mousePt + new Vector3d(Math.Max(upSize.Width, downSize.Width), 0, 0);
        }
        else {
            upText.HorizontalMode = downText.HorizontalMode = TextHorizontalMode.TextRight;
            upText.Move(upText.GeometricExtents.MinPoint, mousePt + new Vector3d(-textOffset, textOffset, 0));
            downText.Move(downText.GeometricExtents.MinPoint,
                mousePt + new Vector3d(-textOffset, -downSize.Height - textOffset, 0));
            textLine.EndPoint = mousePt + new Vector3d(-Math.Max(upSize.Width, downSize.Width), 0, 0);
        }

        upText.SetDatabaseDefaults(Env.Database);
        upText.AdjustAlignment(Env.Database);
        downText.SetDatabaseDefaults(Env.Database);
        downText.AdjustAlignment(Env.Database);

        entities.Enqueue(upText);
        entities.Enqueue(downText);
        entities.Enqueue(leaderLine);
        entities.Enqueue(textLine);
    });

    jigEx.SetOptions(basePt, msg: "\n指定第二点");
    if (jigEx.Drag().Status != PromptStatus.OK) return;
    tr.CurrentSpace.AddEntity(jigEx.Entitys);
}


发表于 2023-6-17 20:28:58 | 显示全部楼层
如何高亮呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 02:28 , Processed in 0.183865 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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