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.