[C# CE]在不同model参考不同文件

请问怎么在同一个文件中的两个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");

Parents Reply Children
  • 没有,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的第二个参数就是要对应当前模型名的