X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMImpl%2FGEOMImpl_MarkerDriver.cxx;h=bbbab5eb41f55bb892267168cce268a995b0c960;hb=90dda39995ebbd4c4de8184fd89f528fafc45474;hp=12231f722132eb3014142871454886abfaa05cc5;hpb=0b6826bc5f36b5420f41af1475e1a79371a25323;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx b/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx index 12231f722..bbbab5eb4 100644 --- a/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_MarkerDriver.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -19,12 +19,14 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + #include #include #include #include #include +#include #include #include @@ -102,6 +104,48 @@ Standard_Integer GEOMImpl_MarkerDriver::Execute(TFunction_Logbook& log) const gp_Ax3 anA (aPO, aN, aVX); gp_Pln aPln (anA); + double aTrimSize = 100.0; + aShape = BRepBuilderAPI_MakeFace(aPln, -aTrimSize, +aTrimSize, -aTrimSize, +aTrimSize).Shape(); + } else if (aType == MARKER_SHAPE) { + Handle(GEOM_Function) aRefShape = aPI.GetShape(); + TopoDS_Shape aSh = aRefShape->GetValue(); + gp_Ax3 anAx3 = GEOMImpl_IMeasureOperations::GetPosition(aSh); + gp_Pln aPln (anAx3); + + double aTrimSize = 100.0; + aShape = BRepBuilderAPI_MakeFace(aPln, -aTrimSize, +aTrimSize, -aTrimSize, +aTrimSize).Shape(); + } else if (aType == MARKER_PNT2VEC) { + Handle(GEOM_Function) aRefOrigin = aPI.GetOrigin(); + Handle(GEOM_Function) aRefXVec = aPI.GetXVec(); + Handle(GEOM_Function) aRefYVec = aPI.GetYVec(); + TopoDS_Shape aShapeOrigin = aRefOrigin->GetValue(); + TopoDS_Shape aShapeXVec = aRefXVec->GetValue(); + TopoDS_Shape aShapeYVec = aRefYVec->GetValue(); + if (aShapeOrigin.ShapeType() != TopAbs_VERTEX || aShapeOrigin.IsNull()) return 0; + if (aShapeXVec.ShapeType() != TopAbs_EDGE || aShapeXVec.IsNull()) return 0; + if (aShapeYVec.ShapeType() != TopAbs_EDGE || aShapeYVec.IsNull()) return 0; + + gp_Pnt aPO = BRep_Tool::Pnt( TopoDS::Vertex( aShapeOrigin ) ); + + gp_Pnt aPX1 = BRep_Tool::Pnt( TopExp::FirstVertex( TopoDS::Edge( aShapeXVec ) ) ); + gp_Pnt aPX2 = BRep_Tool::Pnt( TopExp::LastVertex( TopoDS::Edge( aShapeXVec ) ) ); + gp_Vec aVX( aPX1, aPX2 ); + + gp_Pnt aPY1 = BRep_Tool::Pnt( TopExp::FirstVertex( TopoDS::Edge( aShapeYVec ) ) ); + gp_Pnt aPY2 = BRep_Tool::Pnt( TopExp::LastVertex( TopoDS::Edge( aShapeYVec ) ) ); + gp_Vec aVY( aPY1, aPY2 ); + + if (aVX.Magnitude() < gp::Resolution() || aVY.Magnitude() < gp::Resolution()) + Standard_ConstructionError::Raise + ("Local CS creation aborted: vector of zero length is given"); + + if ( aVX.IsParallel(aVY, Precision::Angular())) + Standard_ConstructionError::Raise("Parallel Vectors given"); + + gp_Vec aN = aVX ^ aVY; + gp_Ax3 anA (aPO, aN, aVX); + gp_Pln aPln (anA); + double aTrimSize = 100.0; aShape = BRepBuilderAPI_MakeFace(aPln, -aTrimSize, +aTrimSize, -aTrimSize, +aTrimSize).Shape(); } else {