欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Revit API: 日志文件 journal

程序员文章站 2022-06-10 23:27:37
...

前言

Journal 是 Revit 一个非常神奇的功能。当你在操作 Revit 的时候,实际上,Revit 会默默地把你的操作变成程序。而这个程序,可以回放。如果有自己的插件,暂时没有找到成功的方法,可能有某些隐藏设置。

官方对于日志文件的解释

关于日志文件
日志文件可以捕捉从软件启动到停止这段时间内,软件在 Revit 会话期间所执行的操作。这些文本文件可用来解决该软件的技术问题。

每次使用 Revit 时,该软件都会创建一个新日志文件。编号最高的日志文件是最新文件。默认情况下,日志文件位于以下位置:

%LOCALAPPDATA%\Autodesk\Revit\Autodesk Revit 2021\Journals 在 Windows
中,默认情况下,将隐藏日志文件夹。

如果您在 Revit
会话期间遇到问题,支持提供商可能会要求您发送日志文件和所有备份文件,以帮助解决问题。如果您在会话期间没有遇到问题,那么日志文件几乎没有什么用处,可将其删除。要自动删除较早的日志文件,请参见“常规选项”。

日志回放

对于二次开发,比较关心的是日志的回放功能。
通过 API 写入:

void WriteJournalData(ExternalCommandData commandData)
{
    // Get the StringStringMap class which can write data into.
    IDictionary<String, String> dataMap = commandData.JournalData;
    dataMap.Clear();

    // Begin to add the support data
    dataMap.Add("Name", "Autodesk.Revit");
    dataMap.Add("Information", "This is an example.");
    dataMap.Add("Greeting", "Hello Everyone.");
}

通过 API 读取:

/// <summary>
/// This sample shows how to get data from journal file. 
/// </summary>
void ReadJournalData(ExternalCommandData commandData)
{
    // Get the StringStringMap class which can write data into.
    IDictionary<String, String> dataMap = commandData.JournalData;

    // Begin to get the support data.
    String prompt = "Name: " + dataMap["Name"];
    prompt += "\nInformation: " + dataMap["Information"];
    prompt += "\nGreeting: " + dataMap["Greeting"];

    TaskDialog.Show("Revit",prompt);
}

这里, ExternalCommandData 哪里来?
当你调用一个插件命令,即 IExternalCommand ,它在执行的时候就会用到这个。
这也是你读取和写入的入口:

namespace Autodesk.Revit.UI
{
    public interface IExternalCommand
    {
        Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements);
    }
}

ExternalCommandData 包含三个属性:

namespace Autodesk.Revit.UI
{
    public class ExternalCommandData : APIObject
    {
        public IDictionary<string, string> JournalData { get; set; }
        public UIApplication Application { get; set; }
    }
}

总结

通常日志回放的实现:

  1. 在你自己的 IExternalCommand.Execute 执行的时候,把内容记录到 ExternalCommandData.JournalData,这些内容会被记录到日志里面;
  2. 在日志回放的时候,从日志里面把记录的内容读取出来,成为运行 IExternalCommand.Execute 的参数值。
    例子,可以参考 Revit SDK 介绍:日志 Journal
相关标签: Revit API