FreeCAD源码阅读笔记

FreeCAD编译

FreeCAD源码的编译最佳使用官方提供的LibPack,不然第壹方库难以找全,找到之后还索要自身编写翻译,其余还不理解CMake是不是能够那么百发百中找好(find_package)自个儿设的第1方库。选用官方提供的LibPack能够消除这一大堆的难为。可是官方的LibPack仅有提供针对性VS2010,
VS贰零壹贰,
VS二零一一x64的本子,分别能够在FreeCAD在github上的公布地点0.16和0.15本子地点找到(VC9,
VC12),而sourceforge地址还足以找到x64的VS二零一二。

本身利用的LibPack是FreeCADLibs_11.0_x64_VC11.7z版本,那些版本在boost_python上有lib和dll缺点和失误,能够从boost官方预编写翻译版本1.55.0本子拷贝x陆13个人相应的lib和dll,也能够从FreeCADLibs_10.0_x64_VC11.7z里面把八个文件拷贝出来。

源码选拔0.16的,没有利用0.17_pre,目的首要在于编写翻译出来看看,没有去追求官方最新的本子。解压source,LibPack暗许是与源码放置同一目录的,假诺要放置在分化的目录,能够将CMakeLists.txt第壹25行set(FREECAD_LIBPACK_DIR
${CMAKE_SOURCE_DIR} CACHE PATH “Directory of the FreeCAD
LibPack”)中的${CMAKE_SOURCE_DIR}改为${CMAKE_BINARY_DI凯雷德},cmake-gui.exe能够圆满通过。

# User specific environment and startup programs

其三方库粗略记录

没列举齐全的第2方库表格如下:

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是重度看重,不能够不够。假如本人来搞第3方库,就亟须先化解Python,PySide,Boost,shiboken,所以利用官方提供的LibPack是可以节约比比皆是劳顿的。

 

工程项目标简单分析

可以将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()执行总结,那样就能够重生成,响应修改属性的结果。

另一篇作品:SSH Secure Shell Client中文乱码的消除办法 

Sketcher草图

为此说草图,是发现FreeCAD的草图看起来还不易,实时可知(差异于实体的创导),能够捕捉到线段的端点,中式点心,两条线的交点等那几个。

  • CmdSketcherCreateLine
    是草图绘制线段的通令,该命令在激活时会调用ActivateHandler(getActiveGuiDocument(),
    new
    DrawSketchHandlerLine())将以此handler交给SketcherGui::ViewProviderSketch激活
  • DrawSketchHandlerLine 派生自
    DrawSketchHandler,会有个mouseMove()的函数重载定义鼠标行为,并调用seekAutoConstraint(),
    renderSuggestConstraitsCursor()
  • App里边有个planegcs文件夹,里边可以对约束求解,代码稍微有个别多没细看,比较D-Cubed怎么样就不知晓了

PS:远程登陆软件
命令行界面putty,Cterm,SecureC大切诺基T,含FTP功效的有Filezilla,Secure Shell
Client,图形界面包车型客车有Xming,XShell,Xmanager等

小结

2017/12/22
FreeCAD架构种类依旧很清楚的,也兑现了过多要义(比如Undo/Redo,参数化,自动保存等),模块也包揽很多;Python嵌入好坏倒霉评价,但本身个人十分小习惯。总的来说给自家的觉得是不精致。

#vi /etc/sysconfig/i18n  

关于BUILD_JTREADER

因为小编对JT格式做过分析,发现FreeCAD里边有这几个选项,就专门专注了一下。必要提示的是BUILD_JTREADEEvoque在这几个本子无效,因为src/Mod下边没有JtReader文件夹,0.17_pre里边也从不,不过github最新版的源码里有该文件夹。略略地看了一下,实现一点也不细略,跳过无数事物,相比较OpenCASCADE官方提供的TKJT弱很多(但是OCC的TKJT也很久没更新了,一更新就到了索要付费能够获得里边去了)。可是FreeCAD还有个JTREADE福特Explorer.h文件,调用了JtOpen的头文件呀,那么些牛,可惜JtOpen试用版一般唯有1个月啊。

下面以Putty和SecureCRT为例。

fcstd文件格式分析

fcstd是FreeCAD存款和储蓄下来的文本,那几个格式实际上就是zip压缩文件,能够修改后缀成为zip也许直接拖拽至刚打开的WinRACRUISER能够看来里面包车型客车文书,不难的话就七个,多的话数量不少。其中Document.xml是对应FreeCADApp里边的Doc,GuiDocument.xml对应FreeCADGui里边的Doc,其它有PartShape.brp文件正是OpenCASCADE官方的brep格式呀。

 这是SSH Secure Shell Client多年未缓解的短板,须求客户端和劳动器端都要‘UTF-8’编码,Windows中文版的编码是非UTF-8。zh_CN.UTF-8是UTF编码的中文语言环境。
Windows使用的是GB2312编码,大多数linux系统协理的是UTF-8编码,而远程登陆时选用的是当地编码,所以会冒出乱码的标题;现有三种缓解方案:

本文目的在于记录在FreeCAD源码阅读中打探到的有个别事物。

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

 

图片 1

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

图片 2

方案二:或利用其余远程登陆软件,并修改配置,将字符编码设置为UTF-8。

 

图片 3

 

即可通常显示中文.更改 .bash_profile 配置文件后,该公文内容如下:(
小编利用的是其一措施 !)

将内容改为

 

 

 

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

 

修改SecureC奥德赛T设置:选项(Options)->会话选项(Session
Options)->外观(Appearance)->字符(Character),选取UTF-8。

# .bash_profile

      说那是SSH Secure Shell
Client多年未缓解的短板,供给客户端和劳动器端都要‘UTF-8’编码,恩恩,那下笔者算是领会Windows中文版的编码居然是非UTF-8了。 
情趣是自身不换操作系统,就不或许利用那一个东东了? 
于是,解决办法貌似唯有三个。 
1,换系统。 
2,使用Putty:http://filezilla-project.org/download.php?type=client 
理所当然,倘诺须要SFTP,能够使用filezilla,包蕴了贰个娇小玲珑的劳动器端和FTP效率。 
就是安装起来麻烦点… 
新生找到根本的化解办法,只知艺术,不知来由。

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″ 

利用linux,在用户根目录下有一个.bash_profile配置文件,该配置只对脚下用户有效.若对具备的用户有效,修改/etc/profile文件
利用ls -a命令能够查阅到该文件.使用vi编辑器打开该公文后,在里头参预

LANG=zh_CN.GB2312
export LANG

 

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

 

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

 

 

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

 

 

图片 4

 

发表评论

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

网站地图xml地图