Fix boolean operations (#17119)

* add BRepAlgoAPI wrapper files to CMakeList

* introduce wrapper for BRepAlgoAPI_BooleanOperation and derivatives, set sensible default Fuzzyness for boolean operations

* allow default fuzzyness to be set in settings - including off

* backwards compatibility with OCCT 7.3.3 - removed newer paramateres from wrapper

* added missing header

* reverted src/Mod/Part/App/OpenCascadeAll.h to original state

* implement some changes suggested by @wwmayer

* removed unneeded destructor definitions

* moved getDefaultFuzzyValue into its own helper class

* removed unneeded references to base class default constructor

* default to SetRunParallel(Standard_True) as suggested by @FlachyJoe

* fixed license header as requested

* Added new method to autocalculate fuzzyness to BooleanOperation base class and use it for those parts that do not call the obsolete constructor but also do not set precision

* implemented static variable solution as suggested by @wwmayer

* added helix for test case

* Refactoring FCRepAlgoAPI to FCBRepAlgoAPI

* Added Test Case (fuse cylinder with helix with different working and non-working Fuzzy values)

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* increased default value of FuzzyBoolean and made tests more robust for compatibility with OCCT 7.3

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fixes for FREECAD_USE_PCH - allow testing of FREECAD_USE_PCH on linux with cmake switch (default OFF)

* removed surplus line - wasn't needed after all

* included precompiled as instructed

* set anti-corruption flag in boolean operations, ensures source shape is not damaged in OCCT 7.1 and higher

* fix #17085

* disable subtests that were too specific for now

* fixed all CLI tests - see comments in Pull Request https://github.com/FreeCAD/FreeCAD/pull/17119#issuecomment-2420772452

* Update src/Mod/PartDesign/PartDesignTests/TestTopologicalNamingProblem.py

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

suggested updated test by CalligaroV

Co-authored-by: Vincenzo Calligaro <[email protected]>

* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp

Co-authored-by: Vincenzo Calligaro <[email protected]>

* remove surplus tests from github suggestion interface bug

* hide the BooleanFuzzy variable - can now be only set by manually editing the config file
i
in FCParamGroup "Boolean"
<FCFloat Name="BooleanFuzzy" Value="10.000000000000"/>

* Suggestion by @FlachyJoe - add validity checks to the base and tool shape in any direct boolean op

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vincenzo Calligaro <[email protected]>
This commit is contained in:
Eric Price
2024-10-21 18:38:51 +02:00
committed by GitHub
co-authored by pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Vincenzo Calligaro
parent 5979ebd6f8
commit cf8ad66373
58 changed files with 2098 additions and 189 deletions
+6 -1
View File
@@ -186,7 +186,7 @@
#include <OCAF/ImportExportSettings.h>
#include "MeasureClient.h"
#include <FuzzyHelper.h>
namespace Part {
extern PyObject* initModule();
@@ -562,6 +562,11 @@ PyMOD_INIT_FUNC(Part)
OCAF::ImportExportSettings::initialize();
Part::MeasureClient::initialize();
Base::Reference<ParameterGrp> hGrp = App::GetApplication().GetUserParameter()
.GetGroup("BaseApp")->GetGroup("Preferences")->GetGroup("Mod/Part/Boolean");
Part::FuzzyHelper::setBooleanFuzzy(hGrp->GetFloat("BooleanFuzzy",10.0));
PyMOD_Return(partModule);
}
+17 -1
View File
@@ -234,6 +234,20 @@ SET(Properties_SRCS
)
SOURCE_GROUP("Properties" FILES ${Properties_SRCS})
SET(FCBRepAlgoAPI_SRCS
FCBRepAlgoAPI_BooleanOperation.cpp
FCBRepAlgoAPI_BooleanOperation.h
FCBRepAlgoAPI_Common.cpp
FCBRepAlgoAPI_Common.h
FCBRepAlgoAPI_Fuse.cpp
FCBRepAlgoAPI_Fuse.h
FCBRepAlgoAPI_Cut.cpp
FCBRepAlgoAPI_Cut.h
FCBRepAlgoAPI_Section.cpp
FCBRepAlgoAPI_Section.h
)
SOURCE_GROUP("FCBRepAlgoAPI-wrapper" FILES ${FCBRepAlgoAPI_SRCS})
SET(Python_SRCS
ArcPy.xml
ArcPyImp.cpp
@@ -515,6 +529,8 @@ SET(Part_SRCS
CrossSection.h
ExtrusionHelper.cpp
ExtrusionHelper.h
FuzzyHelper.cpp
FuzzyHelper.h
GeometryExtension.cpp
GeometryExtension.h
GeometryDefaultExtension.cpp
@@ -580,7 +596,7 @@ if(EIGEN3_NO_DEPRECATED_COPY)
PROPERTIES COMPILE_FLAGS ${EIGEN3_NO_DEPRECATED_COPY})
endif()
add_library(Part SHARED ${Part_SRCS})
add_library(Part SHARED ${Part_SRCS} ${FCBRepAlgoAPI_SRCS})
target_link_libraries(Part ${Part_LIBS})
if (FREECAD_WARN_ERROR)
target_compile_warn_error(Part)
+7 -7
View File
@@ -24,9 +24,9 @@
#ifndef _PreComp_
# include <algorithm>
# include <BRepAdaptor_Surface.hxx>
# include <BRepAlgoAPI_Common.hxx>
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Section.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
# include <BRepBuilderAPI_MakeFace.hxx>
# include <BRepBuilderAPI_MakeWire.hxx>
# include <BRepPrimAPI_MakeHalfSpace.hxx>
@@ -109,7 +109,7 @@ std::list<TopoDS_Wire> CrossSection::removeDuplicates(const std::list<TopoDS_Wir
void CrossSection::sliceNonSolid(double d, const TopoDS_Shape& shape, std::list<TopoDS_Wire>& wires) const
{
BRepAlgoAPI_Section cs(shape, gp_Pln(a,b,c,-d));
FCBRepAlgoAPI_Section cs(shape, gp_Pln(a,b,c,-d));
if (cs.IsDone()) {
std::list<TopoDS_Edge> edges;
TopExp_Explorer xp;
@@ -134,7 +134,7 @@ void CrossSection::sliceSolid(double d, const TopoDS_Shape& shape, std::list<Top
BRepPrimAPI_MakeHalfSpace mkSolid(face, refPoint);
TopoDS_Solid solid = mkSolid.Solid();
BRepAlgoAPI_Cut mkCut(shape, solid);
FCBRepAlgoAPI_Cut mkCut(shape, solid);
if (mkCut.IsDone()) {
TopTools_IndexedMapOfShape mapOfFaces;
@@ -262,7 +262,7 @@ void TopoCrossSection::sliceNonSolid(int idx,
const TopoShape& shape,
std::vector<TopoShape>& wires) const
{
BRepAlgoAPI_Section cs(shape.getShape(), gp_Pln(a, b, c, -d));
FCBRepAlgoAPI_Section cs(shape.getShape(), gp_Pln(a, b, c, -d));
if (cs.IsDone()) {
std::string prefix(op);
prefix += Data::indexSuffix(idx);
@@ -296,7 +296,7 @@ void TopoCrossSection::sliceSolid(int idx,
std::string prefix(op);
prefix += Data::indexSuffix(idx);
solid.makeElementShape(mkSolid, face, prefix.c_str());
BRepAlgoAPI_Cut mkCut(shape.getShape(), solid.getShape());
FCBRepAlgoAPI_Cut mkCut(shape.getShape(), solid.getShape());
if (mkCut.IsDone()) {
TopoShape res(shape.Tag, shape.Hasher);
+3 -3
View File
@@ -22,7 +22,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Cut.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <BRepBuilderAPI_MakeFace.hxx>
# include <BRepBuilderAPI_MakeWire.hxx>
# include <BRepBuilderAPI_Sewing.hxx>
@@ -266,7 +266,7 @@ void ExtrusionHelper::makeDraft(const TopoDS_Shape& shape,
// get MomentOfInertia of first shape
BRepGProp::VolumeProperties(*itOuter, tempProperties);
momentOfInertiaInitial = tempProperties.MomentOfInertia(gp_Ax1(gp_Pnt(), direction));
BRepAlgoAPI_Cut mkCut(*itOuter, *itInner);
FCBRepAlgoAPI_Cut mkCut(*itOuter, *itInner);
if (!mkCut.IsDone())
Standard_Failure::Raise("Extrusion: Final cut out failed");
BRepGProp::VolumeProperties(mkCut.Shape(), tempProperties);
@@ -346,7 +346,7 @@ void ExtrusionHelper::checkInnerWires(std::vector<bool>& isInnerWire, const gp_D
// get MomentOfInertia of first shape
BRepGProp::VolumeProperties(*itInner, tempProperties);
momentOfInertiaInitial = tempProperties.MomentOfInertia(gp_Ax1(gp_Pnt(), direction));
BRepAlgoAPI_Cut mkCut(*itInner, *itOuter);
FCBRepAlgoAPI_Cut mkCut(*itInner, *itOuter);
if (!mkCut.IsDone())
Standard_Failure::Raise("Extrusion: Cut out failed");
BRepGProp::VolumeProperties(mkCut.Shape(), tempProperties);
@@ -0,0 +1,80 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#include <FCBRepAlgoAPI_BooleanOperation.h>
#include <BRepBndLib.hxx>
#include <Bnd_Box.hxx>
#include <BRepCheck_Analyzer.hxx>
#include <TopoDS_Shape.hxx>
#include <Precision.hxx>
#include <FuzzyHelper.h>
FCBRepAlgoAPI_BooleanOperation::FCBRepAlgoAPI_BooleanOperation()
{
SetRunParallel(Standard_True);
SetNonDestructive(Standard_True);
}
FCBRepAlgoAPI_BooleanOperation::FCBRepAlgoAPI_BooleanOperation(const TopoDS_Shape& theS1,
const TopoDS_Shape& theS2,
const BOPAlgo_Operation theOperation)
: BRepAlgoAPI_BooleanOperation(theS1, theS2, theOperation)
{
if (!BRepCheck_Analyzer(theS1).IsValid()){
Standard_ConstructionError::Raise("Base shape is not valid for boolean operation");
}
if (! BRepCheck_Analyzer(theS2).IsValid()){
Standard_ConstructionError::Raise("Tool shape is not valid for boolean operation");
}
setAutoFuzzy();
SetRunParallel(Standard_True);
SetNonDestructive(Standard_True);
}
void FCBRepAlgoAPI_BooleanOperation::setAutoFuzzy()
{
FCBRepAlgoAPIHelper::setAutoFuzzy(this);
}
void FCBRepAlgoAPIHelper::setAutoFuzzy(BRepAlgoAPI_BooleanOperation* op) {
Bnd_Box bounds;
for (TopTools_ListOfShape::Iterator it(op->Arguments()); it.More(); it.Next())
BRepBndLib::Add(it.Value(), bounds);
for (TopTools_ListOfShape::Iterator it(op->Tools()); it.More(); it.Next())
BRepBndLib::Add(it.Value(), bounds);
op->SetFuzzyValue(Part::FuzzyHelper::getBooleanFuzzy() * sqrt(bounds.SquareExtent()) * Precision::Confusion());
}
void FCBRepAlgoAPIHelper::setAutoFuzzy(BRepAlgoAPI_BuilderAlgo* op) {
Bnd_Box bounds;
for (TopTools_ListOfShape::Iterator it(op->Arguments()); it.More(); it.Next())
BRepBndLib::Add(it.Value(), bounds);
op->SetFuzzyValue(Part::FuzzyHelper::getBooleanFuzzy() * sqrt(bounds.SquareExtent()) * Precision::Confusion());
}
@@ -0,0 +1,61 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#ifndef FCREPALGOAPIBOOLEANOPERATION_H
#define FCREPALGOAPIBOOLEANOPERATION_H
#include <BRepAlgoAPI_BooleanOperation.hxx>
class FCBRepAlgoAPIHelper
{
public:
static void setAutoFuzzy(BRepAlgoAPI_BooleanOperation* op);
static void setAutoFuzzy(BRepAlgoAPI_BuilderAlgo* op);
};
class FCBRepAlgoAPI_BooleanOperation : public BRepAlgoAPI_BooleanOperation
{
public:
DEFINE_STANDARD_ALLOC
//! Empty constructor
Standard_EXPORT FCBRepAlgoAPI_BooleanOperation();
// set fuzzyness based on size
void setAutoFuzzy();
protected: //! @name Constructors
//! Constructor to perform Boolean operation on only two arguments.
//! Obsolete
Standard_EXPORT FCBRepAlgoAPI_BooleanOperation(const TopoDS_Shape& theS1,
const TopoDS_Shape& theS2,
const BOPAlgo_Operation theOperation);
};
#endif
+42
View File
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#include <FCBRepAlgoAPI_Common.h>
#include <TopoDS_Shape.hxx>
FCBRepAlgoAPI_Common::FCBRepAlgoAPI_Common()
{
myOperation=BOPAlgo_COMMON;
}
FCBRepAlgoAPI_Common::FCBRepAlgoAPI_Common(const TopoDS_Shape& S1,
const TopoDS_Shape& S2)
: FCBRepAlgoAPI_BooleanOperation(S1, S2, BOPAlgo_COMMON)
{
Build();
}
+52
View File
@@ -0,0 +1,52 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#ifndef FCREPALGOAPICOMMON_H
#define FCREPALGOAPICOMMON_H
#include <BRepAlgoAPI_Common.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
class FCBRepAlgoAPI_Common : public FCBRepAlgoAPI_BooleanOperation
{
public:
DEFINE_STANDARD_ALLOC
//! Empty constructor
Standard_EXPORT FCBRepAlgoAPI_Common();
//! Constructor with two shapes
//! <S1> -argument
//! <S2> -tool
//! <anOperation> - the type of the operation
Standard_EXPORT FCBRepAlgoAPI_Common(const TopoDS_Shape& S1,
const TopoDS_Shape& S2);
};
#endif
+42
View File
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#include <FCBRepAlgoAPI_Cut.h>
#include <TopoDS_Shape.hxx>
FCBRepAlgoAPI_Cut::FCBRepAlgoAPI_Cut()
{
myOperation=BOPAlgo_CUT;
}
FCBRepAlgoAPI_Cut::FCBRepAlgoAPI_Cut(const TopoDS_Shape& S1,
const TopoDS_Shape& S2)
: FCBRepAlgoAPI_BooleanOperation(S1, S2, BOPAlgo_CUT)
{
Build();
}
+52
View File
@@ -0,0 +1,52 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#ifndef FCREPALGOAPICUT_H
#define FCREPALGOAPICUT_H
#include <BRepAlgoAPI_Cut.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
class FCBRepAlgoAPI_Cut : public FCBRepAlgoAPI_BooleanOperation
{
public:
DEFINE_STANDARD_ALLOC
//! Empty constructor
Standard_EXPORT FCBRepAlgoAPI_Cut();
//! Constructor with two shapes
//! <S1> -argument
//! <S2> -tool
//! <anOperation> - the type of the operation
Standard_EXPORT FCBRepAlgoAPI_Cut(const TopoDS_Shape& S1,
const TopoDS_Shape& S2);
};
#endif
+42
View File
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#include <FCBRepAlgoAPI_Fuse.h>
#include <TopoDS_Shape.hxx>
FCBRepAlgoAPI_Fuse::FCBRepAlgoAPI_Fuse()
{
myOperation=BOPAlgo_FUSE;
}
FCBRepAlgoAPI_Fuse::FCBRepAlgoAPI_Fuse(const TopoDS_Shape& S1,
const TopoDS_Shape& S2)
: FCBRepAlgoAPI_BooleanOperation(S1, S2, BOPAlgo_FUSE)
{
Build();
}
+53
View File
@@ -0,0 +1,53 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#ifndef FCREPALGOAPIFUSE_H
#define FCREPALGOAPIFUSE_H
#include <BRepAlgoAPI_Fuse.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
class FCBRepAlgoAPI_Fuse : public FCBRepAlgoAPI_BooleanOperation
{
public:
DEFINE_STANDARD_ALLOC
//! Empty constructor
Standard_EXPORT FCBRepAlgoAPI_Fuse();
//! Constructor with two shapes
//! <S1> -argument
//! <S2> -tool
//! <anOperation> - the type of the operation
Standard_EXPORT FCBRepAlgoAPI_Fuse(const TopoDS_Shape& S1,
const TopoDS_Shape& S2);
};
#endif
@@ -0,0 +1,77 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#include <FCBRepAlgoAPI_Section.h>
#include <BRepBndLib.hxx>
#include <Bnd_Box.hxx>
#include <BRepCheck_Analyzer.hxx>
#include <TopoDS_Shape.hxx>
#include <Precision.hxx>
#include <FuzzyHelper.h>
FCBRepAlgoAPI_Section::FCBRepAlgoAPI_Section()
{
SetRunParallel(Standard_True);
SetNonDestructive(Standard_True);
}
FCBRepAlgoAPI_Section::FCBRepAlgoAPI_Section(const TopoDS_Shape& S1, const TopoDS_Shape& S2, const Standard_Boolean PerformNow)
: BRepAlgoAPI_Section(S1,S2,false)
{
if (!BRepCheck_Analyzer(S1).IsValid()){
Standard_ConstructionError::Raise("Base shape is not valid for boolean operation");
}
if (! BRepCheck_Analyzer(S2).IsValid()){
Standard_ConstructionError::Raise("Tool shape is not valid for boolean operation");
}
setAutoFuzzy();
SetRunParallel(Standard_True);
SetNonDestructive(Standard_True);
if (PerformNow) Build();
}
FCBRepAlgoAPI_Section::FCBRepAlgoAPI_Section
(const TopoDS_Shape& Sh,
const gp_Pln& Pl,
const Standard_Boolean PerformNow)
:
BRepAlgoAPI_Section(Sh,Pl,false)
{
if (!BRepCheck_Analyzer(Sh).IsValid()){
Standard_ConstructionError::Raise("Base shape is not valid for boolean operation");
}
setAutoFuzzy();
SetRunParallel(Standard_True);
if (PerformNow) Build();
}
void FCBRepAlgoAPI_Section::setAutoFuzzy()
{
FCBRepAlgoAPIHelper::setAutoFuzzy(this);
}
+65
View File
@@ -0,0 +1,65 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
/**
* FCBRepAlgoAPI provides a wrapper for various OCCT functions.
*/
#ifndef FCREPALGOAPISECTION_H
#define FCREPALGOAPISECTION_H
#include <BRepAlgoAPI_Section.hxx>
#include <BRepBuilderAPI_Command.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
class FCBRepAlgoAPI_Section : public BRepAlgoAPI_Section
{
public:
DEFINE_STANDARD_ALLOC
//! Empty constructor
Standard_EXPORT FCBRepAlgoAPI_Section();
//! Constructor with two shapes
//! <S1> -argument
//! <S2> -tool
//! <PerformNow> - the flag:
//! if <PerformNow>=True - the algorithm is performed immediately
//! Obsolete
Standard_EXPORT FCBRepAlgoAPI_Section(const TopoDS_Shape& S1, const TopoDS_Shape& S2, const Standard_Boolean PerformNow = Standard_True);
//! Constructor with two shapes
//! <S1> - argument
//! <Pl> - tool
//! <PerformNow> - the flag:
//! if <PerformNow>=True - the algorithm is performed immediately
//! Obsolete
Standard_EXPORT FCBRepAlgoAPI_Section(const TopoDS_Shape& S1, const gp_Pln& Pl, const Standard_Boolean PerformNow = Standard_True);
// set fuzzyness based on size
void setAutoFuzzy();
};
#endif
+1 -1
View File
@@ -24,7 +24,7 @@
#ifndef _PreComp_
# include <memory>
# include <BRepAlgoAPI_BooleanOperation.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
# include <BRepCheck_Analyzer.hxx>
# include <Standard_Failure.hxx>
#endif
+1 -1
View File
@@ -27,7 +27,7 @@
#include <App/PropertyLinks.h>
#include "PartFeature.h"
class BRepAlgoAPI_BooleanOperation;
class FCBRepAlgoAPI_BooleanOperation;
namespace Part
{
+2 -2
View File
@@ -22,7 +22,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Common.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
# include <BRepCheck_Analyzer.hxx>
# include <Standard_Failure.hxx>
# include <TopExp.hxx>
@@ -53,7 +53,7 @@ const char *Common::opCode() const
BRepAlgoAPI_BooleanOperation* Common::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const
{
// Let's call algorithm computing a section operation:
return new BRepAlgoAPI_Common(base, tool);
return new FCBRepAlgoAPI_Common(base, tool);
}
// ----------------------------------------------------
+2 -2
View File
@@ -22,7 +22,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Cut.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
#endif
#include "FeaturePartCut.h"
@@ -43,5 +43,5 @@ const char *Cut::opCode() const
BRepAlgoAPI_BooleanOperation* Cut::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const
{
// Let's call algorithm computing a cut operation:
return new BRepAlgoAPI_Cut(base, tool);
return new FCBRepAlgoAPI_Cut(base, tool);
}
+4 -3
View File
@@ -22,7 +22,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepCheck_Analyzer.hxx>
# include <Standard_Failure.hxx>
# include <TopoDS_Iterator.hxx>
@@ -51,7 +51,7 @@ Fuse::Fuse() = default;
BRepAlgoAPI_BooleanOperation* Fuse::makeOperation(const TopoDS_Shape& base, const TopoDS_Shape& tool) const
{
// Let's call algorithm computing a fuse operation:
return new BRepAlgoAPI_Fuse(base, tool);
return new FCBRepAlgoAPI_Fuse(base, tool);
}
const char *Fuse::opCode() const
@@ -114,7 +114,7 @@ App::DocumentObjectExecReturn *MultiFuse::execute()
if (shapes.size() >= 2) {
try {
std::vector<ShapeHistory> history;
BRepAlgoAPI_Fuse mkFuse;
FCBRepAlgoAPI_Fuse mkFuse;
TopTools_ListOfShape shapeArguments, shapeTools;
const TopoShape& shape = shapes.front();
if (shape.isNull()) {
@@ -131,6 +131,7 @@ App::DocumentObjectExecReturn *MultiFuse::execute()
mkFuse.SetArguments(shapeArguments);
mkFuse.SetTools(shapeTools);
mkFuse.setAutoFuzzy();
mkFuse.Build();
if (!mkFuse.IsDone()) {
+3 -2
View File
@@ -22,7 +22,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Section.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
# include <Standard_Version.hxx>
#endif
@@ -57,10 +57,11 @@ BRepAlgoAPI_BooleanOperation* Section::makeOperation(const TopoDS_Shape& base, c
// Let's call algorithm computing a section operation:
bool approx = Approximation.getValue();
std::unique_ptr<BRepAlgoAPI_Section> mkSection(new BRepAlgoAPI_Section());
std::unique_ptr<FCBRepAlgoAPI_Section> mkSection(new FCBRepAlgoAPI_Section());
mkSection->Init1(base);
mkSection->Init2(tool);
mkSection->Approximation(approx);
mkSection->setAutoFuzzy();
mkSection->Build();
if (!mkSection->IsDone())
throw Base::RuntimeError("Section failed");
+38
View File
@@ -0,0 +1,38 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#include "PreCompiled.h"
#include <FuzzyHelper.h>
using namespace Part;
double FuzzyHelper::BooleanFuzzy = 1.0;
double FuzzyHelper::getBooleanFuzzy() {
return BooleanFuzzy;
}
void FuzzyHelper::setBooleanFuzzy(const double fuzzy) {
BooleanFuzzy = fuzzy;
}
+48
View File
@@ -0,0 +1,48 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2024 Eric Price (CorvusCorax) *
* <eric.price[at]tuebingen.mpg.de> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#ifndef PART_FUZZYHELPER_H
#define PART_FUZZYHELPER_H
#include <Mod/Part/PartGlobal.h>
namespace Part
{
/**
* @brief The FuzzyHelper class provides a static helper function to determine fuzzy value for a boolean operation
*/
class PartExport FuzzyHelper
{
public:
static double getBooleanFuzzy();
static void setBooleanFuzzy(const double base);
private:
static double BooleanFuzzy;
};
}
#endif // PART_FUZZYHELPER_H
+10 -5
View File
@@ -115,12 +115,17 @@
#include <BRepAlgo.hxx>
#include <BRepAlgo_NormalProjection.hxx>
#include <BRepAlgoAPI_BooleanOperation.hxx>
#include <BRepAlgoAPI_Common.hxx>
#include <BRepAlgoAPI_Cut.hxx>
//#include <BRepAlgoAPI_BooleanOperation.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
//#include <BRepAlgoAPI_Common.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
//#include <BRepAlgoAPI_Cut.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <BRepAlgoAPI_Defeaturing.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <BRepAlgoAPI_Section.hxx>
//#include <BRepAlgoAPI_Fuse.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
//#include <BRepAlgoAPI_Section.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
#include <BRepBndLib.hxx>
+4 -4
View File
@@ -26,8 +26,8 @@
# include <sstream>
# include <Bnd_Box.hxx>
# include <BRepAdaptor_Curve.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <BRepAlgoAPI_Common.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
# include <BRepBndLib.hxx>
# include <BRepBuilderAPI_MakeEdge.hxx>
# include <BRepBuilderAPI_MakeFace.hxx>
@@ -1921,7 +1921,7 @@ bool Part::checkIntersection(const TopoDS_Shape& first, const TopoDS_Shape& seco
if (touch_is_intersection) {
// If both shapes fuse to a single solid, then they intersect
BRepAlgoAPI_Fuse mkFuse(first, second);
FCBRepAlgoAPI_Fuse mkFuse(first, second);
if (!mkFuse.IsDone())
return false;
if (mkFuse.Shape().IsNull())
@@ -1939,7 +1939,7 @@ bool Part::checkIntersection(const TopoDS_Shape& first, const TopoDS_Shape& seco
}
} else {
// If both shapes have common material, then they intersect
BRepAlgoAPI_Common mkCommon(first, second);
FCBRepAlgoAPI_Common mkCommon(first, second);
if (!mkCommon.IsDone())
return false;
if (mkCommon.Shape().IsNull())
+1 -1
View File
@@ -187,7 +187,7 @@ protected:
/**
* Build a history of changes
* MakeShape: The operation that created the changes, e.g. BRepAlgoAPI_Common
* MakeShape: The operation that created the changes, e.g. FCBRepAlgoAPI_Common
* type: The type of object we are interested in, e.g. TopAbs_FACE
* newS: The new shape that was created by the operation
* oldS: The original shape prior to the operation
+1 -1
View File
@@ -131,7 +131,7 @@ struct PartExport ShapeHistory {
ShapeHistory() {}
/**
* Build a history of changes
* MakeShape: The operation that created the changes, e.g. BRepAlgoAPI_Common
* MakeShape: The operation that created the changes, e.g. FCBRepAlgoAPI_Common
* type: The type of object we are interested in, e.g. TopAbs_FACE
* newS: The new shape that was created by the operation
* oldS: The original shape prior to the operation
+36 -41
View File
@@ -36,12 +36,12 @@
# include <BRep_Builder.hxx>
# include <BRep_Tool.hxx>
# include <BRepAdaptor_Surface.hxx>
# include <BRepAlgoAPI_Common.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
# include <BRepAdaptor_CompCurve.hxx>
# include <BRepAdaptor_Curve.hxx>
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <BRepAlgoAPI_Section.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
# include <BRepBndLib.hxx>
# include <BRepBuilderAPI_Copy.hxx>
# include <BRepBuilderAPI_FaceError.hxx>
@@ -1698,7 +1698,7 @@ TopoDS_Shape TopoShape::cut(TopoDS_Shape shape) const
return this->_Shape;
if (shape.IsNull())
return this->_Shape;
BRepAlgoAPI_Cut mkCut(this->_Shape, shape);
FCBRepAlgoAPI_Cut mkCut(this->_Shape, shape);
return makeShell(mkCut.Shape());
}
@@ -1706,24 +1706,23 @@ TopoDS_Shape TopoShape::cut(const std::vector<TopoDS_Shape>& shapes, Standard_Re
{
if (this->_Shape.IsNull())
return this->_Shape;
BRepAlgoAPI_Cut mkCut;
FCBRepAlgoAPI_Cut mkCut;
mkCut.SetRunParallel(true);
TopTools_ListOfShape shapeArguments,shapeTools;
shapeArguments.Append(this->_Shape);
for (const auto & shape : shapes) {
if (shape.IsNull())
throw Base::ValueError("Tool shape is null");
if (tolerance > 0.0)
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
shapeTools.Append(BRepBuilderAPI_Copy(shape).Shape());
else
shapeTools.Append(shape);
shapeTools.Append(shape);
}
mkCut.SetArguments(shapeArguments);
mkCut.SetTools(shapeTools);
if (tolerance > 0.0)
if (tolerance > 0.0) {
mkCut.SetFuzzyValue(tolerance);
} else if (tolerance < 0.0) {
mkCut.setAutoFuzzy();
}
mkCut.Build();
if (!mkCut.IsDone())
throw Base::RuntimeError("Multi cut failed");
@@ -1738,7 +1737,7 @@ TopoDS_Shape TopoShape::common(TopoDS_Shape shape) const
return this->_Shape;
if (shape.IsNull())
return shape;
BRepAlgoAPI_Common mkCommon(this->_Shape, shape);
FCBRepAlgoAPI_Common mkCommon(this->_Shape, shape);
return makeShell(mkCommon.Shape());
}
@@ -1746,24 +1745,23 @@ TopoDS_Shape TopoShape::common(const std::vector<TopoDS_Shape>& shapes, Standard
{
if (this->_Shape.IsNull())
return this->_Shape;
BRepAlgoAPI_Common mkCommon;
FCBRepAlgoAPI_Common mkCommon;
mkCommon.SetRunParallel(true);
TopTools_ListOfShape shapeArguments,shapeTools;
shapeArguments.Append(this->_Shape);
for (const auto & shape : shapes) {
if (shape.IsNull())
throw Base::ValueError("Tool shape is null");
if (tolerance > 0.0)
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
shapeTools.Append(BRepBuilderAPI_Copy(shape).Shape());
else
shapeTools.Append(shape);
shapeTools.Append(shape);
}
mkCommon.SetArguments(shapeArguments);
mkCommon.SetTools(shapeTools);
if (tolerance > 0.0)
if (tolerance > 0.0) {
mkCommon.SetFuzzyValue(tolerance);
} else if (tolerance < 0.0) {
mkCommon.setAutoFuzzy();
}
mkCommon.Build();
if (!mkCommon.IsDone())
throw Base::RuntimeError("Multi common failed");
@@ -1778,7 +1776,7 @@ TopoDS_Shape TopoShape::fuse(TopoDS_Shape shape) const
return shape;
if (shape.IsNull())
return this->_Shape;
BRepAlgoAPI_Fuse mkFuse(this->_Shape, shape);
FCBRepAlgoAPI_Fuse mkFuse(this->_Shape, shape);
return makeShell(mkFuse.Shape());
}
@@ -1787,23 +1785,22 @@ TopoDS_Shape TopoShape::fuse(const std::vector<TopoDS_Shape>& shapes, Standard_R
if (this->_Shape.IsNull())
Standard_Failure::Raise("Base shape is null");
BRepAlgoAPI_Fuse mkFuse;
FCBRepAlgoAPI_Fuse mkFuse;
mkFuse.SetRunParallel(true);
TopTools_ListOfShape shapeArguments,shapeTools;
shapeArguments.Append(this->_Shape);
for (const auto & shape : shapes) {
if (shape.IsNull())
throw NullShapeException("Tool shape is null");
if (tolerance > 0.0)
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
shapeTools.Append(BRepBuilderAPI_Copy(shape).Shape());
else
shapeTools.Append(shape);
shapeTools.Append(shape);
}
mkFuse.SetArguments(shapeArguments);
mkFuse.SetTools(shapeTools);
if (tolerance > 0.0)
if (tolerance > 0.0) {
mkFuse.SetFuzzyValue(tolerance);
} else if (tolerance < 0.0) {
mkFuse.setAutoFuzzy();
}
mkFuse.Build();
if (!mkFuse.IsDone())
throw Base::RuntimeError("Multi fuse failed");
@@ -1828,7 +1825,7 @@ TopoDS_Shape TopoShape::section(TopoDS_Shape shape, Standard_Boolean approximate
Standard_Failure::Raise("Base shape is null");
if (shape.IsNull())
Standard_Failure::Raise("Tool shape is null");
BRepAlgoAPI_Section mkSection;
FCBRepAlgoAPI_Section mkSection;
mkSection.Init1(this->_Shape);
mkSection.Init2(shape);
mkSection.Approximation(approximate);
@@ -1845,7 +1842,7 @@ TopoDS_Shape TopoShape::section(const std::vector<TopoDS_Shape>& shapes,
if (this->_Shape.IsNull())
Standard_Failure::Raise("Base shape is null");
BRepAlgoAPI_Section mkSection;
FCBRepAlgoAPI_Section mkSection;
mkSection.SetRunParallel(true);
mkSection.Approximation(approximate);
TopTools_ListOfShape shapeArguments,shapeTools;
@@ -1853,17 +1850,16 @@ TopoDS_Shape TopoShape::section(const std::vector<TopoDS_Shape>& shapes,
for (const auto & shape : shapes) {
if (shape.IsNull())
throw Base::ValueError("Tool shape is null");
if (tolerance > 0.0)
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
shapeTools.Append(BRepBuilderAPI_Copy(shape).Shape());
else
shapeTools.Append(shape);
shapeTools.Append(shape);
}
mkSection.SetArguments(shapeArguments);
mkSection.SetTools(shapeTools);
if (tolerance > 0.0)
if (tolerance > 0.0) {
mkSection.SetFuzzyValue(tolerance);
} else if (tolerance < 0.0) {
mkSection.setAutoFuzzy();
}
mkSection.Build();
if (!mkSection.IsDone())
throw Base::RuntimeError("Multi section failed");
@@ -1915,15 +1911,14 @@ TopoDS_Shape TopoShape::generalFuse(const std::vector<TopoDS_Shape> &sOthers, St
for (const TopoDS_Shape &it: sOthers) {
if (it.IsNull())
throw NullShapeException("Tool shape is null");
if (tolerance > 0.0)
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
GFAArguments.Append(BRepBuilderAPI_Copy(it).Shape());
else
GFAArguments.Append(it);
}
mkGFA.SetArguments(GFAArguments);
if (tolerance > 0.0)
if (tolerance > 0.0) {
mkGFA.SetFuzzyValue(tolerance);
} else if (tolerance < 0.0) {
FCBRepAlgoAPIHelper::setAutoFuzzy(&mkGFA);
}
mkGFA.SetNonDestructive(Standard_True);
mkGFA.Build();
if (!mkGFA.IsDone())
+12 -12
View File
@@ -500,15 +500,15 @@ public:
/** @name Boolean operation*/
//@{
TopoDS_Shape cut(TopoDS_Shape) const;
TopoDS_Shape cut(const std::vector<TopoDS_Shape>&, Standard_Real tolerance = 0.0) const;
TopoDS_Shape cut(const std::vector<TopoDS_Shape>&, Standard_Real tolerance = -1.0) const;
TopoDS_Shape common(TopoDS_Shape) const;
TopoDS_Shape common(const std::vector<TopoDS_Shape>&, Standard_Real tolerance = 0.0) const;
TopoDS_Shape common(const std::vector<TopoDS_Shape>&, Standard_Real tolerance = -1.0) const;
TopoDS_Shape fuse(TopoDS_Shape) const;
TopoDS_Shape fuse(const std::vector<TopoDS_Shape>&, Standard_Real tolerance = 0.0) const;
TopoDS_Shape fuse(const std::vector<TopoDS_Shape>&, Standard_Real tolerance = -1.0) const;
TopoDS_Shape oldFuse(TopoDS_Shape) const;
TopoDS_Shape section(TopoDS_Shape, Standard_Boolean approximate = Standard_False) const;
TopoDS_Shape section(const std::vector<TopoDS_Shape>&,
Standard_Real tolerance = 0.0,
Standard_Real tolerance = -1.0,
Standard_Boolean approximate = Standard_False) const;
std::list<TopoDS_Wire> slice(const Base::Vector3d&, double) const;
TopoDS_Compound slices(const Base::Vector3d&, const std::vector<double>&) const;
@@ -1356,7 +1356,7 @@ public:
*/
TopoShape& makeElementGeneralFuse(const std::vector<TopoShape>& sources,
std::vector<std::vector<TopoShape>>& modified,
double tol = 0,
double tol = -1.0,
const char* op = nullptr);
/** Make a fusion of input shapes
@@ -1373,7 +1373,7 @@ public:
*/
TopoShape& makeElementFuse(const std::vector<TopoShape>& sources,
const char* op = nullptr,
double tol = 0);
double tol = -1.0);
/** Make a fusion of this shape and an input shape
*
* @param source: the source shape
@@ -1384,7 +1384,7 @@ public:
* @return Return the new shape. The TopoShape itself is not modified.
*/
TopoShape
makeElementFuse(const TopoShape& source, const char* op = nullptr, double tol = 0) const
makeElementFuse(const TopoShape& source, const char* op = nullptr, double tol = -1.0) const
{
return TopoShape(0, Hasher).makeElementFuse({*this, source}, op, tol);
}
@@ -1402,7 +1402,7 @@ public:
* for the same shape in the same line of code.
*/
TopoShape&
makeElementCut(const std::vector<TopoShape>& sources, const char* op = nullptr, double tol = 0);
makeElementCut(const std::vector<TopoShape>& sources, const char* op = nullptr, double tol = -1.0);
/** Make a boolean cut of this shape with an input shape
*
* @param source: the source shape
@@ -1413,7 +1413,7 @@ public:
* @return Return the new shape. The TopoShape itself is not modified.
*/
TopoShape
makeElementCut(const TopoShape& source, const char* op = nullptr, double tol = 0) const
makeElementCut(const TopoShape& source, const char* op = nullptr, double tol = -1.0) const
{
return TopoShape(0, Hasher).makeElementCut({*this, source}, op, tol);
}
@@ -1875,7 +1875,7 @@ public:
TopoShape& makeElementBoolean(const char* maker,
const std::vector<TopoShape>& sources,
const char* op = nullptr,
double tol = 0.0);
double tol = -1.0);
/** Generalized shape making with mapped element name from shape history
*
* @param maker: op code from TopoShapeOpCodes
@@ -1893,7 +1893,7 @@ public:
TopoShape& makeElementBoolean(const char* maker,
const TopoShape& source,
const char* op = nullptr,
double tol = 0.0);
double tol = -1.0);
/** Generalized shape making with mapped element name from shape history
*
@@ -1907,7 +1907,7 @@ public:
* is not modified.
*/
TopoShape
makeElementBoolean(const char* maker, const char* op = nullptr, double tol = 0.0) const
makeElementBoolean(const char* maker, const char* op = nullptr, double tol = -1.0) const
{
return TopoShape(0, Hasher).makeElementBoolean(maker, *this, op, tol);
}
+14 -20
View File
@@ -41,11 +41,11 @@
#include <BRepTools.hxx>
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <BRepAlgoAPI_BooleanOperation.hxx>
#include <BRepAlgoAPI_Common.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_BooleanOperation.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_FindPlane.hxx>
#include <BRepBuilderAPI_GTransform.hxx>
@@ -4055,15 +4055,13 @@ TopoShape& TopoShape::makeElementGeneralFuse(const std::vector<TopoShape>& _shap
if (shape.isNull()) {
FC_THROWM(NullShapeException, "Null input shape");
}
if (tol > 0.0) {
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
shape = shape.makeElementCopy();
}
GFAArguments.Append(shape.getShape());
}
mkGFA.SetArguments(GFAArguments);
if (tol > 0.0) {
mkGFA.SetFuzzyValue(tol);
} else if (tol < 0.0) {
FCBRepAlgoAPIHelper::setAutoFuzzy(&mkGFA);
}
mkGFA.SetNonDestructive(Standard_True);
mkGFA.Build();
@@ -5666,7 +5664,7 @@ TopoShape& TopoShape::makeElementBoolean(const char* maker,
}
}
if (tolerance > 0.0 && _shapes.empty()) {
if (tolerance != 0.0 && _shapes.empty()) {
_shapes = shapes;
}
@@ -5686,16 +5684,16 @@ TopoShape& TopoShape::makeElementBoolean(const char* maker,
std::unique_ptr<BRepAlgoAPI_BooleanOperation> mk;
if (strcmp(maker, Part::OpCodes::Fuse) == 0) {
mk.reset(new BRepAlgoAPI_Fuse);
mk.reset(new FCBRepAlgoAPI_Fuse);
}
else if (strcmp(maker, Part::OpCodes::Cut) == 0) {
mk.reset(new BRepAlgoAPI_Cut);
mk.reset(new FCBRepAlgoAPI_Cut);
}
else if (strcmp(maker, Part::OpCodes::Common) == 0) {
mk.reset(new BRepAlgoAPI_Common);
mk.reset(new FCBRepAlgoAPI_Common);
}
else if (strcmp(maker, Part::OpCodes::Section) == 0) {
mk.reset(new BRepAlgoAPI_Section);
mk.reset(new FCBRepAlgoAPI_Section);
buildShell = false;
}
else {
@@ -5712,12 +5710,6 @@ TopoShape& TopoShape::makeElementBoolean(const char* maker,
if (++i == 0) {
shapeArguments.Append(shape.getShape());
}
else if (tolerance > 0.0) {
auto& s = _shapes[i];
// workaround for http://dev.opencascade.org/index.php?q=node/1056#comment-520
s.setShape(BRepBuilderAPI_Copy(s.getShape()).Shape(), false);
shapeTools.Append(s.getShape());
}
else {
shapeTools.Append(shape.getShape());
}
@@ -5739,6 +5731,8 @@ TopoShape& TopoShape::makeElementBoolean(const char* maker,
mk->SetTools(shapeTools);
if (tolerance > 0.0) {
mk->SetFuzzyValue(tolerance);
} else if (tolerance < 0.0) {
FCBRepAlgoAPIHelper::setAutoFuzzy(mk.get());
}
mk->Build();
makeElementShape(*mk, inputs, op);
+1
View File
@@ -30,6 +30,7 @@
#endif
#include <Mod/Part/App/Interface.h>
#include <Mod/Part/App/FuzzyHelper.h>
#include <Mod/Part/App/IGES/ImportExportSettings.h>
#include <Mod/Part/App/OCAF/ImportExportSettings.h>
#include <Mod/Part/App/STEP/ImportExportSettings.h>
+5
View File
@@ -158,6 +158,11 @@
<extends>QCheckBox</extends>
<header>Gui/PrefWidgets.h</header>
</customwidget>
<customwidget>
<class>Gui::PrefDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>Gui/PrefWidgets.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
+3 -3
View File
@@ -23,9 +23,9 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Common.hxx>
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <Standard_Failure.hxx>
#endif
+2 -2
View File
@@ -24,7 +24,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRep_Builder.hxx>
# include <BRepFeat_MakePrism.hxx>
# include <BRepPrimAPI_MakePrism.hxx>
@@ -275,7 +275,7 @@ void FeatureExtrude::generatePrism(TopoDS_Shape& prism,
throw Base::RuntimeError("ProfileBased: Up to face: Could not extrude the sketch!");
auto onePrism = PrismMaker.Shape();
BRepAlgoAPI_Fuse fuse(prism, onePrism);
FCBRepAlgoAPI_Fuse fuse(prism, onePrism);
prism = fuse.Shape();
}
}
+1 -1
View File
@@ -23,7 +23,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Cut.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <BRepPrimAPI_MakeRevol.hxx>
# include <BRepFeat_MakeRevol.hxx>
# include <gp_Lin.hxx>
+6 -6
View File
@@ -24,9 +24,9 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAdaptor_Surface.hxx>
# include <BRepAlgoAPI_Common.hxx>
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepBndLib.hxx>
# include <BRepBuilderAPI_MakeSolid.hxx>
# include <BRepBuilderAPI_Sewing.hxx>
@@ -256,7 +256,7 @@ App::DocumentObjectExecReturn* Helix::execute()
if (getAddSubType() == FeatureAddSub::Additive) {
BRepAlgoAPI_Fuse mkFuse(base.getShape(), result);
FCBRepAlgoAPI_Fuse mkFuse(base.getShape(), result);
if (!mkFuse.IsDone()){
return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Error: Adding the helix failed"));
}
@@ -280,14 +280,14 @@ App::DocumentObjectExecReturn* Helix::execute()
TopoShape boolOp;
if (Outside.getValue()) { // are we subtracting the inside or the outside of the profile.
BRepAlgoAPI_Common mkCom(result, base.getShape());
FCBRepAlgoAPI_Common mkCom(result, base.getShape());
if (!mkCom.IsDone())
return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Error: Intersecting the helix failed"));
boolOp = this->getSolid(mkCom.Shape());
}
else {
BRepAlgoAPI_Cut mkCut(base.getShape(), result);
FCBRepAlgoAPI_Cut mkCut(base.getShape(), result);
if (!mkCut.IsDone())
return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Error: Subtracting the helix failed"));
boolOp = this->getSolid(mkCut.Shape());
+3 -3
View File
@@ -25,8 +25,8 @@
#ifndef _PreComp_
# include <gp_Dir.hxx>
# include <BRep_Builder.hxx>
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepBuilderAPI_MakeEdge.hxx>
# include <BRepBuilderAPI_MakeFace.hxx>
# include <BRepBuilderAPI_MakeSolid.hxx>
@@ -1879,7 +1879,7 @@ App::DocumentObjectExecReturn* Hole::execute()
TopoDS_Shape protoThread = makeThread(xDir, zDir, length);
// fuse the thread to the hole
BRepAlgoAPI_Fuse mkFuse(protoHole, protoThread);
FCBRepAlgoAPI_Fuse mkFuse(protoHole, protoThread);
if (!mkFuse.IsDone())
return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Error: Adding the thread failed"));
+1 -1
View File
@@ -23,7 +23,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <Precision.hxx>
# include <TopExp_Explorer.hxx>
# include <TopoDS.hxx>
+4 -4
View File
@@ -23,8 +23,8 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepBndLib.hxx>
# include <BRepBuilderAPI_Sewing.hxx>
# include <BRepBuilderAPI_MakeSolid.hxx>
@@ -387,7 +387,7 @@ App::DocumentObjectExecReturn *Pipe::execute()
if (getAddSubType() == FeatureAddSub::Additive) {
BRepAlgoAPI_Fuse mkFuse(base.getShape(), result);
FCBRepAlgoAPI_Fuse mkFuse(base.getShape(), result);
if (!mkFuse.IsDone())
return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Adding the pipe failed"));
// we have to get the solids (fuse sometimes creates compounds)
@@ -407,7 +407,7 @@ App::DocumentObjectExecReturn *Pipe::execute()
}
else if (getAddSubType() == FeatureAddSub::Subtractive) {
BRepAlgoAPI_Cut mkCut(base.getShape(), result);
FCBRepAlgoAPI_Cut mkCut(base.getShape(), result);
if (!mkCut.IsDone())
return new App::DocumentObjectExecReturn(QT_TRANSLATE_NOOP("Exception", "Subtracting the pipe failed"));
// we have to get the solids (fuse sometimes creates compounds)
+1 -1
View File
@@ -23,7 +23,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Cut.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <gp_Dir.hxx>
# include <Precision.hxx>
# include <TopExp_Explorer.hxx>
+2 -2
View File
@@ -24,8 +24,8 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepPrim_Cylinder.hxx>
# include <BRepAlgoAPI_Cut.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepBuilderAPI_GTransform.hxx>
# include <BRepBuilderAPI_MakeFace.hxx>
# include <BRepBuilderAPI_MakePolygon.hxx>
+1 -1
View File
@@ -23,7 +23,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepPrimAPI_MakeRevol.hxx>
# include <BRepFeat_MakeRevol.hxx>
# include <gp_Lin.hxx>
@@ -24,8 +24,8 @@
#ifndef _PreComp_
#include <Bnd_Box.hxx>
#include <BRep_Builder.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_Transform.hxx>
@@ -635,7 +635,16 @@ class TestTopologicalNamingProblem(unittest.TestCase):
# Assert UpToFace element map is correct
self.assertEqual(self.countFacesEdgesVertexes(revolution.Shape.ElementReverseMap),
(8, 18, 12))
self.assertEqual( revolution.Shape.ElementReverseMap["Face8"].count(";"), 7)
# Assertions modified/added while reviewing PR#17119 by CalligaroV
# Previously the condition counted the number of ";" (element map operations prefix)
# If the number of operations changes then the number of ";" will change accordingly
#
# However, it is more useful to count the number of times an elemement name is
# present in the MappedName of an element (a MappedName is definined also using the
# element names - "Vertex*", "Edge*", "Face*" - used by an OCCT operation to generate
# output elements)
self.assertEqual( revolution.Shape.ElementReverseMap["Face8"].count("Face8"), 3)
self.assertEqual( revolution.Shape.ElementReverseMap["Face8"].count("Face10"), 3)
def testPartDesignElementMapLoft(self):
# Arrange
@@ -767,10 +776,10 @@ class TestTopologicalNamingProblem(unittest.TestCase):
self.Doc.recompute()
# Assert
self.assertEqual(len(body.Shape.childShapes()), 1)
self.assertEqual(body.Shape.childShapes()[0].ElementMapSize, 55)
self.assertEqual(body.Shape.childShapes()[0].ElementMapSize, 51)
self.assertEqual(body.Shape.ElementMapSize, 51)
self.assertEqual(sketch.Shape.ElementMapSize, 12)
self.assertEqual(pocket.Shape.ElementMapSize, 55)
self.assertEqual(pocket.Shape.ElementMapSize, 51)
self.assertNotEqual(
pocket.Shape.ElementReverseMap["Vertex1"], "Vertex1"
) # NewName, not OldName
@@ -1856,7 +1865,7 @@ class TestTopologicalNamingProblem(unittest.TestCase):
edges = [name for name in reverseMap.keys() if name.startswith("Edge")]
vertexes = [name for name in reverseMap.keys() if name.startswith("Vertex")]
self.assertEqual(len(body.Shape.childShapes()), 1)
self.assertEqual(body.Shape.childShapes()[0].ElementMapSize, 64)
self.assertEqual(body.Shape.childShapes()[0].ElementMapSize, 62)
self.assertEqual(len(reverseMap), 62)
self.assertEqual(len(faces), 12)
self.assertEqual(len(edges), 30)
+1 -1
View File
@@ -58,7 +58,7 @@
// OpenCasCade
#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
+3 -3
View File
@@ -28,7 +28,7 @@
#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
@@ -7671,7 +7671,7 @@ int SketchObject::addExternal(App::DocumentObject *Obj, const char* SubName, boo
continue;
if (intersection) {
try {
BRepAlgoAPI_Section maker(subShape, sketchPlane);
FCBRepAlgoAPI_Section maker(subShape, sketchPlane);
if (!maker.IsDone() || maker.Shape().IsNull())
continue;
} catch (Standard_Failure &) {
@@ -9025,7 +9025,7 @@ void SketchObject::rebuildExternalGeometry(bool defining, bool addIntersection)
if (intersection && (refSubShape.ShapeType() == TopAbs_EDGE
|| refSubShape.ShapeType() == TopAbs_FACE))
{
BRepAlgoAPI_Section maker(refSubShape, sketchPlane);
FCBRepAlgoAPI_Section maker(refSubShape, sketchPlane);
maker.Approximation(Standard_True);
if (!maker.IsDone())
FC_THROWM(Base::CADKernelError,"Failed to get intersection");
+3 -3
View File
@@ -43,7 +43,7 @@
#ifndef _PreComp_
#include <BRepAdaptor_Curve.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
@@ -206,7 +206,7 @@ TopoDS_Shape DrawBrokenView::apply1Break(const App::DocumentObject& breakObj, co
moveDir0.Normalize();
moveDir0 = DU::closestBasisOriented(moveDir0);
auto halfSpace0 = makeHalfSpace(breakPoints.first, moveDir0, breakPoints.second);
BRepAlgoAPI_Cut mkCut0(inShape, halfSpace0);
FCBRepAlgoAPI_Cut mkCut0(inShape, halfSpace0);
if (!mkCut0.IsDone()) {
Base::Console().Message("DBV::apply1Break - cut0 failed\n");
}
@@ -218,7 +218,7 @@ TopoDS_Shape DrawBrokenView::apply1Break(const App::DocumentObject& breakObj, co
moveDir1.Normalize();
moveDir1 = DU::closestBasisOriented(moveDir1);
auto halfSpace1 = makeHalfSpace(breakPoints.second, moveDir1, breakPoints.first);
BRepAlgoAPI_Cut mkCut1(inShape, halfSpace1);
FCBRepAlgoAPI_Cut mkCut1(inShape, halfSpace1);
if (!mkCut1.IsDone()) {
Base::Console().Message("DBV::apply1Break - cut1 failed\n");
}
+3 -3
View File
@@ -59,8 +59,8 @@
#ifndef _PreComp_
#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRepAlgoAPI_Common.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
#include <BRepAlgo_NormalProjection.hxx>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_Copy.hxx>
@@ -1176,7 +1176,7 @@ bool DrawComplexSection::boxesIntersect(TopoDS_Face& face, TopoDS_Shape& shape)
TopoDS_Shape DrawComplexSection::shapeShapeIntersect(const TopoDS_Shape& shape0,
const TopoDS_Shape& shape1)
{
BRepAlgoAPI_Common anOp;
FCBRepAlgoAPI_Common anOp;
anOp.SetFuzzyValue(EWTOLERANCE);
TopTools_ListOfShape anArg1, anArg2;
anArg1.Append(shape0);
+2 -2
View File
@@ -28,7 +28,7 @@
#include <Bnd_Box.hxx>
#include <BRep_Builder.hxx>
#include <BRepAlgoAPI_Common.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
@@ -345,7 +345,7 @@ std::vector<LineSet> DrawGeomHatch::getTrimmedLines(DrawViewPart* source,
grid = mkTransTranslate.Shape();
//Common(Compound, Face)
BRepAlgoAPI_Common mkCommon(face, grid);
FCBRepAlgoAPI_Common mkCommon(face, grid);
if (!mkCommon.IsDone() ||
mkCommon.Shape().IsNull()) {
return result;
+4 -4
View File
@@ -29,8 +29,8 @@
#include <Bnd_Box.hxx>
#include <BRep_Tool.hxx>
#include <BRepAdaptor_Curve.hxx>
#include <BRepAlgoAPI_Common.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
#include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
@@ -645,7 +645,7 @@ int DrawProjectSplit::isSubset(const TopoDS_Edge &edge0, const TopoDS_Edge &edge
}
//bboxes of edges intersect
BRepAlgoAPI_Common anOp;
FCBRepAlgoAPI_Common anOp;
anOp.SetFuzzyValue (FUZZYADJUST * EWTOLERANCE);
TopTools_ListOfShape anArg1, anArg2;
anArg1.Append (edge0);
@@ -683,7 +683,7 @@ int DrawProjectSplit::isSubset(const TopoDS_Edge &edge0, const TopoDS_Edge &edge
std::vector<TopoDS_Edge> DrawProjectSplit::fuseEdges(const TopoDS_Edge &edge0, const TopoDS_Edge &edge1)
{
std::vector<TopoDS_Edge> edgeList;
BRepAlgoAPI_Fuse anOp;
FCBRepAlgoAPI_Fuse anOp;
anOp.SetFuzzyValue (FUZZYADJUST * EWTOLERANCE);
TopTools_ListOfShape anArg1, anArg2;
anArg1.Append (edge0);
+4 -4
View File
@@ -23,7 +23,7 @@
#include "PreCompiled.h"
#ifndef _PreComp_
#include <BRepAlgoAPI_Common.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Common.h>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
@@ -294,7 +294,7 @@ void DrawViewDetail::makeDetailShape(const TopoDS_Shape& shape3d, DrawViewPart*
TopExp_Explorer expl1(copyShape, TopAbs_SOLID);
for (; expl1.More(); expl1.Next()) {
const TopoDS_Solid& s = TopoDS::Solid(expl1.Current());
BRepAlgoAPI_Common mkCommon(s, tool);
FCBRepAlgoAPI_Common mkCommon(s, tool);
if (!mkCommon.IsDone()) {
continue;
}
@@ -313,7 +313,7 @@ void DrawViewDetail::makeDetailShape(const TopoDS_Shape& shape3d, DrawViewPart*
TopExp_Explorer expl2(copyShape, TopAbs_SHELL, TopAbs_SOLID);
for (; expl2.More(); expl2.Next()) {
const TopoDS_Shell& s = TopoDS::Shell(expl2.Current());
BRepAlgoAPI_Common mkCommon(s, tool);
FCBRepAlgoAPI_Common mkCommon(s, tool);
if (!mkCommon.IsDone()) {
continue;
}
@@ -333,7 +333,7 @@ void DrawViewDetail::makeDetailShape(const TopoDS_Shape& shape3d, DrawViewPart*
TopExp_Explorer expl3(copyShape, TopAbs_EDGE, TopAbs_FACE);
for (; expl3.More(); expl3.Next()) {
const TopoDS_Edge& e = TopoDS::Edge(expl3.Current());
BRepAlgoAPI_Common mkCommon(e, tool);
FCBRepAlgoAPI_Common mkCommon(e, tool);
if (!mkCommon.IsDone()) {
continue;
}
+3 -3
View File
@@ -47,7 +47,7 @@
#ifndef _PreComp_
#include <BRepAdaptor_Surface.hxx>
#include <BRepAlgoAPI_Cut.hxx>
#include <Mod/Part/App/FCBRepAlgoAPI_Cut.h>
#include <BRepBndLib.hxx>
#include <BRepBuilderAPI_Copy.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
@@ -510,7 +510,7 @@ void DrawViewSection::makeSectionCut(const TopoDS_Shape& baseShape)
TopExp_Explorer expl(myShape, TopAbs_SOLID);
for (; expl.More(); expl.Next()) {
const TopoDS_Solid& s = TopoDS::Solid(expl.Current());
BRepAlgoAPI_Cut mkCut(s, m_cuttingTool);
FCBRepAlgoAPI_Cut mkCut(s, m_cuttingTool);
if (!mkCut.IsDone()) {
Base::Console().Warning("DVS: Section cut has failed in %s\n", getNameInDocument());
continue;
@@ -527,7 +527,7 @@ void DrawViewSection::makeSectionCut(const TopoDS_Shape& baseShape)
// second cut if requested. Sometimes the first cut includes extra uncut
// pieces.
if (trimAfterCut()) {
BRepAlgoAPI_Cut mkCut2(cutPieces, m_cuttingTool);
FCBRepAlgoAPI_Cut mkCut2(cutPieces, m_cuttingTool);
if (mkCut2.IsDone()) {
m_cutPieces = mkCut2.Shape();
if (debugSection()) {
+2 -2
View File
@@ -29,7 +29,7 @@
# include <Approx_Curve3d.hxx>
# include <BRep_Tool.hxx>
# include <BRepAdaptor_Curve.hxx>
# include <BRepAlgoAPI_Section.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Section.h>
# include <BRepBuilderAPI_MakeEdge.hxx>
# include <BRepBuilderAPI_MakeFace.hxx>
# include <BRepBuilderAPI_MakeVertex.hxx>
@@ -615,7 +615,7 @@ std::vector<Base::Vector3d> BaseGeom::intersection(TechDraw::BaseGeomPtr geom2)
return interPoints;
}
BRepAlgoAPI_Section sectionOp(edge1, edge2);
FCBRepAlgoAPI_Section sectionOp(edge1, edge2);
sectionOp.SetFuzzyValue(FUZZYADJUST*EWTOLERANCE);
sectionOp.SetNonDestructive(true);
+2 -2
View File
@@ -25,7 +25,7 @@
#ifndef _PreComp_
# include <sstream>
# include <BRep_Builder.hxx>
# include <BRepAlgoAPI_Fuse.hxx>
# include <Mod/Part/App/FCBRepAlgoAPI_Fuse.h>
# include <BRepTools.hxx>
# include <TopoDS.hxx>
# include <TopoDS_Iterator.hxx>
@@ -354,7 +354,7 @@ TopoDS_Shape ShapeExtractor::getShapesFused(const std::vector<App::DocumentObjec
it.Next();
for (; it.More(); it.Next()) {
const TopoDS_Shape& aChild = it.Value();
BRepAlgoAPI_Fuse mkFuse(fusedShape, aChild);
FCBRepAlgoAPI_Fuse mkFuse(fusedShape, aChild);
// Let's check if the fusion has been successful
if (!mkFuse.IsDone()) {
Base::Console().Error("SE - Fusion failed\n");
+15
View File
@@ -16,6 +16,7 @@ target_sources(
${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartCut.cpp
${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartFuse.cpp
${CMAKE_CURRENT_SOURCE_DIR}/FeatureRevolution.cpp
${CMAKE_CURRENT_SOURCE_DIR}/FuzzyBoolean.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Geometry.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PartFeature.cpp
${CMAKE_CURRENT_SOURCE_DIR}/PartFeatures.cpp
@@ -31,3 +32,17 @@ target_sources(
${CMAKE_CURRENT_SOURCE_DIR}/TopoShapeMakeShape.cpp
${CMAKE_CURRENT_SOURCE_DIR}/WireJoiner.cpp
)
set(PartTestData_Files
brepfiles/cylinder1.brep
brepfiles/helix1.brep
)
ADD_CUSTOM_TARGET(PartTestData ALL
SOURCES ${PartTestData_Files}
)
fc_target_copy_resource(PartTestData
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_BINARY_DIR}/tests
${PartTestData_Files})
+170
View File
@@ -0,0 +1,170 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
#include <gtest/gtest.h>
#include "Mod/Part/App/FuzzyHelper.h"
#include "Mod/Part/App/FeaturePartImportBrep.h"
#include <src/App/InitApplication.h>
#include <BRepBuilderAPI_Copy.hxx>
#include <BOPAlgo_ArgumentAnalyzer.hxx>
#include "PartTestHelpers.h"
class FuzzyBooleanTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass
{
protected:
static void SetUpTestSuite()
{
tests::initApplication();
}
void SetUp() override
{
createTestDoc();
std::string testPath = App::Application::getHomePath() + "/tests/brepfiles/";
_fuse = dynamic_cast<Part::Fuse*>(_doc->addObject("Part::Fuse"));
_cylinder1 = dynamic_cast<Part::ImportBrep*>(_doc->addObject("Part::ImportBrep"));
_cylinder1->FileName.setValue(testPath + "cylinder1.brep");
_helix1 = dynamic_cast<Part::ImportBrep*>(_doc->addObject("Part::ImportBrep"));
_helix1->FileName.setValue(testPath + "helix1.brep");
// Load
_cylinder1->execute();
_helix1->execute();
// Arrange
_fuse->Base.setValue(_cylinder1);
_fuse->Tool.setValue(_helix1);
}
void TearDown() override
{}
Part::Fuse* _fuse = nullptr; // NOLINT Can't be private in a test framework
Part::ImportBrep* _cylinder1 = nullptr; // NOLINT Can't be private in a test framework
Part::ImportBrep* _helix1 = nullptr; // NOLINT Can't be private in a test framework
};
TEST_F(FuzzyBooleanTest, testLoadedCorrectly)
{
EXPECT_NEAR(PartTestHelpers::getVolume(_cylinder1->Shape.getValue()), 125.6, 1.0);
EXPECT_NEAR(PartTestHelpers::getVolume(_helix1->Shape.getValue()), 33.32, 1.0);
}
TEST_F(FuzzyBooleanTest, testDefaultFuzzy)
{
// Act
_fuse->execute();
// Verify
EXPECT_NEAR(PartTestHelpers::getVolume(_fuse->Shape.getValue()),
PartTestHelpers::getVolume(_helix1->Shape.getValue())
+ PartTestHelpers::getVolume(_cylinder1->Shape.getValue()),
0.1);
// Analyse
Part::TopoShape ts = _fuse->Shape.getValue();
ASSERT_FALSE(ts.isNull());
TopoDS_Shape BOPCopy = BRepBuilderAPI_Copy(ts.getShape()).Shape();
BOPAlgo_ArgumentAnalyzer BOPCheck;
BOPCheck.SetShape1(BOPCopy);
BOPCheck.SelfInterMode() = Standard_True;
BOPCheck.Perform();
// Assert
EXPECT_FALSE(BOPCheck.HasFaulty());
}
TEST_F(FuzzyBooleanTest, testGoodFuzzy)
{
// Act
double oldFuzzy = Part::FuzzyHelper::getBooleanFuzzy();
Part::FuzzyHelper::setBooleanFuzzy(10.0);
_fuse->execute();
EXPECT_FLOAT_EQ(Part::FuzzyHelper::getBooleanFuzzy(), 10.0);
Part::FuzzyHelper::setBooleanFuzzy(oldFuzzy);
// Verify
EXPECT_NEAR(PartTestHelpers::getVolume(_fuse->Shape.getValue()),
PartTestHelpers::getVolume(_helix1->Shape.getValue())
+ PartTestHelpers::getVolume(_cylinder1->Shape.getValue()),
0.1);
// Analyse
Part::TopoShape ts = _fuse->Shape.getValue();
ASSERT_FALSE(ts.isNull());
TopoDS_Shape BOPCopy = BRepBuilderAPI_Copy(ts.getShape()).Shape();
BOPAlgo_ArgumentAnalyzer BOPCheck;
BOPCheck.SetShape1(BOPCopy);
BOPCheck.SelfInterMode() = Standard_True;
BOPCheck.Perform();
// Assert
int result = BOPCheck.HasFaulty();
EXPECT_FALSE(result);
}
TEST_F(FuzzyBooleanTest, testFailsTooSmallFuzzy)
{
// Act
double oldFuzzy = Part::FuzzyHelper::getBooleanFuzzy();
Part::FuzzyHelper::setBooleanFuzzy(0.01);
_fuse->execute();
EXPECT_FLOAT_EQ(Part::FuzzyHelper::getBooleanFuzzy(), 0.01);
Part::FuzzyHelper::setBooleanFuzzy(oldFuzzy);
// Verify
// EXPECT_NEAR(PartTestHelpers::getVolume(_fuse->Shape.getValue()),PartTestHelpers::getVolume(_helix1->Shape.getValue())+PartTestHelpers::getVolume(_cylinder1->Shape.getValue()),0.1);
// // fails on OCCT 7.3 - ignore
// Analyse
Part::TopoShape ts = _fuse->Shape.getValue();
ASSERT_FALSE(ts.isNull());
TopoDS_Shape BOPCopy = BRepBuilderAPI_Copy(ts.getShape()).Shape();
BOPAlgo_ArgumentAnalyzer BOPCheck;
BOPCheck.SetShape1(BOPCopy);
BOPCheck.SelfInterMode() = Standard_True;
BOPCheck.Perform();
// Assert
int result = BOPCheck.HasFaulty();
EXPECT_TRUE(result);
}
TEST_F(FuzzyBooleanTest, testCompletelyFailsTooBigFuzzy)
{
// Act
double oldFuzzy = Part::FuzzyHelper::getBooleanFuzzy();
Part::FuzzyHelper::setBooleanFuzzy(1e10);
int failed = 0;
Part::TopoShape ts;
try {
_fuse->execute();
ts = _fuse->Shape.getValue();
if (ts.isNull()) {
failed = 1;
}
else {
TopoDS_Shape BOPCopy = BRepBuilderAPI_Copy(ts.getShape()).Shape();
BOPAlgo_ArgumentAnalyzer BOPCheck;
BOPCheck.SetShape1(BOPCopy);
BOPCheck.SelfInterMode() = Standard_True;
BOPCheck.Perform();
// Assert
if (BOPCheck.HasFaulty()) {
failed = 1;
}
}
}
catch (...) {
failed = 1;
}
Part::FuzzyHelper::setBooleanFuzzy(oldFuzzy);
EXPECT_EQ(failed, 1);
}
+25 -25
View File
@@ -1444,7 +1444,7 @@ TEST_F(TopoShapeExpansionTest, makeElementBooleanCut)
"Edge2",
"Edge2;:M;CUT;:H2:7,E",
"Edge3",
"Edge3;:H2,E",
"Edge3;:M;CUT;:H2:7,E",
"Edge4",
"Edge4;:M;CUT;:H2:7,E",
"Edge6;:G(Edge12;K-1;:H2:4,E);CUT;:H1:1b,V",
@@ -1467,9 +1467,9 @@ TEST_F(TopoShapeExpansionTest, makeElementBooleanCut)
"Vertex1",
"Vertex2",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;CUT;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex4;:M;CUT;:H2:7,V",
"Vertex7",
"Vertex8",
}));
@@ -1550,13 +1550,13 @@ TEST_F(TopoShapeExpansionTest, makeElementBooleanFuse)
"Vertex2",
"Vertex2;:H2,V",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;FUS;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex5",
"Vertex4;:M;FUS;:H2:7,V",
"Vertex5;:H2,V",
"Vertex6",
"Vertex5;:M;FUS;:H1:7,V",
"Vertex6;:H2,V",
"Vertex6;:M;FUS;:H1:7,V",
"Vertex7",
"Vertex7;:H2,V",
"Vertex8",
@@ -2021,13 +2021,13 @@ TEST_F(TopoShapeExpansionTest, makeElementFuse)
"Vertex2",
"Vertex2;:H2,V",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;FUS;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex5",
"Vertex4;:M;FUS;:H2:7,V",
"Vertex5;:H2,V",
"Vertex6",
"Vertex5;:M;FUS;:H1:7,V",
"Vertex6;:H2,V",
"Vertex6;:M;FUS;:H1:7,V",
"Vertex7",
"Vertex7;:H2,V",
"Vertex8",
@@ -2065,7 +2065,7 @@ TEST_F(TopoShapeExpansionTest, makeElementCut)
"Edge2",
"Edge2;:M;CUT;:H2:7,E",
"Edge3",
"Edge3;:H2,E",
"Edge3;:M;CUT;:H2:7,E",
"Edge4",
"Edge4;:M;CUT;:H2:7,E",
"Edge6;:G(Edge12;K-1;:H2:4,E);CUT;:H1:1b,V",
@@ -2088,9 +2088,9 @@ TEST_F(TopoShapeExpansionTest, makeElementCut)
"Vertex1",
"Vertex2",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;CUT;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex4;:M;CUT;:H2:7,V",
"Vertex7",
"Vertex8",
}));
@@ -2546,13 +2546,13 @@ TEST_F(TopoShapeExpansionTest, makeElementTransformWithMap)
"Vertex2",
"Vertex2;:H2,V",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;FUS;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex5",
"Vertex4;:M;FUS;:H2:7,V",
"Vertex5;:H2,V",
"Vertex6",
"Vertex5;:M;FUS;:H1:7,V",
"Vertex6;:H2,V",
"Vertex6;:M;FUS;:H1:7,V",
"Vertex7",
"Vertex7;:H2,V",
"Vertex8",
@@ -2655,13 +2655,13 @@ TEST_F(TopoShapeExpansionTest, makeElementGTransformWithMap)
"Vertex2",
"Vertex2;:H2,V",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;FUS;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex5",
"Vertex4;:M;FUS;:H2:7,V",
"Vertex5;:H2,V",
"Vertex6",
"Vertex5;:M;FUS;:H1:7,V",
"Vertex6;:H2,V",
"Vertex6;:M;FUS;:H1:7,V",
"Vertex7",
"Vertex7;:H2,V",
"Vertex8",
@@ -3051,7 +3051,7 @@ TEST_F(TopoShapeExpansionTest, traceElement)
"Edge2",
"Edge2;:M;CUT;:H2:7,E",
"Edge3",
"Edge3;:H2,E",
"Edge3;:M;CUT;:H2:7,E",
"Edge4",
"Edge4;:M;CUT;:H2:7,E",
"Edge6;:G(Edge12;K-1;:H2:4,E);CUT;:H1:1b,V",
@@ -3074,9 +3074,9 @@ TEST_F(TopoShapeExpansionTest, traceElement)
"Vertex1",
"Vertex2",
"Vertex3",
"Vertex3;:H2,V",
"Vertex3;:M;CUT;:H2:7,V",
"Vertex4",
"Vertex4;:H2,V",
"Vertex4;:M;CUT;:H2:7,V",
"Vertex7",
"Vertex8",
}));
@@ -0,0 +1,137 @@
DBRep_DrawableShape
CASCADE Topology V1, (c) Matra-Datavision
Locations 2
1
1 0 0 0
0 1 0 0
0 0 1 0
2 1 -1 0
Curve2ds 6
1 0 10 1 0
2 0 0 1 0 -0 1 2
1 6.2831853071795862 -0 0 1
1 0 -0 0 1
1 0 0 1 0
2 0 0 1 0 -0 1 2
Curves 3
2 0 0 10 0 0 1 1 0 -0 -0 1 0 2
1 2 -4.898425415289509e-16 0 0 0 1
2 0 0 0 0 0 1 1 0 -0 -0 1 0 2
Polygon3D 0
PolygonOnTriangulations 6
26 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2
p 0.0310985626705653 1 0 0.251327412287184 0.502654824574367 0.753982236861551 1.00530964914873 1.25663706143592 1.5079644737231 1.75929188601029 2.01061929829747 2.26194671058465 2.51327412287184 2.76460153515902 3.0159289474462 3.26725635973339 3.51858377202057 3.76991118430776 4.02123859659494 4.27256600888212 4.52389342116931 4.77522083345649 5.02654824574367 5.27787565803086 5.52920307031804 5.78053048260523 6.03185789489241 6.28318530717959
26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1
p 0.0310985626705653 1 0 0.251327412287184 0.502654824574367 0.753982236861551 1.00530964914873 1.25663706143592 1.5079644737231 1.75929188601029 2.01061929829747 2.26194671058465 2.51327412287184 2.76460153515902 3.0159289474462 3.26725635973339 3.51858377202057 3.76991118430776 4.02123859659494 4.27256600888212 4.52389342116931 4.77522083345649 5.02654824574367 5.27787565803086 5.52920307031804 5.78053048260523 6.03185789489241 6.28318530717959
2 27 2
p 0.0310985626705653 1 0 10
2 28 1
p 0.0310985626705653 1 0 10
26 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 27
p 0.0310985626705653 1 0 0.251327412287184 0.502654824574367 0.753982236861551 1.00530964914873 1.25663706143592 1.5079644737231 1.75929188601029 2.01061929829747 2.26194671058465 2.51327412287184 2.76460153515902 3.0159289474462 3.26725635973339 3.51858377202057 3.76991118430776 4.02123859659494 4.27256600888212 4.52389342116931 4.77522083345649 5.02654824574367 5.27787565803086 5.52920307031804 5.78053048260523 6.03185789489241 6.28318530717959
26 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1
p 0.0310985626705653 1 0 0.251327412287184 0.502654824574367 0.753982236861551 1.00530964914873 1.25663706143592 1.5079644737231 1.75929188601029 2.01061929829747 2.26194671058465 2.51327412287184 2.76460153515902 3.0159289474462 3.26725635973339 3.51858377202057 3.76991118430776 4.02123859659494 4.27256600888212 4.52389342116931 4.77522083345649 5.02654824574367 5.27787565803086 5.52920307031804 5.78053048260523 6.03185789489241 6.28318530717959
Surfaces 3
2 0 0 0 0 0 1 1 0 -0 -0 1 0 2
1 0 0 10 0 0 1 1 0 -0 -0 1 0
1 0 0 0 0 0 1 1 0 -0 -0 1 0
Triangulations 3
52 50 1 0.0157705973710445
2 -4.89842541528951e-16 10 2 -4.89842541528951e-16 10 1.93716632225726 0.49737977432971 10 1.75261336008773 0.963507348203431 10 1.45793725484282 1.36909421185738 10 1.07165358995799 1.68865585100403 10 0.618033988749894 1.90211303259031 10 0.125581039058625 1.99605345685654 10 -0.374762629171451 1.96457450145738 10 -0.851558583130147 1.80965410493204 10 -1.27484797949738 1.54102648555158 10 -1.6180339887499 1.17557050458494 10 -1.8595529717765 0.736249105369352 10 -1.98422940262896 0.250666467128604 10 -1.98422940262896 -0.250666467128614 10 -1.8595529717765 -0.736249105369362 10 -1.61803398874989 -1.17557050458495 10 -1.27484797949737 -1.54102648555158 10 -0.851558583130138 -1.80965410493204 10 -0.374762629171441 -1.96457450145738 10 0.125581039058636 -1.99605345685654 10 0.618033988749905 -1.9021130325903 10 1.071653589958 -1.68865585100402 10 1.45793725484283 -1.36909421185737 10 1.75261336008773 -0.96350734820342 10 1.93716632225727 -0.497379774329697 10 2 -4.89842541528951e-16 0 2 -4.89842541528951e-16 0 1.93716632225726 0.49737977432971 0 1.75261336008773 0.963507348203431 0 1.45793725484282 1.36909421185738 0 1.07165358995799 1.68865585100403 0 0.618033988749894 1.90211303259031 0 0.125581039058625 1.99605345685654 0 -0.374762629171451 1.96457450145738 0 -0.851558583130147 1.80965410493204 0 -1.27484797949738 1.54102648555158 0 -1.6180339887499 1.17557050458494 0 -1.8595529717765 0.736249105369352 0 -1.98422940262896 0.250666467128604 0 -1.98422940262896 -0.250666467128614 0 -1.8595529717765 -0.736249105369362 0 -1.61803398874989 -1.17557050458495 0 -1.27484797949737 -1.54102648555158 0 -0.851558583130138 -1.80965410493204 0 -0.374762629171441 -1.96457450145738 0 0.125581039058636 -1.99605345685654 0 0.618033988749905 -1.9021130325903 0 1.071653589958 -1.68865585100402 0 1.45793725484283 -1.36909421185737 0 1.75261336008773 -0.96350734820342 0 1.93716632225727 -0.497379774329697 0 0 10 6.28318530717959 10 0.251327412287184 10 0.502654824574367 10 0.753982236861551 10 1.00530964914873 10 1.25663706143592 10 1.5079644737231 10 1.75929188601029 10 2.01061929829747 10 2.26194671058465 10 2.51327412287184 10 2.76460153515902 10 3.0159289474462 10 3.26725635973339 10 3.51858377202057 10 3.76991118430776 10 4.02123859659494 10 4.27256600888212 10 4.52389342116931 10 4.77522083345649 10 5.02654824574367 10 5.27787565803086 10 5.52920307031804 10 5.78053048260523 10 6.03185789489241 10 6.28318530717959 0 0 0 0.251327412287184 0 0.502654824574367 0 0.753982236861551 0 1.00530964914873 0 1.25663706143592 0 1.5079644737231 0 1.75929188601029 0 2.01061929829747 0 2.26194671058465 0 2.51327412287184 0 2.76460153515902 0 3.0159289474462 0 3.26725635973339 0 3.51858377202057 0 3.76991118430776 0 4.02123859659494 0 4.27256600888212 0 4.52389342116931 0 4.77522083345649 0 5.02654824574367 0 5.27787565803086 0 5.52920307031804 0 5.78053048260523 0 6.03185789489241 0 22 21 47 22 47 48 22 48 49 23 22 49 3 28 29 3 1 28 24 23 49 24 49 50 24 50 51 4 29 30 4 3 29 25 24 51 5 30 31 26 51 52 5 4 30 26 25 51 26 52 27 2 26 27 6 31 32 6 32 33 6 5 31 7 6 33 8 33 34 8 34 35 8 7 33 9 8 35 10 35 36 10 9 35 11 36 37 11 10 36 12 37 38 12 11 37 13 38 39 13 12 38 14 13 39 14 39 40 15 14 40 15 40 41 16 15 41 16 41 42 17 16 42 17 42 43 18 17 43 18 43 44 19 18 44 19 44 45 19 45 46 20 19 46 20 46 47 21 20 47
26 25 1 2.22044604925031e-16
2 -4.89842541528951e-16 10 1.93716632225726 0.49737977432971 10 1.75261336008773 0.963507348203431 10 1.45793725484282 1.36909421185738 10 1.07165358995799 1.68865585100403 10 0.618033988749894 1.90211303259031 10 0.125581039058625 1.99605345685654 10 -0.374762629171451 1.96457450145738 10 -0.851558583130147 1.80965410493204 10 -1.27484797949738 1.54102648555158 10 -1.6180339887499 1.17557050458494 10 -1.8595529717765 0.736249105369352 10 -1.98422940262896 0.250666467128604 10 -1.98422940262896 -0.250666467128614 10 -1.8595529717765 -0.736249105369362 10 -1.61803398874989 -1.17557050458495 10 -1.27484797949737 -1.54102648555158 10 -0.851558583130138 -1.80965410493204 10 -0.374762629171441 -1.96457450145738 10 0.125581039058636 -1.99605345685654 10 0.618033988749905 -1.9021130325903 10 1.071653589958 -1.68865585100402 10 1.45793725484283 -1.36909421185737 10 1.75261336008773 -0.96350734820342 10 1.93716632225727 -0.497379774329697 10 0.0078852986855219 3.33066907387547e-16 10 2 0 1.93716632225726 0.49737977432971 1.75261336008773 0.963507348203431 1.45793725484282 1.36909421185738 1.07165358995799 1.68865585100403 0.618033988749894 1.90211303259031 0.125581039058625 1.99605345685654 -0.374762629171451 1.96457450145738 -0.851558583130147 1.80965410493204 -1.27484797949738 1.54102648555158 -1.6180339887499 1.17557050458494 -1.8595529717765 0.736249105369352 -1.98422940262896 0.250666467128604 -1.98422940262896 -0.250666467128614 -1.8595529717765 -0.736249105369362 -1.61803398874989 -1.17557050458495 -1.27484797949737 -1.54102648555158 -0.851558583130138 -1.80965410493204 -0.374762629171441 -1.96457450145738 0.125581039058636 -1.99605345685654 0.618033988749904 -1.9021130325903 1.071653589958 -1.68865585100402 1.45793725484283 -1.36909421185737 1.75261336008773 -0.96350734820342 1.93716632225727 -0.497379774329697 0.00788529868552179 2.22044604925031e-16 26 1 2 26 2 3 26 3 4 26 4 5 26 5 6 26 6 7 26 7 8 26 8 9 26 9 10 26 10 11 26 11 12 26 12 13 26 13 14 26 14 15 26 15 16 26 16 17 26 17 18 26 18 19 26 19 20 26 20 21 26 21 22 26 22 23 26 23 24 26 24 25 26 25 1
26 25 1 2.22044604925031e-16
2 -4.89842541528951e-16 0 1.93716632225726 0.49737977432971 0 1.75261336008773 0.963507348203431 0 1.45793725484282 1.36909421185738 0 1.07165358995799 1.68865585100403 0 0.618033988749894 1.90211303259031 0 0.125581039058625 1.99605345685654 0 -0.374762629171451 1.96457450145738 0 -0.851558583130147 1.80965410493204 0 -1.27484797949738 1.54102648555158 0 -1.6180339887499 1.17557050458494 0 -1.8595529717765 0.736249105369352 0 -1.98422940262896 0.250666467128604 0 -1.98422940262896 -0.250666467128614 0 -1.8595529717765 -0.736249105369362 0 -1.61803398874989 -1.17557050458495 0 -1.27484797949737 -1.54102648555158 0 -0.851558583130138 -1.80965410493204 0 -0.374762629171441 -1.96457450145738 0 0.125581039058636 -1.99605345685654 0 0.618033988749905 -1.9021130325903 0 1.071653589958 -1.68865585100402 0 1.45793725484283 -1.36909421185737 0 1.75261336008773 -0.96350734820342 0 1.93716632225727 -0.497379774329697 0 0.0078852986855219 3.33066907387547e-16 0 2 0 1.93716632225726 0.49737977432971 1.75261336008773 0.963507348203431 1.45793725484282 1.36909421185738 1.07165358995799 1.68865585100403 0.618033988749894 1.90211303259031 0.125581039058625 1.99605345685654 -0.374762629171451 1.96457450145738 -0.851558583130147 1.80965410493204 -1.27484797949738 1.54102648555158 -1.6180339887499 1.17557050458494 -1.8595529717765 0.736249105369352 -1.98422940262896 0.250666467128604 -1.98422940262896 -0.250666467128614 -1.8595529717765 -0.736249105369362 -1.61803398874989 -1.17557050458495 -1.27484797949737 -1.54102648555158 -0.851558583130138 -1.80965410493204 -0.374762629171441 -1.96457450145738 0.125581039058636 -1.99605345685654 0.618033988749904 -1.9021130325903 1.071653589958 -1.68865585100402 1.45793725484283 -1.36909421185737 1.75261336008773 -0.96350734820342 1.93716632225727 -0.497379774329697 0.00788529868552179 2.22044604925031e-16 26 1 2 26 2 3 26 3 4 26 4 5 26 5 6 26 6 7 26 7 8 26 8 9 26 9 10 26 10 11 26 11 12 26 12 13 26 13 14 26 14 15 26 15 16 26 16 17 26 17 18 26 18 19 26 19 20 26 20 21 26 21 22 26 22 23 26 23 24 26 24 25 26 25 1
TShapes 15
Ve
1e-07
2 -4.89842541528951e-16 10
0 0
0101101
*
Ed
1e-07 1 1 0
1 1 0 0 6.28318530717959
2 1 1 0 0 6.28318530717959
2 2 2 0 0 6.28318530717959
6 1 1 0
6 2 2 0
0
0101100
+15 2 -15 2 *
Ve
1e-07
2 -4.89842541528951e-16 0
0 0
0101101
*
Ed
1e-07 1 1 0
1 2 0 0 10
3 3 4CN 1 0 0 10
7 3 4 1 0
0
0101000
-15 2 +13 2 *
Ed
1e-07 1 1 0
1 3 0 0 6.28318530717959
2 5 1 0 0 6.28318530717959
2 6 3 0 0 6.28318530717959
6 5 1 0
6 6 3 0
0
0101100
+13 2 -13 2 *
Wi
0101000
-14 0 +12 0 +11 0 -12 0 *
Fa
0 1e-07 1 0
2 1
0101000
+10 0 *
Wi
0101000
+14 0 *
Fa
0 1e-07 2 0
2 2
0101000
+8 0 *
Wi
0101000
-11 0 *
Fa
0 1e-07 3 0
2 3
0101000
-6 0 *
Sh
0101100
+9 0 +7 0 -5 0 *
So
0100100
+4 0 *
Co
0100000
+3 1 *
Co
1100000
+2 0 *
+1 0
@@ -0,0 +1,903 @@
DBRep_DrawableShape
CASCADE Topology V1, (c) Matra-Datavision
Locations 1
1
1 0 0 0
0 -2.22044604925031e-16 -1 0
0 1 -2.22044604925031e-16 0
Curve2ds 60
1 0 0 1 0
1 0 0 1 0
1 0 0 1 0
1 0 0 0 1
8 0 6.2870356770386975
1 1.1180339887492663 0 0 1
1 0.99999999999999989 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 0.99999999999999989
1 0 0 1 0
1 0 0 0 1
8 0 6.2870356770386975
1 1.1180339887492663 0 0 1
1 0.99999999999999989 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 0.99999999999999989
1 0 0 1 0
1 0 0 0 1
8 0 6.2870356770386975
1 1.1180339887492663 0 0 1
1 0.99999999999999989 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 0.99999999999999989
1 0 0 1 0
1 0 0 0 1
8 0 6.2870356770386975
1 1.1180339887492663 0 0 1
1 0.99999999999999989 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 0.99999999999999989
1 0 0 1 0
1 0 0 0 1
8 0 3.4292921874756512
1 1.1180339887492663 0 0 1
1 0.99999999999999989 0 0 1
8 0 3.4292921874756512
1 0 0 0 1
1 0 3.4292921874756512 1 0
1 1.1180339887505235 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 1.1180339887505235
1 0 0 1 0
1 1.1180339887505235 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 1.1180339887505235
1 0 0 1 0
1 1.1180339887505235 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 1.1180339887505235
1 0 0 1 0
1 1.1180339887505235 0 0 1
8 0 6.2870356770386975
1 0 0 0 1
1 0 6.2870356770386975 1 0
8 0 1.1180339887505235
1 0 0 1 0
1 1.1180339887505235 0 0 1
8 0 3.4292921874756512
1 0 0 0 1
1 0 3.4292921874756512 1 0
1 0 6.2870356770386975 1 0
8 0 1.1180339887492663
1 0 0 1 0
1 0 6.2870356770386975 1 0
8 0 1.1180339887492663
1 0 0 1 0
1 0 6.2870356770386975 1 0
8 0 1.1180339887492663
1 0 0 1 0
1 0 6.2870356770386975 1 0
8 0 1.1180339887492663
1 0 0 1 0
1 0 3.4292921874756512 1 0
Curves 33
7 0 0 1 2 2 2.0000000000000306 9.0938367947046572e-13 1.6684810553702823e-15 2.0000000000000284 1.0000000000009095 1.8067860570396971e-15
0 2 0.99999999999999989 2
7 0 0 1 2 2 2.0000000000000275 0.99999999999999989 1.2482846049280778e-15 3.0000000000000262 0.49999999999909028 2.64590224776542e-15
0 2 1.1180339887505235 2
7 0 0 1 2 2 3.0000000000000262 0.49999999999909028 2.64590224776542e-15 2.0000000000000266 -1.1102230246251565e-16 1.735593475076781e-15
0 2 1.1180339887492663 2
7 0 0 10 11 2 2.0000000000000306 9.0938367947046572e-13 1.6684810553702823e-15 1.999999959939065 0.11000000199007182 -1.2566338554788934 1.1228905917351018 0.21999999529312889 -2.5142965052784554 -0.63337553221942444 0.33000000849324884 -3.074762622374831 -2.6388940263357452 0.43999999335094497 -2.2895691041051509 -3.7012392763888831 0.5500000002214146 -2.6799449770464936e-08 -2.6388942634676984 0.66000000729935382 2.289569143296684 -0.6333752369905884 0.76999999205562586 3.0747626064836964 1.122890401259464 0.88000000523279343 2.5142965081779178 2.0000000280573076 0.98999999860754562 1.2566338556980587 1.9999999889437008 1.1000000005496986 7.9688529331130179e-11
0 11 6.2870356770386975 11
7 0 0 10 11 2 2.0000000000000284 1.0000000000009095 1.8067860570396971e-15 1.9999999599470493 1.1100000019901159 -1.2566338554796066 1.1228905917164054 1.2199999952962788 -2.5142965052802975 -0.6333755321888157 1.3300000084765569 -3.0747626223748288 -2.6388940263641505 1.4399999933898993 -2.2895691041104191 -3.7012392763868704 1.5500000001715462 -2.6794308105593292e-08 -2.6388942634487753 1.6600000073384424 2.2895691432943206 -0.6333752370187804 1.7699999920387648 3.0747626064869191 1.1228904012785821 1.8800000052360488 2.5142965081790924 2.0000000280516921 1.9899999986075592 1.2566338556987795 1.9999999889459432 2.1000000005496986 7.9688667636131848e-11
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999889437008 1.1000000005496986 7.9688529331130179e-11 1.9999999889459432 2.1000000005496986 7.9688667636131848e-11
0 2 0.99999999999999989 2
7 0 0 10 11 2 1.9999999889438393 1.1000000005506081 7.9573322520480816e-11 1.9999999504327597 1.2100000024638651 -1.2566338485000579 1.1228905841713051 1.3199999958902204 -2.5142964936684566 -0.63337552679389553 1.4300000089461606 -3.0747626022633292 -2.6388940137391041 1.5399999939296962 -2.2895690975066207 -3.7012392571699686 1.6500000007173401 -2.1274036754448425e-08 -2.6388942480372157 1.7600000078276066 2.2895691263877964 -0.63337523498080051 1.8699999925830786 3.0747625936187082 1.1228903958652039 1.9800000057520644 2.514296493179764 2.0000000172065762 2.0899999991450695 1.2566338495544689 1.9999999786182334 2.2000000010621084 1.498650320469746e-10
0 11 6.2870356770386975 11
7 0 0 10 11 2 1.9999999889460875 2.1000000005506076 7.9569716671940351e-11 1.9999999504427557 2.2100000024638762 -1.2566338485020818 1.1228905841539827 2.3199999958947446 -2.5142964936729517 -0.63337552676433961 2.4300000089179838 -3.0747626022660426 -2.6388940137698809 2.5399999939944702 -2.2895690975160075 -3.7012392571715007 2.6500000006299165 -2.1266290062271801e-08 -2.6388942480221624 2.7600000079011782 2.2895691263853917 -0.63337523500900739 2.8699999925487942 3.0747625936265219 1.1228903958853254 2.9800000057580278 2.5142964931831826 2.0000000172031585 3.0899999991450615 1.256633849556545 1.9999999786225262 3.2000000010621079 1.4986675526895234e-10
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999786182334 2.2000000010621084 1.498650320469746e-10 1.9999999786225262 3.2000000010621079 1.4986675526895234e-10
0 2 0.99999999999999989 2
7 0 0 10 11 2 1.9999999786181786 2.2000000010621079 1.4993260157095021e-10 1.9999999400738631 2.3100000029808276 -1.2566338420167411 1.1228905772510862 2.4199999964632046 -2.5142964794265734 -0.63337552098851213 2.5300000094244859 -3.0747625870472812 -2.6388940021707605 2.6399999943919257 -2.2895690849360779 -3.7012392363085422 2.7500000014736909 -2.2093992413374548e-08 -2.638894233520348 2.8600000080243344 2.2895691152357105 -0.63337523368614168 2.9699999933701364 3.0747625761742614 1.1228903911008323 3.0800000061624324 2.5142964805065611 2.0000000063123959 3.1899999996821689 1.2566338429759571 1.9999999678044289 3.300000001599074 2.0309046120301625e-10
0 11 6.2870356770386975 11
7 0 0 10 11 2 1.9999999786224718 3.2000000010621079 1.4993245955643687e-10 1.9999999400858754 3.3100000029809165 -1.2566338420201038 1.1228905772354529 3.4199999964662728 -2.5142964794336784 -0.63337552096141658 3.530000009400982 -3.0747625870539368 -2.6388940022006375 3.6399999944497425 -2.2895690849458434 -3.7012392363187367 3.7500000013920904 -2.2089328588492702e-08 -2.638894233504244 3.8600000080946613 2.2895691152386886 -0.63337523371668869 3.9699999933346248 3.0747625761836828 1.1228903911224484 4.0800000061691435 2.5142964805130732 2.0000000063110868 4.1899999996822723 1.2566338429793282 1.999999967810852 4.3000000015990736 2.0308943101008321e-10
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999678044289 3.300000001599074 2.0309046120301625e-10 1.999999967810852 4.3000000015990736 2.0308943101008321e-10
0 2 0.99999999999999989 2
7 0 0 10 11 2 1.9999999678044258 3.3000000015990736 2.0309866472500391e-10 1.9999999279238478 3.4100000035856528 -1.2566338351063444 1.1228905729919101 3.5199999969246787 -2.5142964646674235 -0.63337551712705942 3.6300000099194438 -3.074762572896566 -2.6388939950858141 3.7399999954130898 -2.2895690671737792 -3.701239199025594 3.8500000010453497 -2.8316819999929571e-08 -2.638894240086211 3.9600000097382408 2.289569107254986 -0.63337521336332525 4.0699999930152293 3.0747625569284258 1.1228903762540163 4.1800000071518646 2.5142964672592112 1.9999999975765625 4.2900000001133263 1.2566338359369953 1.9999999567633309 4.4000000021460446 3.4089193414872246e-10
0 11 6.2870356770386975 11
7 0 0 10 11 2 1.9999999678108487 4.3000000015990727 2.0310001286277759e-10 1.9999999279383043 4.4100000035856688 -1.2566338351111224 1.122890572977371 4.5199999969270834 -2.5142964646772947 -0.63337551710101136 4.6300000099037906 -3.0747625729062196 -2.6388939951173178 4.7399999954404937 -2.2895690671867799 -3.7012391990426692 4.8500000010168538 -2.8311815114534561e-08 -2.6388942400694013 4.9600000097581329 2.28956910726074 -0.63337521339745995 5.0699999930075235 3.0747625569407111 1.1228903762783815 5.1800000071517864 2.5142964672688786 1.999999997577024 5.2900000001133138 1.2566338359416902 1.9999999567719706 5.4000000021460428 3.4087463053968244e-10
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999567633309 4.4000000021460446 3.4089193414872246e-10 1.9999999567719706 5.4000000021460428 3.4087463053968244e-10
0 2 0.99999999999999989 2
7 0 0 7 8 2 1.9999999567634459 4.4000000021451351 3.4084246536281171e-10 2.0000002640696679 4.4857142726286385 -0.97919124939730628 1.4406779014824571 4.5714286200977545 -1.9568429588808502 0.32256706838431459 4.65714278042977 -2.5610970658126595 -1.0310446917849259 4.7428572231265349 -2.3664775333082049 -1.9336277920152993 4.8285713826164374 -1.4716907680536384 -2.1948556793096836 4.914285730957423 -0.37606210629261111 -1.9189859268982161 5.0000000010577432 0.5634651072808482
0 8 3.4292921874756512 8
7 0 0 7 8 2 1.9999999567720863 5.4000000021451333 3.4082825450809651e-10 2.0000002640168799 5.4857142726286572 -0.97919124940054725 1.440677901603262 5.5714286201005256 -1.956842958876841 0.32256706831810533 5.6571427804273915 -2.561097065856611 -1.0310446918474518 5.7428572231258039 -2.3664775332620946 -1.9336277919102527 5.8285713826187129 -1.4716907681020224 -2.1948556793750762 5.9142857309574053 -0.37606210627671594 -1.91898592690228 6.0000000010577423 0.56346510728208499
0 8 3.4292921874756512 8
7 0 0 1 2 2 -1.9189859268982161 5.0000000010577432 0.5634651072808482 -1.91898592690228 6.0000000010577423 0.56346510728208499
0 2 0.99999999999999989 2
7 0 0 10 11 2 3.0000000000000262 0.49999999999909028 2.64590224776542e-15 2.9999999599430494 0.61000000198025983 -1.8849523991101589 1.6843358541807412 0.71999999532856152 -3.7714388372926861 -0.95006329236532527 0.83000000838478272 -4.6121543037994446 -3.9583409408894639 0.9399999935088923 -3.4343447840084473 -5.5518591362037464 1.0500000000726892 -2.6801831864986571e-08 -3.9583411779967386 1.1600000073662897 3.4343448232057008 -0.95006299716576159 1.2699999920433398 4.6121542879044508 1.6843356637246436 1.3800000052181578 3.771438840193881 3.000000028054711 1.4899999986117534 1.8849523993284072 2.9999999889448357 1.6000000005460604 7.9366400412257482e-11
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999889459439 2.1000000005487891 7.9688997313099437e-11 2.9999999889448357 1.6000000005460604 7.9366400412257482e-11
0 2 1.1180339887505235 2
7 0 0 10 11 2 2.999999988944976 1.6000000005460602 7.9250740617934832e-11 2.9999999504375432 1.7100000024516238 -1.8849523921333624 1.6843358466169605 1.8199999959049489 -3.7714388256798435 -0.95006328694068609 1.9300000089020084 -4.6121542837014822 -3.95834092829466 2.0399999939710258 -3.4343447773886919 -5.5518591169866616 2.1500000006882662 -2.1303298680663866e-08 -3.9583411625671245 2.2600000078083955 3.4343448063231747 -0.95006299515631087 2.3699999926109152 4.6121542750259197 1.6843356583319962 2.4800000057243063 3.7714388252032625 3.0000000172052164 2.5899999991464546 1.8849523931834573 2.9999999786203655 2.7000000010557414 1.4926020001166973e-10
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999786225262 3.2000000010611984 1.4986436523883961e-10 2.9999999786203655 2.7000000010557414 1.4926020001166973e-10
0 2 1.1180339887505235 2
7 0 0 10 11 2 2.9999999786203113 2.7000000010557414 1.493250228982142e-10 2.9999999400794013 2.8100000029668268 -1.8849523856500396 1.6843358396979533 2.9199999964709473 -3.7714388114427502 -0.95006328113862848 3.0300000093814292 -4.6121542684796086 -3.9583409167230954 3.1399999944454362 -3.4343447648292291 -5.5518590961329659 3.250000001403254 -2.211391869622052e-08 -3.9583411480468893 3.3600000080552288 3.4343447951676214 -0.95006299386368853 3.469999993355684 4.6121542575846384 1.6843356535689435 3.5800000061467721 3.7714388125311884 3.0000000063121735 3.6899999996808979 1.8849523866053275 2.9999999678076414 3.8000000015899791 2.0226724577899886e-10
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999678108524 4.3000000015981641 2.0308942781058091e-10 2.9999999678076414 3.8000000015899791 2.0226724577899886e-10
0 2 1.1180339887505235 2
7 0 0 10 11 2 2.9999999678076419 3.8000000015899786 2.0228197919908545e-10 2.9999999279305172 3.9100000035685993 -1.8849523787403486 1.6843358354390539 4.0199999969387505 -3.7714387966862271 -0.95006327727783102 4.130000009847369 -4.6121542543265557 -3.9583409096400803 4.2399999955134353 -3.4343447470762434 -5.5518590588514121 4.3500000009162774 -2.8324961931502962e-08 -3.9583411546147409 4.4600000098022869 3.4343447871776691 -0.95006297354057856 4.569999992988012 4.612154238347574 1.6843356387230635 4.6800000071346206 3.7714387992820004 2.9999999975774561 4.7900000001106369 1.8849523795677556 2.9999999567676552 4.9000000021351298 3.3978766941952692e-10
0 11 6.2870356770386975 11
7 0 0 1 2 2 1.9999999567719688 5.4000000021451333 3.4087654078806909e-10 2.9999999567676552 4.9000000021351298 3.3978766941952692e-10
0 2 1.1180339887505235 2
7 0 0 8 9 2 2.9999999567677649 4.9000000021351298 3.397406800331737e-10 3.0000002256333747 4.9749999888619385 -1.2851913641367954 2.3705073010240469 5.0500000328942178 -2.5704115958869975 1.1136055593857705 5.1249999710601237 -3.4960865104568501 -0.53250205740685397 5.2000000008716958 -3.7036172149772306 -2.0534544967400987 5.2750000334473137 -3.0407322012228404 -2.9986555539519255 5.3499999696162943 -1.7984423363377851 -3.2405588854226228 5.4250000146594397 -0.38793449825195131 -2.8784789005144367 5.5000000010522854 0.84519766412397335
0 9 3.4292921874756512 9
7 0 0 1 2 2 -1.9189859269022804 6.000000001056832 0.56346510728208465 -2.8784789005144367 5.5000000010522854 0.84519766412397335
0 2 1.1180339887505235 2
7 0 0 1 2 2 2.9999999889448357 1.6000000005460604 7.9366400412257482e-11 1.9999999889436957 1.1000000005487891 7.9689484621969586e-11
0 2 1.1180339887492663 2
7 0 0 1 2 2 2.9999999786203655 2.7000000010557414 1.4926020001166973e-10 1.9999999786182339 2.2000000010611989 1.4986414387580778e-10
0 2 1.1180339887492663 2
7 0 0 1 2 2 2.9999999678076414 3.8000000015899791 2.0226724577899886e-10 1.9999999678044273 3.3000000015981645 2.030895970084515e-10
0 2 1.1180339887492663 2
7 0 0 1 2 2 2.9999999567676552 4.9000000021351298 3.3978766941952692e-10 1.9999999567633331 4.4000000021451351 3.4089091691064752e-10
0 2 1.1180339887492663 2
7 0 0 1 2 2 -2.8784789005144367 5.5000000010522854 0.84519766412397335 -1.9189859268982157 5.0000000010568328 0.56346510728084809
0 2 1.1180339887492663 2
Polygon3D 0
PolygonOnTriangulations 0
Surfaces 17
1 2.3454915028125551 0.49999999999961142 2.2204460492560777e-16 9.2179164606366873e-45 -4.4408920985006262e-16 -1 -2.0756902568627873e-29 1 -4.4408920985006262e-16 1 -2.0756902568627873e-29 0
9 0 0 0 0 1 10 2 11 2 2 2.0000000000000306 9.0938367947046572e-13 1.6684810553702823e-15 1.999999959939065 0.11000000199007182 -1.2566338554788934 1.1228905917351018 0.21999999529312889 -2.5142965052784554 -0.63337553221942444 0.33000000849324884 -3.074762622374831 -2.6388940263357452 0.43999999335094497 -2.2895691041051509 -3.7012392763888831 0.5500000002214146 -2.6799449770464936e-08 -2.6388942634676984 0.66000000729935382 2.289569143296684 -0.6333752369905884 0.76999999205562586 3.0747626064836964 1.122890401259464 0.88000000523279343 2.5142965081779178 2.0000000280573076 0.98999999860754562 1.2566338556980587 1.9999999889437008 1.1000000005496986 7.9688529331130179e-11
2.0000000000000284 1.0000000000009095 1.8067860570396971e-15 1.9999999599470493 1.1100000019901159 -1.2566338554796066 1.1228905917164054 1.2199999952962788 -2.5142965052802975 -0.6333755321888157 1.3300000084765569 -3.0747626223748288 -2.6388940263641505 1.4399999933898993 -2.2895691041104191 -3.7012392763868704 1.5500000001715462 -2.6794308105593292e-08 -2.6388942634487753 1.6600000073384424 2.2895691432943206 -0.6333752370187804 1.7699999920387648 3.0747626064869191 1.1228904012785821 1.8800000052360488 2.5142965081790924 2.0000000280516921 1.9899999986075592 1.2566338556987795 1.9999999889459432 2.1000000005496986 7.9688667636131848e-11
0 2
0.99999999999999989 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 2.0000000000000275 0.99999999999999989 1.2482846049280778e-15 1.9999999599470515 1.1100000019892178 -1.2566338554796033 1.122890591716257 1.2199999952953255 -2.5142965052803392 -0.63337553218827447 1.3300000084757466 -3.0747626223746574 -2.6388940263652154 1.4399999933888332 -2.289569104110813 -3.7012392763855941 1.5500000001708156 -2.6793766316757275e-08 -2.6388942634497043 1.66000000733738 2.2895691432938867 -0.63337523701841136 1.7699999920379506 3.0747626064871429 1.1228904012785161 1.8800000052350989 2.5142965081790125 2.0000000280516912 1.9899999986066599 1.2566338556987984 1.9999999889459439 2.1000000005487891 7.9688997313099437e-11
3.0000000000000262 0.49999999999909028 2.64590224776542e-15 2.9999999599430494 0.61000000198025983 -1.8849523991101589 1.6843358541807412 0.71999999532856152 -3.7714388372926861 -0.95006329236532527 0.83000000838478272 -4.6121543037994446 -3.9583409408894639 0.9399999935088923 -3.4343447840084473 -5.5518591362037464 1.0500000000726892 -2.6801831864986571e-08 -3.9583411779967386 1.1600000073662897 3.4343448232057008 -0.95006299716576159 1.2699999920433398 4.6121542879044508 1.6843356637246436 1.3800000052181578 3.771438840193881 3.000000028054711 1.4899999986117534 1.8849523993284072 2.9999999889448357 1.6000000005460604 7.9366400412257482e-11
0 2
1.1180339887505235 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 3.0000000000000262 0.49999999999909028 2.64590224776542e-15 2.9999999599430494 0.61000000198025983 -1.8849523991101589 1.6843358541807412 0.71999999532856152 -3.7714388372926861 -0.95006329236532527 0.83000000838478272 -4.6121543037994446 -3.9583409408894639 0.9399999935088923 -3.4343447840084473 -5.5518591362037464 1.0500000000726892 -2.6801831864986571e-08 -3.9583411779967386 1.1600000073662897 3.4343448232057008 -0.95006299716576159 1.2699999920433398 4.6121542879044508 1.6843356637246436 1.3800000052181578 3.771438840193881 3.000000028054711 1.4899999986117534 1.8849523993284072 2.9999999889448357 1.6000000005460604 7.9366400412257482e-11
2.0000000000000266 -1.1102230246251565e-16 1.735593475076781e-15 1.9999999599390308 0.11000000198916553 -1.2566338554788903 1.122890591735237 0.2199999952922061 -2.5142965052784754 -0.63337553221974396 0.33000000849237049 -3.0747626223747639 -2.6388940263352585 0.43999999334998541 -2.2895691041053015 -3.7012392763894 0.55000000022056506 -2.6799223284967912e-08 -2.6388942634673 0.66000000729838948 2.2895691432964478 -0.63337523699080889 0.76999999205475389 3.074762606483866 1.1228904012595493 0.88000000523186561 2.5142965081778392 2.0000000280572845 0.98999999860664134 1.2566338556980781 1.9999999889436957 1.1000000005487891 7.9689484621969586e-11
0 2
1.1180339887492663 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 1.9999999889438393 1.1000000005506081 7.9573322520480816e-11 1.9999999504327597 1.2100000024638651 -1.2566338485000579 1.1228905841713051 1.3199999958902204 -2.5142964936684566 -0.63337552679389553 1.4300000089461606 -3.0747626022633292 -2.6388940137391041 1.5399999939296962 -2.2895690975066207 -3.7012392571699686 1.6500000007173401 -2.1274036754448425e-08 -2.6388942480372157 1.7600000078276066 2.2895691263877964 -0.63337523498080051 1.8699999925830786 3.0747625936187082 1.1228903958652039 1.9800000057520644 2.514296493179764 2.0000000172065762 2.0899999991450695 1.2566338495544689 1.9999999786182334 2.2000000010621084 1.498650320469746e-10
1.9999999889460875 2.1000000005506076 7.9569716671940351e-11 1.9999999504427557 2.2100000024638762 -1.2566338485020818 1.1228905841539827 2.3199999958947446 -2.5142964936729517 -0.63337552676433961 2.4300000089179838 -3.0747626022660426 -2.6388940137698809 2.5399999939944702 -2.2895690975160075 -3.7012392571715007 2.6500000006299165 -2.1266290062271801e-08 -2.6388942480221624 2.7600000079011782 2.2895691263853917 -0.63337523500900739 2.8699999925487942 3.0747625936265219 1.1228903958853254 2.9800000057580278 2.5142964931831826 2.0000000172031585 3.0899999991450615 1.256633849556545 1.9999999786225262 3.2000000010621079 1.4986675526895234e-10
0 2
0.99999999999999989 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 2.999999988944976 1.6000000005460602 7.9250740617934832e-11 2.9999999504375432 1.7100000024516238 -1.8849523921333624 1.6843358466169605 1.8199999959049489 -3.7714388256798435 -0.95006328694068609 1.9300000089020084 -4.6121542837014822 -3.95834092829466 2.0399999939710258 -3.4343447773886919 -5.5518591169866616 2.1500000006882662 -2.1303298680663866e-08 -3.9583411625671245 2.2600000078083955 3.4343448063231747 -0.95006299515631087 2.3699999926109152 4.6121542750259197 1.6843356583319962 2.4800000057243063 3.7714388252032625 3.0000000172052164 2.5899999991464546 1.8849523931834573 2.9999999786203655 2.7000000010557414 1.4926020001166973e-10
1.9999999889438407 1.1000000005496986 7.957332252773369e-11 1.9999999504327932 1.2100000024629605 -1.2566338485000514 1.1228905841711276 1.319999995889297 -2.5142964936684877 -0.63337552679335152 1.4300000089452689 -3.0747626022632453 -2.6388940137400763 1.5399999939287836 -2.2895690975067469 -3.7012392571688522 1.6500000007164088 -2.1273940831179098e-08 -2.6388942480380755 1.760000007826731 2.2895691263877631 -0.6333752349803482 1.8699999925821442 3.0747625936187144 1.1228903958650478 1.9800000057511637 2.5142964931797618 2.0000000172066046 2.0899999991441587 1.2566338495544667 1.9999999786182339 2.2000000010611989 1.4986414387580778e-10
0 2
1.1180339887492663 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 1.9999999889460875 2.1000000005496982 7.957176753392612e-11 1.9999999504427557 2.2100000024630013 -1.2566338485020756 1.1228905841539827 2.3199999958936943 -2.5142964936730134 -0.63337552676433961 2.4300000089174172 -3.0747626022659365 -2.6388940137698809 2.5399999939929776 -2.289569097516214 -3.7012392571715007 2.6500000006297264 -2.126587883566348e-08 -2.6388942480221624 2.760000007899631 2.2895691263849041 -0.63337523500900739 2.8699999925482822 3.0747625936267986 1.1228903958853254 2.9800000057569522 2.5142964931831022 2.0000000172031585 3.089999999144192 1.2566338495565548 1.9999999786225262 3.2000000010611984 1.4986436523883961e-10
2.999999988944976 1.6000000005460602 7.9250740617934832e-11 2.9999999504375432 1.7100000024516238 -1.8849523921333624 1.6843358466169605 1.8199999959049489 -3.7714388256798435 -0.95006328694068609 1.9300000089020084 -4.6121542837014822 -3.95834092829466 2.0399999939710258 -3.4343447773886919 -5.5518591169866616 2.1500000006882662 -2.1303298680663866e-08 -3.9583411625671245 2.2600000078083955 3.4343448063231747 -0.95006299515631087 2.3699999926109152 4.6121542750259197 1.6843356583319962 2.4800000057243063 3.7714388252032625 3.0000000172052164 2.5899999991464546 1.8849523931834573 2.9999999786203655 2.7000000010557414 1.4926020001166973e-10
0 2
1.1180339887505235 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 1.9999999786181786 2.2000000010621079 1.4993260157095021e-10 1.9999999400738631 2.3100000029808276 -1.2566338420167411 1.1228905772510862 2.4199999964632046 -2.5142964794265734 -0.63337552098851213 2.5300000094244859 -3.0747625870472812 -2.6388940021707605 2.6399999943919257 -2.2895690849360779 -3.7012392363085422 2.7500000014736909 -2.2093992413374548e-08 -2.638894233520348 2.8600000080243344 2.2895691152357105 -0.63337523368614168 2.9699999933701364 3.0747625761742614 1.1228903911008323 3.0800000061624324 2.5142964805065611 2.0000000063123959 3.1899999996821689 1.2566338429759571 1.9999999678044289 3.300000001599074 2.0309046120301625e-10
1.9999999786224718 3.2000000010621079 1.4993245955643687e-10 1.9999999400858754 3.3100000029809165 -1.2566338420201038 1.1228905772354529 3.4199999964662728 -2.5142964794336784 -0.63337552096141658 3.530000009400982 -3.0747625870539368 -2.6388940022006375 3.6399999944497425 -2.2895690849458434 -3.7012392363187367 3.7500000013920904 -2.2089328588492702e-08 -2.638894233504244 3.8600000080946613 2.2895691152386886 -0.63337523371668869 3.9699999933346248 3.0747625761836828 1.1228903911224484 4.0800000061691435 2.5142964805130732 2.0000000063110868 4.1899999996822723 1.2566338429793282 1.999999967810852 4.3000000015990736 2.0308943101008321e-10
0 2
0.99999999999999989 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 2.9999999786203113 2.7000000010557414 1.493250228982142e-10 2.9999999400794013 2.8100000029668268 -1.8849523856500396 1.6843358396979533 2.9199999964709473 -3.7714388114427502 -0.95006328113862848 3.0300000093814292 -4.6121542684796086 -3.9583409167230954 3.1399999944454362 -3.4343447648292291 -5.5518590961329659 3.250000001403254 -2.211391869622052e-08 -3.9583411480468893 3.3600000080552288 3.4343447951676214 -0.95006299386368853 3.469999993355684 4.6121542575846384 1.6843356535689435 3.5800000061467721 3.7714388125311884 3.0000000063121735 3.6899999996808979 1.8849523866053275 2.9999999678076414 3.8000000015899791 2.0226724577899886e-10
1.9999999786181779 2.2000000010611984 1.4993262555480516e-10 1.999999940073848 2.3100000029799634 -1.2566338420167473 1.1228905772511177 2.4199999964621095 -2.5142964794265605 -0.63337552098855121 2.5300000094240174 -3.0747625870473176 -2.6388940021707392 2.6399999943902857 -2.28956908493599 -3.70123923630852 2.7500000014736599 -2.2094124751959083e-08 -2.6388942335204049 2.8600000080226584 2.2895691152358406 -0.6333752336860754 2.9699999933697065 3.074762576174181 1.1228903911007879 3.0800000061613169 2.5142964805065904 2.0000000063124097 3.1899999996813118 1.2566338429759545 1.9999999678044273 3.3000000015981645 2.030895970084515e-10
0 2
1.1180339887492663 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 1.9999999786224714 3.2000000010611984 1.4993156817851488e-10 1.9999999400858832 3.3100000029800039 -1.2566338420200993 1.1228905772354258 3.4199999964653824 -2.5142964794336957 -0.63337552096137206 3.5300000094000121 -3.0747625870538924 -2.6388940022006326 3.6399999944489672 -2.2895690849459234 -3.7012392363188105 3.7500000013909731 -2.2089225559796017e-08 -2.6388942335041543 3.8600000080939694 2.2895691152385909 -0.63337523371675097 3.9699999933335639 3.0747625761837516 1.122890391122479 4.0800000061683024 2.5142964805130394 2.0000000063110819 4.189999999681346 1.2566338429793371 1.9999999678108524 4.3000000015981641 2.0308942781058091e-10
2.9999999786203113 2.7000000010557414 1.493250228982142e-10 2.9999999400794013 2.8100000029668268 -1.8849523856500396 1.6843358396979533 2.9199999964709473 -3.7714388114427502 -0.95006328113862848 3.0300000093814292 -4.6121542684796086 -3.9583409167230954 3.1399999944454362 -3.4343447648292291 -5.5518590961329659 3.250000001403254 -2.211391869622052e-08 -3.9583411480468893 3.3600000080552288 3.4343447951676214 -0.95006299386368853 3.469999993355684 4.6121542575846384 1.6843356535689435 3.5800000061467721 3.7714388125311884 3.0000000063121735 3.6899999996808979 1.8849523866053275 2.9999999678076414 3.8000000015899791 2.0226724577899886e-10
0 2
1.1180339887505235 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 1.9999999678044258 3.3000000015990736 2.0309866472500391e-10 1.9999999279238478 3.4100000035856528 -1.2566338351063444 1.1228905729919101 3.5199999969246787 -2.5142964646674235 -0.63337551712705942 3.6300000099194438 -3.074762572896566 -2.6388939950858141 3.7399999954130898 -2.2895690671737792 -3.701239199025594 3.8500000010453497 -2.8316819999929571e-08 -2.638894240086211 3.9600000097382408 2.289569107254986 -0.63337521336332525 4.0699999930152293 3.0747625569284258 1.1228903762540163 4.1800000071518646 2.5142964672592112 1.9999999975765625 4.2900000001133263 1.2566338359369953 1.9999999567633309 4.4000000021460446 3.4089193414872246e-10
1.9999999678108487 4.3000000015990727 2.0310001286277759e-10 1.9999999279383043 4.4100000035856688 -1.2566338351111224 1.122890572977371 4.5199999969270834 -2.5142964646772947 -0.63337551710101136 4.6300000099037906 -3.0747625729062196 -2.6388939951173178 4.7399999954404937 -2.2895690671867799 -3.7012391990426692 4.8500000010168538 -2.8311815114534561e-08 -2.6388942400694013 4.9600000097581329 2.28956910726074 -0.63337521339745995 5.0699999930075235 3.0747625569407111 1.1228903762783815 5.1800000071517864 2.5142964672688786 1.999999997577024 5.2900000001133138 1.2566338359416902 1.9999999567719706 5.4000000021460428 3.4087463053968244e-10
0 2
0.99999999999999989 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 2.9999999678076419 3.8000000015899786 2.0228197919908545e-10 2.9999999279305172 3.9100000035685993 -1.8849523787403486 1.6843358354390539 4.0199999969387505 -3.7714387966862271 -0.95006327727783102 4.130000009847369 -4.6121542543265557 -3.9583409096400803 4.2399999955134353 -3.4343447470762434 -5.5518590588514121 4.3500000009162774 -2.8324961931502962e-08 -3.9583411546147409 4.4600000098022869 3.4343447871776691 -0.95006297354057856 4.569999992988012 4.612154238347574 1.6843356387230635 4.6800000071346206 3.7714387992820004 2.9999999975774561 4.7900000001106369 1.8849523795677556 2.9999999567676552 4.9000000021351298 3.3978766941952692e-10
1.999999967804428 3.3000000015981641 2.0309853566534866e-10 1.9999999279238589 3.4100000035847855 -1.2566338351063564 1.122890572991863 3.5199999969235889 -2.514296464667352 -0.63337551712694962 3.6300000099189784 -3.0747625728967702 -2.6388939950860215 3.7399999954114338 -2.289569067173399 -3.7012391990253026 3.8500000010453213 -2.8317314715309344e-08 -2.6388942400864956 3.9600000097365959 2.2895691072554576 -0.63337521336314628 4.0699999930147435 3.074762556928099 1.1228903762539559 4.1800000071507961 2.5142964672593644 1.9999999975765703 4.2900000001124514 1.2566338359369555 1.9999999567633331 4.4000000021451351 3.4089091691064752e-10
0 2
1.1180339887492663 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 10 2 11 2 2 1.9999999678108487 4.3000000015981632 2.0309837039748544e-10 1.9999999279382952 4.4100000035848472 -1.2566338351111233 1.1228905729774059 4.5199999969258062 -2.5142964646773036 -0.6333755171011064 4.6300000099037781 -3.0747625729061858 -2.6388939951171726 4.7399999954380565 -2.2895690671868656 -3.7012391990428237 4.8500000010178805 -2.8311673005987409e-08 -2.6388942400692912 4.9600000097554044 2.2895691072605815 -0.63337521339751135 5.0699999930078441 3.0747625569408297 1.1228903762783933 5.1800000071503085 2.5142964672688248 1.9999999975770228 5.2900000001125544 1.2566338359417017 1.9999999567719688 5.4000000021451333 3.4087654078806909e-10
2.9999999678076419 3.8000000015899786 2.0228197919908545e-10 2.9999999279305172 3.9100000035685993 -1.8849523787403486 1.6843358354390539 4.0199999969387505 -3.7714387966862271 -0.95006327727783102 4.130000009847369 -4.6121542543265557 -3.9583409096400803 4.2399999955134353 -3.4343447470762434 -5.5518590588514121 4.3500000009162774 -2.8324961931502962e-08 -3.9583411546147409 4.4600000098022869 3.4343447871776691 -0.95006297354057856 4.569999992988012 4.612154238347574 1.6843356387230635 4.6800000071346206 3.7714387992820004 2.9999999975774561 4.7900000001106369 1.8849523795677556 2.9999999567676552 4.9000000021351298 3.3978766941952692e-10
0 2
1.1180339887505235 2
0 11
6.2870356770386975 11
9 0 0 0 0 1 7 2 8 2 2 1.9999999567634459 4.4000000021451351 3.4084246536281171e-10 2.0000002640696679 4.4857142726286385 -0.97919124939730628 1.4406779014824571 4.5714286200977545 -1.9568429588808502 0.32256706838431459 4.65714278042977 -2.5610970658126595 -1.0310446917849259 4.7428572231265349 -2.3664775333082049 -1.9336277920152993 4.8285713826164374 -1.4716907680536384 -2.1948556793096836 4.914285730957423 -0.37606210629261111 -1.9189859268982161 5.0000000010577432 0.5634651072808482
1.9999999567720863 5.4000000021451333 3.4082825450809651e-10 2.0000002640168799 5.4857142726286572 -0.97919124940054725 1.440677901603262 5.5714286201005256 -1.956842958876841 0.32256706831810533 5.6571427804273915 -2.561097065856611 -1.0310446918474518 5.7428572231258039 -2.3664775332620946 -1.9336277919102527 5.8285713826187129 -1.4716907681020224 -2.1948556793750762 5.9142857309574053 -0.37606210627671594 -1.91898592690228 6.0000000010577423 0.56346510728208499
0 2
0.99999999999999989 2
0 8
3.4292921874756512 8
9 0 0 0 0 1 8 2 9 2 2 2.9999999567677649 4.9000000021351298 3.397406800331737e-10 3.0000002256333747 4.9749999888619385 -1.2851913641367954 2.3705073010240469 5.0500000328942178 -2.5704115958869975 1.1136055593857705 5.1249999710601237 -3.4960865104568501 -0.53250205740685397 5.2000000008716958 -3.7036172149772306 -2.0534544967400987 5.2750000334473137 -3.0407322012228404 -2.9986555539519255 5.3499999696162943 -1.7984423363377851 -3.2405588854226228 5.4250000146594397 -0.38793449825195131 -2.8784789005144367 5.5000000010522854 0.84519766412397335
1.9999999567634457 4.4000000021442256 3.4084202127360186e-10 2.0000002256563998 4.4749999888172907 -0.85679234318003406 1.5803375282327812 4.5500000330297086 -1.7136150504501024 0.74240571526481458 4.6249999709439429 -2.330709715104784 -0.35500472995647414 4.7000000008817722 -2.4690961844122525 -1.3689662699026173 4.7750000335740017 -2.0271404357293186 -1.9991057277353734 4.8499999695008489 -1.1989686215534909 -2.1603719602582432 4.9250000147190747 -0.25862120459594551 -1.9189859268982157 5.0000000010568328 0.56346510728084809
0 2
1.1180339887492663 2
0 9
3.4292921874756512 9
9 0 0 0 0 1 8 2 9 2 2 1.9999999567720863 5.4000000021442247 3.4082736632967681e-10 2.0000002256112897 5.4749999888172809 -0.856792343182876 1.5803375284244827 5.550000033033113 -1.7136150504645526 0.74240571490299379 5.6249999709394025 -2.3307097150774951 -0.35500472950880069 5.700000000885872 -2.4690961844857102 -1.3689662702680536 5.7750000335703762 -2.0271404356654052 -1.9991057275586339 5.8499999695038181 -1.1989686216024464 -2.1603719603159743 5.9250000147190507 -0.25862120458187643 -1.9189859269022804 6.000000001056832 0.56346510728208465
2.9999999567677649 4.9000000021351298 3.397406800331737e-10 3.0000002256333747 4.9749999888619385 -1.2851913641367954 2.3705073010240469 5.0500000328942178 -2.5704115958869975 1.1136055593857705 5.1249999710601237 -3.4960865104568501 -0.53250205740685397 5.2000000008716958 -3.7036172149772306 -2.0534544967400987 5.2750000334473137 -3.0407322012228404 -2.9986555539519255 5.3499999696162943 -1.7984423363377851 -3.2405588854226228 5.4250000146594397 -0.38793449825195131 -2.8784789005144367 5.5000000010522854 0.84519766412397335
0 2
1.1180339887505235 2
0 9
3.4292921874756512 9
1 -2.2504825962919797 5.5000000010564518 0.66080131173616696 0.28173255684250664 -2.6696418513327818e-14 0.95949297361418118 -4.0819749136223607e-12 1 1.2263993079777387e-12 -0.95949297361418118 -4.2621429146702262e-12 0.2817325568425067
Triangulations 0
TShapes 88
Ve
4.39810635581078e-05
2.00000000000003 -1.11022302462516e-16 1.73559347507678e-15
0 0
0101101
*
Ve
2.94018437871922e-05
2.00000000000003 1 1.24828460492808e-15
0 0
0101101
*
Ed
1.00005e-07 1 1 0
1 1 0 0 1
2 1 2 0 0 1
0
0101000
+88 0 -87 0 *
Ve
4.3981062235277e-05
3.00000000000003 0.49999999999909 2.64590224776542e-15
0 0
0101101
*
Ed
1.00005e-07 1 1 0
1 2 0 0 1.11803398875052
2 2 3 0 0 1.11803398875052
0
0101000
+87 0 -85 0 *
Ed
1.00005e-07 1 1 0
1 3 0 0 1.11803398874927
2 3 4 0 0 1.11803398874927
0
0101000
+85 0 -88 0 *
Wi
0101100
+86 0 +84 0 +83 0 *
Fa
0 1e-07 1 0
0101000
+82 0 *
Ve
2.94018442477067e-05
1.99999998894377 1.10000000055015 7.95973845452051e-11
0 0
0101101
*
Ed
1e-07 1 1 0
1 4 0 0 6.2870356770387
2 4 2 0 0 6.2870356770387
2 5 4 0 0 6.2870356770387
0
0101000
+88 0 -80 0 *
Ve
2.94018442477067e-05
1.99999998894602 2.10000000054924 7.95969404559953e-11
0 0
0101101
*
Ed
1e-07 1 1 0
1 5 0 0 6.2870356770387
2 6 2 0 0 6.2870356770387
2 7 3 0 0 6.2870356770387
0
0101000
+87 0 -78 0 *
Ed
1e-07 1 1 0
1 6 0 0 1
2 8 2 0 0 1
2 9 5 0 0 1
4 C1 5 0 2 0
0
0101000
+80 0 -78 0 *
Wi
0101100
-79 0 +86 0 +77 0 -76 0 *
Fa
0 1e-07 2 0
0101000
+75 0 *
Ve
2.94018604988986e-05
1.99999997861821 2.20000000106211 1.49914425623943e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 7 0 0 6.2870356770387
2 10 5 0 0 6.2870356770387
2 11 6 0 0 6.2870356770387
0
0101000
+80 0 -73 0 *
Ve
2.94018604988986e-05
1.9999999786225 3.2000000010612 1.49913981534733e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 8 0 0 6.2870356770387
2 12 5 0 0 6.2870356770387
2 13 7 0 0 6.2870356770387
0
0101000
+78 0 -71 0 *
Ed
1e-07 1 1 0
1 9 0 0 1
2 14 5 0 0 1
2 15 8 0 0 1
4 C1 8 0 5 0
0
0101000
+73 0 -71 0 *
Wi
0101100
-72 0 +76 0 +70 0 -69 0 *
Fa
0 1e-07 5 0
0101000
+68 0 *
Ve
2.94018662885789e-05
1.99999996780443 3.30000000159907 2.03096284540616e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 10 0 0 6.2870356770387
2 16 8 0 0 6.2870356770387
2 17 9 0 0 6.2870356770387
0
0101000
+73 0 -66 0 *
Ve
2.94018662885789e-05
1.99999996781085 4.30000000159816 2.03095840451406e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 11 0 0 6.2870356770387
2 18 8 0 0 6.2870356770387
2 19 10 0 0 6.2870356770387
0
0101000
+71 0 -64 0 *
Ed
1e-07 1 1 0
1 12 0 0 1
2 20 8 0 0 1
2 21 11 0 0 1
4 C1 11 0 8 0
0
0101000
+66 0 -64 0 *
Wi
0101100
-65 0 +69 0 +63 0 -62 0 *
Fa
0 1e-07 8 0
0101000
+61 0 *
Ve
2.94018603423369e-05
1.99999995676339 4.40000000214559 3.4086781206032e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 13 0 0 6.2870356770387
2 22 11 0 0 6.2870356770387
2 23 12 0 0 6.2870356770387
0
0101000
+66 0 -59 0 *
Ve
2.94018603423493e-05
1.99999995677203 5.40000000214468 3.40853379161e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 14 0 0 6.2870356770387
2 24 11 0 0 6.2870356770387
2 25 13 0 0 6.2870356770387
0
0101000
+64 0 -57 0 *
Ed
1e-07 1 1 0
1 15 0 0 1
2 26 11 0 0 1
2 27 14 0 0 1
4 G1 14 0 11 0
0
0101000
+59 0 -57 0 *
Wi
0101100
-58 0 +62 0 +56 0 -55 0 *
Fa
0 1e-07 11 0
0101000
+54 0 *
Ve
7.75115104411493e-05
-1.91898592689822 5.00000000105683 0.563465107280848
0 0
0101101
*
Ed
0.00014709836519379 1 1 0
1 16 0 0 3.42929218747565
2 28 14 0 0 3.42929218747565
2 29 15 0 0 3.42929218747565
0
0101000
+59 0 -52 0 *
Ve
7.75115113493296e-05
-1.91898592690228 6.00000000105683 0.563465107282085
0 0
0101101
*
Ed
0.000147098365210656 1 1 0
1 17 0 0 3.42929218747565
2 30 14 0 0 3.42929218747565
2 31 16 0 0 3.42929218747565
0
0101000
+57 0 -50 0 *
Ed
1.00005e-07 1 1 0
1 18 0 0 1
2 32 14 0 0 1
0
0101000
+52 0 -50 0 *
Wi
0101100
-51 0 +55 0 +49 0 -48 0 *
Fa
0 1e-07 14 0
0101000
+47 0 *
Ve
4.39810618145432e-05
2.99999998894491 1.60000000054606 7.92760860018786e-11
0 0
0101101
*
Ed
1e-07 1 1 0
1 19 0 0 6.2870356770387
2 33 3 0 0 6.2870356770387
2 34 4 0 0 6.2870356770387
0
0101000
+85 0 -45 0 *
Ed
1e-07 1 1 0
1 20 0 0 1.11803398875052
2 35 3 0 0 1.11803398875052
2 36 7 0 0 1.11803398875052
4 C1 7 0 3 0
0
0101000
+78 0 -45 0 *
Wi
0101100
-77 0 +84 0 +44 0 -43 0 *
Fa
0 1e-07 3 0
0101000
+42 0 *
Ve
4.39810783756164e-05
2.99999997862034 2.70000000105574 1.49308687941708e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 21 0 0 6.2870356770387
2 37 7 0 0 6.2870356770387
2 38 6 0 0 6.2870356770387
0
0101000
+45 0 -40 0 *
Ed
1e-07 1 1 0
1 22 0 0 1.11803398875052
2 39 7 0 0 1.11803398875052
2 40 10 0 0 1.11803398875052
4 C1 10 0 7 0
0
0101000
+71 0 -40 0 *
Wi
0101100
-70 0 +43 0 +39 0 -38 0 *
Fa
0 1e-07 7 0
0101000
+37 0 *
Ve
4.39810841886954e-05
2.99999996780764 3.80000000158998 2.02276051770023e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 23 0 0 6.2870356770387
2 41 10 0 0 6.2870356770387
2 42 9 0 0 6.2870356770387
0
0101000
+40 0 -35 0 *
Ed
1e-07 1 1 0
1 24 0 0 1.11803398875052
2 43 10 0 0 1.11803398875052
2 44 13 0 0 1.11803398875052
4 C1 13 0 10 0
0
0101000
+64 0 -35 0 *
Wi
0101100
-63 0 +38 0 +34 0 -33 0 *
Fa
0 1e-07 10 0
0101000
+32 0 *
Ve
4.39810778551053e-05
2.99999995676771 4.90000000213513 3.39765582641472e-10
0 0
0101101
*
Ed
1e-07 1 1 0
1 25 0 0 6.2870356770387
2 45 13 0 0 6.2870356770387
2 46 12 0 0 6.2870356770387
0
0101000
+35 0 -30 0 *
Ed
1e-07 1 1 0
1 26 0 0 1.11803398875052
2 47 13 0 0 1.11803398875052
2 48 16 0 0 1.11803398875052
4 G1 16 0 13 0
0
0101000
+57 0 -30 0 *
Wi
0101100
-56 0 +33 0 +29 0 -28 0 *
Fa
0 1e-07 13 0
0101000
+27 0 *
Ve
1.0602117875223e-05
-2.87847890051444 5.50000000105229 0.845197664123973
0 0
0101101
*
Ed
1e-07 1 1 0
1 27 0 0 3.42929218747565
2 49 16 0 0 3.42929218747565
2 50 15 0 0 3.42929218747565
0
0101000
+30 0 -25 0 *
Ed
1.00005e-07 1 1 0
1 28 0 0 1.11803398875052
2 51 16 0 0 1.11803398875052
0
0101000
+50 0 -25 0 *
Wi
0101100
-49 0 +28 0 +24 0 -23 0 *
Fa
0 1e-07 16 0
0101000
+22 0 *
Ed
1e-07 1 1 0
1 29 0 0 1.11803398874927
2 52 4 0 0 1.11803398874927
2 53 6 0 0 1.11803398874927
4 C1 6 0 4 0
0
0101000
+45 0 -80 0 *
Wi
0101100
-44 0 +83 0 +79 0 -20 0 *
Fa
0 1e-07 4 0
0101000
+19 0 *
Ed
1e-07 1 1 0
1 30 0 0 1.11803398874927
2 54 6 0 0 1.11803398874927
2 55 9 0 0 1.11803398874927
4 C1 9 0 6 0
0
0101000
+40 0 -73 0 *
Wi
0101100
-39 0 +20 0 +72 0 -17 0 *
Fa
0 1e-07 6 0
0101000
+16 0 *
Ed
1e-07 1 1 0
1 31 0 0 1.11803398874927
2 56 9 0 0 1.11803398874927
2 57 12 0 0 1.11803398874927
4 C1 12 0 9 0
0
0101000
+35 0 -66 0 *
Wi
0101100
-34 0 +17 0 +65 0 -14 0 *
Fa
0 1e-07 9 0
0101000
+13 0 *
Ed
1e-07 1 1 0
1 32 0 0 1.11803398874927
2 58 12 0 0 1.11803398874927
2 59 15 0 0 1.11803398874927
4 G1 15 0 12 0
0
0101000
+30 0 -59 0 *
Wi
0101100
-29 0 +14 0 +58 0 -11 0 *
Fa
0 1e-07 12 0
0101000
+10 0 *
Ed
1.00005e-07 1 1 0
1 33 0 0 1.11803398874927
2 60 15 0 0 1.11803398874927
0
0101000
+25 0 -52 0 *
Wi
0101100
-24 0 +11 0 +51 0 -8 0 *
Fa
0 1e-07 15 0
0101000
+7 0 *
Wi
0101100
+48 0 +23 0 +8 0 *
Fa
0 1e-07 17 0
0101000
+5 0 *
Sh
0101100
-81 0 +74 0 +67 0 +60 0 +53 0 +46 0 +41 0 +36 0 +31 0 +26 0
+21 0 +18 0 +15 0 +12 0 +9 0 +6 0 +4 0 *
So
0100000
+3 0 *
Co
1100000
+2 1 *
+1 0