【转】【Revit】revit二次开发——基于teigha读取CAD几何与文字(提供源码、引用包与异常解决)...

文章讲述了在RevitAPI开发中,如何处理Teigha库的64位引用问题,以及因引用外部程序集TD_Mgd.dll导致的异常。关键在于确保使用64位库,手动指定DLL引用路径,并提供了解决找不到指定模块或依赖项问题的代码示例,涉及CAD图元和文字信息的读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载64位Teigha完整包:

链接: https://pan.baidu.com/s/1KXW54YlkkWJZNQYhbc99kw 提取码: 0505

2.VS平台架构选择64位,.net版本4.0以上:

 

3.dll必须手动指定引用:(重点)

static string dll = @"D:\Desktop\Rvt\bin\Debug\TD_Mgd.dll";//引用位置
Assembly a = Assembly.UnsafeLoadFrom(dll);

4.以上注意事项处理不对,会引发以下异常:
1.不是有效的32位程序:
原因:

(1)加载外部程序集TD_Mgd.dll不合适

(2)处理器架构与引用dll不匹配

解决办法:

(1)使用64位Teigha库,不能使用32位,因为RevitAPI与RevitAPIUI是使用64位;

(2)更改平台架构为64位:

2.找不到指定模块或依赖项
这个问题困扰很多人,大多的解决办法是不行更有骗人的,其实就两行代码的问题。

 

问题的根本原因是 :

在类库项目中引用了外部程序集TD_Mgd.dll,.Net的安全机制阻止了本地的Assembly。具体可参见该博客:问题解决方案

解决办法:使用3说的,手动引用即可

代码参考:

1.revit接口代码

public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
//1.通过选择获取元素
 Reference reference1 = uiDoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element,"点击图元");
Element item = revitDoc.GetElement(reference1);
ElementId elementId = item.GetTypeId();
Element element = revitDoc.GetElement(elementId);
//2.获取CAD链接文件路径
string cadStirng = Path.GetDirectoryName(revitDoc.PathName) + "\\" + revitDoc.GetElement(element .GetTypeId()).Name;
//3.获取CAD文字:
ReadCADUtils readCADUtils = new ReadCADUtils();
List<CADTextModel> cADTextList=readCADUtils.GetCADTextInfo(cadStirng);
foreach (var item in cADTextList)
{
  TaskDialog.Show("revit", item.Text+"\n"+"坐标原点为:"+item.Location);
}
return Result.Succeed;
}

2.获取CAD图元与文字信息的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit;
using Autodesk.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值