Blender V4.3
WXEdge.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
12#include "Curvature.h"
13#include "Nature.h"
14#include "WEdge.h"
15
16#ifdef WITH_CXX_GUARDEDALLOC
17# include "MEM_guardedalloc.h"
18#endif
19
20namespace Freestyle {
21
23
24/**********************************
25 * *
26 * *
27 * WXVertex *
28 * *
29 * *
30 **********************************/
31
32class WXVertex : public WVertex {
33 private:
34 // Curvature info
35 CurvatureInfo *_curvatures;
36
37 public:
38 inline WXVertex(const Vec3f &v) : WVertex(v)
39 {
40 _curvatures = nullptr;
41 }
42
44 WXVertex(WXVertex &iBrother) : WVertex(iBrother)
45 {
46 _curvatures = new CurvatureInfo(*iBrother._curvatures);
47 }
48
49 virtual WVertex *duplicate()
50 {
51 WXVertex *clone = new WXVertex(*this);
52 return clone;
53 }
54
55 virtual ~WXVertex()
56 {
57 if (_curvatures) {
58 delete _curvatures;
59 }
60 }
61
62 virtual void Reset()
63 {
64 if (_curvatures) {
65 _curvatures->Kr = 0.0;
66 }
67 }
68
70 {
71 _curvatures = ci;
72 }
73
74 inline bool isFeature();
75
77 {
78 return _curvatures;
79 }
80
81#ifdef WITH_CXX_GUARDEDALLOC
82 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:WXVertex")
83#endif
84};
85
86/**********************************
87 * *
88 * *
89 * WXEdge *
90 * *
91 * *
92 **********************************/
93
94class WXEdge : public WEdge {
95 private:
96 // flag to indicate whether the edge is a silhouette edge or not
97 WXNature _nature;
98 // 0: the order doesn't matter. 1: the order is the original one. -1: the order is not good
99 short _order;
100 // A front facing edge is an edge for which the bording face which is the nearest from the
101 // viewpoint is front. A back facing edge is the opposite.
102 bool _front;
103
104 public:
105 inline WXEdge() : WEdge()
106 {
107 _nature = Nature::NO_FEATURE;
108 _front = false;
109 _order = 0;
110 }
111
112 inline WXEdge(WOEdge *iOEdge) : WEdge(iOEdge)
113 {
114 _nature = Nature::NO_FEATURE;
115 _front = false;
116 _order = 0;
117 }
118
119 inline WXEdge(WOEdge *iaOEdge, WOEdge *ibOEdge) : WEdge(iaOEdge, ibOEdge)
120 {
121 _nature = Nature::NO_FEATURE;
122 _front = false;
123 _order = 0;
124 }
125
127 inline WXEdge(WXEdge &iBrother) : WEdge(iBrother)
128 {
129 _nature = iBrother.nature();
130 _front = iBrother._front;
131 _order = iBrother._order;
132 }
133
134 virtual WEdge *duplicate()
135 {
136 WXEdge *clone = new WXEdge(*this);
137 return clone;
138 }
139
140 virtual ~WXEdge() {}
141
142 virtual void Reset()
143 {
144 _nature = _nature & ~Nature::SILHOUETTE;
145 _nature = _nature & ~Nature::SUGGESTIVE_CONTOUR;
146 }
147
150 {
151 return _nature;
152 }
153
154 inline bool front()
155 {
156 return _front;
157 }
158
159 inline short order() const
160 {
161 return _order;
162 }
163
165 inline void setFront(bool iFront)
166 {
167 _front = iFront;
168 }
169
170 inline void setNature(WXNature iNature)
171 {
172 _nature = iNature;
173 }
174
175 inline void AddNature(WXNature iNature)
176 {
177 _nature = _nature | iNature;
178 }
179
180 inline void setOrder(int i)
181 {
182 _order = i;
183 }
184
185#ifdef WITH_CXX_GUARDEDALLOC
186 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:WXEdge")
187#endif
188};
189
190/**********************************
191 * *
192 * *
193 * WXFace *
194 * *
195 * *
196 **********************************/
197
200 public:
202 static const Configuration EDGE_EDGE = 1;
203 static const Configuration VERTEX_EDGE = 2;
204 static const Configuration EDGE_VERTEX = 3;
205
206 WOEdge *_woea; // Oriented edge from which the silhouette edge starts
207 WOEdge *_woeb; // Oriented edge where the silhouette edge ends
208 float _ta; // The silhouette starting point's coordinates are : _woea[0]+ta*(_woea[1]-_woea[0])
209 float _tb; // The silhouette ending point's coordinates are : _woeb[0]+ta*(_woeb[1]-_woeb[0])
210 bool _front;
212
214 {
215 _woea = nullptr;
216 _woeb = nullptr;
217 _ta = 0.0f;
218 _tb = 0.0f;
219 _front = false;
221 }
222
223 WXSmoothEdge(const WXSmoothEdge &iBrother)
224 {
225 _woea = iBrother._woea;
226 _woeb = iBrother._woeb;
227 _ta = iBrother._ta;
228 _tb = iBrother._tb;
229 _config = iBrother._config;
230 _front = iBrother._front;
231 }
232
234
235 inline WOEdge *woea()
236 {
237 return _woea;
238 }
239
240 inline WOEdge *woeb()
241 {
242 return _woeb;
243 }
244
245 inline float ta() const
246 {
247 return _ta;
248 }
249
250 inline float tb() const
251 {
252 return _tb;
253 }
254
255 inline bool front() const
256 {
257 return _front;
258 }
259
261 {
262 return _config;
263 }
264
266 inline void setWOeA(WOEdge *iwoea)
267 {
268 _woea = iwoea;
269 }
270
271 inline void setWOeB(WOEdge *iwoeb)
272 {
273 _woeb = iwoeb;
274 }
275
276 inline void setTa(float ta)
277 {
278 _ta = ta;
279 }
280
281 inline void setTb(float tb)
282 {
283 _tb = tb;
284 }
285
286 inline void setFront(bool iFront)
287 {
288 _front = iFront;
289 }
290
292 {
293 _config = iConf;
294 }
295
296#ifdef WITH_CXX_GUARDEDALLOC
297 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:WXSmoothEdge")
298#endif
299};
300
301/* Class to store a value per vertex and a smooth edge.
302 * The WXFace stores a list of these
303 */
304class WXFace;
305
307 public:
308 void *userdata;
310 // in case of silhouette: the values obtained when computing the normal-view direction dot
311 // product. _DotP[i] is this value for the vertex i for that face.
312 vector<float> _DotP;
315
316 // oldtmp values
317 // count the number of positive dot products for vertices.
318 // if this number is != 0 and !=_DotP.size() -> it is a silhouette fac
320
321 uint _nNullDotP; // count the number of null dot products for vertices.
324
325 WXFaceLayer(WXFace *iFace, WXNature iNature, bool viewDependant)
326 {
327 _pWXFace = iFace;
328 _pSmoothEdge = nullptr;
329 _nPosDotP = 0;
330 _nNullDotP = 0;
331 _Nature = iNature;
332 _viewDependant = viewDependant;
333 userdata = nullptr;
334 }
335
336 WXFaceLayer(const WXFaceLayer &iBrother)
337 {
338 _pWXFace = iBrother._pWXFace;
339 _pSmoothEdge = nullptr;
340 _DotP = iBrother._DotP;
341 _nPosDotP = iBrother._nPosDotP;
342 _nNullDotP = iBrother._nNullDotP;
343 _Nature = iBrother._Nature;
344 if (iBrother._pSmoothEdge) { // XXX ? It's set to null a few lines above!
345 _pSmoothEdge = new WXSmoothEdge(*(iBrother._pSmoothEdge));
346 }
348 userdata = nullptr;
349 }
350
351 virtual ~WXFaceLayer()
352 {
353 if (!_DotP.empty()) {
354 _DotP.clear();
355 }
356 if (_pSmoothEdge) {
357 delete _pSmoothEdge;
358 _pSmoothEdge = nullptr;
359 }
360 }
361
362 inline const float dotP(int i) const
363 {
364 return _DotP[i];
365 }
366
367 inline uint nPosDotP() const
368 {
369 return _nPosDotP;
370 }
371
372 inline uint nNullDotP() const
373 {
374 return _nNullDotP;
375 }
376
377 inline int closestPointIndex() const
378 {
379 return _ClosestPointIndex;
380 }
381
382 inline WXNature nature() const
383 {
384 return _Nature;
385 }
386
387 inline bool hasSmoothEdge() const
388 {
389 if (_pSmoothEdge) {
390 return true;
391 }
392 return false;
393 }
394
395 inline WXFace *getFace()
396 {
397 return _pWXFace;
398 }
399
401 {
402 return _pSmoothEdge;
403 }
404
405 inline bool isViewDependant() const
406 {
407 return _viewDependant;
408 }
409
410 inline void setClosestPointIndex(int iIndex)
411 {
412 _ClosestPointIndex = iIndex;
413 }
414
415 inline void removeSmoothEdge()
416 {
417 if (!_DotP.empty()) {
418 _DotP.clear();
419 }
420 if (_pSmoothEdge) {
421 delete _pSmoothEdge;
422 _pSmoothEdge = nullptr;
423 }
424 }
425
428 uint Get0VertexIndex() const;
429
432 uint GetSmoothEdgeIndex() const;
433
437 void RetrieveCuspEdgesIndices(vector<int> &oCuspEdges);
438
440
441 inline void setDotP(const vector<float> &iDotP)
442 {
443 _DotP = iDotP;
444 }
445
446 inline void PushDotP(float iDotP)
447 {
448 _DotP.push_back(iDotP);
449 if (iDotP > 0.0f) {
450 ++_nPosDotP;
451 }
452 if (iDotP == 0.0f) { /* TODO: this comparison is weak, check if it actually works. */
453 ++_nNullDotP;
454 }
455 }
456
457 inline void ReplaceDotP(uint index, float newDotP)
458 {
459 _DotP[index] = newDotP;
461 }
462
463 inline void updateDotPInfos()
464 {
465 _nPosDotP = 0;
466 _nNullDotP = 0;
467 for (vector<float>::iterator d = _DotP.begin(), dend = _DotP.end(); d != dend; ++d) {
468 if ((*d) > 0.0f) {
469 ++_nPosDotP;
470 }
471 if ((*d) == 0.0f) { /* TODO: ditto. */
472 ++_nNullDotP;
473 }
474 }
475 }
476
477#ifdef WITH_CXX_GUARDEDALLOC
478 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:WXFaceLayer")
479#endif
480}; // namespace Freestyle
481
482class WXFace : public WFace {
483 protected:
484 Vec3f _center; // center of the face
485 float _Z; // distance from viewpoint to the center of the face
486 bool _front; // flag to tell whether the face is front facing or back facing
487 float _dotp; // value obtained when computing the normal-viewpoint dot product
488
489 vector<WXFaceLayer *> _SmoothLayers; // The data needed to store one or several smooth edges
490 // that traverse the face
491
492 public:
493 inline WXFace() : WFace()
494 {
495 _Z = 0.0f;
496 _front = false;
497 }
498
500 WXFace(WXFace &iBrother) : WFace(iBrother)
501 {
502 _center = iBrother.center();
503 _Z = iBrother.Z();
504 _front = iBrother.front();
505 for (vector<WXFaceLayer *>::iterator wxf = iBrother._SmoothLayers.begin(),
506 wxfend = iBrother._SmoothLayers.end();
507 wxf != wxfend;
508 ++wxf)
509 {
510 _SmoothLayers.push_back(new WXFaceLayer(**wxf));
511 }
512 }
513
514 virtual WFace *duplicate()
515 {
516 WXFace *clone = new WXFace(*this);
517 return clone;
518 }
519
520 virtual ~WXFace()
521 {
522 if (!_SmoothLayers.empty()) {
523 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(),
524 wxfend = _SmoothLayers.end();
525 wxf != wxfend;
526 ++wxf)
527 {
528 delete (*wxf);
529 }
530 _SmoothLayers.clear();
531 }
532 }
533
535 virtual WEdge *instanciateEdge() const
536 {
537 return new WXEdge;
538 }
539
541 inline Vec3f &center()
542 {
543 return _center;
544 }
545
546 inline float Z()
547 {
548 return _Z;
549 }
550
551 inline bool front()
552 {
553 return _front;
554 }
555
556 inline float dotp()
557 {
558 return _dotp;
559 }
560
561 inline bool hasSmoothEdges() const
562 {
563 for (vector<WXFaceLayer *>::const_iterator wxf = _SmoothLayers.begin(),
564 wxfend = _SmoothLayers.end();
565 wxf != wxfend;
566 ++wxf)
567 {
568 if ((*wxf)->hasSmoothEdge()) {
569 return true;
570 }
571 }
572 return false;
573 }
574
575 vector<WXFaceLayer *> &getSmoothLayers()
576 {
577 return _SmoothLayers;
578 }
579
581 void retrieveSmoothEdges(WXNature iNature, vector<WXSmoothEdge *> &oSmoothEdges)
582 {
583 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(), wxfend = _SmoothLayers.end();
584 wxf != wxfend;
585 ++wxf)
586 {
587 if ((*wxf)->hasSmoothEdge() && ((*wxf)->_Nature & iNature)) {
588 oSmoothEdges.push_back((*wxf)->_pSmoothEdge);
589 }
590 }
591 }
592
593 void retrieveSmoothEdgesLayers(WXNature iNature, vector<WXFaceLayer *> &oSmoothEdgesLayers)
594 {
595 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(), wxfend = _SmoothLayers.end();
596 wxf != wxfend;
597 ++wxf)
598 {
599 if ((*wxf)->hasSmoothEdge() && ((*wxf)->_Nature & iNature)) {
600 oSmoothEdgesLayers.push_back((*wxf));
601 }
602 }
603 }
604
605 void retrieveSmoothLayers(WXNature iNature, vector<WXFaceLayer *> &oSmoothLayers)
606 {
607 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(), wxfend = _SmoothLayers.end();
608 wxf != wxfend;
609 ++wxf)
610 {
611 if ((*wxf)->_Nature & iNature) {
612 oSmoothLayers.push_back(*wxf);
613 }
614 }
615 }
616
618 inline void setCenter(const Vec3f &iCenter)
619 {
620 _center = iCenter;
621 }
622
623 void ComputeCenter();
624
625 inline void setZ(float z)
626 {
627 _Z = z;
628 }
629
630 inline void setFront(bool iFront)
631 {
632 _front = iFront;
633 }
634
635 inline void setDotP(float iDotP)
636 {
637 _dotp = iDotP;
638 if (_dotp > 0.0f) {
639 _front = true;
640 }
641 else {
642 _front = false;
643 }
644 }
645
646 inline void AddSmoothLayer(WXFaceLayer *iLayer)
647 {
648 _SmoothLayers.push_back(iLayer);
649 }
650
651 inline void Reset()
652 {
653 vector<WXFaceLayer *> layersToKeep;
654 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(), wxfend = _SmoothLayers.end();
655 wxf != wxfend;
656 ++wxf)
657 {
658 if ((*wxf)->isViewDependant()) {
659 delete (*wxf);
660 }
661 else {
662 layersToKeep.push_back(*wxf);
663 }
664 }
665 _SmoothLayers = layersToKeep;
666 }
667
669 inline void Clear()
670 {
671 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(), wxfend = _SmoothLayers.end();
672 wxf != wxfend;
673 ++wxf)
674 {
675 delete (*wxf);
676 }
677 _SmoothLayers.clear();
678 }
679
680 virtual void ResetUserData()
681 {
683 for (vector<WXFaceLayer *>::iterator wxf = _SmoothLayers.begin(), wxfend = _SmoothLayers.end();
684 wxf != wxfend;
685 ++wxf)
686 {
687 (*wxf)->userdata = nullptr;
688 }
689 }
690
691#ifdef WITH_CXX_GUARDEDALLOC
692 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:WXFace")
693#endif
694};
695
696/**********************************
697 * *
698 * *
699 * WXShape *
700 * *
701 * *
702 **********************************/
703
704class WXShape : public WShape {
705#if 0
706 public:
707 typedef WXShape type_name;
708#endif
709
710 protected:
711 bool _computeViewIndependent; // flag to indicate whether the view independent stuff must be
712 // computed or not
713
714 public:
715 inline WXShape() : WShape()
716 {
718 }
719
721 inline WXShape(WXShape &iBrother) : WShape(iBrother)
722 {
724 }
725
726 virtual WShape *duplicate()
727 {
728 WXShape *clone = new WXShape(*this);
729 return clone;
730 }
731
732 virtual ~WXShape() {}
733
735 {
737 }
738
739 inline void setComputeViewIndependentFlag(bool iFlag)
740 {
742 }
743
745 virtual WFace *instanciateFace() const
746 {
747 return new WXFace;
748 }
749
758 virtual WFace *MakeFace(vector<WVertex *> &iVertexList,
759 vector<bool> &iFaceEdgeMarksList,
760 uint iMaterialIndex);
761
780 virtual WFace *MakeFace(vector<WVertex *> &iVertexList,
781 vector<Vec3f> &iNormalsList,
782 vector<Vec2f> &iTexCoordsList,
783 vector<bool> &iFaceEdgeMarksList,
784 uint iMaterialIndex);
785
787 virtual void Reset()
788 {
789 // Reset Edges
790 vector<WEdge *> &wedges = getEdgeList();
791 for (vector<WEdge *>::iterator we = wedges.begin(), weend = wedges.end(); we != weend; ++we) {
792 ((WXEdge *)(*we))->Reset();
793 }
794
795 // Reset faces:
796 vector<WFace *> &wfaces = GetFaceList();
797 for (vector<WFace *>::iterator wf = wfaces.begin(), wfend = wfaces.end(); wf != wfend; ++wf) {
798 ((WXFace *)(*wf))->Reset();
799 }
800 }
803#ifdef WITH_CXX_GUARDEDALLOC
804 MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:WXShape")
805#endif
806};
807
808/*
809 * #############################################
810 * #############################################
811 * #############################################
812 * ###### ######
813 * ###### I M P L E M E N T A T I O N ######
814 * ###### ######
815 * #############################################
816 * #############################################
817 * #############################################
818 */
819/* for inline functions */
820
822{
823 int counter = 0;
824 vector<WEdge *> &vedges = GetEdges();
825 for (vector<WEdge *>::iterator ve = vedges.begin(), vend = vedges.end(); ve != vend; ++ve) {
826 if (((WXEdge *)(*ve))->nature() != Nature::NO_FEATURE) {
827 counter++;
828 }
829 }
830
831 if ((counter == 1) || (counter > 2)) {
832 return true;
833 }
834 return false;
835}
836
837} /* namespace Freestyle */
unsigned short ushort
unsigned int uint
GTS - Library for the manipulation of triangulated surfaces.
Read Guarded memory(de)allocation.
Different natures for both vertices and edges.
Classes to define a Winged Edge data structure.
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
Definition btQuadWord.h:117
virtual void ResetUserData()
Definition WEdge.h:970
vector< WEdge * > & getEdgeList()
Definition WEdge.h:1048
vector< WFace * > & GetFaceList()
Definition WEdge.h:1058
vector< WEdge * > & GetEdges()
Definition WEdge.h:78
virtual ~WXEdge()
Definition WXEdge.h:140
WXEdge(WOEdge *iaOEdge, WOEdge *ibOEdge)
Definition WXEdge.h:119
short order() const
Definition WXEdge.h:159
virtual void Reset()
Definition WXEdge.h:142
WXNature nature()
Definition WXEdge.h:149
void setNature(WXNature iNature)
Definition WXEdge.h:170
void setOrder(int i)
Definition WXEdge.h:180
void AddNature(WXNature iNature)
Definition WXEdge.h:175
virtual WEdge * duplicate()
Definition WXEdge.h:134
WXEdge(WXEdge &iBrother)
Definition WXEdge.h:127
void setFront(bool iFront)
Definition WXEdge.h:165
WXEdge(WOEdge *iOEdge)
Definition WXEdge.h:112
bool hasSmoothEdge() const
Definition WXEdge.h:387
const float dotP(int i) const
Definition WXEdge.h:362
void setClosestPointIndex(int iIndex)
Definition WXEdge.h:410
WXFaceLayer(const WXFaceLayer &iBrother)
Definition WXEdge.h:336
uint nPosDotP() const
Definition WXEdge.h:367
void ReplaceDotP(uint index, float newDotP)
Definition WXEdge.h:457
WXSmoothEdge * getSmoothEdge()
Definition WXEdge.h:400
void PushDotP(float iDotP)
Definition WXEdge.h:446
WXFaceLayer(WXFace *iFace, WXNature iNature, bool viewDependant)
Definition WXEdge.h:325
WXFace * getFace()
Definition WXEdge.h:395
void setDotP(const vector< float > &iDotP)
Definition WXEdge.h:441
void RetrieveCuspEdgesIndices(vector< int > &oCuspEdges)
Definition WXEdge.cpp:49
uint Get0VertexIndex() const
Definition WXEdge.cpp:26
int closestPointIndex() const
Definition WXEdge.h:377
WXNature nature() const
Definition WXEdge.h:382
uint GetSmoothEdgeIndex() const
Definition WXEdge.cpp:37
uint nNullDotP() const
Definition WXEdge.h:372
bool isViewDependant() const
Definition WXEdge.h:405
vector< float > _DotP
Definition WXEdge.h:312
WXSmoothEdge * BuildSmoothEdge()
Definition WXEdge.cpp:61
WXSmoothEdge * _pSmoothEdge
Definition WXEdge.h:313
virtual ~WXFaceLayer()
Definition WXEdge.h:351
void setDotP(float iDotP)
Definition WXEdge.h:635
virtual void ResetUserData()
Definition WXEdge.h:680
vector< WXFaceLayer * > _SmoothLayers
Definition WXEdge.h:489
void retrieveSmoothLayers(WXNature iNature, vector< WXFaceLayer * > &oSmoothLayers)
Definition WXEdge.h:605
virtual WFace * duplicate()
Definition WXEdge.h:514
void setFront(bool iFront)
Definition WXEdge.h:630
void setCenter(const Vec3f &iCenter)
Definition WXEdge.h:618
virtual WEdge * instanciateEdge() const
Definition WXEdge.h:535
void retrieveSmoothEdgesLayers(WXNature iNature, vector< WXFaceLayer * > &oSmoothEdgesLayers)
Definition WXEdge.h:593
void AddSmoothLayer(WXFaceLayer *iLayer)
Definition WXEdge.h:646
bool hasSmoothEdges() const
Definition WXEdge.h:561
void setZ(float z)
Definition WXEdge.h:625
WXFace(WXFace &iBrother)
Definition WXEdge.h:500
void ComputeCenter()
Definition WXEdge.cpp:241
Vec3f & center()
Definition WXEdge.h:541
void retrieveSmoothEdges(WXNature iNature, vector< WXSmoothEdge * > &oSmoothEdges)
Definition WXEdge.h:581
virtual ~WXFace()
Definition WXEdge.h:520
vector< WXFaceLayer * > & getSmoothLayers()
Definition WXEdge.h:575
bool _computeViewIndependent
Definition WXEdge.h:711
virtual void Reset()
Definition WXEdge.h:787
bool getComputeViewIndependentFlag() const
Definition WXEdge.h:734
virtual WFace * instanciateFace() const
Definition WXEdge.h:745
virtual WFace * MakeFace(vector< WVertex * > &iVertexList, vector< bool > &iFaceEdgeMarksList, uint iMaterialIndex)
Definition WXEdge.cpp:264
virtual ~WXShape()
Definition WXEdge.h:732
virtual WShape * duplicate()
Definition WXEdge.h:726
WXShape(WXShape &iBrother)
Definition WXEdge.h:721
void setComputeViewIndependentFlag(bool iFlag)
Definition WXEdge.h:739
void setWOeA(WOEdge *iwoea)
Definition WXEdge.h:266
void setWOeB(WOEdge *iwoeb)
Definition WXEdge.h:271
bool front() const
Definition WXEdge.h:255
Configuration configuration() const
Definition WXEdge.h:260
WXSmoothEdge(const WXSmoothEdge &iBrother)
Definition WXEdge.h:223
static const Configuration VERTEX_EDGE
Definition WXEdge.h:203
void setConfiguration(Configuration iConf)
Definition WXEdge.h:291
void setTb(float tb)
Definition WXEdge.h:281
void setFront(bool iFront)
Definition WXEdge.h:286
float ta() const
Definition WXEdge.h:245
static const Configuration EDGE_VERTEX
Definition WXEdge.h:204
Configuration _config
Definition WXEdge.h:211
void setTa(float ta)
Definition WXEdge.h:276
float tb() const
Definition WXEdge.h:250
static const Configuration EDGE_EDGE
Definition WXEdge.h:202
virtual WVertex * duplicate()
Definition WXEdge.h:49
virtual void Reset()
Definition WXEdge.h:62
void setCurvatures(CurvatureInfo *ci)
Definition WXEdge.h:69
virtual ~WXVertex()
Definition WXEdge.h:55
WXVertex(const Vec3f &v)
Definition WXEdge.h:38
WXVertex(WXVertex &iBrother)
Definition WXEdge.h:44
CurvatureInfo * curvatures()
Definition WXEdge.h:76
static const EdgeNature NO_FEATURE
Definition Nature.h:38
ushort EdgeNature
Definition Nature.h:36
inherits from class Rep
Definition AppCanvas.cpp:20
Nature::EdgeNature WXNature
Definition WXEdge.h:22