smartplot 发表于 2024-5-22 15:04:33

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

目前可以通过dynamic的办法修改天正单行文字,但是修改天正多行文字的办法一直没有找到,请问论坛里的老师怎样修改天正多行文字?

你有种再说一遍 发表于 2024-7-22 04:26:38

smartplot 发表于 2024-7-21 09:16
请问可以获取天正单行文字的内容吗?
问题已经解决,天正多行文字也是用这行代码。我没有获取成功是因为 ...

namespace JoinBoxAcad.天正;

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

    // 天正文字修改
   
    public static void Tz_text()
    {
      var dm = Acap.DocumentManager;
      var doc = dm.MdiActiveDocument;
      var db = doc.Database;
      var ed = doc.Editor;
      var entRes = ed.GetEntity("选择竖向值: \n");
      if (entRes.Status != PromptStatus.OK)
            return;

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

            TDbSymbSetText(entTchElev.UnmanagedObject, "3.5");
            entTchElev.DowngradeOpen();
            entTchElev.Dispose();
      });
    }


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

    // 天正引线
   
    public static void Tz_Le()
    {
      var doc = Acap.DocumentManager.MdiActiveDocument;
      var ed = doc.Editor;
      var db = doc.Database;
      var entRes = ed.GetEntity("选择引出标注: \n");
      if (entRes.Status != PromptStatus.OK)
            return;

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

            text = GetText1(entTchElev.UnmanagedObject);
            entTchElev.DowngradeOpen();
            entTchElev.Dispose();
      });
      if (text is not null)
            ed.WriteMessage(text);
    }
}

smartplot 发表于 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-5-22 15:32:08

就是去找天正dll的接口

smartplot 发表于 2024-5-22 15:47:56

你有种再说一遍 发表于 2024-5-22 15:32
就是去找天正dll的接口

有代码可以参考吗?

你有种再说一遍 发表于 2024-5-22 16:19:16

smartplot 发表于 2024-5-22 15:47
有代码可以参考吗?

去ifox群找青蛙

hlchirs 发表于 2024-6-3 17:39:13

请问单行文字如何查询呢

hlchirs 发表于 2024-6-3 18:00:40

Entity ent = (Entity)tr.GetObject(per.ObjectId, OpenMode.ForRead);
dynamic dy = ent.AcadObject;
dy.Text,找到了

水鱼 发表于 2024-9-10 17:34:40

你有种再说一遍 发表于 2024-7-22 04:26


大师,如果要改管线之类的,DLLImport咋个写呢,有不同图元汇总的写法吗

你有种再说一遍 发表于 2024-9-10 17:40:58

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

需要自己找找,但是Arx签名不是很好找,而且c++是可以隐藏函数签名的.你可以进IFox群问问青蛙
页: [1] 2
查看完整版本: 怎样使用c#获取或者修改天正多行文字?