QCAD Framework
QCAD
框架由三部分组成:Qt Application Framework
提供桌面应用程序最一般的,底层的功能实现;QCAD Application Framework
提供了专业的CAD
功能实现;ECMAScript
则是将Qt Application Framework
和QCAD Application Framework
整合到一起,提供用户接口和业务逻辑功能的实现。
QCAD 开发模式
扩展开发模式
基于现有的QCAD
应用程序进行插件开发和工具菜单开发。
全新开发模式
基于底层的QCAD Application Framework
开发自定义的应用程序。
QCAD Application Framework
Document
QCAD
RDoument
提供编辑和可视化的数据支持。
// Creating the storage underneath the document:
var storage = new RMemoryStorage();
// Creating the spatial index:
var spatialIndex = new RSpatialIndexNavel();
// Creating the document:
var document = new RDocument(storage, spatialIndex);
// Creating the document interface
// (required for import / export, graphics scenes and views):
var documentInterface = new RDocumentInterface(document);
Interaction
交互包括对数据文档(RDocument
)的可视化和用户输入(RACtion
)响应。RDocumtnInterface
是可视化和用户输入两者的核心。
Visualization
典型的模型视图结构
var graphicsScene = new RGraphicsSceneQt(documentInterface)
var graphicsView = new RGraphicsViewQt();
graphicsView.setScene(graphicsScene);
User Input
RAction
继承于RGuiAction
处理用户输入相应,用于菜单和工具的创建。
Importers
导入外部文件(dxf
)到内存对象(RDocument
)。
Exporters
将内存对象(RDocument
)的图形数据保存到外部文件、打印设备和图形显示设备(painter paths
和 OpenGL context
)。
Misc
-
3rdparty Module
:/src/3rdparty
包含第三方库,
dxflib
、proj4
、QXlsx
等等。 -
Core Module
:/src/core
包含用来扩展的一些抽象基类和一些基本的核心类。
-
Math Module
:/src/core/math
包含用来进行如向量、矩阵等数学计算的概念以及一些点、线图形基类。 -
CustomWidgets Module
:/src/customwidgets
包含一些用于CAD的自定义控件。 -
Entity Module
:/src/entity
包含QCAD
应用框架中所有CAD
实体的实现。 -
GUI Module
:/src/gui
基于Qt
的窗口部件,图形视图和图形场景。 -
Grid Module
:/src/grid
实现正交网格。 -
IO Module
:/src/io
实现读写dxf
的接口。 -
Operations
:/src/operations
实现ROperation
接口。它提供一个方便的API预览,将一般的更新应用到一个绘制文档上(增加实体,改变实体,删除实体) -
Snap Module
:/src/snap
实现对象和格原型 -
Spatialindex Module
:/src/spatialindex
空间索引库。 -
Main Module
:/src/run
执行ECMAScript
代码,将应用程序编译为可执行程序,main
函数入口。 -
Stemmer Module
:/src/stemmer
英语词干提取工具。
-
Scripts Module
:/src/scripts
EcmaJavascripts脚本。
-
Scripting
:/src/scripting
将底层的C++模块类,转换成EcmaJavascript环境的执行代码。
创建图层
// add a layer 'MyLayer':
QSharedPointer<RLayer> layer =
QSharedPointer<RLayer>(
new RLayer(document, "MyLayer")
);
//设置图层线形
layer->setLinetypeId(document->getLinetypeId("continuous"));
//线粗
layer->setLineweight(RLineweight::Weight025);
layer->setColor(RColor(255,0,0));
绘制线
// create and add a line entity:
QSharedPointer<RLineEntity> lineEntity =
QSharedPointer<RLineEntity>(
new RLineEntity(document, RLineData(RVector(0,0), RVector(100,0)))
);
// set attributes:
lineEntity->setLayerId(layerId);
lineEntity->setColor(RColor(0,128,255));
lineEntity->setLinetypeId(document->getLinetypeId("dashed"));
lineEntity->setLineweight(RLineweight::Weight100);
// set a custom property:
lineEntity->setCustomProperty("MyApp", "MyIntProperty", 77);
lineEntity->setCustomProperty("MyApp", "MyStringProperty", "Some text");
op = new RAddObjectOperation(
lineEntity,
false // false: don't use current attributes but
// custom attributes set above
);
// add the line entity to the drawing:
documentInterface->applyOperation(op);
绘制点
RAddObjectsOperation*op=new RAddObjectsOperation();
QSharedPointer<RPointEntity> pointEntity =
QSharedPointer<RPointEntity>(new RPointEntity(this->getDocument(), RPointData(_point)));
op->addObject(pointEntity);
this->documentInterface->applyOperation(op);
获取当前激活视图
var di = this.getDocumentInterface();
var view = di.getLastKnownViewWithFocus();
view = view.getRGraphicsView();
暂无评论内容