参照案例写了一段获取模板的代码:
string strXmlXPath = @"Templates\Rail\Double Track -Ballasted"; string strLib = TemplateLibrary.GetDefaultTemplateLibraryPath(); TemplateLibrary templateLibrary = TemplateLibrary.Load(strLib); TemplateDefinition tempDef2 = templateLibrary.FindTemplateByPath(strXmlXPath);
但是,返现获取到的TemplateDefinition为Null。
请问有可能是什么原因呢?路径我检查了下应该是没问题的。
下面的代码示例通过TemplateLibrary对象遍历模板库中所有的模板对象;以及获取模板库中指定路径的模板对象:
class TemplateCmd { public void GetTemplate() { string strLib = TemplateLibrary.GetDefaultTemplateLibraryPath(); TemplateLibrary templateLibrary = TemplateLibrary.Load(strLib); //从模板库的根目录开始遍历。 GetCategoryAllTemplate(templateLibrary.RootCategory); //以Xml Xpath形式获取指定的模板 string strXmlXPath = @"/InRoads/TemplateLibrary/Category/Category[@name='Templates']/Category[@name='Rail']/Template[@name='Double Track - Wooden Sleepers']"; //TemplateDefinition tempDef = templateLibrary.FindTemplateByPath(strXmlXPath); //以xml xpath路径对应的模板库路径形式的路径 string strTemplatePath = @"Templates/Rail/Double Track - Wooden Sleepers"; TemplateDefinition tempDef2 = templateLibrary.FindTemplateByPath(strTemplatePath); } private void GetCategoryAllTemplate(Category category) { //遍历目录下的子目录 foreach(Category subCategory in category.Categories) { GetCategoryAllTemplate(subCategory); } //表面目录下的所有模板 foreach(TemplateDefinition tempDef in category.Templates) { string strName = tempDef.Name; string strPath = tempDef.GetPath(); } } }
张总,我就是参考了这个例子写的,但是获取不到TemplateDefinition对象。
我注意到这里的path有两种类型,一种是@"/InRoads/TemplateLibrary/Category/Category[@name='Templates']。。。这种格式。
另一种是@"Templates/Rail/Double Track - Wooden Sleepers"这种格式。
是应该要用第二种么?
张总,我测试了下您给的这个@"Templates/Rail/Double Track - Wooden Sleepers";模板路径,在调用FindTemplateByPath函数的时候抛出了异常:
然后我还测试了@"/InRoads/TemplateLibrary/Category/Category[@name='Templates']/Category[@name='Rail']/Template[@name='Double Track - Wooden Sleepers']"这个路径,报了同样的错误。
两种形式都可以,第二个更简单一些。我仔细看了你最初的代码的第一行,有两个地方的错误:
1、分割符要用/而不是\
2、你最后一个名字中缺少了一个空格。如下图所示,必须严格符合才可以:
所以,将你第一行代码改成如下写法试一下:
string strXmlXPath = @"Templates/Rail/Double Track - Ballasted";
付老师,我试了下您说的这个路径,还是报同样的异常。我看了下模板文件,路径应该是没问题的:
那就得怀疑您的环境了。请告知所有软件的详细名称和版本以及VS的详细版本。
另外就是在您的ORD软件启动后打开一个DGN,是否从模板界面中能看到我上图所示的这个模板名称?(主要是验证在您的环境下模板是否被正确加载了)