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