博客
关于我
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
    查看>>
    MTK Android 如何获取系统权限
    查看>>
    MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
    查看>>
    MySQL - ERROR 1406
    查看>>
    mysql - 视图
    查看>>
    MySQL - 解读MySQL事务与锁机制
    查看>>
    MTTR、MTBF、MTTF的大白话理解
    查看>>
    mt_rand
    查看>>
    mysql -存储过程
    查看>>
    mysql /*! 50100 ... */ 条件编译
    查看>>
    mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>
    mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
    查看>>
    MySQL 8.0 恢复孤立文件每表ibd文件
    查看>>
    MySQL 8.0开始Group by不再排序
    查看>>
    mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
    查看>>
    multi swiper bug solution
    查看>>