mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-03-12 20:04:33 +05:00
Proper CAS removal
This commit is contained in:
parent
67ed03ceb2
commit
6fc3b8cf95
@ -274,157 +274,161 @@ const Standard_GUID& GEOMImpl_ShapeProximityDriver::GetID()
|
|||||||
//=======================================================================
|
//=======================================================================
|
||||||
Standard_Integer GEOMImpl_ShapeProximityDriver::Execute(Handle(TFunction_Logbook)& log) const
|
Standard_Integer GEOMImpl_ShapeProximityDriver::Execute(Handle(TFunction_Logbook)& log) const
|
||||||
{
|
{
|
||||||
// if (Label().IsNull())
|
#ifndef __EMSCRIPTEN__ // BRepExtrema_ProximityDistTool not compiled as part of OCCT
|
||||||
// return 0;
|
|
||||||
|
|
||||||
// Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
|
if (Label().IsNull())
|
||||||
// GEOMImpl_IProximity aProximity (aFunction);
|
return 0;
|
||||||
|
|
||||||
// Handle(GEOM_Function) aShapeFunc1, aShapeFunc2;
|
Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
|
||||||
// aProximity.GetShapes(aShapeFunc1, aShapeFunc2);
|
GEOMImpl_IProximity aProximity (aFunction);
|
||||||
// if (aShapeFunc1.IsNull() || aShapeFunc2.IsNull())
|
|
||||||
// return 0;
|
|
||||||
|
|
||||||
// TopoDS_Shape aShape1 = aShapeFunc1->GetValue();
|
Handle(GEOM_Function) aShapeFunc1, aShapeFunc2;
|
||||||
// TopoDS_Shape aShape2 = aShapeFunc2->GetValue();
|
aProximity.GetShapes(aShapeFunc1, aShapeFunc2);
|
||||||
|
if (aShapeFunc1.IsNull() || aShapeFunc2.IsNull())
|
||||||
|
return 0;
|
||||||
|
|
||||||
// Standard_Real aValue = -1.0;
|
TopoDS_Shape aShape1 = aShapeFunc1->GetValue();
|
||||||
|
TopoDS_Shape aShape2 = aShapeFunc2->GetValue();
|
||||||
|
|
||||||
// if (aFunction->GetType() == PROXIMITY_COARSE)
|
Standard_Real aValue = -1.0;
|
||||||
// {
|
|
||||||
// // tessellate shapes if there is no mesh exists
|
|
||||||
// tessellateShape(aShape1);
|
|
||||||
// tessellateShape(aShape2);
|
|
||||||
|
|
||||||
// // compute proximity basing on the tessellation
|
if (aFunction->GetType() == PROXIMITY_COARSE)
|
||||||
// BRepExtrema_ShapeProximity aCalcProx;
|
{
|
||||||
// aCalcProx.LoadShape1(aShape1);
|
// tessellate shapes if there is no mesh exists
|
||||||
// aCalcProx.LoadShape2(aShape2);
|
tessellateShape(aShape1);
|
||||||
// aCalcProx.SetNbSamples1(aProximity.GetNbSamples(PROXIMITY_ARG_SAMPLES1));
|
tessellateShape(aShape2);
|
||||||
// aCalcProx.SetNbSamples2(aProximity.GetNbSamples(PROXIMITY_ARG_SAMPLES2));
|
|
||||||
// aCalcProx.Perform();
|
|
||||||
|
|
||||||
// if (aCalcProx.IsDone())
|
// compute proximity basing on the tessellation
|
||||||
// {
|
BRepExtrema_ShapeProximity aCalcProx;
|
||||||
// aValue = aCalcProx.Proximity();
|
aCalcProx.LoadShape1(aShape1);
|
||||||
// aProximity.SetProximityPoints(aCalcProx.ProximityPoint1(),
|
aCalcProx.LoadShape2(aShape2);
|
||||||
// aCalcProx.ProximityPoint2());
|
aCalcProx.SetNbSamples1(aProximity.GetNbSamples(PROXIMITY_ARG_SAMPLES1));
|
||||||
// aProximity.SetStatusOfPoints((Standard_Integer)aCalcProx.ProxPntStatus1(),
|
aCalcProx.SetNbSamples2(aProximity.GetNbSamples(PROXIMITY_ARG_SAMPLES2));
|
||||||
// (Standard_Integer)aCalcProx.ProxPntStatus2());
|
aCalcProx.Perform();
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// Standard_ConstructionError::Raise("Failed to compute coarse proximity");
|
|
||||||
// }
|
|
||||||
// else if (aFunction->GetType() == PROXIMITY_PRECISE)
|
|
||||||
// {
|
|
||||||
// // coarse proximity value
|
|
||||||
// // in some cases this value cannot be precised
|
|
||||||
// // it can be precised only if at least one point is in the middle of the shape
|
|
||||||
// aValue = aProximity.GetValue();
|
|
||||||
|
|
||||||
// TopAbs_ShapeEnum aType1 = aShape1.ShapeType();
|
if (aCalcProx.IsDone())
|
||||||
// TopAbs_ShapeEnum aType2 = aShape2.ShapeType();
|
{
|
||||||
|
aValue = aCalcProx.Proximity();
|
||||||
|
aProximity.SetProximityPoints(aCalcProx.ProximityPoint1(),
|
||||||
|
aCalcProx.ProximityPoint2());
|
||||||
|
aProximity.SetStatusOfPoints((Standard_Integer)aCalcProx.ProxPntStatus1(),
|
||||||
|
(Standard_Integer)aCalcProx.ProxPntStatus2());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Standard_ConstructionError::Raise("Failed to compute coarse proximity");
|
||||||
|
}
|
||||||
|
else if (aFunction->GetType() == PROXIMITY_PRECISE)
|
||||||
|
{
|
||||||
|
// coarse proximity value
|
||||||
|
// in some cases this value cannot be precised
|
||||||
|
// it can be precised only if at least one point is in the middle of the shape
|
||||||
|
aValue = aProximity.GetValue();
|
||||||
|
|
||||||
// gp_Pnt aPnt1, aPnt2;
|
TopAbs_ShapeEnum aType1 = aShape1.ShapeType();
|
||||||
// BRepExtrema_ProximityDistTool::ProxPnt_Status aStatus1, aStatus2;
|
TopAbs_ShapeEnum aType2 = aShape2.ShapeType();
|
||||||
// Standard_Integer intStatus1, intStatus2;
|
|
||||||
// aProximity.GetProximityPoints(aPnt1, aPnt2);
|
|
||||||
// aProximity.GetStatusOfPoints(intStatus1, intStatus2);
|
|
||||||
// aStatus1 = (BRepExtrema_ProximityDistTool::ProxPnt_Status)intStatus1;
|
|
||||||
// aStatus2 = (BRepExtrema_ProximityDistTool::ProxPnt_Status)intStatus2;
|
|
||||||
|
|
||||||
// if (aType1 == TopAbs_EDGE)
|
gp_Pnt aPnt1, aPnt2;
|
||||||
// {
|
BRepExtrema_ProximityDistTool::ProxPnt_Status aStatus1, aStatus2;
|
||||||
// if (aType2 == TopAbs_EDGE)
|
Standard_Integer intStatus1, intStatus2;
|
||||||
// {
|
aProximity.GetProximityPoints(aPnt1, aPnt2);
|
||||||
// if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
aProximity.GetStatusOfPoints(intStatus1, intStatus2);
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
aStatus1 = (BRepExtrema_ProximityDistTool::ProxPnt_Status)intStatus1;
|
||||||
// {
|
aStatus2 = (BRepExtrema_ProximityDistTool::ProxPnt_Status)intStatus2;
|
||||||
// aValue = extremaEE(TopoDS::Edge(aShape1), TopoDS::Edge(aShape2), aPnt1, aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPE(aPnt1, TopoDS::Edge(aShape2), aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPE(aPnt2, TopoDS::Edge(aShape1), aPnt1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else if (aType2 == TopAbs_FACE)
|
|
||||||
// {
|
|
||||||
// if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaEF(TopoDS::Edge(aShape1), TopoDS::Face(aShape2), aPnt1, aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPF(aPnt1, TopoDS::Face(aShape2), aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPE(aPnt2, TopoDS::Edge(aShape1), aPnt1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else if (aType1 == TopAbs_FACE)
|
|
||||||
// {
|
|
||||||
// if (aType2 == TopAbs_EDGE)
|
|
||||||
// {
|
|
||||||
// if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaEF(TopoDS::Edge(aShape2), TopoDS::Face(aShape1), aPnt2, aPnt1);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPE(aPnt1, TopoDS::Edge(aShape2), aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPF(aPnt2, TopoDS::Face(aShape1), aPnt1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else if (aType2 == TopAbs_FACE)
|
|
||||||
// {
|
|
||||||
// if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaFF(TopoDS::Face(aShape1), TopoDS::Face(aShape2), aPnt1, aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPF(aPnt1, TopoDS::Face(aShape2), aPnt2);
|
|
||||||
// }
|
|
||||||
// else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
|
||||||
// aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
|
||||||
// {
|
|
||||||
// aValue = extremaPF(aPnt2, TopoDS::Face(aShape1), aPnt1);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if (aValue >= 0)
|
if (aType1 == TopAbs_EDGE)
|
||||||
// aProximity.SetProximityPoints(aPnt1, aPnt2);
|
{
|
||||||
// else
|
if (aType2 == TopAbs_EDGE)
|
||||||
// Standard_ConstructionError::Raise("Failed to compute precise proximity");
|
{
|
||||||
// }
|
if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
// else
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
// {
|
{
|
||||||
// Standard_ConstructionError::Raise("incorrect algorithm");
|
aValue = extremaEE(TopoDS::Edge(aShape1), TopoDS::Edge(aShape2), aPnt1, aPnt2);
|
||||||
// }
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaPE(aPnt1, TopoDS::Edge(aShape2), aPnt2);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
||||||
|
{
|
||||||
|
aValue = extremaPE(aPnt2, TopoDS::Edge(aShape1), aPnt1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (aType2 == TopAbs_FACE)
|
||||||
|
{
|
||||||
|
if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaEF(TopoDS::Edge(aShape1), TopoDS::Face(aShape2), aPnt1, aPnt2);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaPF(aPnt1, TopoDS::Face(aShape2), aPnt2);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
||||||
|
{
|
||||||
|
aValue = extremaPE(aPnt2, TopoDS::Edge(aShape1), aPnt1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (aType1 == TopAbs_FACE)
|
||||||
|
{
|
||||||
|
if (aType2 == TopAbs_EDGE)
|
||||||
|
{
|
||||||
|
if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaEF(TopoDS::Edge(aShape2), TopoDS::Face(aShape1), aPnt2, aPnt1);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaPE(aPnt1, TopoDS::Edge(aShape2), aPnt2);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
||||||
|
{
|
||||||
|
aValue = extremaPF(aPnt2, TopoDS::Face(aShape1), aPnt1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (aType2 == TopAbs_FACE)
|
||||||
|
{
|
||||||
|
if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaFF(TopoDS::Face(aShape1), TopoDS::Face(aShape2), aPnt1, aPnt2);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE)
|
||||||
|
{
|
||||||
|
aValue = extremaPF(aPnt1, TopoDS::Face(aShape2), aPnt2);
|
||||||
|
}
|
||||||
|
else if (aStatus1 == BRepExtrema_ProximityDistTool::ProxPnt_Status_MIDDLE &&
|
||||||
|
aStatus2 == BRepExtrema_ProximityDistTool::ProxPnt_Status_BORDER)
|
||||||
|
{
|
||||||
|
aValue = extremaPF(aPnt2, TopoDS::Face(aShape1), aPnt1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (aValue >= 0)
|
||||||
|
aProximity.SetProximityPoints(aPnt1, aPnt2);
|
||||||
|
else
|
||||||
|
Standard_ConstructionError::Raise("Failed to compute precise proximity");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Standard_ConstructionError::Raise("incorrect algorithm");
|
||||||
|
}
|
||||||
|
|
||||||
// aProximity.SetValue(aValue);
|
aProximity.SetValue(aValue);
|
||||||
// log->SetTouched(Label());
|
log->SetTouched(Label());
|
||||||
return 1;
|
return 1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user