Branch data Line data Source code
1 : : #include "PartPTCurve.hpp"
2 : : #include "PartitionSurface.hpp"
3 : : #include "PartitionPoint.hpp"
4 : : #include "GMem.hpp"
5 : : #include "PartitionEngine.hpp"
6 : : #include "CubitMessage.hpp"
7 : :
8 : 0 : PartPTCurve::PartPTCurve( PartitionSurface* owner )
9 : : {
10 [ # # ][ # # ]: 0 : owner->sub_entity_set().add_lower_order( this );
11 : 0 : }
12 : :
13 : 0 : PartPTCurve* PartPTCurve::construct( const CubitSimpleAttrib& attrib,
14 : : PartitionSurface* owner )
15 : : {
16 [ # # ]: 0 : DLIList<int> vertex_conn;
17 [ # # ][ # # ]: 0 : PartPTCurve* result = new PartPTCurve( owner, attrib, vertex_conn );
18 : :
19 [ # # ][ # # ]: 0 : if ( vertex_conn.size() != 4 )
20 : : {
21 [ # # ][ # # ]: 0 : delete result;
22 : 0 : return 0;
23 : : }
24 : :
25 : 0 : PartitionPoint *start = 0, *end = 0;
26 : : PartitionEntity* ent;
27 [ # # ]: 0 : vertex_conn.reset();
28 [ # # ]: 0 : int set_id = vertex_conn.get_and_step();
29 [ # # ]: 0 : int ent_id = vertex_conn.get_and_step();
30 [ # # ][ # # ]: 0 : ent = PartitionEngine::instance().entity_from_id(set_id,ent_id,owner->sub_entity_set());
[ # # ]
31 [ # # ]: 0 : start = dynamic_cast<PartitionPoint*>(ent);
32 [ # # ]: 0 : set_id = vertex_conn.get_and_step();
33 [ # # ]: 0 : ent_id = vertex_conn.get_and_step();
34 [ # # ][ # # ]: 0 : ent = PartitionEngine::instance().entity_from_id(set_id,ent_id,owner->sub_entity_set());
[ # # ]
35 [ # # ]: 0 : end = dynamic_cast<PartitionPoint*>(ent);
36 : :
37 [ # # ][ # # ]: 0 : if ( !start || !end || start != end )
[ # # ]
38 : : {
39 [ # # ][ # # ]: 0 : delete result;
40 : 0 : return 0;
41 : : }
42 : :
43 [ # # ]: 0 : result->start_point( end );
44 [ # # ]: 0 : result->end_point( end );
45 [ # # ]: 0 : return result;
46 : : }
47 : :
48 : 0 : PartPTCurve::PartPTCurve( PartitionSurface* surface,
49 : : const CubitSimpleAttrib& attrib,
50 : 0 : DLIList<int>& vertex_conn )
51 : : {
52 [ # # ]: 0 : DLIList<CubitVector*> points;
53 [ # # ][ # # ]: 0 : DLIList<int> junk;
54 [ # # ][ # # ]: 0 : surface->sub_entity_set().add_lower_order( this, attrib, 1, points, junk, vertex_conn, junk );
55 [ # # ][ # # ]: 0 : assert( points.size() == 0 );
[ # # ]
56 : 0 : }
57 : :
58 : 0 : PartPTCurve::~PartPTCurve()
59 [ # # ]: 0 : {}
60 : :
61 : 0 : PartitionCurve* PartPTCurve::split( double )
62 : 0 : { assert(0); return 0; }
63 : :
64 : 0 : CubitStatus PartPTCurve::combine( PartitionCurve* curve )
65 : : {
66 [ # # ][ # # ]: 0 : assert( dynamic_cast<PartPTCurve*>(curve) != NULL );
67 : 0 : assert( 0 );
68 : : return CUBIT_FAILURE;
69 : : }
70 : :
71 : 0 : CubitStatus PartPTCurve::get_graphics( GMem& result,
72 : : double /*angle_tolerance*/,
73 : : double /*distance_tolerance*/,
74 : : double /*max_edge_length*/)
75 : : {
76 : 0 : result.pointListCount = 0;
77 : 0 : return CUBIT_SUCCESS;
78 : : }
79 : :
80 : :
81 : 0 : void PartPTCurve::append_simple_attribute_virt(const CubitSimpleAttrib& csa)
82 : 0 : { sub_entity_set().add_attribute( this, csa ); }
83 : 0 : void PartPTCurve::remove_simple_attribute_virt(const CubitSimpleAttrib& csa)
84 : 0 : { sub_entity_set().rem_attribute( this, csa ); }
85 : 0 : void PartPTCurve::remove_all_simple_attribute_virt()
86 : 0 : { sub_entity_set().rem_all_attrib( this ); }
87 : 0 : CubitStatus PartPTCurve::get_simple_attribute(DLIList<CubitSimpleAttrib>& list)
88 : : {
89 : 0 : sub_entity_set().get_attributes( this, list );
90 : 0 : return CUBIT_SUCCESS;
91 : : }
92 : 0 : CubitStatus PartPTCurve::get_simple_attribute(const CubitString& name,
93 : : DLIList<CubitSimpleAttrib>& list)
94 : : {
95 : 0 : sub_entity_set().get_attributes( this, name.c_str(), list );
96 : 0 : return CUBIT_SUCCESS;
97 : : }
98 : :
99 : 0 : CubitBox PartPTCurve::bounding_box() const
100 [ # # ]: 0 : { return CubitBox( coordinates() ); }
101 : 0 : double PartPTCurve::measure()
102 : 0 : { return 0.0; }
103 : 0 : GeometryType PartPTCurve::geometry_type()
104 : 0 : { return POINT_CURVE_TYPE; }
105 : :
106 : 0 : CubitStatus PartPTCurve::closest_point( CubitVector const& ,
107 : : CubitVector& closest,
108 : : CubitVector* tangent,
109 : : CubitVector* curvature,
110 : : double* param )
111 : : {
112 [ # # ]: 0 : closest = coordinates();
113 [ # # ]: 0 : if( tangent ) tangent->set(0.,0.,0.);
114 [ # # ]: 0 : if( curvature) curvature->set(0.,0.,0.);
115 [ # # ]: 0 : if( param ) *param = 0.0;
116 : 0 : return CUBIT_SUCCESS;
117 : : }
118 : :
119 : 0 : CubitPointContainment PartPTCurve::point_containment( const CubitVector& position )
120 [ # # ]: 0 : { return is_position_on(position) ? CUBIT_PNT_BOUNDARY : CUBIT_PNT_OFF; }
121 : :
122 : 0 : CubitBoolean PartPTCurve::is_position_on( const CubitVector& position )
123 : : {
124 : 0 : const double tolsqr = GEOMETRY_RESABS * GEOMETRY_RESABS;
125 [ # # ][ # # ]: 0 : return (position - coordinates()).length_squared() < tolsqr;
126 : : }
127 : :
128 : 0 : CubitBoolean PartPTCurve::G1_discontinuous( double, CubitVector* min, CubitVector* plu )
129 : : {
130 [ # # ]: 0 : if( min ) min->set( 0., 0., 0. );
131 [ # # ]: 0 : if( plu ) plu->set( 0., 0., 0. );
132 : 0 : return CUBIT_TRUE;
133 : : }
134 : :
135 : 0 : CubitStatus PartPTCurve::get_interior_extrema( DLIList<CubitVector*>&, CubitSense& )
136 : 0 : { return CUBIT_SUCCESS; }
137 : :
138 : 0 : CubitStatus PartPTCurve::get_center_radius( CubitVector&, double& )
139 : 0 : { return CUBIT_FAILURE; }
140 : :
141 : 0 : CubitBoolean PartPTCurve::get_param_range( double& lower, double& upper )
142 : 0 : { lower = upper = 0.0; return CUBIT_TRUE; }
143 : :
144 : 0 : double PartPTCurve::start_param()
145 : 0 : { return 0.0; }
146 : 0 : double PartPTCurve::end_param()
147 : 0 : { return 0.0; }
148 : :
149 : 0 : CubitBoolean PartPTCurve::is_periodic( double& period )
150 : 0 : { period = 0.0; return CUBIT_TRUE; }
151 : :
152 : 0 : double PartPTCurve::length_from_u( double, double )
153 : 0 : { return 0.0; }
154 : :
155 : 0 : double PartPTCurve::u_from_position( const CubitVector& )
156 : 0 : { return 0.0; }
157 : :
158 : 0 : CubitStatus PartPTCurve::position_from_u( double, CubitVector& result )
159 [ # # ]: 0 : { result = coordinates(); return CUBIT_SUCCESS; }
160 : :
161 : 0 : double PartPTCurve::u_from_arc_length( double, double )
162 : 0 : { return 0.0; }
163 : :
164 : 0 : CubitVector PartPTCurve::coordinates() const
165 : : {
166 [ # # ]: 0 : if( start_point() )
167 : 0 : return start_point()->coordinates();
168 : :
169 [ # # ]: 0 : if( end_point() )
170 : 0 : return end_point()->coordinates();
171 : :
172 : 0 : return CubitVector(0.,0.,0.);
173 : : }
174 : :
175 : 0 : void PartPTCurve::reverse_sense()
176 : 0 : { }
177 : :
178 : 0 : CubitStatus PartPTCurve::save( CubitSimpleAttrib& attrib )
179 : : {
180 [ # # ][ # # ]: 0 : int id = sub_entity_set().get_id(this);
181 [ # # ]: 0 : if( id <= 0 ) return CUBIT_FAILURE;
182 : :
183 [ # # ]: 0 : DLIList<int> end_points(4);
184 [ # # ]: 0 : get_save_topology(end_points);
185 : :
186 [ # # ][ # # ]: 0 : return sub_entity_set().save_geometry( id, 1, 0, 0, &end_points, 0, attrib );
[ # # ]
187 : : }
188 : :
189 : 0 : CubitStatus PartPTCurve::get_spline_params
190 : : (
191 : : bool &rational, // return true/false
192 : : int °ree, // the degree of this spline
193 : : DLIList<CubitVector> &cntrl_pts, // xyz position of controlpoints
194 : : DLIList<double> &cntrl_pt_weights, // if rational, a weight for each cntrl point.
195 : : DLIList<double> &knots, // There should be order+cntrl_pts.size()-2 knots
196 : : bool &spline_is_reversed
197 : : ) const
198 : : {
199 [ # # ][ # # ]: 0 : PRINT_ERROR("Currently, Cubit is unable to determine spline parameters for PartPTCurves.\n");
200 : 0 : return CUBIT_FAILURE;
201 : : }
202 : :
203 : 0 : CubitStatus PartPTCurve::get_ellipse_params
204 : : (
205 : : CubitVector ¢er_vec,
206 : : CubitVector &normal,
207 : : CubitVector &major_axis,
208 : : double &radius_ratio
209 : : ) const
210 : : {
211 [ # # ][ # # ]: 0 : PRINT_ERROR("Currently, Cubit is unable to determine ellipse parameters for PartPTCurves.\n");
212 : 0 : return CUBIT_FAILURE;
213 [ + - ][ + - ]: 6364 : }
|