r1566 - in cgm/trunk: geom/OCC util
Author: janehu Date: 2008-01-29 14:04:20 -0600 (Tue, 29 Jan 2008) New Revision: 1566 Modified: cgm/trunk/geom/OCC/OCCCurve.cpp cgm/trunk/geom/OCC/OCCModifyEngine.cpp cgm/trunk/geom/OCC/OCCQueryEngine.cpp cgm/trunk/geom/OCC/OCCShell.cpp cgm/trunk/geom/OCC/OCCSurface.cpp cgm/trunk/util/GeometryDefines.h Log: Added make_Curve for spline curves, corrected mistakes on curve and surface types. Modified: cgm/trunk/geom/OCC/OCCCurve.cpp =================================================================== --- cgm/trunk/geom/OCC/OCCCurve.cpp 2008-01-28 21:30:01 UTC (rev 1565) +++ cgm/trunk/geom/OCC/OCCCurve.cpp 2008-01-29 20:04:20 UTC (rev 1566) @@ -585,9 +585,9 @@ { BRepAdaptor_Curve acurve(*myTopoDSEdge); if (acurve.GetType() == GeomAbs_BezierCurve) - return BEZIER_CURVE_TYPE; + return SPLINE_CURVE_TYPE; if (acurve.GetType() == GeomAbs_BSplineCurve) - return SPLINE_CURVE_TYPE; + return BSPLINE_CURVE_TYPE; if (acurve.GetType() == GeomAbs_Line) return STRAIGHT_CURVE_TYPE; if (acurve.GetType() == GeomAbs_Parabola) Modified: cgm/trunk/geom/OCC/OCCModifyEngine.cpp =================================================================== --- cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-01-28 21:30:01 UTC (rev 1565) +++ cgm/trunk/geom/OCC/OCCModifyEngine.cpp 2008-01-29 20:04:20 UTC (rev 1566) @@ -15,6 +15,10 @@ #include "config.h" #include "gp_Pnt.hxx" #include "TopoDS_Shape.hxx" +#include "TColgp_Array1OfPnt.hxx" +#include "Geom_BezierCurve.hxx" +#include "BRepBuilderAPI_MakeEdge.hxx" +#include "BRep_Tool.hxx" #include "TopoDS.hxx" #include "TopologyBridge.hpp" #include "OCCModifyEngine.hpp" @@ -162,8 +166,14 @@ if(third_point != NULL && face_ptr != NULL) { closed = CUBIT_TRUE; - //curve = make_Curve(type, point1_ptr, third_point, mid_points); + Point * Pnt = make_Point(*third_point); + curve = make_Curve(type, point1_ptr, Pnt, mid_points); } + else + { + PRINT_ERROR("Cannot create an OCC curve from the given duplicated points.\n"); + return (Curve *)NULL; + } } Curve* new_curve = NULL; @@ -180,7 +190,7 @@ //=============================================================================== // Function : make_Curve // Member Type: PUBLIC -// Description: make a curve +// Description: make a spline curve by using the points on surface. // Author : Jane Hu // Date : 01/08 //=============================================================================== @@ -191,22 +201,84 @@ Surface* face_ptr) const { assert(point1_ptr != NULL && point2_ptr != NULL); - /* - OCCPoint const* occ_point1 = CAST_TO(point1_ptr, OCCPoint); - OCCPoint const* occ_point2 = CAST_TO(point2_ptr, OCCPoint); + + if (curve_type != SPLINE_CURVE_TYPE + && curve_type != STRAIGHT_CURVE_TYPE) + { + PRINT_ERROR("Cannot create an OCC curve from the given curve_type.\n" + "Candidates are SPLINE_CURVE_TYPE and STRAIGHT_CURVE_TYPE.\n"); + return (Curve *)NULL; + } + OCCPoint* occ_point1 = CAST_TO(const_cast<Point*>(point1_ptr), OCCPoint); + OCCPoint* occ_point2 = CAST_TO(const_cast<Point*>(point2_ptr), OCCPoint); + if (occ_point1 == NULL || occ_point2 == NULL) { PRINT_ERROR("Cannot create an OCC curve from the given points.\n" "Possible incompatible geometry engines.\n"); return (Curve *)NULL; } - */ - //project all points on the surface + + //project all points on the surface if possible + OCCSurface* occ_face = NULL; if (face_ptr != NULL) + occ_face = CAST_TO(face_ptr, OCCSurface); + + gp_Pnt pt; + int size = 2+vector_list.size(); + TColgp_Array1OfPnt points(1, size); + CubitVector* vector = NULL; + CubitVector closest_location; + for(int i = 1; i <= size; i++) { + if (i == 1) + { + TopoDS_Vertex *point = occ_point1->get_TopoDS_Vertex(); + pt = BRep_Tool::Pnt(*point); + vector = new CubitVector(point1_ptr->coordinates()); + } + else if (i == size) + { + TopoDS_Vertex *point = occ_point2->get_TopoDS_Vertex(); + pt = BRep_Tool::Pnt(*point); + vector = new CubitVector(point2_ptr->coordinates()); + } + else + { + vector = vector_list.get_and_step(); + pt.SetCoord(vector->x(), vector->y(), vector->z()); + } + + if (occ_face != NULL) + { + occ_face->closest_point(*vector, &closest_location); + pt.SetCoord(closest_location.x(), closest_location.y(), closest_location.z()) ; + } + + points.SetValue(i, pt); } + //make curve according to the curve type. + if(curve_type == SPLINE_CURVE_TYPE) + { + Geom_BezierCurve BezierCurve(points); + Handle(Geom_Curve) curve_ptr(&BezierCurve); + TopoDS_Edge new_edge = BRepBuilderAPI_MakeEdge(curve_ptr); + return OCCQueryEngine::instance()->populate_topology_bridge(new_edge); + } + + else if(curve_type == STRAIGHT_CURVE_TYPE) + { + TColgp_Array1OfPnt two_points(1,2); + two_points.SetValue(1, points.Value(1)); + two_points.SetValue(2, points.Value(size)); + Geom_BezierCurve BezierCurve(two_points); + Handle(Geom_Curve) curve_ptr(&BezierCurve); + TopoDS_Edge new_edge = BRepBuilderAPI_MakeEdge(curve_ptr); + return OCCQueryEngine::instance()->populate_topology_bridge(new_edge); + } + return (Curve*) NULL; } Modified: cgm/trunk/geom/OCC/OCCQueryEngine.cpp =================================================================== --- cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-01-28 21:30:01 UTC (rev 1565) +++ cgm/trunk/geom/OCC/OCCQueryEngine.cpp 2008-01-29 20:04:20 UTC (rev 1566) @@ -1540,12 +1540,12 @@ k = OCCMap->Find(*face); if(!OCCMap->UnBind(*face)) - PRINT_ERROR("The OccSurface and TopoDS_Face pair is not in the map!"); + PRINT_WARNING("The OccSurface and TopoDS_Face pair is not in the map!"); SurfaceList->remove((OCCSurface*)(OccToCGM->find(k))->second); if(!OccToCGM->erase(k)) - PRINT_ERROR("The OccSurface and TopoDS_Face pair is not in the map!"); + PRINT_WARNING("The OccSurface and TopoDS_Face pair is not in the map!"); } DLIList<TopologyBridge*> children; @@ -1555,6 +1555,7 @@ LoopSM* loop = CAST_TO(children.get_and_step(), LoopSM); unhook_LoopSM_from_OCC(loop); } + return CUBIT_SUCCESS; } //------------------------------------------------------------------------- @@ -1657,10 +1658,11 @@ k = OCCMap->Find(*edge); if(!OCCMap->UnBind(*edge)) - PRINT_ERROR("The OccCurve and TopoDS_Edge pair is not in the map!"); + PRINT_WARNING("The OccCurve and TopoDS_Edge pair is not in the map!"); CurveList->remove((OCCCurve*)(OccToCGM->find(k))->second); if(!OccToCGM->erase(k)) - PRINT_ERROR("The OccCurve and TopoDS_Edge pair is not in the map!"); } + PRINT_WARNING("The OccCurve and TopoDS_Edge pair is not in the map!"); + } DLIList<TopologyBridge*> children; fcurve->get_children_virt(children); @@ -1669,6 +1671,7 @@ Point* point = CAST_TO(children.get_and_step(), Point); unhook_Point_from_OCC(point); } + return CUBIT_SUCCESS; } //------------------------------------------------------------------------- // Purpose : Delete a OCCPoint and child entities. @@ -1729,6 +1732,7 @@ if(!OccToCGM->erase(k)) PRINT_ERROR("The OccPoint and TopoDS_Vertex pair is not in the map!"); } + return CUBIT_SUCCESS; } Modified: cgm/trunk/geom/OCC/OCCShell.cpp =================================================================== --- cgm/trunk/geom/OCC/OCCShell.cpp 2008-01-28 21:30:01 UTC (rev 1565) +++ cgm/trunk/geom/OCC/OCCShell.cpp 2008-01-29 20:04:20 UTC (rev 1566) @@ -169,6 +169,7 @@ surface->update_OCC_entity(aBRepTrsf); } set_TopoDS_Shell(shell); + return CUBIT_SUCCESS; } // ********** END PUBLIC FUNCTIONS ********** Modified: cgm/trunk/geom/OCC/OCCSurface.cpp =================================================================== --- cgm/trunk/geom/OCC/OCCSurface.cpp 2008-01-28 21:30:01 UTC (rev 1565) +++ cgm/trunk/geom/OCC/OCCSurface.cpp 2008-01-29 20:04:20 UTC (rev 1566) @@ -186,9 +186,9 @@ { BRepAdaptor_Surface asurface(*myTopoDSFace); if (asurface.GetType() == GeomAbs_BezierSurface) - return BEZIER_SURFACE_TYPE; + return SPLINE_SURFACE_TYPE; if (asurface.GetType() == GeomAbs_BSplineSurface) - return SPLINE_SURFACE_TYPE; + return BSPLINE_SURFACE_TYPE; if (asurface.GetType() == GeomAbs_Plane) return PLANE_SURFACE_TYPE; if (asurface.GetType() == GeomAbs_Cylinder || @@ -769,6 +769,7 @@ loop->update_OCC_entity(aBRepTrsf); } set_TopoDS_Face(surface); + return CUBIT_SUCCESS; } // ********** END PUBLIC FUNCTIONS ********** Modified: cgm/trunk/util/GeometryDefines.h =================================================================== --- cgm/trunk/util/GeometryDefines.h 2008-01-28 21:30:01 UTC (rev 1565) +++ cgm/trunk/util/GeometryDefines.h 2008-01-29 20:04:20 UTC (rev 1566) @@ -68,7 +68,7 @@ SPLINE_CURVE_TYPE, STRAIGHT_CURVE_TYPE, POINT_CURVE_TYPE, - BEZIER_CURVE_TYPE, //OCC curve types + BSPLINE_CURVE_TYPE, //OCC curve types HYPERBOLA_CURVE_TYPE, UNDEFINED_CURVE_TYPE, @@ -80,7 +80,7 @@ TORUS_SURFACE_TYPE, BEST_FIT_SURFACE_TYPE, FACET_SURFACE_TYPE, - BEZIER_SURFACE_TYPE, //OCC surface type + BSPLINE_SURFACE_TYPE, //OCC surface type REVOLUTION_SURFACE_TYPE, //OCC surface type EXTRUSION_SURFACE_TYPE, //OCC surface type OFFSET_SURFACE_TYPE, //OCC surface type
participants (1)
-
janehu@mcs.anl.gov