mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0022323: MakeThickSolid raises Construction exception on cylinder.
Removed BRepTest/BRepTest_ShellCommands.cxx from OCCT. Added test case for bug 22323. It is placed in bugs/modalg.
This commit is contained in:
@@ -103,8 +103,6 @@ is
|
||||
ProjectionCommands(DI : in out Interpretor from Draw);
|
||||
---Purpose: Defines the commands to project a wire on a shape.
|
||||
--
|
||||
ShellCommands(DI : in out Interpretor from Draw);
|
||||
---Purpose: Defines the commands to prepare shell commands.
|
||||
|
||||
end BRepTest;
|
||||
|
||||
|
@@ -56,7 +56,6 @@ void BRepTest::AllCommands(Draw_Interpretor& theCommands)
|
||||
BRepTest::CheckCommands(theCommands);
|
||||
// BRepTest::PlacementCommands(theCommands) ;
|
||||
BRepTest::ProjectionCommands(theCommands) ;
|
||||
BRepTest::ShellCommands(theCommands);
|
||||
|
||||
// define the TCL variable Draw_TOPOLOGY
|
||||
const char* com = "set Draw_TOPOLOGY 1";
|
||||
|
@@ -1,200 +0,0 @@
|
||||
// Created on: 1998-12-21
|
||||
// Created by: Michael KAZAKOV
|
||||
// Copyright (c) 1998-1999 Matra Datavision
|
||||
// Copyright (c) 1999-2012 OPEN CASCADE SAS
|
||||
//
|
||||
// The content of this file is subject to the Open CASCADE Technology Public
|
||||
// License Version 6.5 (the "License"). You may not use the content of this file
|
||||
// except in compliance with the License. Please obtain a copy of the License
|
||||
// at http://www.opencascade.org and read it completely before using this file.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
|
||||
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
|
||||
//
|
||||
// The Original Code and all software distributed under the License is
|
||||
// distributed on an "AS IS" basis, without warranty of any kind, and the
|
||||
// Initial Developer hereby disclaims all such warranties, including without
|
||||
// limitation, any warranties of merchantability, fitness for a particular
|
||||
// purpose or non-infringement. Please see the License for the specific terms
|
||||
// and conditions governing the rights and limitations under the License.
|
||||
|
||||
|
||||
|
||||
#include <BRepTest.hxx>
|
||||
#include <Draw_Interpretor.hxx>
|
||||
#include <Draw_Appli.hxx>
|
||||
#include <DBRep.hxx>
|
||||
#include <BRepTools.hxx>
|
||||
#include <BRepOffset.hxx>
|
||||
#include <BRepOffsetAPI_MakeThickSolid.hxx>
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopExp_Explorer.hxx>
|
||||
#include <TopAbs.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <TopExp_Explorer.hxx>
|
||||
#include <TopAbs.hxx>
|
||||
#include <TopoDS_Face.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Shell.hxx>
|
||||
#include <TopoDS_Solid.hxx>
|
||||
#include <BRepClass3d.hxx>
|
||||
|
||||
//
|
||||
static
|
||||
Standard_Boolean issame(TopoDS_Face& face,
|
||||
TopoDS_Face& newface);
|
||||
static
|
||||
TopoDS_Face findface(TopoDS_Shape& shape,
|
||||
TopoDS_Face& face);
|
||||
//
|
||||
static Standard_Integer shell(Draw_Interpretor&, Standard_Integer, const char** );
|
||||
static Standard_Integer outershell(Draw_Interpretor&, Standard_Integer, const char** );
|
||||
|
||||
//=======================================================================
|
||||
//function : ShellCommands
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
void BRepTest::ShellCommands(Draw_Interpretor& theCommands)
|
||||
{
|
||||
static Standard_Boolean loaded = Standard_False;
|
||||
if (loaded) return;
|
||||
loaded = Standard_True;
|
||||
|
||||
const char* g = "Projection of wire commands";
|
||||
|
||||
theCommands.Add("shell","Make shell on bugged object", __FILE__, shell,g);
|
||||
theCommands.Add("outershell","use outershell r s", __FILE__, outershell,g);
|
||||
|
||||
}
|
||||
//modified by NIZNHY-PKV Thu Sep 20 10:44:11 2012f
|
||||
//=======================================================================
|
||||
//function : outershell
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Integer outershell(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||
{
|
||||
TopoDS_Shape aS;
|
||||
TopoDS_Solid aSd;
|
||||
TopoDS_Shell aSh;
|
||||
//
|
||||
if (n!=3) {
|
||||
di << " use outershell r s\n";
|
||||
return 1;
|
||||
}
|
||||
//
|
||||
aS=DBRep::Get(a[2]);
|
||||
if (aS.IsNull()) {
|
||||
di << " Null shape is not allowed\n";
|
||||
return 1;
|
||||
}
|
||||
if (aS.ShapeType()!=TopAbs_SOLID) {
|
||||
di << " The shape must be a solid\n";
|
||||
return 1;
|
||||
}
|
||||
//
|
||||
aSd=*((TopoDS_Solid*)&aS);
|
||||
//
|
||||
aSh=BRepClass3d::OuterShell(aSd);
|
||||
if (aSh.IsNull()) {
|
||||
di << " not found\n";
|
||||
}
|
||||
else {
|
||||
DBRep::Set(a[1],aSh);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//modified by NIZNHY-PKV Thu Sep 20 10:44:17 2012t
|
||||
//=======================================================================
|
||||
//function : shell
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Integer shell(Draw_Interpretor& di, Standard_Integer n, const char** a)
|
||||
{
|
||||
TopoDS_Shape Shape = DBRep::Get(a[1]);
|
||||
TopTools_ListOfShape ListOfCorks;
|
||||
//cout <<"You have "<<n-2<<" of the reference faces" << endl;
|
||||
di <<"You have "<<n-2<<" of the reference faces" << "\n";
|
||||
Standard_Integer i=2;
|
||||
for (;i<n;i++)
|
||||
{
|
||||
//cout <<i-1<<"th element"<< endl;
|
||||
di <<i-1<<"th element"<< "\n";
|
||||
// ListOfCorks.Append(findface(Shape,TopoDS::Face(DBRep::Get(a[i]))));
|
||||
TopoDS_Shape aLocalFace(DBRep::Get(a[i]));
|
||||
ListOfCorks.Append(findface(Shape,(TopoDS_Face &) TopoDS::Face(aLocalFace)));
|
||||
// ListOfCorks.Append(findface(Shape,(TopoDS_Face &) TopoDS::Face(DBRep::Get(a[i]))));
|
||||
}
|
||||
Standard_Real Tol = 1e-5;
|
||||
Standard_Real OffsetValue = 1;
|
||||
OffsetValue = -OffsetValue; // Offset > 0 = Interior.
|
||||
BRepOffsetAPI_MakeThickSolid MKTS (Shape,
|
||||
ListOfCorks,
|
||||
OffsetValue,
|
||||
Tol,
|
||||
BRepOffset_Skin,
|
||||
1, Standard_False);
|
||||
|
||||
DBRep::Set("Result.brep",MKTS.Shape());
|
||||
TopTools_ListOfShape Larg;
|
||||
Larg.Append(Shape);
|
||||
//Check if the shape has at least one face
|
||||
TopExp_Explorer FExp (MKTS.Shape (), TopAbs_FACE);
|
||||
if (FExp.More ()) {
|
||||
//cout << "Standard_True"<<endl;
|
||||
di << "Standard_True"<<"\n";
|
||||
}
|
||||
DBRep::Set("S",MKTS.Shape());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//=======================================================================
|
||||
//function : issame
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
Standard_Boolean issame(TopoDS_Face& face, TopoDS_Face& newface)
|
||||
{
|
||||
TopExp_Explorer exp(face,TopAbs_VERTEX),newexp(newface,TopAbs_VERTEX);
|
||||
Standard_Integer newcounter=0,counter=0;
|
||||
for (;exp.More();exp.Next())
|
||||
{
|
||||
counter++;
|
||||
gp_Pnt p(BRep_Tool::Pnt(TopoDS::Vertex(exp.Current())));
|
||||
for (;newexp.More();newexp.Next())
|
||||
{
|
||||
gp_Pnt newp(BRep_Tool::Pnt(TopoDS::Vertex(newexp.Current())));
|
||||
if (p.IsEqual(newp,1e-7))
|
||||
{
|
||||
newcounter++;
|
||||
break;
|
||||
};
|
||||
};
|
||||
};
|
||||
if (counter==newcounter)
|
||||
return Standard_True;
|
||||
return Standard_False;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : findface
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
TopoDS_Face findface(TopoDS_Shape& shape, TopoDS_Face& face)
|
||||
{
|
||||
TopoDS_Face newface;
|
||||
TopExp_Explorer exp(shape,TopAbs_FACE);
|
||||
for (;exp.More();exp.Next())
|
||||
{
|
||||
newface = TopoDS::Face(exp.Current());
|
||||
if (issame(face,newface))
|
||||
{
|
||||
break;
|
||||
};
|
||||
};
|
||||
return newface;
|
||||
}
|
||||
|
||||
|
@@ -16,4 +16,3 @@ BRepTest_TopologyCommands.cxx
|
||||
BRepTest_OtherCommands.cxx
|
||||
BRepTest_CheckCommands.cxx
|
||||
BRepTest_ProjectionCommands.cxx
|
||||
BRepTest_ShellCommands.cxx
|
||||
|
15
tests/bugs/modalg/bug22323
Normal file
15
tests/bugs/modalg/bug22323
Normal file
@@ -0,0 +1,15 @@
|
||||
puts "============"
|
||||
puts "CR22323"
|
||||
puts "============"
|
||||
puts ""
|
||||
##########################################################################################################
|
||||
# Example of using offsetshape command instead of redundant "shell" command to get the same result
|
||||
##########################################################################################################
|
||||
|
||||
pcylinder cy 100 200
|
||||
explode cy f
|
||||
donly cy cy_2
|
||||
fit
|
||||
|
||||
offsetshape res cy -1. cy_2
|
||||
donly res
|
Reference in New Issue
Block a user