博客
关于我
FreeCAD源码分析:FreeCADMain模块
阅读量:744 次
发布时间:2019-03-22

本文共 2487 字,大约阅读时间需要 8 分钟。

FreeCADMain模块源码分析

一、模块功能概述

FreeCADMain主要用于根据配置参数启动FreeCAD软件,核心功能包括以下几个方面:

  • 配置参数管理

    FreeCADMain能够生成默认配置参数,解析用户输入参数,并基于配置参数定制FreeCAD的启动特性。

  • 崩溃信息处理

    当软件意外崩溃时,FreeCADMain会将堆栈信息导出到crash.dmp文件(默认路径:%APPDATA%\FreeCAD\crash.dmp)。

  • 日志重定向

    FreeCADMain支持将标准输出、标准错误、标准日志等重定向到日志文件,方便后续分析和调试。

  • 软件启动

    根据配置参数,FreeCADMain可以启动FreeCAD的GUI模式或控制台模式_FreeCADGui和_FreeCADMainCmd。


  • 二、处理流程分析

    通过分析Main.cpp文件可以看出FreeCADMain的主要实现流程主要包括以下几个步骤:

  • 移除PYTHONHOME环境变量

    在Linux或MACOSX系统上,FreeCADMain会移除PYTHONHOME环境变量,以避免多个Python版本干扰软件运行。

  • 配置默认软件参数

    FreeCADMain使用static成员函数Config返回mConfig对象,通过修改mConfig即可设置FreeCAD的运行模式和其他参数。

  • 启动模式切换

    FreeCAD支持两种运行模式:控盘模式(Console)和图形界面模式(Gui或Internal)。以下是启动模式的具体配置:

    • Console模式:通过设置_app_config["Console"] = "1"可以启动控制台模式。
    • RunMode配置:"Gui"表示启动图形界面模式,"Internal"表示启动内部控制台模式。
  • 崩溃信息导出

    当程序崩溃时,FreeCADMain会调用dbghelp.dll中的MiniDumpWriteDump函数,将堆栈信息写入mConfig["UserAppData"]中并保存到crash.dmp文件。

  • 日志输出重定向

    FreeCADBase模块提供了RedirectStdOutput、RedirectStdError和RedirectStdLog类,用于将标准输出、错误信息和日志信息重定向到指定目标。

    • 通过设置streambuf缓冲区,可以实现对标准输出、日志和错误的重定向。
    • 启动前需要恢复标准输出、日志和错误缓冲区,以避免程序运行时数据丢失。

  • 三、控制台应用程序类分析

  • 初始化过程

    App::Application类的init函数负责完成应用程序的初始化工作。

    • 传入argc和argv参数,调用initConfig函数解析配置参数,并将默认参数存储在mConfig中。
    • mConfig主要包含程序名称、用户参数目录、系统参数目录等信息。
  • 参数和文档管理

    • 参数管理:App::Application使用ParameterManager对象管理软件参数,支持加载DOM格式参数文件,并提供多种接口获取参数值。
      • _pcSysParamMngr主要处理系统参数(如从[mConfig["SystemParameter"]加载的system.cfg文件)。
      • _pcUserParamMngr处理用户参数(从[mConfig["UserParameter"]加载的user.cfg文件)。
    • 文档管理:基于信号-槽机制,提供创建、打开、激活和关闭文档等功能。

  • 四、重定向输出类分析

    FreeCADBase模块中的 RedirectStdOutput、RedirectStdError 和 RedirectStdLog 类主要用于日志输出重定向,其代码实现如下:

  • RedirectStdOutput实现

    • 构造函数将缓冲区大小设置为80。
    • overflow函数将输入字符添加到缓冲区,sync函数则将缓冲区内容通过Base::Console().Log函数输出并清空缓冲区。
  • ConsoleSigleton的作用

    • Program运行时只保留一个ConsoleSigleton对象,通过Base::Console()可以获取该唯一的对象。
    • 提供多种工作模式,允许开发者通过SetConsoleMode函数进行调整。

  • 五、FreeCADMainCmd和FreeCADMainPy模块

  • FreeCADMainCmd模块

    FreeCADMainCmd的主要职责是构建FreeCADCmd(_d).exe程序。实际上,它直接调用FreeCADApp模块完成FreeCAD的启动。

  • FreeCADMainPy模块

    FreeCADMainPy的作用是为Python环境下导入FreeCAD模块。其实现主要包括以下几个步骤:

    • 获取Python环境的路径信息。
    • 根据不同的操作系统平台,获取FreeCAD模块的路径。
    • 通过调用App::Application::init函数完成应用程序的初始化和启动。

  • 附录:FreeCAD配置参数说明

    | 参数名称 | 默认值 | 描述 JSONArray|----------------------|---------------------|-------------------------------->>| APPDATA | 操作系统内置环境变量,例如C:\Users\Administrator\AppData | 操作系统用户目录。| AppDataSkipVendor | true | 是否跳过厂商路径。| ExeVendor | FreeCAD | 软件厂商名称。| ExeName | FreeCAD | 软件程序名称。| UserAppData | $(APPDATA)\FreeCAD | 用户应用数据目录。| UserParameter | $(UserAppData)\user.cfg | 用户参数配置文件。| SystemParameter | $(UserAppData)\system.cfg | 系统参数配置文件。

    转载地址:http://xsowk.baihongyu.com/

    你可能感兴趣的文章
    mysql 快速自增假数据, 新增假数据,mysql自增假数据
    查看>>
    MySql 手动执行主从备份
    查看>>
    Mysql 批量修改四种方式效率对比(一)
    查看>>
    Mysql 报错 Field 'id' doesn't have a default value
    查看>>
    MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
    查看>>
    Mysql 拼接多个字段作为查询条件查询方法
    查看>>
    mysql 排序id_mysql如何按特定id排序
    查看>>
    Mysql 提示:Communication link failure
    查看>>
    mysql 插入是否成功_PDO mysql:如何知道插入是否成功
    查看>>
    Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
    查看>>
    mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
    查看>>
    mysql 数据库备份及ibdata1的瘦身
    查看>>
    MySQL 数据库备份种类以及常用备份工具汇总
    查看>>
    mysql 数据库存储引擎怎么选择?快来看看性能测试吧
    查看>>
    MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
    查看>>
    MySQL 数据库的高可用性分析
    查看>>
    MySQL 数据库设计总结
    查看>>
    Mysql 数据库重置ID排序
    查看>>
    Mysql 数据类型一日期
    查看>>
    MySQL 数据类型和属性
    查看>>