1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00
occt/src/IntPatch/IntPatch_ALine.lxx
nbv d3ee56eafc 0029807: [Regression to 7.0.0] Impossible to cut cone from prism
The algorithm has been improved for the cases when the intersection line goes through the cone apex.

<!break>

1. All special points are put to the ALine forcefully (if they are true intersection point). Currently this step has not been implemented yet.

2. Now the tolerance of IntPatch_Point (put into ALine) is computed in order to cover the distance between it and the correspond ALine.

3. Test cases have been created.

4. Procedure of trimming IntAna_Curve has been improved.

5. Criterion when the discriminant of IntAna_Curve can be considered to be equal to 0 has been improved.

6. Methods IntAna_Curve::FindParameter(...) (and IntPatch_ALine::FindParameter(...)) currently returns list of all parameters corresponding the given point (IntAna_Curve can be self-interfered curve). Before the fix, this method always returned only one (randomly chosen) parameter.

7. Interfaces of the following methods have been changed: IntAna_Curve::FindParameter(...), IntPatch_ALine::FindParameter(...), IntPatch_ALine::ChangeVertex(...), IntPatch_SpecialPoints::AddPointOnUorVIso(...), IntPatch_SpecialPoints::AddSingularPole(...), IntPatch_WLineTool::ExtendTwoWLines().

8. Following methods have been added: IntAna_Quadric::SpecialPoints(...), IntPatch_ALineToWLine::GetSectionRadius(...), IntPatch_SpecialPoints::ProcessSphere(...), IntPatch_SpecialPoints::ProcessCone(...), IntPatch_SpecialPoints::GetTangentToIntLineForCone(...).

------------------
1) tests/boolean/volumemaker/C5
   tests/boolean/volumemaker/C6
   tests/boolean/volumemaker/E7

They are real IMPROVEMENTS. In the FIX (in compare with MASTER), section result between pairs of faces f2&f6 (C5), f3&f7 (C6) and f1&f5 (E7) is closed. Separated test cases have been created in order to focus on the problem with section. Bug #28503 has been fixed.

Correction in test cases.
2018-09-24 14:38:17 +03:00

102 lines
2.6 KiB
Plaintext

// Created on: 1992-04-06
// Created by: Jacques GOUSSARD
// Copyright (c) 1992-1999 Matra Datavision
// Copyright (c) 1999-2014 OPEN CASCADE SAS
//
// This file is part of Open CASCADE Technology software library.
//
// This library is free software; you can redistribute it and/or modify it under
// the terms of the GNU Lesser General Public License version 2.1 as published
// by the Free Software Foundation, with special exception defined in the file
// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
// distribution for complete text of the license and disclaimer of any warranty.
//
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
#include <Standard_DomainError.hxx>
#include <Precision.hxx>
#include <IntPatch_Point.hxx>
inline void IntPatch_ALine::Replace (const Standard_Integer Index, const IntPatch_Point& Pnt)
{
svtx(Index) = Pnt;
}
inline void IntPatch_ALine::SetFirstPoint (const Standard_Integer IndFirst)
{
fipt = Standard_True;
indf = IndFirst;
}
inline void IntPatch_ALine::SetLastPoint (const Standard_Integer IndLast)
{
lapt = Standard_True;
indl = IndLast;
}
inline Standard_Real IntPatch_ALine::FirstParameter (Standard_Boolean& IsIncluded) const
{
Standard_Real bid,first;
curv.Domain(first,bid);
IsIncluded = !curv.IsFirstOpen();
return first;
}
inline Standard_Real IntPatch_ALine::LastParameter (Standard_Boolean& IsIncluded) const
{
Standard_Real bid,last;
curv.Domain(bid,last);
IsIncluded = !curv.IsLastOpen();
return last;
}
inline gp_Pnt IntPatch_ALine::Value (const Standard_Real U)
{
return curv.Value(U);// Value leve l exception DomainError
}
inline Standard_Boolean IntPatch_ALine::D1(const Standard_Real U, gp_Pnt& P, gp_Vec& Du)
{
return curv.D1u(U,P,Du); // D1u leve l exception DomainError
}
inline void IntPatch_ALine::FindParameter(const gp_Pnt& theP,
TColStd_ListOfReal& theParams) const
{
curv.FindParameter(theP, theParams);
}
inline Standard_Boolean IntPatch_ALine::HasFirstPoint () const
{
return fipt;
}
inline Standard_Boolean IntPatch_ALine::HasLastPoint () const
{
return lapt;
}
inline const IntPatch_Point& IntPatch_ALine::FirstPoint () const
{
if (!fipt) {throw Standard_DomainError();}
return svtx(indf);
}
inline const IntPatch_Point& IntPatch_ALine::LastPoint () const
{
if (!lapt) {throw Standard_DomainError();}
return svtx(indl);
}
inline Standard_Integer IntPatch_ALine::NbVertex () const
{
return svtx.Length();
}
inline const IntPatch_Point& IntPatch_ALine::Vertex (const Standard_Integer Index) const
{
return svtx(Index);
}