| 1 | //--------------------------------------------------------------------------- |
|---|
| 2 | //- Filename: CollapseAngleTool |
|---|
| 3 | //- Purpose: To collapse small angle for preparing for mesh |
|---|
| 4 | //- |
|---|
| 5 | //- Creator: Jiangtao Hu |
|---|
| 6 | //- Creation date: 02/09/2005 |
|---|
| 7 | //---------------------------------------------------------------------------- |
|---|
| 8 | |
|---|
| 9 | #ifndef COLLAPSEANGLETOOL_HPP |
|---|
| 10 | #define COLLAPSEANGLETOOL_HPP |
|---|
| 11 | |
|---|
| 12 | #include "DLIList.hpp" |
|---|
| 13 | class RefVertex; |
|---|
| 14 | class RefEdge; |
|---|
| 15 | class RefFace; |
|---|
| 16 | class CubitVector; |
|---|
| 17 | template<class X> class DLIList; |
|---|
| 18 | |
|---|
| 19 | class CollapseAngleTool |
|---|
| 20 | { |
|---|
| 21 | public: |
|---|
| 22 | static CollapseAngleTool *instance(); |
|---|
| 23 | // return a static instance pointer |
|---|
| 24 | |
|---|
| 25 | CubitStatus auto_collapse (double length, |
|---|
| 26 | double angle, |
|---|
| 27 | CubitBoolean preview, |
|---|
| 28 | CubitBoolean if_comp_vertex, |
|---|
| 29 | double max_angle); |
|---|
| 30 | |
|---|
| 31 | void collapse_one_angle(RefVertex *vex_ptr, |
|---|
| 32 | RefEdge *edge_to_remove, |
|---|
| 33 | RefEdge *the_other_edge, |
|---|
| 34 | double length1, |
|---|
| 35 | double length2, |
|---|
| 36 | CubitBoolean get_position, |
|---|
| 37 | CubitVector &position, |
|---|
| 38 | CubitBoolean preview, |
|---|
| 39 | CubitBoolean if_comp_vertex, |
|---|
| 40 | double angle); |
|---|
| 41 | |
|---|
| 42 | private: |
|---|
| 43 | CollapseAngleTool(); |
|---|
| 44 | // Constructor |
|---|
| 45 | |
|---|
| 46 | ~CollapseAngleTool(); |
|---|
| 47 | // Destructor |
|---|
| 48 | |
|---|
| 49 | static CollapseAngleTool *instance_; |
|---|
| 50 | // the static instance pointer |
|---|
| 51 | |
|---|
| 52 | DLIList <RefEdge *> partly_drawn_curve; |
|---|
| 53 | CubitStatus partition_curve(RefEdge *&edge, |
|---|
| 54 | RefVertex *root_vertex, |
|---|
| 55 | CubitVector &position, |
|---|
| 56 | RefVertex *&new_vertex); |
|---|
| 57 | |
|---|
| 58 | CubitBoolean if_partition_surf(RefVertex *vex_ptr, |
|---|
| 59 | RefEdge *edge_to_remove, |
|---|
| 60 | RefFace *common_face); |
|---|
| 61 | |
|---|
| 62 | CubitStatus partition_curve(RefEdge *&edge, |
|---|
| 63 | RefVertex *root_vertex, |
|---|
| 64 | double arc_length, |
|---|
| 65 | RefVertex *&new_vertex); |
|---|
| 66 | |
|---|
| 67 | CubitStatus partition_surface(RefFace *common_face, |
|---|
| 68 | RefEdge *& edge, |
|---|
| 69 | RefVertex * root, |
|---|
| 70 | RefVertex *vertex1, |
|---|
| 71 | RefVertex *veretx2, |
|---|
| 72 | RefFace *&result_face); |
|---|
| 73 | |
|---|
| 74 | CubitStatus collapse_angle(RefVertex *vex_ptr, |
|---|
| 75 | RefEdge *edge_to_remove, |
|---|
| 76 | RefEdge *the_other_edge, |
|---|
| 77 | double length1, |
|---|
| 78 | double length2, |
|---|
| 79 | CubitBoolean get_position, |
|---|
| 80 | CubitVector &position); |
|---|
| 81 | |
|---|
| 82 | CubitStatus draw_preview(RefVertex *vex_ptr, |
|---|
| 83 | RefEdge *edge_to_remove, |
|---|
| 84 | RefEdge *the_other_edge, |
|---|
| 85 | double length1, |
|---|
| 86 | double length2, |
|---|
| 87 | CubitBoolean get_position, |
|---|
| 88 | CubitVector &position); |
|---|
| 89 | |
|---|
| 90 | void exchange_edges(RefEdge *&edge, |
|---|
| 91 | RefEdge *&the_other_edge); |
|---|
| 92 | |
|---|
| 93 | double the_surface_angle(RefEdge *edge, |
|---|
| 94 | RefVertex *root_vertex, |
|---|
| 95 | double length); |
|---|
| 96 | |
|---|
| 97 | CubitStatus position_from_length(RefEdge *edge, |
|---|
| 98 | RefVertex *root_vertex, |
|---|
| 99 | double arc_length, |
|---|
| 100 | CubitVector& v_new); |
|---|
| 101 | }; |
|---|
| 102 | |
|---|
| 103 | #endif |
|---|