Proper CAS removal

This commit is contained in:
Louis Gombert 2024-08-28 09:00:40 +00:00
parent 67ed03ceb2
commit 6fc3b8cf95

View File

@ -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
} }
//======================================================================= //=======================================================================