PAL20980 EDF 1226 GEOM: Detect the Resulting Type by default

This commit is contained in:
vsr 2010-10-06 19:50:35 +00:00
parent 7f82ab7d2a
commit 1b2fda6acc
4 changed files with 56 additions and 1 deletions

View File

@ -175,6 +175,15 @@ module GEOM
*/
shape_type GetTopologyType();
/*!
* Get a minimal type of the top-level shapes contained in the object.
* This function is useful for the compounds only; for simple shapes it
* exactly the same value as GetShapeType().
* Note, that compounds are procesed recursively.
* \sa GetShapeType(), GetTopologyType()
*/
shape_type GetMinShapeType();
/*!
* Set name of the object.
* \param theName is a name which will be associated with this object.

View File

@ -141,6 +141,37 @@ GEOM::shape_type GEOM_Object_i::GetTopologyType()
return (GEOM::shape_type)shape.ShapeType();
}
static GEOM::shape_type getMinShapeType( const TopoDS_Shape& shape )
{
if ( shape.IsNull() )
return GEOM::SHAPE;
GEOM::shape_type ret = (GEOM::shape_type)shape.ShapeType();
if ( shape.ShapeType() == TopAbs_COMPOUND || shape.ShapeType() == TopAbs_COMPSOLID ) {
TopoDS_Iterator it(shape, Standard_True, Standard_False);
for (; it.More(); it.Next()) {
TopoDS_Shape sub_shape = it.Value();
if ( sub_shape.IsNull() ) continue;
GEOM::shape_type stype = (GEOM::shape_type)sub_shape.ShapeType();
if ( stype != GEOM::SHAPE && stype > ret )
ret = stype;
}
}
return ret;
}
//=============================================================================
/*!
* GetMinShapeType
*/
//=============================================================================
GEOM::shape_type GEOM_Object_i::GetMinShapeType()
{
return getMinShapeType( _impl->GetValue() );
}
//=============================================================================
/*!
* SetName

View File

@ -53,6 +53,8 @@ class GEOM_I_EXPORT GEOM_Object_i : public virtual POA_GEOM::GEOM_Object, public
virtual GEOM::shape_type GetTopologyType();
virtual GEOM::shape_type GetMinShapeType();
virtual void SetName(const char* theName);
virtual char* GetName();

View File

@ -119,11 +119,17 @@ void OperationGUI_PartitionDlg::Init()
{
/* type for sub shape selection */
GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SOLID" ) );
GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SOLID);
GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SHELL" ) );
GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SHELL);
GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_FACE" ) );
GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::FACE);
GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_WIRE" ) );
GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::WIRE);
GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_EDGE" ) );
GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::EDGE);
GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_VERTEX" ) );
GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::VERTEX);
GroupPoints->CheckButton1->setChecked( false );
mainFrame()->GroupBoxPublish->show();
@ -270,6 +276,13 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument()
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListShapes, true);
myListMaterials.length( 0 );
GEOM::shape_type type = GEOM::SOLID;
for (int i = 0; i < myListShapes.length(); i++)
type = qMax( type, myListShapes[i]->GetMinShapeType() );
int idx = qMax( 0, GroupPoints->ComboBox1->findData( type ) );
GroupPoints->ComboBox1->setCurrentIndex( idx );
if ( !myListShapes.length() )
return;
}
@ -278,7 +291,7 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument()
if ( !myListTools.length() )
return;
}
myEditCurrentArgument->setText( aString );
}