我正在编写一个程序,用于关闭导入的AutoCAD文件(如“DEFPOINTS”,可能会自动隐藏或不在Revit中绘制)中的某些“子类别”。下面的代码看起来应该可以工作,但是反过来会引发奇怪的错误。控制导入类别的可见性
Transaction Do_Filtered_VG = new Transaction(doc, "FilteredVG")
Autodesk.Revit.DB.View CurrentView = doc.ActiveView;
Categories categories = doc.Settings.Categories; string CatUp = string.Empty;
List<Category> ToBeOff = new List<Category>();
List<string> myCategories = new List<string>();
foreach (Category c in categories)
{
if (c.Name.ToLower().EndsWith("dwg"))
{
List<Category> SubCategories = new List<Category>();
foreach (Category One_Cat in c.SubCategories)
{
CatUp = One_Cat.Name.ToUpper();
if (CatUp.Contains("DEFPOINTS") || CatUp.Contains("NPLT") || CatUp.Contains("RDFF") || CatUp.Contains("SDFF") || CatUp.Contains("DUCT"))//or other pattern;
{
myCategories.Add(One_Cat.Name); ToBeOff.Add(One_Cat);
}
}
}
}
Do_Filtered_VG.Start();
foreach (Category One_Cat in ToBeOff)
{
CurrentView.SetVisibility(One_Cat, false);
}
Do_Filtered_VG.Commit();
TestCodeX.If_Tony("Would Turn Off Layers:", TestCodeX.List_To_Dialog(myCategories));
给出的错误是:无法设置类别等级3的可视属性,因为它是用户hiddenA交易或子交易被打开,但没有关闭”这很奇怪,因为,‘第3级’是不是一个类别,但是ActiveView。
但是我的事务是打开和关闭的。我在一个在线搜索中找不到hiddenA。我也试过使用这个构造:One_Cat.get_Visibility(CurrentView)(尝试在至少看看类别是否可见),并且这导致了同样的错误,我也从RevitAPI(2014)到(2015)和(2016)更改了我的参考,但没有更改错误。我想关闭evidenc编辑我的“将关闭层:”MyCategories的TaskDialog回声。但是,只要.SetVisibility行没有被注释掉,我就会得到所描述的错误。
是否有其他一些关闭(打开)RevitAPI类别可见性的方法?还是有一些其他的交易方法,而不是我正在使用的?
谢谢,我会试一试。但是,由于这些“类别”实际上只是ACAD图层名称(并且都不是内部/受保护的类别),所以我看不出它会有所作为。如果程序回击,我不能改变“类别”的可见性,我回到了我开始的地方。不会发生变化,但我不会收到错误。 – KeachyPeenReturns
奇怪的是,这是我收到的StackOverFlow中的第一个“答案”,实际上提供了一个答案的金块。 .AllowsVisibilityControl [CurrentView]实际上是(在RevitAPI R14中).get_AllowsVisibilityControl(CurrentView),但关键是正确的。另外,我在我的foreach(ToBeOff中的Category One_Cat)中运行了一个新的事务......这有所帮助。 – KeachyPeenReturns
很高兴听到它 - 是的,我用C#语法编写,这有点不同,特别是对于某些索引属性的“get_”前缀。 Soooo如果有帮助,那么答案的“高票”怎么样? – Matt