James_ 发表于 2025-5-4 21:24:41

用C# 获取天正文字内容

用C# 无法获取天正文字的内容,后来看人说可以用反射法,也就是在C#里写lisp可以读取天正文字内容,后面一直没写出来,报错。

      private bool IsPotentialTssdText(DBObject obj)
      {
            if (obj == null || !obj.IsCustomObject) return false;
            // Check against known TSSD DXF names (case-insensitive is safer)
            return TssdTextDxfNames.Contains(obj.DxfName, StringComparer.OrdinalIgnoreCase);
      }主要是上面的代码有问题
错误:运算符“!”无法应用于“方法组”类型的操作数
错误:“DBObject”未包含“DxfName”的定义,并且找不到可接受第一个“DBObject”类型参数的可访问扩展方法“DxfName”(是否缺少 using 指令或程序集引用?)
想问下,到底用C#可以读取天正的文字内容吗,另外用我上面说的方法可行吗,如果不可行还有其他办法吗?

tiancao100 发表于 7 天前

本帖最后由 tiancao100 于 2025-5-7 10:10 编辑


VB.net 读取天正建筑多行文字方法1~3
https://mp.weixin.qq.com/s/4GoyC3PZf5PuG3aF-y4AsQ

读取多行文字内容
Shared Function GetTchMText(ByVal ID As ObjectId) As String
      Dim doc As Document = Application.DocumentManager.MdiActiveDocument
      Dim ed As Editor = doc.Editor
      Dim ename As Long() = New Long() {0, 0}
      Dim result As Integer = acdbGetAdsName_R23_64(ename, ID)
      Dim rb As New ResultBuffer()
      Interop.AttachUnmanagedObject(rb, acdbEntGet(ename), True)
      Dim iter As ResultBufferEnumerator = rb.GetEnumerator()
      Dim DXF As New ArrayList
      While iter.MoveNext()
            Dim TmpVal As TypedValue = iter.Current
            If TmpVal.TypeCode = 1 Then
                Dim strValue As String = (If(TmpVal.Value IsNot Nothing, TmpVal.Value.ToString(), "*Nothing*"))
                Return strValue
            Else
                Continue While
            End If
      End While
      Return Nothing
    End Function

James_ 发表于 7 天前

tiancao100 发表于 2025-5-7 09:55
这是我引用T20V10的文件, 类库,framework 4.7.2,单行文字就是Text, 多行文字没找到。我上面的回复是错 ...

你电脑是什么系统,我Windows11
C:\Users\Administrator\source\repos\ClassLibrary8\ClassLibrary8\obj\Debug\Interop.COMKERNALLib.dll这个路径找不到这个文件啊,用Everything搜了也搜不到。

James_ 发表于 7 天前

tiancao100 发表于 2025-5-7 15:40
引用tch10_com23.dll时候自动生成

引用tch10_com23.dll的时候,跳错:未能添加对“C:\Tangent\TArchT20V10\sys23x64\tch10_com23.dll”的 引用。请确保此文件可访问并且是一个有效的程序集或COM组件。

James_ 发表于 2025-5-4 21:49:45

我的需求是读取cad中的所有文字对象(包括天正文字)关键字筛选,并进行替换。

tiancao100 发表于 2025-5-6 11:29:37

TCH_TEXT用Entity.AcadObject.Text获取

James_ 发表于 2025-5-6 17:43:25

tiancao100 发表于 2025-5-6 11:29
TCH_TEXT用Entity.AcadObject.Text获取

TCH_MTEXT呢。有没有核心代码分享下啊。

ludaweb 发表于 2025-5-6 17:57:50

James_ 发表于 2025-5-4 21:49
我的需求是读取cad中的所有文字对象(包括天正文字)关键字筛选,并进行替换。

天正的所有文字对象,不太可能。
单行文字、多行文字还好,天正表格里面的文字目前好像没有办法。

tiancao100 发表于 2025-5-6 19:59:53

James_ 发表于 2025-5-6 17:43
TCH_MTEXT呢。有没有核心代码分享下啊。

.AcadObject.Textstring

tiancao100 发表于 2025-5-6 20:02:46

ludaweb 发表于 2025-5-6 17:57
天正的所有文字对象,不太可能。
单行文字、多行文字还好,天正表格里面的文字目前好像没有办法。

每个对于不太一样,比较乱。可以引用“tch10_com23.dll”等文件,自己到对象浏览器中查看。

James_ 发表于 2025-5-6 22:22:26

ludaweb 发表于 2025-5-6 17:57
天正的所有文字对象,不太可能。
单行文字、多行文字还好,天正表格里面的文字目前好像没有办法。

那就先定小目标:天正单行文字和天正多行文字。

James_ 发表于 2025-5-6 22:26:57

tiancao100 发表于 2025-5-6 20:02
每个对于不太一样,比较乱。可以引用“tch10_com23.dll”等文件,自己到对象浏览器中查看。

为啥我添加不进去啊。

James_ 发表于 2025-5-6 23:02:45

tiancao100 发表于 2025-5-6 20:02
每个对于不太一样,比较乱。可以引用“tch10_com23.dll”等文件,自己到对象浏览器中查看。



不行啊,读取不了。
页: [1] 2 3
查看完整版本: 用C# 获取天正文字内容