public override int Execute(params string[] parameters)
        {
            // current document
            Document doc = Application.ActiveDocument;
            // COM state object
            InwOpState10 cdoc = ComApiBridge.State;
            // current selected items
            ModelItemCollection items = doc.CurrentSelection.SelectedItems;
            // convert ModelItem to COM Path
            InwOaPath citem = ComApiBridge.ToInwOaPath(items[0]);
            // Get item's PropertyCategoryCollection object
            InwGUIPropertyNode2 cpropcates = (InwGUIPropertyNode2)cdoc.GetGUIPropertyNode(citem, true);
            // Get PropertyCategoryCollection data
            InwGUIAttributesColl propCol = cpropcates.GUIAttributes();

            // loop propertycategory
            foreach (InwGUIAttribute2 i in propCol)
            {
                // if category's name match
                if (i.UserDefined && i.ClassUserName == "Premier League")
                {
                    // overwritten the existing propertycategory with
                    // newly created propertycategory(existing + new)
                    cpropcates.SetUserDefined(1, "Premier League", "PremierLeague_InternalName",
                                              AddNewPropertyToExtgCategory(i));
                }
            }

            return(0);
        }
コード例 #2
0
ファイル: NavReader.cs プロジェクト: dalbir/RvtConverter
        private void VisitModelItem(Model model, ModelItem mi, NavModelNode node)
        {
            node.DisplayName = ((mi.DisplayName.Length == 0) ? mi.ClassDisplayName : mi.DisplayName);
            this.ReadProperties(mi, node);
            //如果该项目有几何图形
            bool hasGeometry = mi.HasGeometry;

            if (hasGeometry)
            {
                //转换为COM选择集
                Autodesk.Navisworks.Api.Interop.ComApi.InwOaPath inwOaPath = ComApiBridge.ToInwOaPath(mi);
                //创建回调对象
                NavGeometryCallback navGeometryCallback = new NavGeometryCallback();
                navGeometryCallback.UnitScaleToMM = (float)UnitConversion.ScaleFactor(model.Units, Units.Millimeters);
                foreach (InwOaFragment3 inwOaFragment in inwOaPath.Fragments())
                {
                    Autodesk.Navisworks.Api.Interop.ComApi.InwOpState10    state              = ComApiBridge.State;
                    Autodesk.Navisworks.Api.Interop.ComApi.InwOaPath3      inwOaPath2         = (Autodesk.Navisworks.Api.Interop.ComApi.InwOaPath3)inwOaFragment.path;
                    Autodesk.Navisworks.Api.Interop.ComApi.InwLTransform3f localToWorldMatrix = inwOaFragment.GetLocalToWorldMatrix();
                    Array array3 = (Array)(object)localToWorldMatrix.Matrix;


                    InwOaPath path = inwOaFragment.path;
                    ModelItem obj2 = ComApiBridge.ToModelItem(path);
                    bool      flag = !mi.Equals(obj2);
                    if (!flag)
                    {
                        ComApi.InwLTransform3f3 localToWorld = (ComApi.InwLTransform3f3)(object) inwOaFragment.GetLocalToWorldMatrix();
                        //Array array_v1 = (Array)(object)localToWorld.Matrix;

                        InwLTransform3f3 fragmentTransform = (InwLTransform3f3)inwOaFragment.GetLocalToWorldMatrix();
                        // navGeometryCallback.localToWorldMatrix =  inwOaFragment.GetLocalToWorldMatrix();
                        navGeometryCallback.FragmentTransform = fragmentTransform;
                        inwOaFragment.GenerateSimplePrimitives(nwEVertexProperty.eNORMAL, navGeometryCallback);
                    }
                }
                Color    originalColor = mi.Geometry.OriginalColor;
                NavColor color         = new NavColor((float)originalColor.R, (float)originalColor.G, (float)originalColor.B, 1f - (float)mi.Geometry.ActiveTransparency);
                navGeometryCallback.Geometry.Color = color;
                this.Geometries.Add(navGeometryCallback.Geometry);
                this.currentTriangleCount_ += navGeometryCallback.Geometry.Triangles.Count / 3;
                node.GeometryId             = string.Concat(navGeometryCallback.Geometry.Id);
                bool flag2 = this.currentTriangleCount_ >= this.maxTriangleCount_;
                if (flag2)
                {
                    this.WriteModel();
                }
            }
            foreach (ModelItem modelItem in mi.Children)
            {
                bool isHidden = modelItem.IsHidden;
                if (!isHidden)
                {
                    NavModelNode navModelNode = new NavModelNode();
                    node.Children.Add(navModelNode);
                    this.VisitModelItem(model, modelItem, navModelNode);
                }
            }
        }
コード例 #3
0
ファイル: SetValueByCatProp.cs プロジェクト: vnoves/ENGyn
        private static void SetValues(ModelItem m, string CategoryName, string PropertyName, string value)
        {
            state = ComApiBridge.State;
            InwOaPath oPath = ComApiBridge.ToInwOaPath(m);

            // get properties collection of the path

            InwGUIPropertyNode2 propertyNode = state.GetGUIPropertyNode(oPath, true) as InwGUIPropertyNode2;

            // creating tab (Category), property null variables as placeholders
            InwGUIAttribute2 existingCategory = null;

            //Index of userDefined Tab
            int index = 1;

            //Case 1: Look for an existing category with the same CategoryName

            foreach (Autodesk.Navisworks.Api.Interop.ComApi.InwGUIAttribute2 attribute in propertyNode.GUIAttributes())
            {
                if (attribute.UserDefined)
                {
                    if (attribute.ClassUserName == CategoryName)
                    {
                        existingCategory = attribute;
                        NavisProperties properties = new NavisProperties(PropertyName, value, existingCategory);
                        setProperty(properties, index, propertyNode);
                        return;
                    }

                    index++;
                }
            }


            //Case 2: Category doesn´t exist, create category and property
            if (existingCategory == null)
            {
                NavisProperties properties = new NavisProperties(PropertyName, value, CategoryName);
                setCategoryAndProperty(properties, propertyNode);
                return;
            }
        }
        public override int Execute(params string[] parameters)
        {
            // current document (.NET)
            Document doc = Application.ActiveDocument;
            // current document (COM)
            InwOpState10 cdoc = ComApiBridge.State;
            // current selected items
            ModelItemCollection items = doc.CurrentSelection.SelectedItems;

            if (items.Count > 0)
            {
                // input dialog
                InputDialog dialog = new InputDialog();
                dialog.ShowDialog();
                foreach (ModelItem item in items)
                {
                    // convert ModelItem to COM Path
                    InwOaPath citem = (InwOaPath)ComApiBridge.ToInwOaPath(item);
                    // Get item's PropertyCategoryCollection
                    InwGUIPropertyNode2 cpropcates = (InwGUIPropertyNode2)cdoc.GetGUIPropertyNode(citem, true);
                    // create a new Category (PropertyDataCollection)
                    InwOaPropertyVec newcate = (InwOaPropertyVec)cdoc.ObjectFactory(nwEObjectType.eObjectType_nwOaPropertyVec, null, null);
                    // create a new Property (PropertyData)
                    InwOaProperty newprop = (InwOaProperty)cdoc.ObjectFactory(nwEObjectType.eObjectType_nwOaProperty, null, null);
                    // set PropertyName
                    newprop.name = dialog.PropertyName + "_InternalName";
                    // set PropertyDisplayName
                    newprop.UserName = dialog.PropertyName;
                    // set PropertyValue
                    newprop.value = dialog.PropertyValue;
                    // add PropertyData to Category
                    newcate.Properties().Add(newprop);
                    // add CategoryData to item's CategoryDataCollection
                    cpropcates.SetUserDefined(0, dialog.CategoryName, dialog.CategoryName + "_InternalName", newcate);
                }
            }
            return(0);
        }