代码在一个addin中工作,但在另一个方面什么也不做


FilteredElementCollector Lincoln = new FilteredElementCollector(doc);
Lincoln.OfCategory(BuiltInCategory.OST_RvtLinks); Autodesk.Revit.DB.View CurrentView = uiDoc.ActiveView;
ICollection<ElementId> Toggle_On = Lincoln.ToElementIds(); Toggle_On.Clear();
ICollection<ElementId> Toggle_Off = Lincoln.ToElementIds(); Toggle_Off.Clear();
List<Element> Processed = new List<Element>();
List<string> Revit_On = new List<string>(); List<string> Revit_Off = new List<string>();
List<string> Revit_Names = new List<string>();
foreach (Element One_Link in Lincoln)
{
    string Revit_Name = One_Link.Name;
    if (!Revit_Names.Contains(Revit_Name))//prevents processing same link twice;/but does NOT change anyway!!!!
    {
        Revit_Names.Add(Revit_Name);
        Boolean Is_Hidden = One_Link.IsHidden(CurrentView);//
        if (Is_Hidden)
        {
            Toggle_On.Add(One_Link.Id); Revit_On.Add(One_Link.Name);
        }//this apparently does detect what is hidden;
        else
        {
            Toggle_Off.Add(One_Link.Id); Revit_Off.Add(One_Link.Name);
        }
    }
}
Transaction Do_Toggle = new Transaction(doc, "DoToggle");
Do_Toggle.Start();
if (!Toggle_Off.Count.Equals(0)) { CurrentView.HideElements(Toggle_Off); }
if (!Toggle_On.Count.Equals(0)) { CurrentView.UnhideElements(Toggle_On); }
Do_Toggle.Commit();

以某种方式交易失败了吗?撤消是不可用的,因此它认为它没有做任何可能需要撤消的事情。请注意,此确切的代码用于我的另一个Addins(其中通过在表单上选择无线电选项来控制多个可选子程序(。但是,当我尝试在独立版本中使用代码时,它会失败(没有错误(。还要注意,我插入了多个TaskDialog条目,以验证它确实正在找到当前视图中可见或隐藏的RVTlink。但这只是拒绝实际改变其可见性。如果我运行对话框控制的版本,则所有内容都可以切换,但是如果我立即运行独立的人,则没有任何切换(证明这不是不正确的固定链接(。我已经通过"切换链接"默认来使用户可以使用此选项,以便他们可以调用我的收集程序并达到马车返回,但是我需要这是一个真正的独立。

您的代码使我感到困惑。例如,为什么您要初始化具有成员值的Toggle_OnToggle_Off集合,而只是以后立即清除它们?

在任何情况下,您使用交易都不遵循建议将其包含在using语句中的建议模式。

请参阅有关处理交易和交易组的建筑编码器主题组,以获取有关使用Revit API中交易的更多信息。

相关内容

最新更新