- myEditCurrentArgument->setText("");
- QString aName;
-
- if ( IObjectCount() == 1 ) {
- Standard_Boolean aRes = Standard_False;
- Handle(SALOME_InteractiveObject) anIO = firstIObject();
- GEOM::GEOM_Object_var aSelectedObj = GEOMBase::ConvertIOinGEOMObject( anIO, aRes );
-
- if ( !CORBA::is_nil( aSelectedObj ) && aRes ) {
- aName = GEOMBase::GetName( aSelectedObj );
- TopoDS_Shape aShape;
- if ( GEOMBase::GetShape( aSelectedObj, aShape, TopAbs_SHAPE ) ) {
- GEOM::short_array anIndexes;
-
- TColStd_IndexedMapOfInteger aMap;
- ((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr()->GetIndexes( anIO, aMap );
-
- if ( !aMap.IsEmpty() ) {
- 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 {
- myData[ X ]->SetValue( 0 );
- myData[ Y ]->SetValue( 0 );
- myData[ Z ]->SetValue( 0 );
-
- myData[ DX1 ]->SetValue( 0 );
- myData[ DY1 ]->SetValue( 0 );
- myData[ DZ1 ]->SetValue( 0 );
-
- myData[ DX2 ]->SetValue( 0 );
- myData[ DY2 ]->SetValue( 0 );
- myData[ DZ2 ]->SetValue( 0 );
- }
- }
- 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 {
- myData[ X ]->SetValue( 0 );
- myData[ Y ]->SetValue( 0 );
- myData[ Z ]->SetValue( 0 );
- }
- }
- 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 {
- myData[ DX1 ]->SetValue( 0 );
- myData[ DY1 ]->SetValue( 0 );
- myData[ DZ1 ]->SetValue( 0 );
- }
- }
- 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 );
- }
- else {
- myData[ DX2 ]->SetValue( 0 );
- myData[ DY2 ]->SetValue( 0 );
- myData[ DZ2 ]->SetValue( 0 );
- }
- }
- }
+ TopAbs_ShapeEnum aNeedType;
+ if ( getConstructorId() == 1 ) // by shape position
+ aNeedType = TopAbs_SHAPE;
+ else if ( getConstructorId() == 2 ) // by point and two vectors
+ aNeedType = myEditCurrentArgument == Group2->LineEdit1 ? TopAbs_VERTEX : TopAbs_EDGE;
+
+ GEOM::GeomObjPtr aSelectedObject = getSelected( aNeedType );
+ TopoDS_Shape aShape;
+ if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) {
+ QString aName = GEOMBase::GetName( aSelectedObject.get() );
+ myEditCurrentArgument->setText( aName );
+ if ( getConstructorId() == 1 ) { // by shape position
+ myShape = aSelectedObject;
+ }
+ else if ( getConstructorId() == 2 ) { // by point and two vectors
+ if ( myEditCurrentArgument == Group2->LineEdit1 ) {
+ myPoint = aSelectedObject;
+ if (myPoint && !myVectorX)
+ Group2->PushButton2->click();
+ }
+ else if (myEditCurrentArgument == Group2->LineEdit2) {
+ myVectorX = aSelectedObject;
+ if (myVectorX && !myVectorY)
+ Group2->PushButton3->click();
+ }
+ else if ( myEditCurrentArgument == Group2->LineEdit3 ) {
+ myVectorY = aSelectedObject;
+ if (myVectorY && !myPoint)
+ Group2->PushButton1->click();