[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
  • 看起来是您的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服务端和客户端

Reply
  • //版本对比
                //打开版本对比文件
                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服务端和客户端

Children
No Data