请问怎么在同一个文件中的两个model中参考不同的dgn文件,我下面的测试代码在Default model中参考能成功,后面在 比较版本model中参考另一个文件时,就会报错,提示未找到缓存,这是什么原因啊
//版本对比 //打开版本对比文件 string path = DefaultPath.GetCompareVersionsPath(); BMI.Utilities.ComApp.OpenDesignFile(path, false); //清空之前的参考文件 var atts = BMI.Utilities.ComApp.ActiveModelReference.Attachments; var list = atts.GetEnumerator(); while(list.MoveNext()) { atts.Remove(list.Current); } //在不同的model中参考需要比较的两个文件 atts.AddCoincident(@"C:\Users\liuzhanh\Desktop\999.dgn", "Default", "test", "test"); //激活 var models = BMI.Utilities.ComApp.ActiveDesignFile.Models.GetEnumerator(); while (models.MoveNext()) { if ((models.Current as ModelReference).Name == "比较版本") { (models.Current as ModelReference).Activate(); } } atts = BMI.Utilities.ComApp.ActiveModelReference.Attachments; atts.AddCoincident(@"C:\Users\liuzhanh\Desktop\123.dgn", "比较版本", "test", "test");
看起来是您的Activate()方法未执行成功导致的吧?两个文件都被参考到了同一个模型中
没有,Default的model是成功参考了999.dgn,然后执行的【比较版本】的model激活也成功了,就是最后那次在【比较版本】model里参考文件提示未找到缓存,我试过首先操作【比较版本】model也会失败,是不是这个model有什么样式没设置啊,和默认的default有不同
我用如下VBA代码测试了,可以正常工作,你照此改写成C# 试一下。不同点在于遍历当前文件中的模型时的用法
Sub RefTest() Dim myModel As ModelReference ActiveModelReference.Attachments.AddCoincident "C:\111\Referece\Ref.dgn", "RefModel", "test", "test" For Each myModel In ActiveDesignFile.Models If (myModel.Name = "比较版本") Then myModel.Activate End If Next ActiveModelReference.Attachments.AddCoincident "C:\111\Referece\Ref1.dgn", "Ref1Model", "test", "test" End Sub
//版本对比 //打开版本对比文件 string path = DefaultPath.GetCompareVersionsPath(); BMI.Utilities.ComApp.OpenDesignFile(path, false); //清空之前的参考文件 var atts = BMI.Utilities.ComApp.ActiveModelReference.Attachments; var list = atts.GetEnumerator(); while(list.MoveNext()) { atts.Remove(list.Current); } //在不同的model中参考需要比较的两个文件 atts.AddCoincident(@"C:\Users\liuzhanh\Desktop\999.dgn", "Default", "test001", "test002"); //激活 //var models = BMI.Utilities.ComApp.ActiveDesignFile.Models.GetEnumerator(); //while (models.MoveNext()) //{ // if ((models.Current as ModelReference).Name == "比较版本") // { // (models.Current as ModelReference).Activate(); // } //} foreach(ModelReference mr in BMI.Utilities.ComApp.ActiveDesignFile.Models) { if(mr.Name == "比较版本") { mr.Activate(); } } atts = BMI.Utilities.ComApp.ActiveModelReference.Attachments; atts.AddCoincident(@"C:\Users\liuzhanh\Desktop\123.dgn", "比较版本", "test", "test");
好像还是没用,您这个代码应该和我的没什么区别啊,就遍历的方式不同,但是我用哪个遍历方式都一样能打开指定的model,而且我如果先操作【比较版本】model,再打开default model进行参考操作,两个model都没有参考文件,我再自己找找看什么原因吧
这个会不会跟pw有关系啊,我这里安装了pw服务端和客户端
//清空之前的参考文件 var atts = BMI.Utilities.ComApp.ActiveModelReference.Attachments; var list = atts.GetEnumerator(); while (list.MoveNext()) { atts.Remove(list.Current); } MessageBox.Show("开始参考"); atts.AddCoincident(@"C:\Users\liuzhanh\Desktop\123.dgn", "比较版本", "test", "test");
我现在就只有一个参考操作了,直接打开文件,切换到【比较版本】model,运行上面的代码后一样报错,未找到缓存
我看了眼,好像这个model名称也没带什么空格字符啊,而且文件的路径也没问题
哦,符老师,我好像知道了
AddCoincident(@"C:\Users\liuzhanh\Desktop\123.dgn", "比较版本", "test", "test");
这个AddCoincident方法的第二个参数,必须要是Default,如果要在【比较版本】model中添加参考,需要先激活【比较版本】model,然后再调用
AddCoincident(@"C:\Users\liuzhanh\Desktop\123.dgn", "Default", "test", "test"); 如果第二个参数传“比较版本”就会报错
我是看了手动参考的文件,不管在哪个模型里参考,模型那个参数都是Default
我一开始以为AddCoincident的第二个参数就是要对应当前模型名的
lai xingguang said:我一开始以为AddCoincident的第二个参数就是要对应当前模型名的
第二个参数是你要参考的DGN文件中的某个模型名,不一定非得是Default。当然,Default是每个创建的DGN中都有的,但我们可以对其改名。你看我的例子中用的RefModel和Ref1Model。只要与你文件中的模型名对应就能工作了。
Answer Verified By: lai xingguang
好的 谢谢符老师