- aName = GEOMBase::GetName( aSelectedObj );
- TopoDS_Shape aShape;
- if ( myGeomBase->GetShape( aSelectedObj, aShape, TopAbs_SHAPE ) ) {
- GEOM::short_array anIndexes;
- if ( mySelection->HasIndex( anIO ) ) {
- TColStd_IndexedMapOfInteger aMap;
- mySelection->GetIndex( anIO, aMap );
- int anIndex = aMap( 1 );
- TopTools_IndexedMapOfShape aShapes;
- TopExp::MapShapes( aShape, aShapes );
- aShape = aShapes.FindKey( anIndex );
- }
-
- if ( getConstructorId() == 1 ) {
- if ( !aShape.IsNull() ) {
- gp_Pnt aPnt;
- if (aShape.ShapeType() == TopAbs_VERTEX) {
- aPnt = BRep_Tool::Pnt(TopoDS::Vertex(aShape));
- }
- else {
- GProp_GProps aSystem;
- if (aShape.ShapeType() == TopAbs_EDGE || aShape.ShapeType() == TopAbs_WIRE)
- BRepGProp::LinearProperties(aShape, aSystem);
- else if (aShape.ShapeType() == TopAbs_FACE || aShape.ShapeType() == TopAbs_SHELL)
- BRepGProp::SurfaceProperties(aShape, aSystem);
- else
- BRepGProp::VolumeProperties(aShape, aSystem);
-
- aPnt = aSystem.CentreOfMass();
- }
-
- gp_Ax3 anAx3;
- anAx3.Transform(aShape.Location().Transformation());
- if(aShape.ShapeType() == TopAbs_FACE) {
- Handle(Geom_Surface) aGS = BRep_Tool::Surface( TopoDS::Face( aShape ) );
- if (!aGS.IsNull() && aGS->IsKind( STANDARD_TYPE( Geom_Plane ) ) ) {
- Handle(Geom_Plane) aGPlane = Handle(Geom_Plane)::DownCast( aGS );
- gp_Pln aPln = aGPlane->Pln();
- anAx3 = aPln.Position();
- }
- }
-
- gp_Dir aDirX = anAx3.XDirection();
- gp_Dir aDirY = anAx3.YDirection();
-
- myData[ X ]->SetValue( aPnt.X() );
- myData[ Y ]->SetValue( aPnt.Y() );
- myData[ Z ]->SetValue( aPnt.Z() );
-
- myData[ DX1 ]->SetValue( aDirX.X() );
- myData[ DY1 ]->SetValue( aDirX.Y() );
- myData[ DZ1 ]->SetValue( aDirX.Z() );
-
- myData[ DX2 ]->SetValue( aDirY.X() );
- myData[ DY2 ]->SetValue( aDirY.Y() );
- myData[ DZ2 ]->SetValue( aDirY.Z() );
-
- myEditCurrentArgument->setText( aName );
- }
- }
- else if ( getConstructorId() == 2 ) {
- if (myEditCurrentArgument == Group2->LineEdit1) {
- if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) {
- gp_Pnt aPnt = BRep_Tool::Pnt( TopoDS::Vertex( aShape ) );
- myData[ X ]->SetValue( aPnt.X() );
- myData[ Y ]->SetValue( aPnt.Y() );
- myData[ Z ]->SetValue( aPnt.Z() );
- myEditCurrentArgument->setText( aName );
- }
- }
- else if (myEditCurrentArgument == Group2->LineEdit2) {
- if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_EDGE ) {
- gp_Pnt aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(TopoDS::Edge(aShape)));
- gp_Pnt aP2 = BRep_Tool::Pnt(TopExp::LastVertex(TopoDS::Edge(aShape)));
- gp_Dir aDir(gp_Vec(aP1, aP2));
-
- myData[ DX1 ]->SetValue( aDir.X() );
- myData[ DY1 ]->SetValue( aDir.Y() );
- myData[ DZ1 ]->SetValue( aDir.Z() );
- myEditCurrentArgument->setText( aName );
- }
- }
- else if (myEditCurrentArgument == Group2->LineEdit3) {
- if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_EDGE ) {
- gp_Pnt aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(TopoDS::Edge(aShape)));
- gp_Pnt aP2 = BRep_Tool::Pnt(TopExp::LastVertex(TopoDS::Edge(aShape)));
- gp_Dir aDir(gp_Vec(aP1, aP2));
-
- myData[ DX2 ]->SetValue( aDir.X() );
- myData[ DY2 ]->SetValue( aDir.Y() );
- myData[ DZ2 ]->SetValue( aDir.Z() );
- myEditCurrentArgument->setText( aName );
- }
- }
- }
+ QString aName = GEOMBase::GetName( aSelectedObj );
+
+ if ( getConstructorId() == 1 ) { // by shape position
+ TopoDS_Shape aShape;
+ if ( GEOMBase::GetShape( aSelectedObj, aShape, TopAbs_SHAPE ) )
+ myShape = aSelectedObj;
+ myEditCurrentArgument->setText( aName );
+ }
+ else if ( getConstructorId() == 2 ) { // by point and two vectors
+ TopoDS_Shape aShape;
+ if ( GEOMBase::GetShape( aSelectedObj, aShape, TopAbs_SHAPE ) ) {
+ TopAbs_ShapeEnum aNeedType = TopAbs_EDGE;
+ if ( myEditCurrentArgument == Group2->LineEdit1 )
+ aNeedType = TopAbs_VERTEX;
+
+ TColStd_IndexedMapOfInteger aMap;
+ aSelMgr->GetIndexes( anIO, aMap );
+
+ if ( aMap.Extent() == 1 ) { // Local Selection
+ int anIndex = aMap( 1 );
+ if ( aNeedType == TopAbs_EDGE )
+ aName += QString( ":edge_%1" ).arg( anIndex );
+ else
+ aName += QString( ":vertex_%1" ).arg( anIndex );
+
+ //Find SubShape Object in Father
+ GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObj, aName );
+ if ( aFindedObject->_is_nil() ) { // Object not found in study
+ GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
+ aSelectedObj = aShapesOp->GetSubShape( aSelectedObj, anIndex );
+ }
+ else {
+ aSelectedObj = aFindedObject; // get Object from study
+ }
+ }
+ else { // Global Selection
+ if ( aShape.ShapeType() != aNeedType ) {
+ aSelectedObj = GEOM::GEOM_Object::_nil();
+ aName = "";
+ }
+ }
+
+ if ( myEditCurrentArgument == Group2->LineEdit1 ) {
+ myPoint = aSelectedObj;
+ myEditCurrentArgument->setText( aName );
+ if (!myPoint->_is_nil() && Group2->LineEdit2->text() == "")
+ Group2->PushButton2->click();
+ }
+ else if (myEditCurrentArgument == Group2->LineEdit2) {
+ myVectorX = aSelectedObj;
+ myEditCurrentArgument->setText( aName );
+ if (!myVectorX->_is_nil() && Group2->LineEdit3->text() == "")
+ Group2->PushButton3->click();
+ }
+ else if ( myEditCurrentArgument == Group2->LineEdit3 ) {
+ myVectorY = aSelectedObj;
+ myEditCurrentArgument->setText( aName );
+ if (!myVectorX->_is_nil() && Group2->LineEdit1->text() == "")
+ Group2->PushButton1->click();
+ }
+ }