PeriDyno当前提供了立方体、球体、圆柱体、圆锥体四种基本几何体,均继承于ParametricModel类,且最终可以输出TriangleSet数据,以描述三角网格结构。四种基本几何体均具有位置(Location)、旋转(Rotation)、缩放(Scale)的共有属性,以便调整基本几何体变换。此外每个基本集合体又依据其特性有其独有的属性。
立方体Cube:具有Length及Segments属性以定义其三个轴向的边长与分段数。




首先确保Main函数中调用了Modeling::initStaticPlugin()以构建工具架。
Modeling::initStaticPlugin();

创建方法1:在图形界面上方切换到Modeling标签,点击下方基本几何体按钮以创建对应节点(如图中红色框所标识的部分)。
创建方法2:在节点工作区点击鼠标右键,搜索需要的几何体类名,点击以创建对应节点(如图中绿色框所标识的部分)。

编辑:点击所需要修改的节点使其高亮显示,修改属性编辑面板Property Editor参数以编辑基本几何体参数。

本示例从Qt_GUI_Empty空场景示例为起点构建。
1、引用所需要使用的类如立方体#include “CubeModel.h”
2、构建场景图 std::shared_ptr < SceneGraph > scn = std::make_shared< SceneGraph >();
3、为scn场景图添加CubeModel节点 auto Cube = scn->addNode(std::make_shared< CubeModel< DataType3f > >());
4、设置场景图window.setSceneGraph(scn);
		#include <QtApp.h>
		#include "initializeModeling.h"
		#include "initializeInteraction.h"
		#include "CubeModel.h"
		using namespace dyno;
		int main()
		{
			
			std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
			auto Cube = scn->addNode(std::make_shared<CubeModel<DataType3f>>());
			Modeling::initStaticPlugin();
			Interaction::initStaticPlugin();
			QtApp window;
			window.setSceneGraph(scn);
			window.createWindow(1366, 768);
			window.mainLoop();
			return 0;
		}
构建完成后运行效果如下:

创建基本几何体后可以通过->获取变量,并使用SetValue()设置参数。
		Cube->varLength()->setValue(Vec3f(0.5,0.2,0.5));
		Cube->varRotation()->setValue(Vec3f(0,45,0));
		Cube->varLocation()->setValue(Vec3f(0,-0.1,0));
修改完成后运行效果如下:

首先点击ObjPointLoader按钮,创建ObjPoint节点,选择Obj点集文件路径,以作为TurningModel的输入。

点击TurningModel按钮,创建TurningModel节点。将ObjPoint的PointSet输出连接到TurningModel的PointSet输入端。
选择ObjPoint节点,点击节点右上角按钮隐藏显示。

1、引用ObjPoint、TurningModel的头文件
		#include "Plugin/ObjIO/ObjPointLoader.h"
		#include "Turning.h"
2、创建曲线
		//创建曲线
		auto Curve = scn->addNode(std::make_shared<ObjPoint<DataType3f>>());
		Curve->varFileName()->setValue(getAssetPath() + "curve/curve06_subdivide.obj");
3、创建Turning模型,在场景图scn上添加TurningModel节点
		//创建Turning模型
		auto Turn = scn->addNode(std::make_shared<TurningModel<DataType3f>>());
4、将Curve的OutPointSet连接到TurningModel的inPointSet
		Curve->outPointSet()->connect(Turn->inPointSet());
5、修改Turning参数,将垂直分段数提高到50以使模型更加精细。
		Turn->varColumns()->setValue(50);
构建完成后运行效果如下:

本部分以上文构建的Turning和Cube为起点,展示Merge使用方法。以下为Merge前的场景展示。

点击Merge创建Merge节点,将TurningModel的TriangleSet输出及Cube的QuadSet状态变量连接到Merge的输入。

		//创建Merge模型
		auto MergeModel = scn->addNode(std::make_shared<Merge<DataType3f>>());
		Cube->stateQuadSet()->promoteOuput()->connect(MergeModel->inTriangleSet01());
		Turn->stateTriangleSet()->promoteOuput()->connect(MergeModel->inTriangleSet02());

	//创建Copy模型
	auto Copy = scn->addNode(std::make_shared<CopyModel<DataType3f>>());
	MergeModel->stateTriangleSet()->promoteOuput()->connect(Copy->inTriangleSetIn());
	//修改Copy属性
	Copy->varTotalNumber()->setValue(4);
	Copy->varCopyTransform()->setValue(Vec3f(1,0,0));