if (ProjectPointToCurve(aEndPs[aPI], theCurve1, aParameter) <=
Precision::SquareConfusion())
{
+ DEBTRACE("aParameter " << aParameter);
aIntCount += AddParameter(theCurve1, aParameter, theParameters);
}
}
// Process the internal extremums.
- Extrema_ExtCC aAlgo(theCurve1, theCurve2);
+ Extrema_ExtCC aAlgo(theCurve1, theCurve2); //, 1.e-6, 1.e-6);
if (aAlgo.IsDone())
{
const int aECount = aAlgo.NbExt();
{
Extrema_POnCurv aP1, aP2;
aAlgo.Points(aEN, aP1, aP2);
+ DEBTRACE("SquareDistance " << aP1.Value().SquareDistance(aP2.Value()));
if (aP1.Value().SquareDistance(aP2.Value()) <=
Precision::SquareConfusion())
{
+ DEBTRACE("aP1.Parameter() " << aP1.Parameter());
aIntCount += AddParameter(theCurve1, aP1.Parameter(), theParameters);
}
}
TopTools_IndexedDataMapOfShapeListOfShape aVertexToEdges;
TopExp::MapShapesAndAncestors(theWire,
TopAbs_VERTEX, TopAbs_EDGE, aVertexToEdges);
- const int aVCount = aVertexToEdges.Extent();
+ const int aVCount = aVertexToEdges.Extent(); // number of edges (an edge can be a spline with intermediate vertices)
DEBTRACE("initialize VCount= "<< aVCount);
if (aVCount == 0)
{
return false;
}
}
+ std::string brepName = "theWireToSplit";
+ brepName += ".brep";
+ BRepTools::Write( theWire, brepName.c_str() );
- // Find the start.
+ // Find the start, i.e. the end which is the first vertex (or just the first vertex when closed) ==> aVN
int aVN = 1;
if (!isClosed)
{
}
}
- // Calculate the edge order.
- TopTools_ListOfShape* aEdges = &aVertexToEdges.ChangeFromIndex(aVN);
+ // Calculate the edge order ==> list in myEdges
+ TopTools_ListOfShape* aEdges = &aVertexToEdges.ChangeFromIndex(aVN); // 1 or 2 edges from first vertex
while (!aEdges->IsEmpty())
{
const TopoDS_Edge aEdge = TopoDS::Edge(aEdges->First());
aEdges->RemoveFirst();
- myEdges.push_back(aEdge);
+ myEdges.push_back(aEdge); // add an edge in the list
int aVN2 = aVertexToEdges.FindIndex(TopExp::FirstVertex(aEdge));
if (aVN2 == aVN)
{
aVN2 = aVertexToEdges.FindIndex(TopExp::LastVertex(aEdge));
}
- aVN = aVN2;
+ aVN = aVN2; // next vertex
aEdges = &aVertexToEdges.ChangeFromIndex(aVN2);
const TopoDS_Edge aEdge2 = TopoDS::Edge(aEdges->First());
else
{
aEdges->Clear();
- aEdges->Append(aEdge2);
+ aEdges->Append(aEdge2); // next edge
}
}
// Check for connectedness and free vertex.
- return aVCount - myEdges.size() == (isClosed ? 0 : 1);
+ return (aVCount - myEdges.size()) == (isClosed ? 0 : 1);
}
TopoDS_Wire HYDROData_TopoCurve::Wire() const
const TopoDS_Wire& theWire,
std::deque<std::list<double> >& theParameters) const
{
- //std::string brepName = "theWireToIntersect";
- //brepName += ".brep";
- //BRepTools::Write( theWire, brepName.c_str() );
+ std::string brepName = "theWireTool";
+ brepName += ".brep";
+ BRepTools::Write( theWire, brepName.c_str() );
int aIntCount = 0;
theParameters.resize(myEdges.size());
+ DEBTRACE("myEdges.size() " << myEdges.size());
std::list<TopoDS_Edge>::const_iterator aEIt = myEdges.begin();
std::list<TopoDS_Edge>::const_iterator aLastEIt = myEdges.end();
std::deque<std::list<double> >::iterator aPIt = theParameters.begin();
for (; aEIt != aLastEIt; ++aPIt, ++aEIt)
{
+ DEBTRACE("---");
const TopoDS_Edge& aEdge = *aEIt;
std::list<double>& aParams = *aPIt;
TopExp_Explorer aEIt2(theWire, TopAbs_EDGE);
for (; aEIt2.More(); aEIt2.Next())
{
aIntCount += IntersectEdge(aEdge,TopoDS::Edge(aEIt2.Current()), aParams);
+ DEBTRACE("aParams.size() " << aParams.size());
}
}
DEBTRACE("aIntCount " << aIntCount);