10 #ifndef smtk_session_polygon_internal_model_h
11 #define smtk_session_polygon_internal_model_h
13 #include "smtk/session/polygon/Exports.h"
15 #include "smtk/session/polygon/internal/Entity.h"
17 #include "smtk/model/Edge.h"
18 #include "smtk/model/Vertex.h"
43 bool computeModelScaleAndNormal(
44 std::vector<double>& origin,
45 std::vector<double>& x_axis,
46 std::vector<double>& y_axis,
50 bool computeModelScaleAndYAxis(
51 std::vector<double>& origin,
52 std::vector<double>& x_axis,
53 std::vector<double>& z_axis,
57 bool computeFeatureSizeAndNormal(
58 std::vector<double>& origin,
59 std::vector<double>& x_axis,
60 std::vector<double>& y_axis,
65 std::vector<double>& origin,
66 std::vector<double>& x_axis,
67 std::vector<double>& y_axis,
68 std::vector<double>& z_axis,
69 std::vector<double>& i_axis,
70 std::vector<double>& j_axis,
72 long long modelScale);
76 const std::vector<double>& points,
85 bool demoteModelVertex(
87 internal::VertexPtr vert,
95 internal::VertexPtr v0,
96 internal::VertexPtr v1);
98 template<
typename T,
typename U>
104 const U& splitEdgeFaces,
105 bool headIsNewVertex,
113 std::set<Id> createModelEdgesFromPoints(T begin, T end);
115 bool splitModelEdgeAtPoint(
118 const std::vector<double>& point,
121 bool splitModelEdgeAtIndex(
127 bool splitModelEdgeAtModelVertex(
133 bool splitModelEdgeAtModelVertex(
136 VertexPtr splitPoint,
137 PointSeq::const_iterator location,
140 bool splitModelEdgeAtModelVertices(
143 std::vector<VertexPtr>& splitPoints,
144 std::vector<PointSeq::const_iterator>& locations,
149 bool removeVertexLookup(
const internal::Point& location,
const Id& vid);
151 Point edgeTestPoint(
const Id& edgeId,
bool edgeEndPt)
const;
156 void addEdgeTessellation(
smtk::model::Edge& edgeRec, internal::EdgePtr edgeData);
160 void addEdgeMeshTessellation(
smtk::model::Edge& edgeRec, internal::EdgePtr edgeData);
163 double* origin() {
return &(m_origin[0]); }
164 const double* origin()
const {
return &(m_origin[0]); }
166 double* xAxis() {
return &(m_xAxis[0]); }
167 const double* xAxis()
const {
return &(m_xAxis[0]); }
169 double* yAxis() {
return &(m_yAxis[0]); }
170 const double* yAxis()
const {
return &(m_yAxis[0]); }
172 double* zAxis() {
return &(m_zAxis[0]); }
173 const double* zAxis()
const {
return &(m_zAxis[0]); }
175 double* iAxis() {
return &(m_iAxis[0]); }
176 const double* iAxis()
const {
return &(m_iAxis[0]); }
178 double* jAxis() {
return &(m_jAxis[0]); }
179 const double* jAxis()
const {
return &(m_jAxis[0]); }
181 double featureSize()
const {
return m_featureSize; }
182 double modelScale()
const {
return static_cast<double>(m_scale); }
185 SessionPtr session() {
return m_session; }
186 void setSession(SessionPtr s) { m_session = s; }
188 Id pointId(
const Point& p)
const;
201 Point projectPoint(T coordBegin, T coordEnd);
204 void liftPoint(
const Point& ix, T coordBegin);
215 internal::PointSeq& replacement,
220 const Point& vertPosn,
223 void addVertexIndex(VertexPtr vert);
226 SessionPtr m_session;
229 double m_featureSize{ 1e-8 };
241 PointToVertexId m_vertices;
250 #endif // smtk_session_polygon_internal_model_h