/// <summary> /// Adds a local DynNode to search /// </summary> /// <param name="dynNode">A Dynamo node object</param> public void Add(Type t) { // get name, category, attributes (this is terribly ugly...) var attribs = t.GetCustomAttributes(typeof (NodeNameAttribute), false); var name = ""; if (attribs.Length > 0) { name = (attribs[0] as NodeNameAttribute).Name; } attribs = t.GetCustomAttributes(typeof (NodeCategoryAttribute), false); var cat = ""; if (attribs.Length > 0) { cat = (attribs[0] as NodeCategoryAttribute).ElementCategory; } attribs = t.GetCustomAttributes(typeof (NodeSearchTagsAttribute), false); var tags = new List<string>(); if (attribs.Length > 0) { tags = (attribs[0] as NodeSearchTagsAttribute).Tags; } attribs = t.GetCustomAttributes(typeof (NodeDescriptionAttribute), false); var description = ""; if (attribs.Length > 0) { description = (attribs[0] as NodeDescriptionAttribute).ElementDescription; } var searchEle = new NodeSearchElement(name, description, tags); attribs = t.GetCustomAttributes(typeof(NodeSearchableAttribute), false); bool searchable = true; if (attribs.Length > 0) { searchable = (attribs[0] as NodeSearchableAttribute).IsSearchable; } searchEle.SetSearchable(searchable); // if it's a revit search element, keep track of it if ( cat.Equals(BuiltinNodeCategories.REVIT_API) ) { this.RevitApiSearchElements.Add(searchEle); if (!IncludeRevitAPIElements) { return; } } if (!string.IsNullOrEmpty(cat)) { SearchDictionary.Add(searchEle, cat + "." + searchEle.Name); } TryAddCategoryAndItem(cat, searchEle); SearchDictionary.Add(searchEle, searchEle.Name); if (tags.Count > 0) { SearchDictionary.Add(searchEle, tags); } SearchDictionary.Add(searchEle, description); }
/// <summary> /// Adds a local DynNode to search /// </summary> /// <param name="dynNode">A Dynamo node object</param> public void Add(Type t) { // get name, category, attributes (this is terribly ugly...) var attribs = t.GetCustomAttributes(typeof(NodeNameAttribute), false); var name = ""; if (attribs.Length > 0) { name = (attribs[0] as NodeNameAttribute).Name; } attribs = t.GetCustomAttributes(typeof(NodeCategoryAttribute), false); var cat = ""; if (attribs.Length > 0) { cat = (attribs[0] as NodeCategoryAttribute).ElementCategory; } attribs = t.GetCustomAttributes(typeof(NodeSearchTagsAttribute), false); var tags = new List<string>(); if (attribs.Length > 0) { tags = (attribs[0] as NodeSearchTagsAttribute).Tags; } attribs = t.GetCustomAttributes(typeof(NodeDescriptionAttribute), false); var description = ""; if (attribs.Length > 0) { description = (attribs[0] as NodeDescriptionAttribute).ElementDescription; } var searchEle = new NodeSearchElement(name, description, tags, t.FullName); searchEle.Executed += this.OnExecuted; attribs = t.GetCustomAttributes(typeof(NodeSearchableAttribute), false); bool searchable = true; if (attribs.Length > 0) { searchable = (attribs[0] as NodeSearchableAttribute).IsSearchable; } searchEle.SetSearchable(searchable); attribs = t.GetCustomAttributes(typeof(NotSearchableInHomeWorkspace), false); if (attribs.Length > 0) { this.NodesHiddenInHomeWorkspace.Add(searchEle); if (this.DynamoModel != null && this.DynamoModel.CurrentWorkspace != null && this.DynamoModel.CurrentWorkspace is HomeWorkspaceModel) { searchEle.SetSearchable(false); } } attribs = t.GetCustomAttributes(typeof(NotSearchableInCustomNodeWorkspace), false); if (attribs.Length > 0) { this.NodesHiddenInCustomNodeWorkspace.Add(searchEle); if (this.DynamoModel != null && this.DynamoModel.CurrentWorkspace != null && this.DynamoModel.CurrentWorkspace is CustomNodeWorkspaceModel) { searchEle.SetSearchable(false); } } if (!string.IsNullOrEmpty(cat)) { SearchDictionary.Add(searchEle, cat + "." + searchEle.Name); } TryAddCategoryAndItem(cat, searchEle); SearchDictionary.Add(searchEle, searchEle.Name); if (tags.Count > 0) { // reduce the weight in search by adding white space tags.ForEach(x => SearchDictionary.Add(searchEle, x + "++++++++")); } SearchDictionary.Add(searchEle, description); }