mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-10 18:51:21 +03:00
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.
102 lines
2.6 KiB
Plaintext
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);
|
|
}
|