3#include "GLSurfaceVisualModule.h"
4#include "GLWireframeVisualModule.h"
10 template<typename TDataType>
11 TransformModel<TDataType>::TransformModel()
12 : ParametricModel<TDataType>()
14 this->stateTriangleSet()->setDataPtr(std::make_shared<TriangleSet<TDataType>>());
15 this->statePointSet()->setDataPtr(std::make_shared<PointSet<TDataType>>());
16 this->stateEdgeSet()->setDataPtr(std::make_shared<EdgeSet<TDataType>>());
18 glModule = std::make_shared<GLSurfaceVisualModule>();
19 glModule->setColor(Color(0.8f, 0.52f, 0.25f));
20 glModule->setVisible(true);
22 glWireModule = std::make_shared<GLWireframeVisualModule>();
23 glWireModule->varLineWidth()->setValue(1);
25 glPointModule = std::make_shared<GLPointVisualModule>();
26 glPointModule->varPointSize()->setValue(0.007);
28 this->stateTriangleSet()->connect(glModule->inTriangleSet());
29 this->stateEdgeSet()->connect(glWireModule->inEdgeSet());
30 this->statePointSet()->connect(glPointModule->inPointSet());
32 this->graphicsPipeline()->pushModule(glModule);
33 this->graphicsPipeline()->pushModule(glWireModule);
34 this->graphicsPipeline()->pushModule(glPointModule);
38 template<typename TDataType>
39 void TransformModel<TDataType>::resetStates()
44 template<typename TDataType>
45 void TransformModel<TDataType>::disableRender() {
46 glModule->setVisible(false);
49 template<typename TDataType>
50 void TransformModel<TDataType>::Transform() {
51 auto TriangleSetIn = TypeInfo::cast<TriangleSet<TDataType>>(this->inTopology()->getDataPtr());
52 auto EdgeSetIn = TypeInfo::cast<EdgeSet<TDataType>>(this->inTopology()->getDataPtr());
53 auto PointSetIn = TypeInfo::cast<PointSet<TDataType>>(this->inTopology()->getDataPtr());
55 if (TriangleSetIn != nullptr) { inType = Triangle_; }
56 else if (EdgeSetIn != nullptr) { inType = Edge_; }
57 else if (PointSetIn != nullptr) { inType = Point_; }
58 else { inType = Null_; }
61 auto center = this->varLocation()->getData();
62 auto rot = this->varRotation()->getData();
63 auto scale = this->varScale()->getData();
65 auto triangleSet = this->stateTriangleSet()->getDataPtr();
66 auto pointSet = this->statePointSet()->getDataPtr();
67 auto edgeSet = this->stateEdgeSet()->getDataPtr();
70 std::vector<TopologyModule::Edge> edge;
71 CArray<TopologyModule::Triangle> c_triangle;
72 CArray<Coord> c_point;
73 CArray<TopologyModule::Edge> c_edge;
74 std::vector<Coord> vertices;
75 std::vector<TopologyModule::Triangle> triangle;
83 printf("********* Point ********\n");
84 c_point.assign(PointSetIn->getPoints());
89 printf("********* Edge ********\n");
90 c_point.assign(EdgeSetIn->getPoints());
91 c_edge.assign(EdgeSetIn->getEdges());
96 printf("********* Triangle ********\n");
97 c_point.assign(TriangleSetIn->getPoints());
98 c_edge.assign(TriangleSetIn->getEdges());
99 c_triangle.assign(TriangleSetIn->getTriangles());
104 printf("********* Null ********\n");
109 if (!c_point.isEmpty())
111 numV = c_point.size();
112 for (int i = 0; i < numV; i++)
114 vertices.push_back(c_point[i]);
119 if (!c_edge.isEmpty())
121 numE = c_edge.size();
122 for (int i = 0; i < numE; i++)
124 edge.push_back(TopologyModule::Edge(c_edge[i]));
128 if (!c_triangle.isEmpty())
130 numT = c_triangle.size();
131 for (int i = 0; i < numT; i++)
133 triangle.push_back(TopologyModule::Triangle(c_triangle[i]));
142 Quat<Real> q = Quat<Real>(M_PI * rot[0] / 180, Coord(1, 0, 0))
143 * Quat<Real>(M_PI * rot[1] / 180, Coord(0, 1, 0))
144 * Quat<Real>(M_PI * rot[2] / 180, Coord(0, 0, 1));
148 auto RV = [&](const Coord& v)->Coord {
149 return center + q.rotate(v - center);
152 int numpt = vertices.size();
154 for (int i = 0; i < numpt; i++)
156 vertices[i] = RV(vertices[i] * scale + RV(center));
159 if (inType == Triangle_)
161 triangleSet->setPoints(vertices);
162 triangleSet->setTriangles(triangle);
163 triangleSet->update();
165 edgeSet->setPoints(vertices);
166 edgeSet->setEdges(edge);
167 pointSet->setPoints(vertices);
169 //glModule->setVisible(true);
170 //glWireModule->setVisible(true);
171 //glPointModule->setVisible(true);
175 edgeSet->setPoints(vertices);
177 edgeSet->setEdges(edge);
178 pointSet->setPoints(vertices);
180 //glModule->setVisible(false);
181 //glWireModule->setVisible(true);
182 //glPointModule->setVisible(true);
183 triangleSet->setTriangles(triangle);
186 if (inType == Point_)
188 pointSet->setPoints(vertices);
190 //glModule->setVisible(false);
191 //glWireModule->setVisible(false);
192 //glPointModule->setVisible(true);
193 triangleSet->setTriangles(triangle);
194 edgeSet->setEdges(edge);
207 DEFINE_CLASS(TransformModel);