首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# NavisWorks ModelItem isReadOnly()始终为真

c# NavisWorks ModelItem isReadOnly()始终为真
EN

Stack Overflow用户
提问于 2021-03-19 02:24:36
回答 1查看 89关注 0票数 2

我尝试在现有类别中为选定的NavisWorks模型项添加一些新属性

网络上的例子并不多,而且都是基于相同的COM方式。然而,在API中有特殊方法来添加可用的属性。唯一的问题是对象是锁定的。有没有办法解锁它?

代码语言:javascript
复制
    using ANA = Autodesk.Navisworks.Api;
...
    private void addProperty(string category, string prop, string value)
    {
        var oDoc = Autodesk.Navisworks.Api.Application.ActiveDocument;
        ModelItemCollection selectionModelItems = new ModelItemCollection();
        ANA.Application.ActiveDocument.CurrentSelection.SelectedItems.CopyTo(selectionModelItems);
        //Clear the current selection
        ANA.Application.ActiveDocument.CurrentSelection.Clear();
        try
        {
            foreach (ModelItem m in selectionModelItems)
            {
                foreach (PropertyCategory p in m.PropertyCategories)
                {
                    if (p.DisplayName != category) continue;
                    var property = new DataProperty(prop, prop, new VariantData(value));
                    p.Properties.Add(property);
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

执行结果:

EN

回答 1

Stack Overflow用户

发布于 2021-04-08 22:44:13

Navisworks创建的特性和类别是只读的。您不能添加或修改由Navisworks创建的特性或类别。

您只能使用COM创建或添加用户定义的属性。请参见:

下面是一段代码片段(从上面提到的xiaodong.liang论坛帖子中复制),它展示了如何使用COM添加用户定义的属性:

代码语言:javascript
复制
private void addProperty() {

  ComApi.InwOpState10 state;

  state = ComApiBridge.ComApiBridge.State;

  ModelItemCollection modelItemCollectionIn = new ModelItemCollection(Autodesk.Navisworks.Api.Application.ActiveDocument.CurrentSelection.SelectedItems);

  ComApi.InwOpSelection comSelectionOut =

    ComApiBridge.ComApiBridge.ToInwOpSelection(modelItemCollectionIn);

  ComApi.InwSelectionPathsColl oPaths = comSelectionOut.Paths();

  ComApi.InwOaPath3 oPath = (ComApi.InwOaPath3) oPaths.Last();

  ComApi.InwGUIPropertyNode2 propn = (ComApi.InwGUIPropertyNode2) state.GetGUIPropertyNode(oPath, true);

  ComApi.InwOaPropertyVec newPvec = (ComApi.InwOaPropertyVec) state.ObjectFactory(Autodesk.Navisworks.Api.Interop.ComApi.nwEObjectType.eObjectType_nwOaPropertyVec, null, null);

  ComApi.InwOaProperty newP = (ComApi.InwOaProperty) state.ObjectFactory(Autodesk.Navisworks.Api.Interop.ComApi.nwEObjectType.eObjectType_nwOaProperty, null, null);

  newP.name = "LXD_Property_Name";

  newP.UserName = "LXD_Property_UserName";

  newP.value = "LXD_Property_Value";

  newPvec.Properties().Add(newP);

  propn.SetUserDefined(0, "LXD_PropertyTab_Name", "LXD_PropertyTab_InteralName", newPvec);

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66696963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档