initialization of smoothing surface

This commit is contained in:
fps 2011-10-13 10:08:36 +00:00
parent 539612ab98
commit 5aead5a14c
27 changed files with 950 additions and 2 deletions

View File

@ -18,6 +18,7 @@ entities:
<ul>
<li>\subpage create_pipetshape_page</li>
<li>\subpage create_smoothingsurface_page</li>
<!--@@ insert new functions before this line @@ do not remove this line @@-->
</ul>

View File

@ -0,0 +1,27 @@
/*!
\page create_smoothingsurface_page SmoothingSurface
To create a \b SmoothingSurface in the <b>Main Menu</b> select <b>New Entity - >
Advanced - > SmoothingSurface </b>
Specify the parameters of the SmoothingSurface object creation in the opened dialog
box and press "Apply" or "Apply & Close" button.
Result of each operation will be a GEOM_Object.
<b>TUI Command:</b> <em>geompy.MakeSmoothingSurface(Points, isClosed)</em>
<b>Arguments:</b>
- \b Points - list of points
- \b isClosed - Define if the created surface must be closed
\image html smoothingsurface_dlg.png
Example:
\image html smoothingsurface.png
Our <b>TUI Scripts</b> provide you with useful examples of creation of
\ref tui_creation_smoothingsurface "Advanced objects".
*/

View File

@ -336,5 +336,23 @@ gg.createAndDisplayGO(id_pipetshapefillet_position)
\endcode
\anchor tui_creation_smoothingsurface
<br><h2>Creation of SmoothingSurface</h2>
\code
import geompy
import salome
gg = salome.ImportComponentGUI("GEOM")
# create SmoothingSurface object
smoothingsurface = geompy.MakeSmoothingSurface([value], false)
# add object in the study
id_smoothingsurface = geompy.addToStudy(smoothingsurface,"SmoothingSurface")
# display smoothingsurface
gg.createAndDisplayGO(id_smoothingsurface)
\endcode
<!--@@ insert new functions before this line @@ do not remove this line @@-->
*/

View File

@ -3600,6 +3600,14 @@ module GEOM
in double theR2, in double theW2, in double theL2,
in double theRF, in boolean theHexMesh,
in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
/*!
* Create a smoothing surface from a set of points
* \param thePoints list of points
* \param theisClosed Define if the created surface must be closed
* \return New GEOM_Object, containing the created shape.
*/
GEOM_Object MakeSmoothingSurface (in ListOfGO thePoints, in boolean theisClosed);
/*@@ insert new functions before this line @@ do not remove this line @@*/
};

View File

@ -617,6 +617,8 @@ module GEOM
in double theRF, in boolean theHexMesh,
in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
GEOM_Object MakeSmoothingSurface (in GEOM_List thePoints, in boolean theisClosed);
/*@@ insert new functions before this line @@ do not remove this line @@*/
};
};

View File

@ -5225,6 +5225,33 @@
</outParameter-list>
<DataStream-list></DataStream-list>
</component-service>
<component-service>
<service-name>MakeSmoothingSurface</service-name>
<service-author></service-author>
<service-version></service-version>
<service-comment>unknown</service-comment>
<service-by-default>0</service-by-default>
<inParameter-list>
<inParameter>
<inParameter-name>thePoints</inParameter-name>
<inParameter-type>GEOM_List</inParameter-type>
<inParameter-comment>list of points</inParameter-comment>
</inParameter>
<inParameter>
<inParameter-name>theisClosed</inParameter-name>
<inParameter-type>boolean</inParameter-type>
<inParameter-comment>Define if the created surface must be closed</inParameter-comment>
</inParameter>
</inParameter-list>
<outParameter-list>
<outParameter>
<outParameter-name>return</outParameter-name>
<outParameter-type>GEOM_Object</outParameter-type>
<outParameter-comment>Result object</outParameter-comment>
</outParameter>
</outParameter-list>
<DataStream-list></DataStream-list>
</component-service>
<!-- @@ insert new functions before this line @@ do not remove this line @@ -->
</component-service-list>
</component-interface-list>

View File

@ -241,6 +241,7 @@ ADVANCED_RESOURCES += dlg_pipetshapechamferh.png dlg_pipetshapechamferw.png
ADVANCED_RESOURCES += dlg_pipetshapefilletl1.png dlg_pipetshapefilletr1.png dlg_pipetshapefilletw1.png
ADVANCED_RESOURCES += dlg_pipetshapefilletl2.png dlg_pipetshapefilletr2.png dlg_pipetshapefilletw2.png
ADVANCED_RESOURCES += dlg_pipetshapefilletrf.png
#ADVANCED_RESOURCES += smoothingsurface.png smoothingsurface_points_isclosed.png tree_smoothingsurface.png
##@@ insert new functions before this line @@ do not remove this line @@##
dist_salomeres_DATA += $(ADVANCED_RESOURCES)

View File

@ -29,6 +29,7 @@
#include <SalomeApp_Application.h>
#include "AdvancedGUI_PipeTShapeDlg.h"
#include "AdvancedGUI_SmoothingSurfaceDlg.h"
//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
#include <QDialog>
@ -69,6 +70,9 @@ bool AdvancedGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
// case GEOMOp::OpPipeTShapeGroups:
// aDlg = new AdvancedGUI_PipeTShapeGroupsDlg( getGeometryGUI(), parent );
// break;
case GEOMOp::OpSmoothingSurface:
aDlg = new AdvancedGUI_SmoothingSurfaceDlg( getGeometryGUI(), parent );
break;
//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
default:
app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) );

View File

@ -0,0 +1,292 @@
// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library 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.
//
// This library 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 this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#include "AdvancedGUI_SmoothingSurfaceDlg.h"
#include <DlgRef.h>
#include <GeometryGUI.h>
#include <GEOMBase.h>
#include <SUIT_Session.h>
#include <SUIT_ResourceMgr.h>
#include <SalomeApp_Application.h>
//#include <SalomeApp_Study.h>
#include <LightApp_SelectionMgr.h>
//#include <SALOME_ListIteratorOfListIO.hxx>
//#include <SALOME_ListIO.hxx>
// OCCT Includes
#include <TopoDS_Shape.hxx>
#include <TopoDS.hxx>
#include <TopExp.hxx>
#include <TColStd_IndexedMapOfInteger.hxx>
#include <TopTools_IndexedMapOfShape.hxx>
#include <GEOMImpl_Types.hxx>
//=================================================================================
// Constructor
//=================================================================================
AdvancedGUI_SmoothingSurfaceDlg::AdvancedGUI_SmoothingSurfaceDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
: GEOMBase_Skeleton(theGeometryGUI, parent, false)
{
QPixmap imageOp (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SMOOTHINGSURFACE_POINTS_ISCLOSED")));
QPixmap imageSel (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
setWindowTitle(tr("GEOM_SMOOTHINGSURFACE_TITLE"));
/***************************************************************/
mainFrame()->GroupConstructors->setTitle(tr("GEOM_SMOOTHINGSURFACE"));
mainFrame()->RadioButton1->setIcon(imageOp);
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton2->close();
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton3->close();
GroupPoints = new DlgRef_1Sel1Check( centralWidget() );
GroupPoints->GroupBox1->setTitle( tr( "GEOM_NODES" ) );
GroupPoints->TextLabel1->setText( tr( "GEOM_POINTS" ) );
GroupPoints->PushButton1->setIcon( image1 );
GroupPoints->LineEdit1->setReadOnly( true );
GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
GroupPoints->CheckButton1->setChecked(false);
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
layout->setMargin(0); layout->setSpacing(6);
layout->addWidget(GroupPoints);
/***************************************************************/
setHelpFileName("create_smoothingsurface_page.html");
Init();
}
//=================================================================================
// Destructor
//=================================================================================
AdvancedGUI_SmoothingSurfaceDlg::~AdvancedGUI_SmoothingSurfaceDlg()
{
// no need to delete child widgets, Qt does it all for us
}
//=================================================================================
// function : Init()
// purpose :
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::Init()
{
// Get setting of step value from file configuration
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100);
//@@ initialize dialog box widgets here @@//
// Signal/slot connections
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)),
this, SLOT(SetDoubleSpinBoxStep(double)));
connect( myGeomGUI->getApp()->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName(tr("GEOM_SMOOTHINGSURFACE"));
//displayPreview();
}
/*//=================================================================================
// function : SetDoubleSpinBoxStep()
// purpose : Double spin box management
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::SetDoubleSpinBoxStep (double step)
{
//@@ set double spin box step for all spin boxes here @@//
}*/
//=================================================================================
// function : ClickOnOk()
// purpose :
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::ClickOnOk()
{
if (ClickOnApply())
ClickOnCancel();
}
//=================================================================================
// function : ClickOnApply()
// purpose :
//=================================================================================
bool AdvancedGUI_SmoothingSurfaceDlg::ClickOnApply()
{
if (!onAccept())
return false;
initName();
return true;
}
//=================================================================================
// function : ActivateThisDialog()
// purpose :
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::ActivateThisDialog()
{
GEOMBase_Skeleton::ActivateThisDialog();
//displayPreview();
}
//=================================================================================
// function : enterEvent [REDEFINED]
// purpose :
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::enterEvent (QEvent*)
{
if (!mainFrame()->GroupConstructors->isEnabled())
ActivateThisDialog();
}
/*//=================================================================================
// function : ValueChangedInSpinBox()
// purpose :
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::ValueChangedInSpinBox()
{
//@@ connect custom spin boxes or other widget to this slot in the Init() method for automatic preview update @@//
//displayPreview();
}*/
//=================================================================================
// function : createOperation
// purpose :
//=================================================================================
GEOM::GEOM_IOperations_ptr AdvancedGUI_SmoothingSurfaceDlg::createOperation()
{
return getGeomEngine()->GetIAdvancedOperations(getStudyId());
}
//=================================================================================
// function : isValid
// purpose :
//=================================================================================
bool AdvancedGUI_SmoothingSurfaceDlg::isValid (QString& msg)
{
bool ok = true;
//@@ add custom validation actions here @@//
return ok;
}
//=================================================================================
// function : execute
// purpose :
//=================================================================================
bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects)
{
bool res = false;
GEOM::GEOM_Object_var anObj;
GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation());
//@@ retrieve input values from the widgets here @@//
GEOM::ListOfGO_var points = new GEOM::ListOfGO();
points->length( myPoints.count() );
for ( int i = 0; i < myPoints.count(); i++ )
points[i] = myPoints[i].copy();
CORBA::Boolean theisClosed = GroupPoints->CheckButton1->isChecked();
// call engine function
anObj = anOper->MakeSmoothingSurface(points, theisClosed);
res = !anObj->_is_nil();
if (res && !IsPreview())
{
QStringList aParameters;
//@@ put stringified input parameters to the string list here to store in the data model for notebook @@//
/*aParameters << @@ stringified parameter value @@; // Points parameter
aParameters << @@ stringified parameter value @@; // isClosed parameter*/
if ( aParameters.count() > 0 ) anObj->SetParameters(aParameters.join(":").toLatin1().constData());
}
if (res)
objects.push_back(anObj._retn());
return res;
}
//=================================================================================
// function : SelectionIntoArgument()
// purpose : Called when selection as changed or other case
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::SelectionIntoArgument()
{
QList<GEOM::GeomObjPtr> points = getSelected( TopAbs_VERTEX, -1 );
synchronize( myPoints, points );
if ( !myPoints.isEmpty() )
GroupPoints->LineEdit1->setText( QString::number( myPoints.count() ) + "_" + tr( "GEOM_POINT" ) + tr( "_S_" ) );
else
GroupPoints->LineEdit1->setText( "" );
processPreview();
}
//=================================================================================
// function : SetEditCurrentArgument()
// purpose :
//=================================================================================
void AdvancedGUI_SmoothingSurfaceDlg::SetEditCurrentArgument()
{
if ( sender() == GroupPoints->PushButton1 )
myEditCurrentArgument = GroupPoints->LineEdit1;
myEditCurrentArgument->setFocus();
SelectionIntoArgument();
}
void AdvancedGUI_SmoothingSurfaceDlg::synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right )
{
// 1. remove items from the "left" list that are not in the "right" list
QMutableListIterator<GEOM::GeomObjPtr> it1( left );
while ( it1.hasNext() ) {
GEOM::GeomObjPtr o1 = it1.next();
bool found = false;
QMutableListIterator<GEOM::GeomObjPtr> it2( right );
while ( it2.hasNext() && !found )
found = o1 == it2.next();
if ( !found )
it1.remove();
}
// 2. add items from the "right" list that are not in the "left" list (to keep selection order)
it1 = right;
while ( it1.hasNext() ) {
GEOM::GeomObjPtr o1 = it1.next();
bool found = false;
QMutableListIterator<GEOM::GeomObjPtr> it2( left );
while ( it2.hasNext() && !found )
found = o1 == it2.next();
if ( !found )
left << o1;
}
}

View File

@ -0,0 +1,73 @@
// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library 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.
//
// This library 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 this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#ifndef ADVANCEDGUI_SMOOTHINGSURFACEDLG_H
#define ADVANCEDGUI_SMOOTHINGSURFACEDLG_H
#include <GEOMBase_Skeleton.h>
#include "GEOM_GenericObjPtr.h"
#include <list>
class DlgRef_1Sel1Check;
//=================================================================================
// class : AdvancedGUI_SmoothingSurfaceDlg
// purpose :
//=================================================================================
class AdvancedGUI_SmoothingSurfaceDlg : public GEOMBase_Skeleton
{
Q_OBJECT
public:
AdvancedGUI_SmoothingSurfaceDlg( GeometryGUI*, QWidget* = 0 );
~AdvancedGUI_SmoothingSurfaceDlg();
protected:
// redefined from GEOMBase_Helper
virtual GEOM::GEOM_IOperations_ptr createOperation();
virtual bool isValid( QString& );
virtual bool execute( ObjectList& );
private:
void Init();
void enterEvent( QEvent* );
void synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right );
private:
DlgRef_1Sel1Check* GroupPoints;
QList<GEOM::GeomObjPtr> myPoints;
private slots:
void ClickOnOk();
bool ClickOnApply();
void ActivateThisDialog();
void DeactivateActiveDialog();
void CheckButtonToggled();
void SelectionIntoArgument();
void SetEditCurrentArgument();
//void ValueChangedInSpinBox();
//void SetDoubleSpinBoxStep( double );
};
#endif // ADVANCEDGUI_SMOOTHINGSURFACEDLG_H

View File

@ -28,6 +28,7 @@ salomeinclude_HEADERS = \
ADVANCED_INCLUDES =
ADVANCED_INCLUDES += AdvancedGUI_PipeTShapeDlg.h
ADVANCED_INCLUDES += AdvancedGUI_SmoothingSurfaceDlg.h
##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@##
salomeinclude_HEADERS += $(ADVANCED_INCLUDES)
@ -41,6 +42,7 @@ dist_libAdvancedGUI_la_SOURCES = \
ADVANCED_SOURCES =
ADVANCED_SOURCES += AdvancedGUI_PipeTShapeDlg.h AdvancedGUI_PipeTShapeDlg.cxx
ADVANCED_SOURCES += AdvancedGUI_SmoothingSurfaceDlg.h AdvancedGUI_SmoothingSurfaceDlg.cxx
##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@##
dist_libAdvancedGUI_la_SOURCES += $(ADVANCED_SOURCES)
@ -49,6 +51,7 @@ MOC_FILES =
ADVANCED_MOC_FILES =
ADVANCED_MOC_FILES += AdvancedGUI_PipeTShapeDlg_moc.cxx
ADVANCED_MOC_FILES += AdvancedGUI_SmoothingSurfaceDlg_moc.cxx
##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@##
MOC_FILES += $(ADVANCED_MOC_FILES)
@ -80,4 +83,7 @@ libAdvancedGUI_la_CPPFLAGS = \
libAdvancedGUI_la_LDFLAGS = \
../GEOMFiltersSelection/libGEOMFiltersSelection.la \
../GEOMBase/libGEOMBase.la
../GEOMBase/libGEOMBase.la \
../GEOMGUI/libGEOM.la \
$(CAS_LDFLAGS) -lTKGeomBase \
$(GUI_LDFLAGS) -lsuit

View File

@ -1228,6 +1228,18 @@
<translation>pipetshapegroups.png</translation>
</message>
-->
<message>
<source>ICON_DLG_SMOOTHINGSURFACE_POINTS_ISCLOSED</source>
<translation>smoothingsurface_points_isclosed.png</translation>
</message>
<message>
<source>ICO_SMOOTHINGSURFACE</source>
<translation>smoothingsurface.png</translation>
</message>
<message>
<source>ICON_OBJBROWSER_ADVANCED_202</source>
<translation>tree_smoothingsurface.png</translation>
</message>
<!-- @@ insert new functions before this line @@ do not remove this line @@ -->
</context>
</TS>

View File

@ -544,7 +544,7 @@ void GeometryGUI::OnGUIEvent( int id )
case GEOMOp::OpAdvancedNoOp: // NO OPERATION (advanced operations base)
case GEOMOp::OpPipeTShape: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
// case GEOMOp::OpPipeTShapeGroups: // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
case GEOMOp::OpSmoothingSurface: // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
libName = "AdvancedGUI";
break;
default:
@ -810,6 +810,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createGeomAction( GEOMOp::OpPointMarker, "POP_POINT_MARKER" );
createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
// Create actions for increase/decrease transparency shortcuts
createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
@ -870,6 +871,7 @@ void GeometryGUI::initialize( CAM_Application* app )
int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
createMenu( GEOMOp::OpPipeTShape, advId, -1 );
// createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
createMenu( separator(), newEntId, -1 );
@ -1104,6 +1106,7 @@ void GeometryGUI::initialize( CAM_Application* app )
int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
createTool( GEOMOp::OpPipeTShape, advancedTbId );
createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
//@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
// ---- create popup menus --------------------------

View File

@ -167,6 +167,7 @@ namespace GEOMOp {
OpAdvancedNoOp = 10000, // NO OPERATION (advanced operations base)
OpPipeTShape = 10001, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
// OpPipeTShapeGroups = 10002, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
OpSmoothingSurface = 10003, // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
//@@ insert new functions before this line @@ do not remove this line @@//
};
}

View File

@ -83,6 +83,7 @@
#include <GEOMImpl_MeasureDriver.hxx>
// Advanced operations
#include <GEOMImpl_PipeTShapeDriver.hxx>
#include <GEOMImpl_SmoothingSurfaceDriver.hxx>
/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
//=============================================================================
@ -166,6 +167,7 @@ GEOMImpl_Gen::GEOMImpl_Gen()
// Advanced operations
TFunction_DriverTable::Get()->AddDriver(GEOMImpl_PipeTShapeDriver::GetID(), new GEOMImpl_PipeTShapeDriver());
TFunction_DriverTable::Get()->AddDriver(GEOMImpl_SmoothingSurfaceDriver::GetID(), new GEOMImpl_SmoothingSurfaceDriver());
/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
SetEngine(this);

View File

@ -45,6 +45,8 @@
#include "GEOMImpl_PipeTShapeDriver.hxx"
#include "GEOMImpl_IPipeTShape.hxx"
#include <GEOMImpl_SmoothingSurfaceDriver.hxx>
#include <GEOMImpl_ISmoothingSurface.hxx>
/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
#include <TopExp.hxx>
@ -2182,4 +2184,73 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
return aSeq;
}
//=============================================================================
/*!
* Create a smoothing surface from a set of points
* \param thePoints list of points
* \param theisClosed Define if the created surface must be closed
* \return New GEOM_Object, containing the created shape.
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::list<Handle(GEOM_Object)> thePoints, bool theisClosed)
{
SetErrorCode(KO);
//Add a new object
Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_SMOOTHINGSURFACE);
//Add a new shape function with parameters
Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_SmoothingSurfaceDriver::GetID(), SMOOTHINGSURFACE_POINTS_ISCLOSED);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_SmoothingSurfaceDriver::GetID()) return NULL;
GEOMImpl_ISmoothingSurface aData (aFunction);
int aLen = thePoints.size();
aData.SetLength(aLen);
int ind = 1;
std::list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
for (; it != thePoints.end(); it++, ind++) {
Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
if (aRefPnt.IsNull()) {
SetErrorCode("NULL point for bSplineFaceShape");
return NULL;
}
aData.SetPoint(ind, aRefPnt);
}
aData.SetisClosed(theisClosed);
//Compute the resulting value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("SmoothingSurface driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump pd (aFunction);
pd << aShape << " = geompy.MakeSmoothingSurface([";
it = thePoints.begin();
pd << (*it++);
while (it != thePoints.end()) {
pd << ", " << (*it++);
}
pd << "], " << theisClosed << ")";
SetErrorCode(OK);
return aShape;
}
/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/

View File

@ -27,6 +27,8 @@
#include "GEOM_Engine.hxx"
#include "GEOM_Object.hxx"
#include <list>
class GEOMImpl_IBasicOperations;
class GEOMImpl_IBooleanOperations;
class GEOMImpl_IShapesOperations;
@ -109,6 +111,7 @@ public:
Handle(GEOM_Object) P1 = 0,
Handle(GEOM_Object) P2 = 0,
Handle(GEOM_Object) P3 = 0);
Standard_EXPORT Handle(GEOM_Object) MakeSmoothingSurface (std::list<Handle(GEOM_Object)> thePoints, bool theisClosed);
/*@@ insert new functions before this line @@ do not remove this line @@*/
};
#endif

View File

@ -0,0 +1,49 @@
// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library 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.
//
// This library 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 this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#ifndef _GEOMImpl_ISmoothingSurface_HXX_
#define _GEOMImpl_ISmoothingSurface_HXX_
#include "GEOM_Function.hxx"
#define SMOOTHINGSURFACE_ARG_LENG 1
#define SMOOTHINGSURFACE_ARG_LAST 2
#define SMOOTHINGSURFACE_ARG_ISCLOSED 3
class GEOMImpl_ISmoothingSurface
{
public:
GEOMImpl_ISmoothingSurface(Handle(GEOM_Function) theFunction): _func(theFunction) {}
void SetLength(int theLen) { _func->SetInteger(SMOOTHINGSURFACE_ARG_LENG, theLen); }
int GetLength() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_LENG); }
void SetPoint(int theId, Handle(GEOM_Function) theP) { _func->SetReference(SMOOTHINGSURFACE_ARG_LAST + theId, theP); }
Handle(GEOM_Function) GetPoint(int theId) { return _func->GetReference(SMOOTHINGSURFACE_ARG_LAST + theId); }
void SetisClosed(bool theisClosed) { _func->SetInteger(SMOOTHINGSURFACE_ARG_ISCLOSED, theisClosed); }
bool GetisClosed() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_ISCLOSED); }
private:
Handle(GEOM_Function) _func;
};
#endif // _GEOMImpl_ISmoothingSurface_HXX_

View File

@ -0,0 +1,147 @@
// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library 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.
//
// This library 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 this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#include <Standard_Stream.hxx>
#include <GEOMImpl_SmoothingSurfaceDriver.hxx>
#include <GEOMImpl_ISmoothingSurface.hxx>
#include <GEOMImpl_Types.hxx>
#include <GEOM_Function.hxx>
#include <TFunction_Logbook.hxx>
#include <StdFail_NotDone.hxx>
//@@ include required header files here @@//
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS.hxx>
#include <BRep_Tool.hxx>
#include <TColgp_SequenceOfPnt.hxx>
#include <TColgp_Array2OfPnt.hxx>
/*#include <Geom_BSplineSurface.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <ShapeFix_Face.hxx>
#include <GeomPlate_BuildPlateSurface.hxx>
#include <GeomPlate_Surface.hxx>*/
//=======================================================================
//function : GetID
//purpose :
//=======================================================================
const Standard_GUID& GEOMImpl_SmoothingSurfaceDriver::GetID()
{
static Standard_GUID aGUID("1C3A0F3F-729D-4E83-8232-78E74FC5637C");
return aGUID;
}
//=======================================================================
//function : GEOMImpl_SmoothingSurfaceDriver
//purpose :
//=======================================================================
GEOMImpl_SmoothingSurfaceDriver::GEOMImpl_SmoothingSurfaceDriver()
{
}
//=======================================================================
//function : Execute
//purpose :
//=======================================================================
Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log) const
{
if (Label().IsNull()) return 0;
Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
if (aFunction.IsNull()) return 0;
Standard_Integer aType = aFunction->GetType();
cout << "Type : " << aType << endl;
if (aType != SMOOTHINGSURFACE_POINTS_ISCLOSED) return 0;
cout << "Youhou : " << aType << endl;
GEOMImpl_ISmoothingSurface aData (aFunction);
/*bool isClosed = aData.GetisClosed();
int nbPoints = aData.GetLength();*/
TopoDS_Shape aShape;
/*if (isClosed)
{
// Surface initiale : Sphere
}
else
{
// Surface initiale : Plane
}*/
if (aShape.IsNull()) return 0;
aFunction->SetValue(aShape);
log.SetTouched(Label());
return 1;
}
//=======================================================================
//function : GEOMImpl_SmoothingSurfaceDriver_Type_
//purpose :
//=======================================================================
Standard_EXPORT Handle_Standard_Type& GEOMImpl_SmoothingSurfaceDriver_Type_()
{
static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver);
if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver);
static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared);
if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared);
static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient);
if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient);
static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL};
static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_SmoothingSurfaceDriver",
sizeof(GEOMImpl_SmoothingSurfaceDriver),
1,
(Standard_Address)_Ancestors,
(Standard_Address)NULL);
return _aType;
}
//=======================================================================
//function : DownCast
//purpose :
//=======================================================================
const Handle(GEOMImpl_SmoothingSurfaceDriver) Handle(GEOMImpl_SmoothingSurfaceDriver)::DownCast(const Handle(Standard_Transient)& AnObject)
{
Handle(GEOMImpl_SmoothingSurfaceDriver) _anOtherObject;
if (!AnObject.IsNull()) {
if (AnObject->IsKind(STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver))) {
_anOtherObject = Handle(GEOMImpl_SmoothingSurfaceDriver)((Handle(GEOMImpl_SmoothingSurfaceDriver)&)AnObject);
}
}
return _anOtherObject;
}

View File

@ -0,0 +1,129 @@
// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library 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.
//
// This library 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 this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#ifndef _GEOMImpl_SmoothingSurfaceDriver_HXX
#define _GEOMImpl_SmoothingSurfaceDriver_HXX
#ifndef _TFunction_Driver_HeaderFile
#include <TFunction_Driver.hxx>
#endif
#ifndef _TFunction_Logbook_HeaderFile
#include <TFunction_Logbook.hxx>
#endif
#ifndef _Standard_CString_HeaderFile
#include <Standard_CString.hxx>
#endif
class Handle_Standard_Type;
class GEOMImpl_SmoothingSurfaceDriver;
Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver);
class Handle(GEOMImpl_SmoothingSurfaceDriver) : public Handle(TFunction_Driver) {
public:
inline void* operator new(size_t,void* anAddress)
{
return anAddress;
}
inline void* operator new(size_t size)
{
return Standard::Allocate(size);
}
inline void operator delete(void *anAddress)
{
if (anAddress) Standard::Free((Standard_Address&)anAddress);
}
Handle(GEOMImpl_SmoothingSurfaceDriver)():Handle(TFunction_Driver)() {}
Handle(GEOMImpl_SmoothingSurfaceDriver)(const Handle(GEOMImpl_SmoothingSurfaceDriver)& aHandle) : Handle(TFunction_Driver)(aHandle)
{}
Handle(GEOMImpl_SmoothingSurfaceDriver)(const GEOMImpl_SmoothingSurfaceDriver* anItem) : Handle(TFunction_Driver)((TFunction_Driver *)anItem)
{}
Handle(GEOMImpl_SmoothingSurfaceDriver)& operator=(const Handle(GEOMImpl_SmoothingSurfaceDriver)& aHandle)
{
Assign(aHandle.Access());
return *this;
}
Handle(GEOMImpl_SmoothingSurfaceDriver)& operator=(const GEOMImpl_SmoothingSurfaceDriver* anItem)
{
Assign((Standard_Transient *)anItem);
return *this;
}
GEOMImpl_SmoothingSurfaceDriver* operator->()
{
return (GEOMImpl_SmoothingSurfaceDriver *)ControlAccess();
}
GEOMImpl_SmoothingSurfaceDriver* operator->() const
{
return (GEOMImpl_SmoothingSurfaceDriver *)ControlAccess();
}
Standard_EXPORT ~Handle(GEOMImpl_SmoothingSurfaceDriver)() {};
Standard_EXPORT static const Handle(GEOMImpl_SmoothingSurfaceDriver) DownCast(const Handle(Standard_Transient)& AnObject);
};
class GEOMImpl_SmoothingSurfaceDriver : public TFunction_Driver {
public:
inline void* operator new(size_t,void* anAddress)
{
return anAddress;
}
inline void* operator new(size_t size)
{
return Standard::Allocate(size);
}
inline void operator delete(void *anAddress)
{
if (anAddress) Standard::Free((Standard_Address&)anAddress);
}
// Methods PUBLIC
//
Standard_EXPORT GEOMImpl_SmoothingSurfaceDriver();
Standard_EXPORT virtual Standard_Integer Execute(TFunction_Logbook& log) const;
Standard_EXPORT virtual void Validate(TFunction_Logbook&) const {}
Standard_EXPORT Standard_Boolean MustExecute(const TFunction_Logbook&) const
{
return Standard_True;
}
Standard_EXPORT static const Standard_GUID& GetID();
Standard_EXPORT ~GEOMImpl_SmoothingSurfaceDriver() {};
// Type management
//
Standard_EXPORT friend Handle_Standard_Type& GEOMImpl_SmoothingSurfaceDriver_Type_();
Standard_EXPORT const Handle(Standard_Type)& DynamicType() const
{
return STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver);
}
Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const
{
return (STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver) == AType || TFunction_Driver::IsKind(AType));
}
};
#endif // _GEOMImpl_SmoothingSurfaceDriver_HXX

View File

@ -318,9 +318,11 @@
// Advanced functions (base = 200)
#define ADVANCED_BASE 200 // NO OPERATION (advanced operations base)
#define GEOM_TSHAPE 201
#define GEOM_SMOOTHINGSURFACE 202
/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
// Advanced functions sub-operations codes
#define TSHAPE_BASIC 1
#define TSHAPE_CHAMFER 2
#define TSHAPE_FILLET 3
#define SMOOTHINGSURFACE_POINTS_ISCLOSED 1
/*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/

View File

@ -146,6 +146,7 @@ salomeinclude_HEADERS = \
ADVANCED_INCLUDES =
ADVANCED_INCLUDES += GEOMImpl_IPipeTShape.hxx GEOMImpl_PipeTShapeDriver.hxx
ADVANCED_INCLUDES += GEOMImpl_ISmoothingSurface.hxx GEOMImpl_SmoothingSurfaceDriver.hxx
##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@##
salomeinclude_HEADERS += $(ADVANCED_INCLUDES)
@ -216,6 +217,7 @@ dist_libGEOMimpl_la_SOURCES = \
ADVANCED_SOURCES =
ADVANCED_SOURCES += GEOMImpl_PipeTShapeDriver.cxx
ADVANCED_SOURCES += GEOMImpl_SmoothingSurfaceDriver.cxx
##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@##
dist_libGEOMimpl_la_SOURCES += $(ADVANCED_SOURCES)

View File

@ -321,4 +321,37 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFilletWithPosition (CO
return aSeq._retn();
}
//=============================================================================
/*!
* Create a smoothing surface from a set of points
* \param thePoints list of points
* \param theisClosed Define if the created surface must be closed
* \return New GEOM_Object, containing the created shape.
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GEOM::ListOfGO& thePoints, CORBA::Boolean theisClosed)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
//Get the reference point
int ind = 0;
int aLen = thePoints.length();
std::list<Handle(GEOM_Object)> aPoints;
for (; ind < aLen; ind++) {
Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]);
if (aPnt.IsNull()) return aGEOMObject._retn();
aPoints.push_back(aPnt);
}
//Create the SmoothingSurface
Handle(GEOM_Object) anObject = GetOperations()->MakeSmoothingSurface(aPoints, theisClosed);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
/*@@ insert new functions before this line @@ do not remove this line @@*/

View File

@ -63,6 +63,7 @@ class GEOM_I_EXPORT GEOM_IAdvancedOperations_i :
CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2,
CORBA::Double theRF, CORBA::Boolean theHexMesh,
GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
GEOM::GEOM_Object_ptr MakeSmoothingSurface (const GEOM::ListOfGO& thePoints, CORBA::Boolean theisClosed);
/*@@ insert new functions before this line @@ do not remove this line @@*/
::GEOMImpl_IAdvancedOperations* GetOperations()

View File

@ -3402,6 +3402,26 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::MakePipeTShapeFilletWithPosition
return aSeqPtr->_this();
}
//=============================================================================
// MakeSmoothingSurface
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSmoothingSurface (GEOM::GEOM_List_ptr thePoints, CORBA::Boolean theisClosed)
{
beginService( " GEOM_Superv_i::MakeSmoothingSurface" );
MESSAGE("GEOM_Superv_i::MakeSmoothingSurface");
getAdvancedOp();
//GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeSmoothingSurface(thePoints, theisClosed);
if (GEOM_List_i<GEOM::ListOfGO>* aListImplP =
dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
getCurvesOp();
GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeSmoothingSurface(aListImplP->GetList(), theisClosed);
endService( " GEOM_Superv_i::MakeSmoothingSurface" );
return anObj;
}
endService( " GEOM_Superv_i::MakeSmoothingSurface" );
return NULL;
}
/*@@ insert new functions before this line @@ do not remove this line @@*/
//=====================================================================================

View File

@ -701,6 +701,7 @@ public:
CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2,
CORBA::Double theRF, CORBA::Boolean theHexMesh,
GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
GEOM::GEOM_Object_ptr MakeSmoothingSurface (GEOM::GEOM_List_ptr thePoints, CORBA::Boolean theisClosed);
/*@@ insert new functions before this line @@ do not remove this line @@*/
private:

View File

@ -4691,6 +4691,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
if Parameters: anObj[0].SetParameters(Parameters)
return anObj
## Create a smoothing surface from a set of points
# @param thePoints list of points
# @param theisClosed Define if the created surface must be closed
# @return New GEOM_Object, containing the created shape.
#
# @ref tui_creation_smoothingsurface "Example"
def MakeSmoothingSurface(self, thePoints, theisClosed):
thePoints, theisClosed, Parameters = ParseParameters(thePoints, theisClosed)
anObj = self.AdvOp.MakeSmoothingSurface(thePoints, theisClosed)
RaiseIfFailed("MakeSmoothingSurface", self.AdvOp)
if Parameters: anObj.SetParameters(Parameters)
return anObj
#@@ insert new functions before this line @@ do not remove this line @@#
# end of l4_advanced