我正在編寫一個程序,用於關閉導入的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