1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-04 13:13:25 +03:00

Integration of OCCT 6.5.0 from SVN

This commit is contained in:
bugmaster
2011-03-16 07:30:28 +00:00
committed by bugmaster
parent 4903637061
commit 7fd59977df
16375 changed files with 3882564 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
#include "ApplicationTut.h"
#include "DocumentTut.h"
#include <QFileDialog>
#include <QStatusBar>
ApplicationTut::ApplicationTut()
: ApplicationCommonWindow( )
{
createMakeBottleOperation();
}
ApplicationTut::~ApplicationTut()
{
}
void ApplicationTut::createMakeBottleOperation(){
QPixmap MakeBottleIcon;
QString dir = getTutResourceDir() + QString( "/" );
MakeBottleIcon = QPixmap( dir+QObject::tr( "ICON_MAKE_BOTTLE" ) );
QAction * MakeBottleAction = new QAction( MakeBottleIcon, QObject::tr("TBR_MAKEBOT"), this );
MakeBottleAction->setToolTip( QObject::tr( "TBR_MAKEBOT" ) );
MakeBottleAction->setStatusTip( QObject::tr("TBR_MAKEBOT") );
MakeBottleAction->setShortcut( QObject::tr( "CTRL+M" ) );
connect( MakeBottleAction, SIGNAL( activated() ) , this, SLOT( onMakeBottleAction() ) );
myMakeBottleBar = addToolBar( tr( "Make Bottle" ) );
insertToolBar( getCasCadeBar(), myMakeBottleBar );
myMakeBottleBar->addAction( MakeBottleAction );
myMakeBottleBar->hide();
}
void ApplicationTut::updateFileActions()
{
if ( getWorkspace()->windowList().isEmpty() )
{
if ( !isDocument() )
{
myMakeBottleBar->show();
}
else
{
myMakeBottleBar->hide();
}
}
ApplicationCommonWindow::updateFileActions();
}
void ApplicationTut::onMakeBottleAction()
{
QWorkspace* ws = ApplicationCommonWindow::getWorkspace();
DocumentTut* doc = (DocumentTut*)((MDIWindow*)ws->activeWindow())->getDocument();
statusBar()->showMessage( QObject::tr("INF_MAKE_BOTTLE"), 5000 );
doc->onMakeBottle();
statusBar()->showMessage(QObject::tr("INF_DONE"));
}
QString ApplicationTut::getTutResourceDir()
{
static QString resDir( ::getenv( "CSF_TuturialResourcesDefaults" ) );
return resDir;
}

View File

@@ -0,0 +1,30 @@
#ifndef APPLICATIONTUT_H
#define APPLICATIONTUT_H
#include "DocumentTut.h"
#include "ApplicationCommon.h"
class ApplicationTut: public ApplicationCommonWindow
{
Q_OBJECT
public:
ApplicationTut();
~ApplicationTut();
static QString getTutResourceDir();
virtual void updateFileActions();
public slots:
void onMakeBottleAction();
private:
void createMakeBottleOperation();
private:
QToolBar* myMakeBottleBar;
};
#endif

View File

@@ -0,0 +1,36 @@
#include "DocumentTut.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QApplication>
#include <TopoDS_Shape.hxx>
#include <AIS_Shape.hxx>
TopoDS_Shape
MakeBottle(const Standard_Real myWidth , const Standard_Real myHeight , const Standard_Real myThickness);
DocumentTut::DocumentTut( const int theIndex, ApplicationCommonWindow* app )
: DocumentCommon( theIndex, app )
{
}
DocumentTut::~DocumentTut()
{
}
void DocumentTut::onMakeBottle()
{
QApplication::setOverrideCursor( Qt::WaitCursor );
TopoDS_Shape aBottle=MakeBottle(50,70,30);
Handle(AIS_Shape) AISBottle=new AIS_Shape(aBottle);
getContext()->SetMaterial(AISBottle,Graphic3d_NOM_GOLD);
getContext()->SetDisplayMode(AISBottle,1,Standard_False);
getContext()->Display(AISBottle, Standard_False);
getContext()->SetCurrentObject(AISBottle,Standard_False);
emit selectionChanged();
fitAll();
QApplication::restoreOverrideCursor();
}

View File

@@ -0,0 +1,24 @@
#ifndef DOCUMENTTUT_H
#define DOCUMENTTUT_H
#include "DocumentCommon.h"
#include <Geom_BSplineSurface.hxx>
class SurfConstruction;
class ApplicationCommon;
class DocumentTut : public DocumentCommon
{
Q_OBJECT
public:
DocumentTut( const int, ApplicationCommonWindow* );
~DocumentTut();
void onMakeBottle();
private:
SurfConstruction* mySurfConstructor;
};
#endif

View File

@@ -0,0 +1,43 @@
#include "ApplicationTut.h"
#include <QApplication>
#include <QTranslator>
int main ( int argc, char* argv[] )
{
QApplication a( argc, argv );
QString resDir = ApplicationCommonWindow::getResourceDir();
QString resTutDir = ApplicationTut::getTutResourceDir();
QTranslator strTrans( 0 );
Standard_Boolean isOK = strTrans.load( "Common-string", resDir );
if( isOK )
a.installTranslator( &strTrans );
QTranslator iconTrans( 0 );
isOK = iconTrans.load( "Common-icon", resDir );
if( isOK )
a.installTranslator( &iconTrans );
QTranslator strTutTrans( 0 );
isOK = strTutTrans.load( "Tutorial-string", resTutDir );
if( isOK )
a.installTranslator( &strTutTrans );
QTranslator iconTutTrans( 0 );
isOK = iconTutTrans.load( "Tutorial-icon", resTutDir );
if( isOK )
a.installTranslator( &iconTutTrans );
QObject::connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) );
ApplicationTut* mw = new ApplicationTut();
mw->setWindowTitle( QObject::tr( "TIT_SAMPLE" ) );
QString aResName( resDir + QString( "/" ) + QObject::tr( "ICON_SAMPLE" ) );
mw->setWindowIcon( QPixmap( aResName ) );
mw->show();
return a.exec();
}

View File

@@ -0,0 +1,217 @@
#include <BRep_Tool.hxx>
#include <BRepAlgoAPI_Fuse.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRepFilletAPI_MakeFillet.hxx>
#include <BRepLib.hxx>
#include <BRepOffsetAPI_MakeThickSolid.hxx>
#include <BRepOffsetAPI_ThruSections.hxx>
#include <BRepPrimAPI_MakeCylinder.hxx>
#include <BRepPrimAPI_MakePrism.hxx>
#include <GC_MakeArcOfCircle.hxx>
#include <GC_MakeSegment.hxx>
#include <GCE2d_MakeSegment.hxx>
#include <gp.hxx>
#include <gp_Ax1.hxx>
#include <gp_Ax2.hxx>
#include <gp_Ax2d.hxx>
#include <gp_Dir.hxx>
#include <gp_Dir2d.hxx>
#include <gp_Pnt.hxx>
#include <gp_Pnt2d.hxx>
#include <gp_Trsf.hxx>
#include <gp_Vec.hxx>
#include <Geom_CylindricalSurface.hxx>
#include <Geom_Plane.hxx>
#include <Geom_Surface.hxx>
#include <Geom_TrimmedCurve.hxx>
#include <Geom2d_Ellipse.hxx>
#include <Geom2d_TrimmedCurve.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Wire.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Compound.hxx>
#include <TopTools_ListOfShape.hxx>
TopoDS_Shape
MakeBottle(const Standard_Real myWidth , const Standard_Real myHeight ,
const Standard_Real myThickness)
{
//Profile : Define Support Points
gp_Pnt aPnt1(-myWidth / 2. , 0 , 0);
gp_Pnt aPnt2(-myWidth / 2. , -myThickness / 4. , 0);
gp_Pnt aPnt3(0 , -myThickness / 2. , 0);
gp_Pnt aPnt4(myWidth / 2. , -myThickness / 4. , 0);
gp_Pnt aPnt5(myWidth / 2. , 0 , 0);
//Profile : Define the Geometry
Handle(Geom_TrimmedCurve) aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3 ,aPnt4);
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1 , aPnt2);
Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(aPnt4 , aPnt5);
//Profile : Define the Topology
TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle);
TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment2);
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1 , aEdge2 , aEdge3);
//Complete Profile
gp_Ax1 xAxis = gp::OX();
gp_Trsf aTrsf;
aTrsf.SetMirror(xAxis);
BRepBuilderAPI_Transform aBRepTrsf(aWire , aTrsf);
TopoDS_Shape aMirroredShape = aBRepTrsf.Shape();
TopoDS_Wire aMirroredWire = TopoDS::Wire(aMirroredShape);
BRepBuilderAPI_MakeWire mkWire;
mkWire.Add(aWire);
mkWire.Add(aMirroredWire);
TopoDS_Wire myWireProfile = mkWire.Wire();
//Body : Prism the Profile
TopoDS_Face myFaceProfile = BRepBuilderAPI_MakeFace(myWireProfile);
gp_Vec aPrismVec(0 , 0 , myHeight);
TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile , aPrismVec);
//Body : Apply Fillets
BRepFilletAPI_MakeFillet mkFillet(myBody);
TopExp_Explorer aEdgeExplorer(myBody , TopAbs_EDGE);
while(aEdgeExplorer.More()){
TopoDS_Edge aEdge = TopoDS::Edge(aEdgeExplorer.Current());
//Add edge to fillet algorithm
mkFillet.Add(myThickness / 12. , aEdge);
aEdgeExplorer.Next();
}
myBody = mkFillet.Shape();
//Body : Add the Neck
gp_Pnt neckLocation(0 , 0 , myHeight);
gp_Dir neckNormal = gp::DZ();
gp_Ax2 neckAx2(neckLocation , neckNormal);
Standard_Real myNeckRadius = myThickness / 4.;
Standard_Real myNeckHeight = myHeight / 10;
BRepPrimAPI_MakeCylinder MKCylinder(neckAx2 , myNeckRadius , myNeckHeight);
TopoDS_Shape myNeck = MKCylinder.Shape();
myBody = BRepAlgoAPI_Fuse(myBody , myNeck);
//Body : Create a Hollowed Solid
TopoDS_Face faceToRemove;
Standard_Real zMax = -1;
for(TopExp_Explorer aFaceExplorer(myBody , TopAbs_FACE) ; aFaceExplorer.More() ; aFaceExplorer.Next()){
TopoDS_Face aFace = TopoDS::Face(aFaceExplorer.Current());
//Check if <aFace> is the top face of the bottle's neck
Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace);
if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane)){
Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface);
gp_Pnt aPnt = aPlane->Location();
Standard_Real aZ = aPnt.Z();
if(aZ > zMax){
zMax = aZ;
faceToRemove = aFace;
}
}
}
TopTools_ListOfShape facesToRemove;
facesToRemove.Append(faceToRemove);
myBody = BRepOffsetAPI_MakeThickSolid(myBody , facesToRemove , -myThickness / 50 , 1.e-3);
//return myBody;
//Threading : Create Surfaces
Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2 , myNeckRadius * 0.99);
Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2 , myNeckRadius * 1.05);
//Threading : Define 2D Curves
gp_Pnt2d aPnt(2. * PI , myNeckHeight / 2.);
gp_Dir2d aDir(2. * PI , myNeckHeight / 4.);
gp_Ax2d aAx2d(aPnt , aDir);
Standard_Real aMajor = 2. * PI;
Standard_Real aMinor = myNeckHeight / 10;
Handle(Geom2d_Ellipse) anEllipse1 = new Geom2d_Ellipse(aAx2d , aMajor , aMinor);
Handle(Geom2d_Ellipse) anEllipse2 = new Geom2d_Ellipse(aAx2d , aMajor , aMinor / 4);
Handle(Geom2d_TrimmedCurve) aArc1 = new Geom2d_TrimmedCurve(anEllipse1 , 0 , PI);
Handle(Geom2d_TrimmedCurve) aArc2 = new Geom2d_TrimmedCurve(anEllipse2 , 0 , PI);
gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0);
gp_Pnt2d anEllipsePnt2 = anEllipse1->Value(PI);
Handle(Geom2d_TrimmedCurve) aSegment = GCE2d_MakeSegment(anEllipsePnt1 , anEllipsePnt2);
//Threading : Build Edges and Wires
TopoDS_Edge aEdge1OnSurf1 = BRepBuilderAPI_MakeEdge(aArc1 , aCyl1);
TopoDS_Edge aEdge2OnSurf1 = BRepBuilderAPI_MakeEdge(aSegment , aCyl1);
TopoDS_Edge aEdge1OnSurf2 = BRepBuilderAPI_MakeEdge(aArc2 , aCyl2);
TopoDS_Edge aEdge2OnSurf2 = BRepBuilderAPI_MakeEdge(aSegment , aCyl2);
TopoDS_Wire threadingWire1 = BRepBuilderAPI_MakeWire(aEdge1OnSurf1 , aEdge2OnSurf1);
TopoDS_Wire threadingWire2 = BRepBuilderAPI_MakeWire(aEdge1OnSurf2 , aEdge2OnSurf2);
BRepLib::BuildCurves3d(threadingWire1);
BRepLib::BuildCurves3d(threadingWire2);
//Create Threading
BRepOffsetAPI_ThruSections aTool(Standard_True);
aTool.AddWire(threadingWire1);
aTool.AddWire(threadingWire2);
aTool.CheckCompatibility(Standard_False);
TopoDS_Shape myThreading = aTool.Shape();
//Building the resulting compound
TopoDS_Compound aRes;
BRep_Builder aBuilder;
aBuilder.MakeCompound (aRes);
aBuilder.Add (aRes, myBody);
aBuilder.Add (aRes, myThreading);
return aRes;
}

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="ru_RU">
<context>
<name>QObject</name>
<message>
<source>ICON_MAKE_BOTTLE</source>
<translation>Bottle.png</translation>
</message>
</context>
</TS>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS><TS version="1.1" language="ru_RU">
<context>
<name>QObject</name>
<message>
<source>TIT_SAMPLE</source>
<translation>Tutorial</translation>
</message>
<message>
<source>INF_MAKE_BOTTLE</source>
<translation>Making bottle .........</translation>
</message>
<message>
<source>TBR_MAKEBOT</source>
<translation>MakeBottle</translation>
</message>
<message>
<source>INF_DONE</source>
<translation>Done</translation>
</message>
<message>
<source>TIT_ABOUT</source>
<translation>Tutorial</translation>
</message>
</context>
</TS>