FreeCAD源码阅读笔记

工程项目的简约分析

可以将FreeCAD_trunk.sln目录之下的花色分为两近似,一近似为
FreeCAD打头的根底工程项目;另一样接近为Mod模块工程。基础工程项目列表如下:

工程项目 产生文件 备注
FreeCADMain FreeCAD.exe FreeCAD主执行启动文件,main()函数所在地
FreeCADMainPy FreeCAD.pyd 兼容Python的扩展dll,导出initFreeCAD()
FreeCADMainCmd FreeCADCmd.exe App::Application::Config()["RunMode"]有三种模式,Gui、Exit、Console,这里对应的是Exit模式,执行(argc, argv)之后自动退出
FreeCADGui FreeCADGui.dll 命名空间Gui,Command,Workbench,View3dInventor(视图),Gui层的Document
FreeCADGuiPy FreeCADGui.pyd 兼容Python的扩展dll
FreeCADBase FreeCADBase.dll 代码基础与上层,命名空间Base,Type类型体系,InterpreterSingleton脚本解释器
FreeCADApp FreeCADApp.dll 表征exe执行所在的应用,命名空间App,App::GetApplication()可以获取唯一的那个pcSingleton指针,App层Document

上述这些虽建构了FreeCAD运行的根底框架,它们其实就用了Python, Boost,
PySide, shiboken, xerces-c, zlib,
coin3d等这些,其余的Mod都是模块扩展,依赖诸如OCE,PCL,Eigen3,libqhull等等,每个Mod工程项目分为带Gui的和无牵动Gui的本。带Gui的种概念了可用之Command,Workbench(工作台),显示等这些。

所以FreeCAD对Python依赖如此的很,是坐精神上FreeCAD所有的命实现还是通过Python语句来兑现之。比如一个Box的创始命令是这样的:

C++
void CmdPartBox::activated(int iMsg)
{
    QString cmd;
    cmd = qApp->translate("CmdPartBox","Cube");
    openCommand((const char*)cmd.toUtf8());

    doCommand(Doc,"App.ActiveDocument.addObject(\"Part::Box\",\"Box\")");
    cmd = QString::fromLatin1("App.ActiveDocument.ActiveObject.Label = \"%1\"")
        .arg(qApp->translate("CmdPartBox","Cube"));
    doCommand(Doc,(const char*)cmd.toUtf8());
    commitCommand();
    updateActive();
    doCommand(Gui, "Gui.SendMsgToActiveView(\"ViewFit\")");
}

内部这些还是殡葬给解释器的Python语句呀,执行后会见当界面上的Python
Console窗口播报Python执行语句,这样录制宏就简单极了,此外也得以合应用Python来建模或者写单职能实现,比如就算生出个SheetMetal就净是因此Python来促成。

Command命令的对象是起NewObject加入Document,特征附有属性,然后recompute()执行计算,这样即便可重生成,响应修改属性的结果。

 

正文目标在于记录在FreeCAD源码阅读着打探及之局部物。

拿内容变更吧

FreeCAD编译

FreeCAD源码的编译最好下官方提供的LibPack,否则第三方库难以找寻全,找到后还得协调编译,此外还非清楚CMake是否能够那么顺找好(find_package)自己假如的老三方库。采用官方提供的LibPack可以免除这无异充分堆的难为。但是官方的LibPack仅发生提供对VS2008,
VS2013,
VS2012x64之版,分别可在FreeCAD在github上之公布地方0.16暨0.15本位置找到(VC9,
VC12),而sourceforge地址还足以找到x64的VS2012。

本人利用的LibPack是FreeCADLibs_11.0_x64_VC11.7z版,这个版在boost_python上发出lib和dll缺失,可以从boost官方预编译版本1.55.0版拷贝x64各项相应的lib和dll,也足以由FreeCADLibs_10.0_x64_VC11.7z内把4独文本拷贝出来。

源码采用0.16底,没有使0.17_pre,目标关键在编译出来看,没有失去追求官方最新的版本。解压source,LibPack默认是跟源码放置同一目录的,如果假定停于不同之目,可以以CMakeLists.txt第125行set(FREECAD_LIBPACK_DIR
${CMAKE_SOURCE_DIR} CACHE PATH “Directory of the FreeCAD
LibPack”)中的${CMAKE_SOURCE_DIR}改为${CMAKE_BINARY_DIR},cmake-gui.exe可以圆通过。

 

fcstd文件格式分析

fcstd是FreeCAD存储下来的公文,这个格式实际上就是是zip压缩文件,可以改后缀成为zip或者直接拖拽到巧打开的WinRAR可以看来其中的文件,简单的话语就是4只,多之语句数量不丢。其中Document.xml是指向承诺FreeCADApp里边的Doc,GuiDocument.xml对许FreeCADGui里边的Doc,另外有PartShape.brp文件就是OpenCASCADE官方的brep格式呀。

 

其三方库粗略记录

没有列举齐全的老三方库表格如下:

Lib Name version in LibPack_11.0_x64_VC11 Link to get it
Python Python 2.7.8 http://www.python.org/
PySide 1.2.2 http://wiki.qt.io/PySide
shiboken 1.2.2 http://shiboken.readthedocs.io/en/latest/
Qt Qt 4 https://www.qt.io/
Boost 1.55.0 http://www.boost.org/
Coin3D 4.0 https://bitbucket.org/Coin3D/coin/wiki/Home
SoQt 1.2 https://bitbucket.org/Coin3D/soqt
OpenCASCADE oce-16(对应6.7.1) http://www.opencascade.com

当以上第三着库中,PySide是Python与Qt的同甘共苦,可以使用Python语言构建Gui。建议是于Python2.7多重被动用,支持部分Python3,与PySide有同样效果的PyQt相对成熟有,但商用需要付费,估计这是FreeCAD采用PySide的原故,PySide是Qt官方发之,完成了对Qt4.8版本的一体化兑现,支持Qt5的PySide2也得于github中找到。shiboken作何用途,我还从未打得生懂得。

FreeCAD对Python是重度依赖,不能够不够。如果自己来做第三方库,就必须先行干定Python,PySide,Boost,shiboken,所以使用官方提供的LibPack是好省去成千上万麻烦的。

运用linux,在用户到底目录下有一个.bash_profile配置文件,该配置单针对眼前用户有效.若对负有的用户中,修改/etc/profile文件
动ls -a命令可以查阅到该文件.使用vi编辑器打开该公文后,在其间参加

关于BUILD_JTREADER

因作者对JT格式做过分析,发现FreeCAD里边有是选项,就特别留心了瞬间。需要提醒的是BUILD_JTREADER在这个本子无效,因为src/Mod下边没有JtReader文件夹,0.17_pre里边也从不,但是github最新版本的源码里发生欠文件夹。略略地扣押了一下,实现深简短,跳了许多物,相比OpenCASCADE官方提供的TKJT弱很多(不过OCC的TKJT也特别长远没更新了,一更新就交了用付费可以获得中去矣)。不过FreeCAD还来只JTREADER.h文件,调用了JtOpen的腔文件呀,这个牛,可惜JtOpen试用版一般才发一个月份吧。

图片 1

Sketcher草图

为此说草图,是发现FreeCAD的草图看起还不易,实时可见(不同让实体的创造),可以捕捉到丝段的端点,中点,两长线之交点等这些。

  • CmdSketcherCreateLine
    是草图绘制线段的一声令下,该令于激活时会见调用ActivateHandler(getActiveGuiDocument(),
    new
    DrawSketchHandlerLine())将是handler交给SketcherGui::ViewProviderSketch激活
  • DrawSketchHandlerLine 派生自
    DrawSketchHandler,会生出个mouseMove()的函数重载定义鼠标行为,并调用seekAutoConstraint(),
    renderSuggestConstraitsCursor()
  • App里边有个planegcs文件夹,里边好对约束求解,代码稍微有些多没细看,相比D-Cubed怎么样就是未掌握了

下面以Putty和SecureCRT为例。

小结

2017/12/22
FreeCAD架构体系要十分鲜明的,也促成了重重要领(比如Undo/Redo,参数化,自动保存等),模块也揽很多;Python嵌入好坏不好评价,但自我个人小习惯。总的来说给自身的痛感是未精。

 

LANG=zh_CN.GB2312
export LANG

# .bash_profile

图片 2

LANG=”zh_CN.GB18030″  
LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”  
SUPPORTED=”zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en”  
SYSFONT=”lat0-sun16″ 

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

 

 

 

      说立刻是SSH Secure Shell
Client多年未缓解之短板,要求客户端和劳动器端都设‘UTF-8’编码,恩恩,这生我毕竟掌握Windows中文版的编码还是非UTF-8了。 
意思是自无转换操作系统,就无法采取是东东了? 
于是,解决办法貌似只有发生少只。 
1,换系统。 
2,使用Putty:http://filezilla-project.org/download.php?type=client 
自,如果欲SFTP,可以以filezilla,包含了一个秀气的劳动器端和FTP功能。 
不怕是安起来麻烦点… 
新生找到根本的解决办法,只晓得艺术,不知来由。

图片 3

 

# User specific environment and startup programs

 

#vi /etc/sysconfig/i18n  

方案二:或采取其他远程登陆软件,并修改配置,将字符编码设置也UTF-8。

即可正常显示中文.更改 .bash_profile 配置文件后,该文件内容如下:(
我用的是者法子 !)

 

 

 

修改SecureCRT设置:选项(Options)->会话选项(Session
Options)->外观(Appearance)->字符(Character),选择UTF-8。

另一样首文章:SSH Secure Shell Client中文乱码的解决办法 

putty选择安排窗口左边的Windows—— Translation,在右侧边的 Received data
assumed to be in which character set 下拉列表中选择“UTF-8”

 ++++++++++++++++++++++++++++++++++++++++++

 转 http://www.cnblogs.com/52linux/archive/2012/03/24/2415082.html

PS:远程登陆软件
命令行界面putty,Cterm,SecureCRT,含FTP功能的来Filezilla,Secure Shell
Client,图形界面的出Xming,XShell,Xmanager等

 

方案一:修改linux服务器的环境变量

PATH=$PATH:$HOME/bin
LANG=zh_CN.GB2312
export PATH
export LANG
unset USERNAME

 这是SSH Secure Shell Client多年无缓解的短板,要求客户端以及劳务器端都要‘UTF-8’编码,Windows中文版的编码是非UTF-8。zh_CN.UTF-8是UTF编码的汉语语言环境。
Windows使用的是GB2312编码,大多数linux系统支持之凡UTF-8编码,而远程登陆时采用的是地面编码,所以会见面世乱码的问题;现有几种植缓解方案:

 

 

图片 4

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图