明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 993|回复: 10

[图元] 怎样使用c#获取或者修改天正多行文字?

[复制链接]
发表于 2024-5-22 15:04:33 | 显示全部楼层 |阅读模式
目前可以通过dynamic的办法修改天正单行文字,但是修改天正多行文字的办法一直没有找到,请问论坛里的老师怎样修改天正多行文字?
发表于 2024-7-22 04:26:38 | 显示全部楼层
smartplot 发表于 2024-7-21 09:16
请问可以获取天正单行文字的内容吗?
问题已经解决,天正多行文字也是用这行代码。我没有获取成功是因为 ...

  1. namespace JoinBoxAcad.天正;

  2. public class 天正例子
  3. {
  4.     [DllImport("tch_kernal.arx", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl,
  5.           EntryPoint = "?SetText@TDbSymbElevation@@QEAAXPEB_W@Z")]
  6.     static extern void TDbSymbSetText(IntPtr tchElev, string txtHigth);

  7.     // 天正文字修改
  8.     [CommandMethod(nameof(Tz_text))]
  9.     public static void Tz_text()
  10.     {
  11.         var dm = Acap.DocumentManager;
  12.         var doc = dm.MdiActiveDocument;
  13.         var db = doc.Database;
  14.         var ed = doc.Editor;
  15.         var entRes = ed.GetEntity("选择竖向值: \n");
  16.         if (entRes.Status != PromptStatus.OK)
  17.             return;

  18.         db.Action(tr => {
  19.             var entTchElev = entRes.ObjectId.ToEntity(tr);
  20.             if (entTchElev is null)
  21.                 return;

  22.             TDbSymbSetText(entTchElev.UnmanagedObject, "3.5");
  23.             entTchElev.DowngradeOpen();
  24.             entTchElev.Dispose();
  25.         });
  26.     }


  27.     [DllImport("tch_kernal.arx", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl,
  28.         EntryPoint = "?GetText1@TDbSymbMultiLeader@@QEBAPEB_WXZ")]
  29.     static extern string GetText1(IntPtr tchElev);

  30.     // 天正引线
  31.     [CommandMethod(nameof(Tz_Le))]
  32.     public static void Tz_Le()
  33.     {
  34.         var doc = Acap.DocumentManager.MdiActiveDocument;
  35.         var ed = doc.Editor;
  36.         var db = doc.Database;
  37.         var entRes = ed.GetEntity("选择引出标注: \n");
  38.         if (entRes.Status != PromptStatus.OK)
  39.             return;

  40.         string? text = null;
  41.         db.Action(tr => {
  42.             var entTchElev = entRes.ObjectId.ToEntity(tr);
  43.             if (entTchElev is null)
  44.                 return;

  45.             text = GetText1(entTchElev.UnmanagedObject);
  46.             entTchElev.DowngradeOpen();
  47.             entTchElev.Dispose();
  48.         });
  49.         if (text is not null)
  50.             ed.WriteMessage(text);
  51.     }
  52. }

回复 支持 1 反对 0

使用道具 举报

发表于 2024-5-22 15:32:08 | 显示全部楼层
就是去找天正dll的接口
 楼主| 发表于 2024-5-22 15:47:56 | 显示全部楼层

有代码可以参考吗?
发表于 2024-5-22 16:19:16 | 显示全部楼层
smartplot 发表于 2024-5-22 15:47
有代码可以参考吗?

去ifox群找青蛙
发表于 2024-6-3 17:39:13 | 显示全部楼层
请问单行文字如何查询呢
发表于 2024-6-3 18:00:40 | 显示全部楼层
Entity ent = (Entity)tr.GetObject(per.ObjectId, OpenMode.ForRead);
dynamic dy = ent.AcadObject;
dy.Text,找到了
 楼主| 发表于 2024-7-21 09:16:53 | 显示全部楼层
本帖最后由 smartplot 于 2024-7-21 11:07 编辑
hlchirs 发表于 2024-6-3 18:00
Entity ent = (Entity)tr.GetObject(per.ObjectId, OpenMode.ForRead);
dynamic dy = ent.AcadObject;
dy ...

请问可以获取天正单行文字的内容吗?
问题已经解决,天正多行文字也是用这行代码。我没有获取成功是因为新装系统号没有加载相关com组件
发表于 2024-9-10 17:34:40 | 显示全部楼层

大师,如果要改管线之类的,DLLImport咋个写呢,有不同图元汇总的写法吗
发表于 2024-9-10 17:40:58 | 显示全部楼层
水鱼 发表于 2024-9-10 17:34
大师,如果要改管线之类的,DLLImport咋个写呢,有不同图元汇总的写法吗

需要自己找找,但是Arx签名不是很好找,而且c++是可以隐藏函数签名的.你可以进IFox群问问青蛙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-25 03:02 , Processed in 0.174994 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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