跳转至

代码片段

IsInStartedSubtree


 bool IsInStartedSubtree(IUANode node)
{
    if (node.Status == NodeStatus.Detached)
    {
        return false;
    }
    while (node != null)
    {
        if (node.Status == NodeStatus.Started)
        {
            return true;
        }
        node = node.Owner;
    }
    return false;
}

获取动态链接的 NodePath

static class DynamicLinkPath{


    public static string MakeAbsolutePath(IUANode target);


    public static string MakeRelativePath(IUANode startNode, IUANode targetNode);


    public static string MakePath(IUANode startNode, IUANode targetNode);
}

获取两个节点间的相对路径


private static string CreateRelativePath(IUANode source, IUANode target)
{
    string result = "";
    var srcPath = GetCurrentProjectBrowsePath(source);
    var tarPath = GetCurrentProjectBrowsePath(target);
    var srcArr = srcPath.Split("/");
    var tarArr = tarPath.Split("/");
    var max = Math.Max(srcPath.Count(), tarPath.Count());
    int i = 0;
    for (; i < max; i++)
    {
        result = "..";
        if (srcArr[i] != tarArr[i])
        {
            break;
        }
    }
    for (int j = srcArr.Count() - 1; j > i; j--)
    {
        result = result + "/..";
    }
    for (int k = i; k < tarArr.Count(); k++)
    {
        result = result + "/" + tarArr[k];
    }
    return result;
}

获取节点的BrowsePath


private static string GetCurrentProjectBrowsePath(IUANode node)
{
    if (node.Owner == Project.Current || node.BrowseName == "Root")
        return node.BrowseName;
    return GetCurrentProjectBrowsePath(node.Owner) + "/" + node.BrowseName;
}

  if (IUAVariable.Refs.GetNode(Optix.CoreBase.ReferenceTypes.HasDynamicLink) != null)
  {

    Log.Warning(item.BrowseName + " has a dynamic link");
  }


判断变量是否有converter

    if (IUAVariable.Refs.GetNode(FTOptix.CoreBase.ReferenceTypes.HasConverter) != null)
    {

        Log.Warning(item.BrowseName + " has a converter");
    }

根据table 的列名创建 DataGrid的列

    // Create columns based on the header
    foreach (var columnName in header)
    {
        var newDataGridColumn = InformationModel.MakeObject<DataGridColumn>(columnName);
        newDataGridColumn.Title = columnName;
        newDataGridColumn.DataItemTemplate = InformationModel.MakeObject<DataGridLabelItemTemplate>("DataItemTemplate");
        var dynamicLink = InformationModel.MakeVariable<DynamicLink>("DynamicLink", FTOptix.Core.DataTypes.NodePath);
        dynamicLink.Value = "{Item}/" + NodePath.EscapeNodePathBrowseName(columnName);
        newDataGridColumn.DataItemTemplate.GetVariable("Text").Refs.AddReference(FTOptix.CoreBase.ReferenceTypes.HasDynamicLink, dynamicLink);
        newDataGridColumn.OrderBy = dynamicLink.Value;
        dataGrid.Columns.Add(newDataGridColumn);
        lastDynamicLink = dynamicLink;
    }