cgma
|
00001 //------------------------------------------------------------------------- 00002 // Filename : GeometryModifyEngine.hpp 00003 // 00004 // Purpose : Define the interface for all solid model modify 00005 // engines. 00006 // 00007 // Special Notes : This is an abstract base class. 00008 // 00009 // Creator : Tim Tautges 00010 // 00011 // Creation Date : 2/01 00012 // 00013 // Owner : Tim Tautges 00014 //------------------------------------------------------------------------- 00015 00016 #ifndef GEOMETRY_MODIFY_ENGINE_HPP 00017 #define GEOMETRY_MODIFY_ENGINE_HPP 00018 00019 #include "CubitDefines.h" 00020 #include "GeometryDefines.h" 00021 #include "CGMGeomConfigure.h" 00022 #include "FacetShapeDefs.hpp" 00023 00024 #include <map> 00025 #include "CubitVector.hpp" 00026 00027 class CubitPlane; 00028 template <class X> class DLIList; 00029 00030 class TopologyBridge; 00031 class TBPoint; 00032 class Curve; 00033 class Surface; 00034 class Lump; 00035 class BodySM; 00036 class LoopSM; 00037 class GeometryEntity; 00038 class GeometryQueryEngine; 00039 class CubitBox; 00040 00041 class CUBIT_GEOM_EXPORT GeometryModifyEngine 00042 { 00043 00044 public: 00045 00046 virtual ~GeometryModifyEngine() {} 00047 //- virtual destructor 00048 00049 virtual bool supports_interoperability() = 0; 00050 //- Returns whether intermixing of real and virtual geometry operations 00051 //- is supported for the current geometry kernel. 00052 00053 virtual bool supports_facets() { return false; } 00054 //- Returns whether creation of surfaces from facet data is supported 00055 00056 virtual TBPoint* make_Point( CubitVector const& position ) const = 0; 00057 //R TBPoint* 00058 //R- Returned pointer to a TBPoint object. 00059 //I position 00060 //I- Input coordinates of the point to be created. 00061 //- This function creates a TBPoint, given coordinates. The particular 00062 //- type of TBPoint object that is created depends on the specific 00063 //- modeling engine. For example, if the engine 00064 //- is OCCGeometryEngine, then a PointOCC is created and returned. 00065 00066 virtual Curve* make_Curve(Curve *curve_ptr, 00067 std::map<TopologyBridge*, TopologyBridge*> *old_tb_to_new_tb = NULL) const = 0; 00068 //- creates a curve from an existing curve. This creates totally 00069 //- new topology. This function is useful for constructing geometry 00070 //- from existing geometry. 00071 //- The old_to_new_map is an optional parameter that maps all 00072 //- the entities of the original to those of the copy. 00073 00074 virtual Curve* make_Curve( TBPoint const* point1_ptr, 00075 TBPoint const* point2_ptr, 00076 Surface* ref_face_ptr, 00077 const CubitVector *third_point = NULL) const = 0; 00078 //- Create a curve exactly on the give ref_face. 00079 //- Make sure the points are on the underlying surface. 00080 00081 virtual Curve* make_Curve( DLIList<CubitVector*>& point_list, 00082 DLIList<CubitVector*>& point_tangents) const = 0; 00083 00084 virtual Curve* make_Curve( GeometryType curve_type, 00085 TBPoint const* point1_ptr, 00086 TBPoint const* point2_ptr, 00087 DLIList<CubitVector*>& vector_list, 00088 Surface* ref_face_ptr = NULL) const = 0; 00089 00090 virtual Curve* make_Curve( GeometryType curve_type, 00091 TBPoint const* point1_ptr, 00092 TBPoint const* point2_ptr, 00093 CubitVector const* intermediate_point_ptr) const = 0; 00094 //R Curve* 00095 //R- Returned pointer to a Curve object. 00096 //I curve_type 00097 //I- The type of curve to be created. 00098 //I point1_ptr, point2_ptr 00099 //I- Input end points of the curve to be created. 00100 //I intermediate_point_ptr 00101 //I- The coordinates of an intermediate point required for the 00102 //I- generation of the curve. 00103 //I vector_list 00104 //I- Input list of CubitVectors. The new Curve interpolates these 00105 //I- positions. 00106 //I ref_face_ptr 00107 //I- If the optional Surface pointer is provided, then the input 00108 //I- locations (CubitVectors) are moved to the surface of the 00109 //I- Surface before interpolation is done. 00110 //I- NOTE: The end Points are *not* moved to the surface. Only the 00111 //I- (intermediate) points are. 00112 //- This function creates a Curve, of type, curve_type, given 00113 //- the end points of the curve and an intermediate point or a set 00114 //- of points to interpolate through. 00115 //- The particular type of Curve object 00116 //- that is created depends on the specific modeling engine. For 00117 //- example, if the engine is OCCGeometryEngine, then a CurveOCC 00118 //- is created and returned. 00119 //- 00120 //- NOTE on some hideous programming 00121 //- This function not only creates the Curve, but also 00122 //- creates the VGI entities Chain and CoVertexes that 00123 //- will be connected up with the RefEdge. For the sake 00124 //- of expediency we are assuming that this function is 00125 //- called when RefEdge needs to be made from RefVertices. 00126 //- 00127 //- This function creates non-linear curves (e.g., elliptic and 00128 //- parabolic curves. curve_type indicates what type of curve is 00129 //- required. 00130 //- 00131 //- Elliptical: 00132 //- The portion of the ellipse (circle) that is generated goes from 00133 //- point1 to point2. 00134 //- 00135 //- Parabolic: 00136 //- Construct a parabolic arc from 3 points. intermediate_point is the 00137 //- peak of the parabola - in this case, the point which is equidistant 00138 //- from the start and end points of the parabola. The 3 points must form 00139 //- an isosceles triangle. This definition limits the user to generation 00140 //- of the tip of parabolic shapes only. 00141 virtual Curve* make_elliptical_Curve( TBPoint const* point1, 00142 TBPoint const* point2, 00143 CubitVector ¢er_point, 00144 double start_angle, 00145 double end_angle, 00146 CubitSense sense) const; 00147 00148 00149 virtual Surface* make_Surface( 00150 Surface *old_surface_ptr, 00151 std::map< TopologyBridge*, TopologyBridge* > *old_tb_to_new_tb = NULL ) const = 0; 00152 //R Surface* 00153 //R- Pointer to a newly created Surface object. 00154 //R- old_to_new_map 00155 //R- an optional parameter that maps all the entities of 00156 //R- the original to those of the copy. 00157 //I Surface* 00158 //I- The surface from which we want to create a new one. 00159 //- This function creates a new surface from an existing one. 00160 //- The new surface is attached to geometry. The 00161 //- goemetry is attached to a full data structure, loop, lump, bodies.. 00162 00163 virtual BodySM* make_extended_sheet( DLIList<Surface*> &surface_list, 00164 CubitBox *clip_box = NULL, 00165 bool preview = false ) const = 0; 00166 //R BodySM* 00167 //R- Pointer to a newly created BodySM object. 00168 //I surface_list 00169 //I- The surface_list from which we want to create an extended sheet. 00170 //I clip_box 00171 //I- An optional bounding box to clip the resultant sheet body by. 00172 //I preview 00173 //I- If true just draw the extended sheet instead of creating it 00174 //- This function creates a sheet body by extending the input surfaces. 00175 //- The result can be optionally clipped to fit inside of the given 00176 //- bounding box. 00177 00178 virtual Surface* make_Surface( GeometryType surface_type, 00179 DLIList<Curve*>& curve_list, 00180 Surface *old_surface_ptr = NULL, 00181 bool check_edges = true ) const = 0; 00182 //R Surface* 00183 //R- Pointer to a newly created Surface object. 00184 //I surface_type 00185 //I- The type of surface to be created. 00186 //I curve_list 00187 //I- list of curves to be used as the bounds of the Surface 00188 //- This function creates a Surface, of type, surface_type, given 00189 //- the list of curves. 00190 //- The particular type of Surface object created depends on the 00191 //- specific modeling engine. For example, if the engine is 00192 //- OCCGeometryEngine, then a SurfaceOCC is created. 00193 00194 //virtual CubitStatus stitch_surfs( 00195 // DLIList<BodySM*> &surf_bodies, 00196 // BodySM *& stitched_Body )const= 0; 00197 //I List of surface_bodys you want stitched together 00198 //IO If stitching of FACEs is successful, stitched_Body is resultant BodySM. 00199 // Means that all surfaces could be stitched together, forming a single BODY, 00200 // but not a single FACE. 00201 //returns CUBIT_SUCCESS if stitching was successful, other return FAILURE 00202 00203 virtual Lump* make_Lump( DLIList<Surface*>& surface_list ) const = 0; 00204 //R Lump* 00205 //R- Pointer to a newly created Lump object. 00206 //I lump_type 00207 //I- The type of surface to be created. 00208 //I surface_list 00209 //I- list of surfaces to be used as the bounds of the Lump 00210 //- This function creates a Lump, of type, lump_type, given 00211 //- the list of surfaces. 00212 //- The particular type of Lump object created depends on the 00213 //- specific modeling engine. For example, if the engine is 00214 //- OCCGeometryEngine, then a LumpOCC is created. 00215 //- 00216 //- NOTE on some hideous programming 00217 //- This function not only creates the Lump, but also 00218 //- creates the VGI entities Shell and CoFaces that 00219 //- will be connected up with the RefVolume. For the sake 00220 //- of expediency we are assuming that this function is 00221 //- called when RefVolume needs to be made from Surfaces. 00222 //- 00223 00224 virtual BodySM* make_BodySM( Surface * ) const = 0; 00225 00226 virtual BodySM* make_BodySM( DLIList<Lump*>& /*lump_list*/ ) const = 0; 00227 //R BodySM* 00228 //R- Pointer to a newly created BodySM object. 00229 //I lump_list 00230 //I- list of lumps to be used to create the BodySM 00231 //- This function creates a BodySM given the list of lumps. 00232 //- The particular type of BodySM object created depends on the 00233 //- specific modeling engine. For example, if the engine is 00234 //- OCCGeometryEngine, then a BodyOCC is created. Non-solid 00235 //- model based engines can use the default implementation 00236 //- to return a NULL pointer. 00237 //- 00238 //- NOTE on some hideous programming 00239 //- This function not only creates the Lump, but also 00240 //- creates the VGI entities CoVolumes that 00241 //- will be connected up with the Body. For the sake 00242 //- of expediency we are assuming that this function is 00243 //- called when Body needs to be made from RefVolumes. 00244 //- 00245 00246 #ifdef KCM_MESH_TO_GEOM 00247 virtual CubitStatus mesh2brep(std::vector<double> &xvals, 00248 std::vector<double> &yvals, 00249 std::vector<double> &zvals, 00250 std::vector<unsigned int> &tri_connectivity, 00251 DLIList<BodySM*> &new_body_sms) const = 0; 00252 //I hex_list 00253 //I- List of hexes input by user 00254 //I tet_list 00255 //I- List of tets input by user 00256 //I face_list 00257 //I- List of quad faces input by user 00258 //I tri_list 00259 //I- List of tris input by user 00260 //R new_body_sms 00261 //R- List of new BodySM pointers. 00262 //- This function creates a real brep models from the mesh 00263 //- entities. Any of the lists can be populated or filled 00264 //- and the function will do what it can. 00265 #endif 00266 00267 //HEADER- Functions for creation of primitives 00268 virtual BodySM* sphere(double radius) const = 0 ; 00269 //R Body* 00270 //R- A pointer to a newly created Body 00271 //I radius 00272 //I- Radius of the sphere 00273 //- Creates a sphere and assigns it to a Body. 00274 //- Returns pointer to the newly created body. 00275 00276 virtual BodySM* brick ( double wid, double dep, double hi ) const = 0 ; 00277 //R Body* 00278 //R- A pointer to a newly created Body 00279 //I wid 00280 //I- Width of the brick 00281 //I dep 00282 //I- Depth of the brick 00283 //I hi 00284 //I- Height of the brick 00285 //- Creates a cuboid and assigns it to a Body. 00286 //- Returns pointer to the newly created body. 00287 00288 virtual BodySM* brick( const CubitVector ¢er, 00289 const CubitVector axes[3], 00290 const CubitVector &extension) const = 0 ; 00291 //R Body* 00292 //R- A pointer to a newly created Body 00293 //I center 00294 //I- Center location of the brick 00295 //I axes 00296 //I- XYZ axes of brick 00297 //I extension 00298 //I- Size of brick, equivalent to 1/2 width, height, depth 00299 //- Creates a cuboid and assigns it to a Body. 00300 //- Returns pointer to the newly created body. 00301 00302 virtual BodySM* prism( double height, int sides, double major, 00303 double minor) const = 0 ; 00304 //- Creates a prism and assigns it to a Body $ 00305 //- {height, major, minor} input height, major and minor radii. $ 00306 //- {sides} input number of sides. Must be >= 3. 00307 //- Returns the ID of the new Body or CUBIT_FAILURE 00308 00309 virtual BodySM* pyramid( double height, int sides, double major, 00310 double minor, double top=0.0) const = 0 ; 00311 //- Creates an pyramid and assigns it to a Body $ 00312 //- {height, major, minor} input height, major and minor radii. $ 00313 //- {sides} input number of sides. Must be >= 3. 00314 //- {top} radius at top of pyramid. 00315 //- Returns the ID of the new Body or CUBIT_FAILURE 00316 00317 virtual BodySM* cylinder( double hi, double r1, double r2, 00318 double r3 ) const = 0 ; 00319 //- Creates an frustum and assigns it to a Body $ 00320 //- {hi} input height $ 00321 //- {r1} input radius in x-direction at base $ 00322 //- {r2} input radius in y-direction at base $ 00323 //- {r3} input radius in x-direction at top 00324 //- Returns the ID of the new Body or CUBIT_FAILURE 00325 00326 virtual BodySM* torus( double r1, double r2 ) const = 0 ; 00327 //- Creates an torus and assigns it to a Body $ 00328 //- {r1} input major_radius $ 00329 //- {r2} input minor_radius 00330 //- Returns the ID of the new Body or CUBIT_FAILURE 00331 00332 virtual BodySM* planar_sheet ( const CubitVector& p1, 00333 const CubitVector& p2, 00334 const CubitVector& p3, 00335 const CubitVector& p4 ) const = 0; 00336 //- Creates a solid body consisting of a planar sheet (no volume) 00337 //- {p1} - 1st corner of the sheet 00338 //- {p2} - 2nd corner of the sheet 00339 //- {p3} - 3rd corner of the sheet 00340 //- {p4} - 4th corner of the sheet 00341 00342 virtual BodySM* copy_body ( BodySM* body_sm, 00343 std::map<TopologyBridge*, TopologyBridge*> *old_tb_to_new_tb = NULL ) const = 0; 00344 //R Body* 00345 //R- A pointer to the newly created body 00346 //R- old_to_new_map 00347 //R- an optional parameter that maps all the entities of 00348 //R- the original to those of the copy. 00349 //I bodyPtr 00350 //I- A pointer to the body to be copied 00351 //- This function makes a copy of the input Body and returns a 00352 //- pointer to the newly created copy. The input Body and the newly 00353 //- created Body are geometrically identical. 00354 00355 virtual BodySM* create_body( VolumeFacets& volume, std::map<FacetShapes*, GeometryEntity*>& entity_map, 00356 const FacetPointSet& points, int interp_order) const = 0; 00357 //- creates a body with a volume from facet data 00358 //- VolumeFacets is populated with return data to associate sets of facets with newly created geometry entities 00359 00360 //HEADER- Functions for boolean operations 00361 00362 virtual CubitStatus subtract(DLIList<BodySM*> &tool_body_list, 00363 DLIList<BodySM*> &from_bodies, 00364 DLIList<BodySM*> &new_bodies, 00365 bool imprint = false, 00366 bool keep_old = false) const = 0; 00367 00368 virtual CubitStatus imprint(BodySM* BodyPtr1, BodySM* BodyPtr2, 00369 BodySM*& newBody1, BodySM*& newBody2, 00370 bool keep_old) const = 0; 00371 00372 virtual CubitStatus imprint(DLIList<BodySM*> &from_body_list, 00373 DLIList<BodySM*> &new_from_body_list, 00374 bool keep_old, 00375 DLIList<TopologyBridge*> *new_tbs = NULL, 00376 DLIList<TopologyBridge*> *att_tbs = NULL) const = 0; 00377 00378 virtual CubitStatus imprint( DLIList<BodySM*> &body_list, 00379 DLIList<Curve*> &ref_edge_list, 00380 DLIList<BodySM*>& new_body_list, 00381 DLIList<TopologyBridge*> &temporary_bridges, 00382 bool keep_old_body, 00383 bool show_messages= true) const = 0; 00384 //- Imprints a list of Bodies with a list of RefEdges. All 00385 //- entities must be entities. Useful for splitting 00386 //- surfaces. If edge pierces a surface a hardpoint will 00387 //- result at the pierce location. 00388 00389 virtual CubitStatus imprint( DLIList<Surface*> &ref_face_list, 00390 DLIList<Curve*> &ref_edge_list, 00391 DLIList<TopologyBridge*> &temporary_bridges, 00392 DLIList<BodySM*>& new_body_list, 00393 bool keep_old_body ) const = 0; 00394 //- Imprints a list of Surfaces with a list of RefEdges. This is 00395 //- useful if the user has a curve which spans several surfaces on 00396 //- a body and only wants to imprint to selected surfaces. Algorithm 00397 //- does not support imprinting to free surfaces. 00398 00399 virtual CubitStatus imprint( DLIList<Surface*> &surface_list, 00400 DLIList<DLIList<Curve*>*> &curve_lists_list, 00401 BodySM*& new_body, 00402 bool keep_old_body, 00403 bool expand = true, 00404 DLIList<TopologyBridge*> *new_tbs = NULL, 00405 DLIList<TopologyBridge*> *att_tbs = NULL ) const = 0; 00406 //- Imprints a list of Surfaces with list of Curves, sorted per 00407 //- Surface (ie., curve_lists_list is same length as surface_list). 00408 //- All input surfaces must be from the same body. 00409 00410 virtual CubitStatus imprint( DLIList<BodySM*> &body_list, 00411 DLIList<CubitVector> &vector_list, 00412 DLIList<BodySM*>& new_body_list, 00413 bool keep_old_body, 00414 DLIList<TopologyBridge*> *new_tbs = NULL, 00415 DLIList<TopologyBridge*> *att_tbs = NULL, 00416 double *tol_in = NULL, 00417 bool clean_up_slivers = true) const = 0; 00418 //- Imprints a list of bodies with a list of vectors. Useful for 00419 //- splitting curves and creating hardpoints on surfaces. 00420 00421 virtual CubitStatus tolerant_imprint(DLIList<Surface*> &surfs_in, 00422 DLIList<BodySM*> &new_bodysm_list) const = 0; 00423 virtual CubitStatus tolerant_imprint_surface_with_curves( 00424 Surface *surface_to_imprint, 00425 DLIList<Curve*> &curves, 00426 DLIList<TopologyBridge*> &temporary_bridges, 00427 BodySM *&new_body, 00428 DLIList<TopologyBridge*> *new_tbs = NULL, 00429 DLIList<TopologyBridge*> *att_tbs = NULL ) const = 0; 00430 00431 virtual CubitStatus tolerant_imprint( DLIList<BodySM*> &bodies_in, 00432 DLIList<BodySM*> &new_bodies, 00433 double overlap_tol, 00434 double imprint_tol, 00435 DLIList<TopologyBridge*> *new_tbs = NULL, 00436 DLIList<TopologyBridge*> *att_tbs = NULL ) const = 0; 00437 00438 virtual CubitStatus imprint_projected_edges( 00439 DLIList<Surface*> &ref_face_list, 00440 DLIList<Curve*> &ref_edge_list, 00441 DLIList<BodySM*>& new_body_list, 00442 DLIList<Curve*>& kept_free_edges, 00443 bool keep_old_body, 00444 bool keep_free_edges) const = 0; 00445 //- Imprints a list of Surfaces with a list of projected RefEdges. 00446 00447 virtual CubitStatus imprint_projected_edges( 00448 DLIList<Surface*> &ref_face_list, 00449 DLIList<BodySM*> &body_list, 00450 DLIList<Curve*> &ref_edge_list, 00451 DLIList<BodySM*>& new_body_list, 00452 bool keep_old_body, 00453 bool keep_free_edges) const = 0; 00454 //- Imprints a list of Bodies with a list of RefEdges which are projected 00455 //- to a list of Surfaces 00456 virtual CubitStatus remove_topology(DLIList<Curve*> &curves_to_remove, 00457 DLIList<Surface*> &surfs_to_remove, 00458 double backoff_distance, 00459 double small_edge_size, 00460 DLIList<BodySM*> &new_bodysm_list, 00461 CubitBoolean preview) const = 0; 00462 00463 virtual CubitStatus project_edges( 00464 DLIList<Surface*> &ref_face_list, 00465 DLIList<Curve*> &ref_edge_list_in, 00466 DLIList<Curve*> &ref_edge_list_new, 00467 bool print_error = true ) const = 0; 00468 //- Projects list RefEdges to a list of Surfaces 00469 00470 virtual CubitStatus curve_surface_intersection( Surface *surface, 00471 Curve* curve, 00472 DLIList<Curve*> &new_curves ) const = 0; 00473 00474 virtual CubitStatus intersect(BodySM* tool_body_ptr, 00475 DLIList<BodySM*> &from_bodies, 00476 DLIList<BodySM*> &new_bodies, 00477 bool keep_old = false, 00478 bool preview = false ) const = 0; 00479 //R CubitStatus 00480 //R- CUBIT_SUCCESS/CUBIT_FAILURE 00481 //I BodyPtr1, BodyPtr2 00482 //I- Two Body pointers that will be Booleaned 00483 //O newBody (or newBody1, newBody2 for imprint) 00484 //O- The new Body build by boolean operation on two Bodys. 00485 //O- for imprint, the output is two Bodies. 00486 //- These functions perform boolean operations on two Bodys and 00487 //- return the result through the output arguments. If the 00488 //- boolean operations fails at any stage, a NULL value is assigned 00489 //- to the output argument(s) and the function returns 00490 //- CUBIT_FAILURE. If everything goes well, the function returns 00491 //- CUBIT_SUCCESS. The original Bodys are left untouched during the 00492 //- boolean operation. The boolean operation is carried out on 00493 //- copies of the original Bodys. 00494 00495 virtual CubitStatus chop( DLIList<BodySM*> &bodies, 00496 DLIList<BodySM*> &intersectBodies, 00497 DLIList<BodySM*> &outsideBodies, 00498 BodySM*& leftoversBody, 00499 bool keep_old = false, 00500 bool nonreg = false) const = 0; 00501 //R CubitStatus 00502 //R-the result of the chop operation: Success or Failure 00503 //I bodies 00504 //I-DLIList<Body*>: a list of Body pointers that will be united 00505 //O intersectBody, outsideBody, leftoversBody 00506 //O- new Bodies build by chop operation on the list of Body pointers. 00507 //- This function performs a chop of a tool body on a blank body and returns 00508 //- the result through the output argument intersectBody, outsideBody, leftoversBody. If the chop 00509 //- operation went through OK, the function returns CUBIT_SUCCESS. If, 00510 //- for some reason, the chop operation did not go well, the output 00511 //- argument is assigned a NULL value and the function returns 00512 //- CUBIT_FAILURE. In either case, the original Bodys are left 00513 //- untouched. 00514 00515 00516 virtual CubitStatus thicken( DLIList<BodySM*>& bodies, 00517 DLIList<BodySM*>& new_body_list, 00518 double depth, 00519 bool both = false) const = 0; 00520 //R CubitStatus 00521 //R-the result of the thicken operation: Success or Failure 00522 //I bodies 00523 //I-DLIList<Body*>: a list of Body pointers that will be thicken 00524 //O intersectBody, outsideBody, leftoversBody 00525 //O- new Bodies build by thicken operation on the list of Body pointers. 00526 //- This function performs a thicken of sheet bodies and returns 00527 //- the result through the output argument in_out_body. If the thicken 00528 //- operation went through OK, the function returns CUBIT_SUCCESS. If, 00529 //- for some reason, the thicken operation did not go well, the output 00530 //- argument is assigned a NULL value and the function returns 00531 //- CUBIT_FAILURE. 00532 00533 virtual CubitStatus flip_normals( DLIList<Surface*>& face_list ) const = 0; 00534 //R CubitStatus 00535 //R-the result of the flip_normal operation: Success or Failure 00536 //I bodies 00537 //I-DLIList<Surface*>: a list of Face pointers that will be fliped 00538 //O- If the flip operation went through OK, the function returns CUBIT_SUCCESS. If, 00539 //- for some reason, the flip operation did not go well, the output 00540 //- returns CUBIT_FAILURE. 00541 00542 virtual CubitStatus hollow(DLIList<BodySM*>& bodies, 00543 DLIList<Surface*>& surfs_to_remove, 00544 DLIList<BodySM*>& new_bodies, 00545 double depth) const = 0; 00546 //R CubitStatus 00547 //R-the result of the hollow operation: Success or Failure 00548 //I body 00549 //I- for OCC: a list of solid BodySM's that will be hollowed into a list of 00550 //I- thick solids. 00551 //I- surfs_to_remove: the faces to be removed from the original solid (OCC). 00552 //O- new Bodies build by hollow operation on the body pointers. 00553 //- This function performs a hollow of solid body and returns 00554 //- the result through the output argument in_out_body. If the hollow 00555 //- operation went through OK, the function returns CUBIT_SUCCESS. If, 00556 //- for some reason, the hollow operation did not go well, the output 00557 //- argument is assigned a NULL value and the function returns 00558 //- CUBIT_FAILURE. 00559 00560 virtual void get_possible_invalid_tbs(DLIList<TopologyBridge*> &bridges_in, 00561 DLIList<TopologyBridge*> &bridges_out) = 0; 00562 virtual CubitStatus unite( DLIList<BodySM*> &bodies, 00563 DLIList<BodySM*> &newBodies, 00564 bool keep_old = false) const = 0; 00565 //R CubitStatus 00566 //R- CUBIT_SUCCESS/CUBIT_FAILURE 00567 //I bodies 00568 //I- A list of Bodys that will be united 00569 //O newBody 00570 //O- The new Body built by the unite operation on the list of Bodys. 00571 //- This function performs a unite of a list of Bodys and returns 00572 //- the result through the output argument, "newBody". If the unite 00573 //- operation went through OK, the function returns CUBIT_SUCCESS. If, 00574 //- for some reason, the unite operation did not go well, the output 00575 //- argument is assigned a NULL value and the function returns 00576 //- CUBIT_FAILURE. In either case, the original Bodys are left 00577 //- untouched. 00578 00579 //HEADER- Sweep-related functions. All of these are implemented only for 00580 //HEADER- RefEntities whose underlying geometry is represented by a solid 00581 //HEADER- model such as occ. 00582 00583 virtual CubitStatus sweep_translational( 00584 DLIList<GeometryEntity*>& ref_ent_list, 00585 DLIList<BodySM*>& result_body_list, 00586 const CubitVector& sweep_vector, 00587 double draft_angle, 00588 int draft_type, 00589 bool switchside, 00590 bool rigid, 00591 bool anchor_entity=CUBIT_FALSE, 00592 bool keep_old=CUBIT_FALSE ) const = 0; 00593 00594 virtual CubitStatus sweep_helical( 00595 DLIList<GeometryEntity*>& ref_ent_list, 00596 DLIList<BodySM*>& result_body_list, 00597 CubitVector &location, 00598 CubitVector &direction, 00599 double &thread_distance, 00600 double &angle, 00601 bool right_handed, 00602 bool anchor_entity=CUBIT_FALSE, 00603 bool keep_old=CUBIT_FALSE ) const; 00604 00605 virtual CubitStatus sweep_perpendicular( 00606 DLIList<GeometryEntity*>& ref_ent_list, 00607 DLIList<BodySM*>& result_body_list, 00608 double distance, 00609 double draft_angle, 00610 int draft_type, 00611 bool switchside, 00612 bool rigid, 00613 bool anchor_entity=CUBIT_FALSE, 00614 bool keep_old=CUBIT_FALSE ) const = 0; 00615 00616 virtual CubitStatus sweep_rotational( 00617 DLIList<GeometryEntity*>& ref_ent_list, 00618 DLIList<BodySM*>& result_body_list, 00619 const CubitVector& point, 00620 const CubitVector& direction, 00621 double angle, 00622 int steps = 0, 00623 double draft_angle = 0.0, 00624 int draft_type = 0, 00625 bool switchside = false, 00626 bool make_solid = false, 00627 bool rigid = false, 00628 bool anchor_entity=CUBIT_FALSE, 00629 bool keep_old=CUBIT_FALSE ) const = 0; 00630 00631 virtual CubitStatus sweep_along_curve( 00632 DLIList<GeometryEntity*>& ref_ent_list, 00633 DLIList<BodySM*>& result_body_list, 00634 DLIList<Curve*>& ref_edge_list, 00635 double draft_angle = 0.0, 00636 int draft_type = 0, 00637 bool rigid = false, 00638 bool anchor_entity=CUBIT_FALSE, 00639 bool keep_old=CUBIT_FALSE ) const= 0; 00640 00641 virtual CubitStatus sweep_to_body( 00642 DLIList<Curve*> curve_list, 00643 BodySM *target_body, 00644 CubitVector distance, 00645 DLIList<BodySM*> &new_bodies, 00646 bool unite) const = 0; 00647 virtual CubitStatus sweep_to_body( 00648 Surface *source_surface, 00649 BodySM *target_body, 00650 CubitVector distance, 00651 DLIList<BodySM*> &new_bodies ) const = 0; 00652 00653 00654 virtual CubitStatus scale( BodySM *&body, const CubitVector& factors ) = 0; 00655 00656 //HEADER- Webcut-related functions 00657 virtual CubitStatus webcut( DLIList<BodySM*>& webcut_body_list, 00658 const CubitVector &v1, 00659 const CubitVector &v2, 00660 const CubitVector &v3, 00661 DLIList<BodySM*>& neighbor_imprint_list, 00662 DLIList<BodySM*>& results_list, 00663 ImprintType imprint_type = NO_IMPRINT, 00664 bool preview = false) const = 0; 00665 //R int 00666 //R- Number of bodies that were webcut ( >= 0 ) 00667 //I webcut_body_list 00668 //I- The list of bodies to be webcut 00669 //I plane 00670 //I- The plane to be used for webcutting. 00671 //I merge 00672 //I- A flag to decide whether the new bodies created by the 00673 //I- webcutting process should be merged or not. 00674 //I imprint 00675 //I- A flag to decide whether the new bodies created by the 00676 //I- webcutting process should be imprinted or not. 00677 //- This function webcuts a list of bodies through a plane. 00678 //- The newly created bodies are merged and imprinted depeding on 00679 //- the respective flags. 00680 00681 virtual CubitStatus webcut(DLIList<BodySM*>& webcut_body_list, 00682 BodySM const* tool_body, 00683 DLIList<BodySM*>& neighbor_imprint_list, 00684 DLIList<BodySM*>& results_list, 00685 ImprintType imprint_type = NO_IMPRINT, 00686 bool preview = false) const = 0 ; 00687 //R int 00688 //R- Number of bodies that were webcut ( >= 0 ) 00689 //I webcut_body_list 00690 //I- The list of bodies to be webcut 00691 //I tool_body 00692 //I- The body to be used for webcutting. 00693 //I merge 00694 //I- A flag to decide whether the new bodies created by the 00695 //I- webcutting process should be merged or not. 00696 //I imprint 00697 //I- A flag to decide whether the new bodies created by the 00698 //I- webcutting process should be imprinted or not. 00699 //- This function webcuts a list of bodies using another body 00700 //- as the webcutting tool. The newly created bodies are 00701 //- merged and imprinted depeding on the respective flags. 00702 00703 virtual CubitStatus webcut_across_translate( 00704 DLIList<BodySM*>& body_list, 00705 Surface* plane_surf1, 00706 Surface* plane_surf2, 00707 DLIList<BodySM*>& neighbor_imprint_list, 00708 DLIList<BodySM*>& results_list, 00709 ImprintType imprint_type = NO_IMPRINT, 00710 bool preview = false) const = 0; 00711 00712 00713 //- R status 00714 //- R-results_list of bodies affected, or created from webcut. 00715 //- I- Bodies to be webcut, plane to define cuts, and imprint merge flags. 00716 //- This is an experimental function, hooked to the Cat GUI for making 00717 //- bodies one to one sweeps. 00718 00719 virtual CubitStatus webcut_with_sheet(DLIList<BodySM*>& webcut_body_list, 00720 BodySM *sheet_body, 00721 DLIList<BodySM*>& neighbor_imprint_list, 00722 DLIList<BodySM*> &new_bodies, 00723 ImprintType imprint_type = NO_IMPRINT, 00724 bool preview = false) = 0; 00725 //- webcuts a body using a sheet body. 00726 //- It splits the sheet into two single sided bodies. 00727 //- it then subtracts this with the webcut body. 00728 //- The result is splitting the webcut_body into halves. 00729 //- if the webcut body is a topological torus, this routine 00730 //- will fail... 00731 00732 virtual CubitStatus webcut_with_extended_sheet( 00733 DLIList<BodySM*> &webcut_body_list, 00734 DLIList<Surface*> &surface_list, 00735 DLIList<BodySM*>& neighbor_imprint_list, 00736 DLIList<BodySM*> &new_bodies, 00737 int &num_cut, 00738 ImprintType imprint_type = NO_IMPRINT, 00739 bool preview = false) = 0; 00740 //- creates a sheet by extending the given surfaces then webcuts using 00741 //- this sheet.(see webcut_with_sheet). 00742 00743 virtual CubitStatus webcut_with_sweep_surfaces( 00744 DLIList<BodySM*> &blank_bodies, 00745 DLIList<Surface*> &surfaces, 00746 const CubitVector& sweep_vector, 00747 bool sweep_perp, 00748 bool through_all, 00749 bool outward, 00750 bool up_to_next, 00751 Surface *stop_surf, 00752 Curve *curve_to_sweep_along, 00753 DLIList<BodySM*>& neighbor_imprint_list, 00754 DLIList<BodySM*> &results_list, 00755 ImprintType imprint_type = NO_IMPRINT, 00756 CubitBoolean preview = false) = 0; 00757 00758 virtual CubitStatus webcut_with_sweep_curves( 00759 DLIList<BodySM*> &blank_bodies, 00760 DLIList<Curve*> &curves, 00761 const CubitVector& sweep_vector, 00762 bool through_all, 00763 Surface *stop_surf, 00764 Curve *curve_to_sweep_along, 00765 DLIList<BodySM*>& neighbor_imprint_list, 00766 DLIList<BodySM*> &results_list, 00767 ImprintType imprint_type = NO_IMPRINT, 00768 CubitBoolean preview = false) = 0; 00769 00770 virtual CubitStatus webcut_with_sweep_curves_rotated( 00771 DLIList<BodySM*> &blank_bodies, 00772 DLIList<Curve*> &curves, 00773 const CubitVector &point, 00774 const CubitVector &sweep_axis, 00775 double angle, 00776 Surface *stop_surf, 00777 DLIList<BodySM*>& neighbor_imprint_list, 00778 DLIList<BodySM*> &results_list, 00779 ImprintType imprint_type = NO_IMPRINT, 00780 CubitBoolean preview = false) = 0; 00781 00782 virtual CubitStatus webcut_with_sweep_surfaces_rotated( 00783 DLIList<BodySM*> &blank_bodies, 00784 DLIList<Surface*> &surfaces, 00785 const CubitVector &point, 00786 const CubitVector &sweep_axis, 00787 double angle, 00788 Surface *stop_surf, 00789 bool up_to_next, 00790 DLIList<BodySM*>& neighbor_imprint_list, 00791 DLIList<BodySM*> &results_list, 00792 ImprintType imprint_type = NO_IMPRINT, 00793 CubitBoolean preview = false) = 0; 00794 00795 virtual CubitStatus webcut_with_cylinder( 00796 DLIList<BodySM*> &webcut_body_list, double radius, 00797 const CubitVector &axis, 00798 const CubitVector ¢er, 00799 DLIList<BodySM*>& neighbor_imprint_list, 00800 DLIList<BodySM*>& results_list, 00801 ImprintType imprint_type = NO_IMPRINT, 00802 CubitBoolean preview = false) = 0; 00803 //- webcuts a body using a cylinder give the input parameters. 00804 00805 virtual CubitStatus webcut_with_brick( 00806 DLIList<BodySM*>& webcut_body_list, 00807 const CubitVector ¢er, 00808 const CubitVector axes[3], 00809 const CubitVector &extension, 00810 DLIList<BodySM*>& neighbor_imprint_list, 00811 DLIList<BodySM*> &results_list, 00812 ImprintType imprint_type = NO_IMPRINT, 00813 CubitBoolean preview = false) = 0; 00823 virtual CubitStatus webcut_with_planar_sheet( 00824 DLIList<BodySM*>& webcut_body_list, 00825 const CubitVector ¢er, 00826 const CubitVector axes[2], 00827 double width, double height, 00828 DLIList<BodySM*>& neighbor_imprint_list, 00829 DLIList<BodySM*> &results_list, 00830 ImprintType imprint_type = NO_IMPRINT, 00831 bool preview = false) = 0; 00838 virtual CubitStatus webcut_with_curve_loop( 00839 DLIList<BodySM*> &webcut_body_list, 00840 DLIList<Curve*> &ref_edge_list, 00841 DLIList<BodySM*>& neighbor_imprint_list, 00842 DLIList<BodySM*>& results_list, 00843 ImprintType imprint_type = NO_IMPRINT, 00844 bool preview = false) = 0; 00845 //- webcuts a body list using a temp sheet body created from the curve loop 00846 00847 00848 virtual CubitStatus section( DLIList<BodySM*> §ion_body_list, 00849 const CubitVector &point_1, 00850 const CubitVector &point_2, 00851 const CubitVector &point_3, 00852 DLIList<BodySM*>& new_body_list, 00853 bool keep_normal_side, 00854 bool keep_old = false, 00855 bool keep_both_sides = false) = 0; 00856 //- Section will cut a list a bodies and keep a side of the bodies. 00857 //- The bodies are cut with a planar surface (surface will be extended). 00858 00859 virtual CubitStatus split_body( BodySM *body_ptr, 00860 DLIList<BodySM*> &new_bodies ) = 0; 00861 //- Splits a body with multiple volumes into multiple bodies 00862 //- each having only one volume. 00863 00864 virtual CubitStatus split_free_curve( Curve *curve, 00865 DLIList<CubitVector> &split_locations, 00866 DLIList<Curve*> &new_curves ); 00867 00868 virtual CubitStatus separate_surfaces( DLIList<Surface*> &surf_list, 00869 DLIList<BodySM*> &new_bodies ) = 0; 00870 //- Separates surfaces from sheet bodies into separate bodies. Connected 00871 //- surfaces will remain connected but be placed in a new body. 00872 00873 virtual CubitStatus reverse_body( BodySM *body_to_reverse ) = 0; 00874 //- Reverse body (turn it inside-out). 00875 00876 virtual CubitStatus split_periodic( BodySM *body_ptr, 00877 BodySM *&new_body ) = 0; 00878 //- Splits the periodic surfaces along the 0 and PI/2's periods. 00879 00880 virtual CubitStatus regularize_body( BodySM *body_ptr, 00881 BodySM *&new_body_ptr ) = 0; 00882 //- Removes all unnecessary faces, edges and vertices from the body. 00883 00884 virtual CubitStatus regularize_entity( GeometryEntity *old_entity_ptr, 00885 BodySM *&new_body_ptr) = 0; 00886 //- Removes all all unnessesary faces, curves, vertices and associated 00887 //- data from a refentity. 00888 virtual CubitStatus test_regularize_entity( GeometryEntity *old_entity_ptr) = 0; 00889 00890 virtual CubitStatus offset_curves( DLIList<Curve*>& ref_edge_list, 00891 DLIList<Curve*>& result_curve_list, 00892 double offset_distance, 00893 const CubitVector& offset_direction, 00894 int gap_type = 1 ) = 0; 00895 //- Creates curves offset from a chain of curves. The offset direction is 00896 //- only used if there is one linear curve. Otherwise, the offset direction 00897 //- is calculated by occ (the cross product of the wires tangent and the 00898 //- planar normal). The gap type is 0 - rounded, 1 - extended, 2 - natural. 00899 00900 virtual CubitStatus split_curve( Curve* curve_to_split, 00901 const CubitVector& split_location, 00902 DLIList<Curve*>& created_curves ) = 0; 00903 //- Splits a curve at the specified location. 00904 //- the single passed in curve is split into two curves at the split location 00905 //- the two resulting curves are added to the passed in list 00906 00907 00908 virtual Curve* trim_curve( Curve* trim_curve, 00909 const CubitVector& trim_vector, 00910 const CubitVector& keep_vector, 00911 bool keep_old = false ) = 0; 00912 //- Trims or extends a curve, up to the trim_vector. If trimming, the 00913 //- keep_vector determines which side of the curve to keep. If the curve 00914 //- is not free, the curve is automatically copied before trimming (so 00915 //- a new curve results). 00916 00917 virtual CubitStatus create_solid_bodies_from_surfs( 00918 DLIList<Surface*> &ref_face_list, 00919 DLIList<BodySM*> &new_bodies, 00920 bool keep_old = false, 00921 bool heal = true, 00922 bool sheet = false ) const = 0; 00923 //- Creates a single body from a set of faces. The faces can only be attached 00924 //- to bodies if they are sheet bodies. It is assumed that the calling code will 00925 //- check for this, ie GeometryTool. 00926 00927 virtual Curve* create_arc(const CubitVector& position, 00928 double radius, 00929 double start_angle, 00930 double end_angle, 00931 CubitVector plane, 00932 CubitBoolean preview = CUBIT_FALSE )=0; 00933 00934 virtual Curve* create_arc_radius(const CubitVector ¢er, 00935 TBPoint* ref_vertex_start, 00936 TBPoint* ref_vertex_end, 00937 const CubitVector &normal, 00938 double radius, 00939 bool full = false, 00940 CubitBoolean preview = CUBIT_FALSE )=0; 00941 00942 virtual Curve* create_arc_three( TBPoint* pt1, 00943 TBPoint* pt2, 00944 TBPoint* pt3, 00945 bool full = false, 00946 CubitBoolean preview = CUBIT_FALSE ) = 0; 00947 virtual Curve* create_arc_three( Curve* curve1, 00948 Curve* curve2, 00949 Curve* curve3, 00950 bool full = false, 00951 CubitBoolean preview = CUBIT_FALSE ) = 0; 00952 00953 virtual Curve* create_arc_center_edge( TBPoint* point1, 00954 TBPoint* point2, 00955 TBPoint* point3, 00956 const CubitVector &normal, 00957 double radius = CUBIT_DBL_MAX, 00958 bool full = false, 00959 CubitBoolean preview = CUBIT_FALSE ) = 0; 00960 00961 //- Methods to create arcs. First uses 3 points on arc, next creates arc 00962 //- tangent to 3 curves, last creates arc using center and two points on arc. 00963 //- If full option is specified, a full circle is created. 00964 00965 virtual CubitStatus create_curve_combine( DLIList<Curve*>& curve_list, 00966 Curve *&new_curve_ptr ) = 0; 00967 //- Uses the solid modeller to create a new RefEdge that is a combination 00968 //- of the input chain of edges. 00969 //- 00970 00971 virtual Curve* create_curve_helix( CubitVector &location, 00972 CubitVector &direction, 00973 CubitVector &start_point, 00974 double &thread_distance, 00975 double &angle, 00976 bool right_handed) const; 00977 00978 00979 virtual GeometryQueryEngine *get_gqe() = 0; 00983 virtual CubitBoolean is_modify_engine(const TopologyBridge *) const 00984 {return CUBIT_FALSE;}; 00988 virtual CubitStatus get_offset_intersections( 00989 Curve* ref_edge1, 00990 Curve* ref_edge2, 00991 DLIList<CubitVector>& intersection_list, 00992 double offset = 0.0, 00993 bool ext_first = true ) = 0; 00994 //- Finds the intersections of a certain distance (offset) between two 00995 //- curves. The two curves must lie in a plane. The first curve is offset 00996 //- the offset distance in both directions, and the bounded intersections with 00997 //- the second curve are found. The first curve and optionally be extended 00998 //- to infinity for the intersection calculation. The intent of the function 00999 //- is so that the user can create a point on a curve a certain distance 01000 //- from another curve, as in specifying a reference location for a gage 01001 //- diameter on an arc in an engineering drawing. 01002 01003 virtual CubitStatus get_offset_intersections( 01004 Curve* ref_edge_ptr, 01005 Surface* ref_face_ptr, 01006 DLIList<CubitVector> &intersection_list, 01007 double offset = 0.0, 01008 bool ext_surf = true ) = 0; 01009 //- Finds intersections (points) of the curve and surface. The surface can 01010 //- be offset - it is offset to each side and intersections are found. By 01011 //- default the surface is extended to infinity (if possible) and the 01012 //- intersections are found. The function allocates the CubitVectors in 01013 //- the returned list, so be sure to free them. 01014 01015 virtual CubitStatus surface_intersection( Surface *surface1_ptr, 01016 Surface *surface2_ptr, 01017 DLIList<Curve*> &inter_graph, 01018 const double tol) const = 0; 01019 //- Finds the intersection of two bodies defined by the curves of the 01020 //- intersection graph. 01021 01022 virtual CubitStatus get_mid_plane( const CubitVector &point_1, 01023 const CubitVector &point_2, 01024 const CubitVector &point_3, 01025 BodySM *body_to_trim_to, 01026 BodySM *&midplane_body ) const = 0; 01027 //- Finds the mid plane described by the 3 points and trims 01028 //- it to the body. It returns the mid planes as part of the 01029 //- midplane_body 01030 01031 virtual CubitStatus get_spheric_mid_surface( Surface *surface_ptr1, 01032 Surface *surface_ptr2, 01033 BodySM *body_to_trim_to, 01034 BodySM *&midsurface_body ) const = 0; 01035 01036 virtual CubitStatus get_conic_mid_surface( Surface *surface_ptr1, 01037 Surface *surface_ptr2, 01038 BodySM *body_to_trim_to, 01039 BodySM *&midsurface_body ) const = 0; 01040 01041 virtual CubitStatus get_toric_mid_surface( Surface *surface_ptr1, 01042 Surface *surface_ptr2, 01043 BodySM *body_to_trim_to, 01044 BodySM *&midsurface_body ) const = 0; 01045 01046 virtual CubitStatus tweak_bend( DLIList<BodySM*> &bend_bodies, 01047 DLIList<BodySM*> &new_bodysm_list, 01048 CubitVector& neutral_root, 01049 CubitVector& bend_axis, 01050 CubitVector& bend_direction, 01051 double radius, 01052 double angle, 01053 DLIList<CubitVector>& bend_regions, 01054 double width = -1, 01055 CubitBoolean center_bend = CUBIT_FALSE, 01056 int num_points = 0, 01057 CubitBoolean keep_old_body = CUBIT_FALSE, 01058 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01059 01060 virtual CubitStatus tweak_chamfer( DLIList<Curve*> &curve_list, 01061 double left_offset, 01062 DLIList<BodySM*> &new_bodysm_list, 01063 double right_offset = -1.0, 01064 CubitBoolean keep_old_body = CUBIT_FALSE, 01065 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01072 virtual CubitStatus tweak_chamfer( DLIList<TBPoint*> &point_list, 01073 double offset1, 01074 DLIList<BodySM*> &new_bodysm_list, 01075 Curve *edge1 = NULL, 01076 double offset2 = -1.0, 01077 Curve *edge2 = NULL, 01078 double offset3 = -1.0, 01079 Curve *edge3 = NULL, 01080 CubitBoolean keep_old_body = CUBIT_FALSE, 01081 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01089 virtual CubitStatus tweak_fillet( DLIList<Curve*> &curve_list, 01090 double radius, 01091 DLIList<BodySM*> &new_bodysm_list, 01092 CubitBoolean keep_old_body = CUBIT_FALSE, 01093 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01097 virtual CubitStatus tweak_fillet( Curve *curve_ptr, 01098 double start_radius, 01099 double end_radius, 01100 BodySM *&new_bodysm_ptr, 01101 CubitBoolean keep_old_body = CUBIT_FALSE, 01102 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01107 virtual CubitStatus tweak_fillet( DLIList<TBPoint*> &point_list, 01108 double radius, 01109 DLIList<BodySM*> &new_bodysm_list, 01110 CubitBoolean keep_old_body = CUBIT_FALSE, 01111 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01115 virtual CubitStatus tweak_move( DLIList<Surface*> &surface_list, 01116 const CubitVector &delta, 01117 DLIList<BodySM*> &new_bodysm_list, 01118 CubitBoolean keep_old_body = CUBIT_FALSE, 01119 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01123 virtual CubitStatus tweak_move( DLIList<Curve*> &curve_list, 01124 const CubitVector &delta, 01125 DLIList<BodySM*> &new_bodysm_list, 01126 CubitBoolean keep_old_body = CUBIT_FALSE, 01127 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01131 virtual CubitStatus tweak_offset( DLIList<Surface*> &surface_list, 01132 double offset_distance, 01133 DLIList<Surface*> *add_surface_list_ptr, 01134 DLIList<double> *add_offset_list_ptr, 01135 DLIList<BodySM*> &new_bodysm_list, 01136 CubitBoolean keep_old_body = CUBIT_FALSE, 01137 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01142 virtual CubitStatus tweak_offset( DLIList<Curve*> &curve_list, 01143 double offset_distance, 01144 DLIList<Curve*> *add_curve_list_ptr, 01145 DLIList<double> *add_offset_list_ptr, 01146 DLIList<BodySM*> &new_bodysm_list, 01147 CubitBoolean keep_old_body = CUBIT_FALSE, 01148 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01153 virtual CubitStatus tweak_remove( DLIList<Surface*> &surface_list, 01154 DLIList<BodySM*> &new_bodysm_list, 01155 CubitBoolean extend_adjoining = CUBIT_TRUE, 01156 CubitBoolean keep_old_body = CUBIT_FALSE, 01157 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01162 virtual CubitStatus tweak_remove( DLIList<Curve*> &curve_list, 01163 DLIList<BodySM*> &new_bodysm_list, 01164 CubitBoolean keep_old_body = CUBIT_FALSE, 01165 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01171 virtual CubitStatus tweak_target( DLIList<Surface*> &surface_list, 01172 DLIList<Surface*> &target_surf_list, 01173 DLIList<BodySM*> &new_bodysm_list, 01174 CubitBoolean extend_flg = CUBIT_TRUE, 01175 CubitPlane *limit_plane = NULL, 01176 CubitBoolean reverse_flg = CUBIT_FALSE, 01177 CubitBoolean keep_old_body = CUBIT_FALSE, 01178 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01190 virtual CubitStatus tweak_target( DLIList<Curve*> &curve_list, 01191 DLIList<Surface*> &target_surf_list, 01192 DLIList<BodySM*> &new_bodysm_list, 01193 CubitBoolean extend_flg = CUBIT_TRUE, 01194 CubitPlane *limit_plane = NULL, 01195 CubitBoolean reverse_flg = CUBIT_FALSE, 01196 CubitBoolean keep_old_body = CUBIT_FALSE, 01197 CubitBoolean preview = CUBIT_FALSE, 01198 double max_area_increase = 0 ) const = 0; 01213 virtual CubitStatus tweak_target( DLIList<Curve*> &curve_list, 01214 DLIList<Curve*> &target_curve_list, 01215 DLIList<BodySM*> &new_bodysm_list, 01216 CubitBoolean extend_flg = CUBIT_TRUE, 01217 CubitPlane *limit_plane = NULL, 01218 CubitBoolean reverse_flg = CUBIT_FALSE, 01219 CubitBoolean keep_old_body = CUBIT_FALSE, 01220 CubitBoolean preview = CUBIT_FALSE, 01221 double max_area_increase = 0) const = 0; 01235 virtual CubitStatus tweak_target( TBPoint *point_ptr, 01236 DLIList<Surface*> &modify_surface_list, 01237 CubitVector &target_loc, 01238 BodySM *&new_bodysm_ptr, 01239 CubitBoolean keep_old_body = CUBIT_FALSE, 01240 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01249 virtual CubitStatus remove_curve_slivers( BodySM *bodies, double lengthlimit ) const = 0; 01250 01251 virtual CubitStatus create_net_surface( DLIList<Surface*>& ref_face_list, BodySM *& new_body, 01252 DLIList<DLIList<CubitVector*>*> &vec_lists_u, 01253 DLIList<DLIList<CubitVector*>*> &vec_lists_v, 01254 double net_tol = 1e-3, CubitBoolean heal = CUBIT_TRUE ) const = 0; 01255 01256 virtual CubitStatus create_net_surface( DLIList<Curve*>& u_curves, DLIList<Curve*>& v_curves, 01257 BodySM *& new_body, double net_tol = 1e-3, 01258 CubitBoolean heal = CUBIT_TRUE ) const = 0; 01259 01260 virtual CubitStatus create_offset_surface( Surface* ref_face_ptr, BodySM*& new_body, double offset_distance ) const = 0; 01261 01262 virtual CubitStatus create_offset_sheet( DLIList<Surface*> &surface_list, 01263 double offset_distance, 01264 DLIList<Surface*> *add_surface_list_ptr, 01265 DLIList<double> *add_offset_list_ptr, 01266 DLIList<BodySM*> &new_body_list, 01267 CubitBoolean preview = CUBIT_FALSE ) const = 0; 01276 virtual CubitStatus create_offset_body( BodySM* body_ptr, BodySM*& new_body, double offset_distance ) const = 0; 01277 01278 virtual CubitStatus create_skin_surface( DLIList<Curve*>& curves, BodySM*& new_body, 01279 DLIList<Curve*>& guides) const = 0; 01280 01281 01282 01283 01284 virtual CubitStatus loft_surfaces_to_body( DLIList<Surface*> &surfaces, 01285 DLIList<double> &takeoff_factor_list, 01286 DLIList<Surface*> &takeoff_vector_surface_list, 01287 DLIList<CubitVector> &surface_takeoff_vector_list, 01288 DLIList<Curve*> &takeoff_vector_curve_list, 01289 DLIList<CubitVector> &curve_takeoff_vector_list, 01290 DLIList<Curve*> &guides, 01291 DLIList<TBPoint*> &match_vertices_list, 01292 BodySM*& new_body, 01293 CubitBoolean global_guides, 01294 CubitBoolean closed, 01295 CubitBoolean show_matching_curves, 01296 CubitBoolean preview 01297 ) const = 0; 01298 01299 01300 01301 virtual CubitStatus create_surface( DLIList<CubitVector*>& vec_list, 01302 BodySM *&new_body, Surface *ref_face_ptr, 01303 CubitBoolean project_points ) const = 0; 01304 01305 virtual CubitStatus create_parallelogram_surface( TBPoint *pt1, 01306 TBPoint *pt2, 01307 TBPoint *pt3, 01308 BodySM *&sheet_body) const; 01309 01310 virtual CubitStatus create_rectangle_surface( double width, 01311 double height, 01312 CubitVector plane, 01313 BodySM *&sheet_body) const; 01314 01315 virtual CubitStatus create_circle_surface( TBPoint *pt1, 01316 CubitVector center_point, 01317 TBPoint *pt3, 01318 BodySM *&sheet_body) const; 01319 01320 virtual CubitStatus create_circle_surface( TBPoint *pt1, 01321 TBPoint *pt3, 01322 CubitVector center_point, 01323 BodySM *&sheet_body) const; 01324 01325 virtual CubitStatus create_circle_surface( double radius, 01326 CubitVector plane, 01327 BodySM *&sheet_body) const; 01328 01329 virtual CubitStatus create_ellipse_surface( TBPoint *pt1, 01330 TBPoint *pt3, 01331 CubitVector center_point, 01332 BodySM *&sheet_body) const; 01333 01334 virtual CubitStatus create_ellipse_surface( double major_radius, 01335 double minor_radius, 01336 CubitVector plane, 01337 BodySM *&sheet_body) const; 01338 01339 virtual CubitStatus create_surface( DLIList<TBPoint*> &points, 01340 BodySM *&new_body, 01341 Surface *on_surface ) const = 0; 01342 01343 virtual CubitStatus create_weld_surface( CubitVector &root, 01344 Surface *ref_face1, double leg1, Surface *ref_face2, double leg2, 01345 BodySM *&new_body ) const = 0; 01346 01347 virtual CubitBoolean bodies_interfering( BodySM *body1, BodySM *body2 ) const {return CUBIT_FALSE;} 01348 01349 virtual CubitStatus stitch( DLIList<BodySM*> &bodies_to_stitch, 01350 DLIList<BodySM*> &new_bodies, 01351 bool tighten_gaps, 01352 double tolerance )const = 0; 01353 01354 protected: 01355 01356 private: 01357 01358 }; 01359 01360 #endif