#include <TopoDS.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRepBuilderAPI_MakeWire.hxx>
+#include <BRepBuilderAPI_MakeVertex.hxx>
#include <Sketcher_Profile.hxx>
#include <SalomeApp_Study.h>
{
if (event->type() == QEvent::KeyPress) {
QKeyEvent* ke = (QKeyEvent*)event;
- if (ke->key() == Qt::Key_Return) {
+ if ( ke->key() == Qt::Key_Return || ke->key() == Qt::Key_Enter ) {
if (object == Group1Spin->SpinBox_DX) {
- Group1Spin->buttonApply->animateClick();
+ Group1Spin->buttonApply->click();
return true;
} else if (object == Group1Sel1Spin->SpinBox_DX) {
- Group1Sel1Spin->buttonApply->animateClick();
+ Group1Sel1Spin->buttonApply->click();
return true;
} else if (object == Group2Spin->SpinBox_DX ||
object == Group2Spin->SpinBox_DY) {
- Group2Spin->buttonApply->animateClick();
+ Group2Spin->buttonApply->click();
return true;
} else if (object == Group3Spin->SpinBox_DX ||
object == Group3Spin->SpinBox_DY ||
object == Group3Spin->SpinBox_DZ) {
- Group3Spin->buttonApply->animateClick();
+ Group3Spin->buttonApply->click();
return true;
} else if (object == Group4Spin->SpinBox_DX ||
object == Group4Spin->SpinBox_DY ||
object == Group4Spin->SpinBox_DZ ||
object == Group4Spin->SpinBox_DS) {
- Group4Spin->buttonApply->animateClick();
+ Group4Spin->buttonApply->click();
return true;
}
}
void EntityGUI_SketcherDlg::Init()
{
/* init variables */
+ autoApply = false;
myEditCurrentArgument = Group1Sel->LineEdit1;
myCommand.append( "Sketcher" );
myUndoCommand.append( "Sketcher" );
Group2Spin->hide();
Group3Spin->hide();
Group4Spin->hide();
+ globalSelection(); // close local selection to clear it
+ localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
}
(Group4Spin->SpinBox_DX)->setFocus();
(Group4Spin->SpinBox_DX)->selectAll();
}
-
+
return true;
}
int nbSel = aSelList.Extent();
MESSAGE("NbSel = "<<nbSel)
- if (nbSel == 0){
- myX=tmpX;
- myY=tmpY;
- }
if (nbSel == 1 && myEditCurrentArgument == Group1Sel->LineEdit1) {
GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
if ( !CORBA::is_nil(aSelectedObject) ) {
}
}
}
- GEOMBase_Helper::displayPreview( true, false, true, true, myLineWidth );
+ if (nbSel == 0){ // If no object selected
+ myX=tmpX; // Don't change the point coordinates
+ myY=tmpY; // and don't redisplay the preview
+ }
+ else if(!autoApply){
+ GEOMBase_Helper::displayPreview( true, false, true, true, myLineWidth );
+ }
+ if ( autoApply ){
+ ClickOnApply();
+ autoApply = false;
+ }
+ this->activateWindow();
+
}
//=================================================================================
void EntityGUI_SketcherDlg::ActivateThisDialog()
{
+ MESSAGE("EntityGUI_SketcherDlg::ActivateThisDialog()")
myGeometryGUI->EmitSignalDeactivateDialog();
setEnabled( true );
myGeometryGUI->SetActiveDialogBox( this );
void EntityGUI_SketcherDlg::OnPointSelected(Qt::KeyboardModifiers modifiers, const gp_Pnt& thePnt)
{
MESSAGE("EntityGUI_SketcherDlg::OnPointSelected")
+
+ double x, y;
+ x = y = 0;
+
+ BRepBuilderAPI_MakeVertex mkVertex (thePnt);
+ TopoDS_Shape aShape = mkVertex.Shape();
+
+ // Taking into account LocalCS
+ gp_Ax3 aWPlane = GetActiveLocalCS();
+ gp_Trsf aTrans;
+
+ aTrans.SetTransformation(aWPlane);
+ BRepBuilderAPI_Transform aTransformation (aShape, aTrans, Standard_False);
+ aShape = aTransformation.Shape();
+
+ gp_Pnt aTrsfPnt;
+ GEOMBase::VertexToPoint( aShape, aTrsfPnt );
+
+ autoApply = ( getPnt2ConstructorId() == 1 && false ); // If no additional argument needed after selection
+ // -> apply automatically --> disabled for now
+
+ if ( getPnt1ConstructorId() == 0 ){ // Relative selection mode
+ x = aTrsfPnt.X() - myLastX1;
+ y = aTrsfPnt.Y() - myLastY1;
+ }
+ else {
+ x = aTrsfPnt.X();
+ y = aTrsfPnt.Y();
+ }
switch (getPnt2ConstructorId()){
case 1:
- Group2Spin->SpinBox_DX->setValue( thePnt.X() );
- Group2Spin->SpinBox_DY->setValue( thePnt.Y() );
+ Group2Spin->SpinBox_DX->setValue( x );
+ Group2Spin->SpinBox_DY->setValue( y );
+ Group2Spin->buttonApply->setFocus(); // Previous setFocus (during preview) may have been inoperative if it was disabled
break;
case 0:
- Group3Spin->SpinBox_DX->setValue( thePnt.X() );
- Group3Spin->SpinBox_DY->setValue( thePnt.Y() );
+ Group3Spin->SpinBox_DX->setValue( x );
+ Group3Spin->SpinBox_DY->setValue( y );
+ Group3Spin->buttonApply->setFocus();
break;
case 2:
if (modifiers == Qt::MetaModifier){ // Select center with Meta key
- Group4Spin->SpinBox_DX->setValue( thePnt.X() );
- Group4Spin->SpinBox_DY->setValue( thePnt.Y() );
+ Group4Spin->SpinBox_DX->setValue( x );
+ Group4Spin->SpinBox_DY->setValue( y );
}
- else{ // The select end point
- Group4Spin->SpinBox_DZ->setValue( thePnt.X() );
- Group4Spin->SpinBox_DS->setValue( thePnt.Y() );
+ else{ // Select end point
+ Group4Spin->SpinBox_DZ->setValue( x );
+ Group4Spin->SpinBox_DS->setValue( y );
}
+ Group4Spin->buttonApply->setFocus();
break;
}
}
myLengthStr = vsStr;
}
}
-
- GEOMBase_Helper::displayPreview( true, false, true, true, myLineWidth );
+
+ if (!autoApply)
+ GEOMBase_Helper::displayPreview( true, false, true, true, myLineWidth );
+
+ double x, y, xc, yc;
+ x = y = xc = yc = 0.0;
+ if ( mySketchType == PT_ABS_CENTER || mySketchType == PT_REL_CENTER )
+ {
+ if ( mySketchType == PT_REL_CENTER ){
+ x = myDX + myLastX1;
+ y = myDY + myLastY1;
+ xc = myDXc + myLastX1;
+ yc = myDYc + myLastY1;
+ }
+ else {
+ x = myX ;
+ y = myY ;
+ xc = myXc;
+ yc = myYc;
+ }
+ displayPntPreview(xc,yc);
+ displayPntPreview(x,y);
+ }
}
Format = 'g'; // g --> DigNum is the maximum number of significant digits
QString aParameters;
-
+
if ( mySketchState == FIRST_POINT ) {
myLastX2 = myX;
myLastY2 = myY;
if ( Group1Sel->isVisible() ) {
Group1Sel->buttonApply->setEnabled( true );
- this->activateWindow();
- Group1Sel->buttonApply->setFocus();
}
if ( Group2Sel->isVisible() ) {
Group2Sel->buttonApply->setEnabled( true );
- this->activateWindow();
- Group2Sel->buttonApply->setFocus();
}
if ( Group1Sel1Spin->isVisible() ) {
- Group1Sel1Spin->buttonApply->setEnabled( true );
- this->activateWindow();
- Group1Sel1Spin->buttonApply->setFocus();
+ Group1Sel1Spin->buttonApply->setEnabled( true );;
}
if ( Group1Spin->isVisible() ) {
Group1Spin->buttonApply->setEnabled( true );
- this->activateWindow();
- Group1Spin->buttonApply->setFocus();
}
if ( Group2Spin->isVisible() ) {
Group2Spin->buttonApply->setEnabled( true );
- this->activateWindow();
- Group2Spin->buttonApply->setFocus();
}
if ( Group3Spin->isVisible() ) {
Group3Spin->buttonApply->setEnabled( true );
- this->activateWindow();
- Group3Spin->buttonApply->setFocus();
}
if ( Group4Spin->isVisible() ) {
Group4Spin->buttonApply->setEnabled( true );
- this->activateWindow();
- Group4Spin->buttonApply->setFocus();
}
}
getDisplayer()->SetToActivate( true );
}
+//================================================================
+// Function : displayPntPreview
+// Purpose : creates a TopoDS_VERTEX and display a preview of it
+//================================================================
+void EntityGUI_SketcherDlg::displayPntPreview(const double x,
+ const double y,
+ bool append,
+ bool update
+ )
+{
+ // Get globalCS and working plane
+ gp_Ax3 globalCS = myLCSList.first(); //gp_Ax3(aOrigin, aDirZ, aDirX);
+ gp_Ax3 aWPlane = GetActiveLocalCS();
+
+ // Build point in localCS
+ gp_Pnt aPnt = gp_Pnt(x,y,0.0);
+
+ // Get transfomation from local to global CS
+ gp_Trsf aTrans;
+ aTrans.SetTransformation(aWPlane, globalCS);
+
+ BRepBuilderAPI_MakeVertex mkVertex (aPnt);
+ TopoDS_Shape aLocalVertex = mkVertex.Shape();
+
+ // Perform transformation
+ BRepBuilderAPI_Transform aTransformation (aLocalVertex, aTrans, Standard_False);
+ TopoDS_Shape aGlobalVertex = aTransformation.Shape();
+
+ // Build prs with vertex in globalCS
+ SALOME_Prs* aPrs = getDisplayer()->BuildPrs( aGlobalVertex );
+ if ( aPrs != 0 && !aPrs->IsNull() )
+ GEOMBase_Helper::displayPreview( aPrs, append, update );
+
+}
+
//================================================================
// Function : createShapes
// Purpose : Create applyed wire, and last segment from entry object
}
}
-//rnc TODO
//=================================================================================
// function : getPnt1ConstructorId()
// purpose :
int EntityGUI_SketcherDlg::getPnt1ConstructorId() const
{
int buttonId = GroupPt->ButtonGroup->checkedId();
- MESSAGE("buttonId = "<<buttonId)
+// MESSAGE("buttonId = "<<buttonId)
return buttonId;
}
int EntityGUI_SketcherDlg::getPnt2ConstructorId() const
{
int buttonId = GroupPt2->ButtonGroup->checkedId();
- MESSAGE("buttonId = "<<buttonId)
+// MESSAGE("buttonId = "<<buttonId)
return buttonId;
}