#include <ModuleBase_ISelection.h>
#include <ModuleBase_ViewerPrs.h>
#include <ModuleBase_WidgetValidator.h>
+#include <ModuleBase_LabelValue.h>
#include <Config_Keywords.h>
#include <Config_WidgetAPI.h>
static QStringList MyFeaturesForCoincedence;
-PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent,
+PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent,
ModuleBase_IWorkshop* theWorkshop,
const Config_WidgetAPI* theData)
: ModuleBase_ModelWidget(theParent, theData), myWorkshop(theWorkshop),
aGroupLay->setColumnStretch(1, 1);
{
QLabel* aLabel = new QLabel(myGroupBox);
- aLabel->setText(tr("X "));
- aGroupLay->addWidget(aLabel, 0, 0);
-
- myXSpin = new ModuleBase_ParamSpinBox(myGroupBox);
- myXSpin->setAcceptVariables(aAcceptVariables);
- myXSpin->setMinimum(-DBL_MAX);
- myXSpin->setMaximum(DBL_MAX);
- myXSpin->setToolTip(tr("X"));
+
+ myXSpin = new ModuleBase_LabelValue(myGroupBox, tr("X"));
+ //ModuleBase_ParamSpinBox(myGroupBox);
+ //myXSpin->setAcceptVariables(aAcceptVariables);
+ //myXSpin->setMinimum(-DBL_MAX);
+ //myXSpin->setMaximum(DBL_MAX);
+ //myXSpin->setToolTip(tr("X"));
aGroupLay->addWidget(myXSpin, 0, 1);
- connect(myXSpin, SIGNAL(valueChanged(const QString&)), this, SIGNAL(valuesModified()));
- myXSpin->setValueEnabled(isValueEnabled());
+ //connect(myXSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified()));
+ //myXSpin->setValueEnabled(isValueEnabled());
}
{
- QLabel* aLabel = new QLabel(myGroupBox);
- aLabel->setText(tr("Y "));
- aGroupLay->addWidget(aLabel, 1, 0);
-
- myYSpin = new ModuleBase_ParamSpinBox(myGroupBox);
- myYSpin->setAcceptVariables(aAcceptVariables);
- myYSpin->setMinimum(-DBL_MAX);
- myYSpin->setMaximum(DBL_MAX);
- myYSpin->setToolTip(tr("Y"));
+ //QLabel* aLabel = new QLabel(myGroupBox);
+ //aLabel->setText(tr("Y "));
+ //aGroupLay->addWidget(aLabel, 1, 0);
+
+ myYSpin = new ModuleBase_LabelValue(myGroupBox, tr("Y"));
+ //ModuleBase_ParamSpinBox(myGroupBox);
+ //myYSpin = new ModuleBase_ParamSpinBox(myGroupBox);
+ //myYSpin->setAcceptVariables(aAcceptVariables);
+ //myYSpin->setMinimum(-DBL_MAX);
+ //myYSpin->setMaximum(DBL_MAX);
+ //myYSpin->setToolTip(tr("Y"));
aGroupLay->addWidget(myYSpin, 1, 1);
- connect(myYSpin, SIGNAL(valueChanged(const QString&)), this, SIGNAL(valuesModified()));
- myYSpin->setValueEnabled(isValueEnabled());
+ //connect(myYSpin, SIGNAL(textChanged(const QString&)), this, SIGNAL(valuesModified()));
+ //myYSpin->setValueEnabled(isValueEnabled());
}
QVBoxLayout* aLayout = new QVBoxLayout(this);
ModuleBase_Tools::zeroMargins(aLayout);
bool aValid = true;
PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
- if (aModule->sketchReentranceMgr()->isInternalEditActive())
+ if (aModule->sketchReentranceMgr()->isInternalEditActive())
return true; /// when internal edit is started a new feature is created. I has not results, AIS
/// the selection is not possible if the current feature has no presentation for the current
/// attribute not in AIS not in results. If so, no object in current feature where make
/// coincidence, so selection is not necessary
- std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
- std::shared_ptr<GeomDataAPI_Point2D> aPointAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
- aData->attribute(attributeID()));
- std::shared_ptr<GeomAPI_Pnt2d> aPoint = aPointAttr->pnt();
-
bool aFoundPoint = false;
GeomShapePtr anAISShape;
GeomPresentablePtr aPrs = std::dynamic_pointer_cast<GeomAPI_IPresentable>(myFeature);
return true;
/// analysis of AIS
+ std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
+ std::shared_ptr<GeomDataAPI_Point2D> aPointAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
+ aData->attribute(attributeID()));
+ std::shared_ptr<GeomAPI_Pnt2d> aPoint = aPointAttr->pnt();
if (anAISShape.get())
aFoundPoint = shapeContainsPoint(anAISShape, aPoint, mySketch);
bool PartSet_WidgetPoint2D::resetCustom()
{
bool aDone = false;
- if (!isUseReset() || isComputedDefault() || myXSpin->hasVariable() || myYSpin->hasVariable()) {
+ if (!isUseReset() || isComputedDefault()
+ /*|| myXSpin->hasVariable() || myYSpin->hasVariable()*/) {
aDone = false;
}
else {
double aDefValue = QString::fromStdString(getDefaultValue()).toDouble(&isOk);
// it is important to block the spin box control in order to do not through out the
// locking of the validating state.
- ModuleBase_Tools::setSpinValue(myXSpin, isOk ? aDefValue : 0.0);
- ModuleBase_Tools::setSpinValue(myYSpin, isOk ? aDefValue : 0.0);
+ myXSpin->setValue(isOk ? aDefValue : 0.0);
+ myYSpin->setValue(isOk ? aDefValue : 0.0);
+
+ //ModuleBase_Tools::setSpinValue(myXSpin, isOk ? aDefValue : 0.0);
+ //ModuleBase_Tools::setSpinValue(myYSpin, isOk ? aDefValue : 0.0);
storeValueCustom();
aDone = true;
}
void PartSet_WidgetPoint2D::selectContent()
{
- myXSpin->selectAll();
+ // myXSpin->selectAll();
}
bool PartSet_WidgetPoint2D::setPoint(double theX, double theY)
if (fabs(theY) >= MaxCoordinate)
return false;
- ModuleBase_Tools::setSpinValue(myXSpin, theX);
- ModuleBase_Tools::setSpinValue(myYSpin, theY);
+ myXSpin->setValue(theX);
+ myYSpin->setValue(theY);
+
+ //ModuleBase_Tools::setSpinValue(myXSpin, theX);
+ //ModuleBase_Tools::setSpinValue(myYSpin, theY);
storeValue();
return true;
// if text is not empty then setValue will be ignored
// so we should set the text at first
- aPoint->setText(myXSpin->hasVariable() ? myXSpin->text().toStdString() : "",
- myYSpin->hasVariable() ? myYSpin->text().toStdString() : "");
- aPoint->setValue(!myXSpin->hasVariable() ? myXSpin->value() : aPoint->x(),
- !myYSpin->hasVariable() ? myYSpin->value() : aPoint->y());
+ //aPoint->setText(myXSpin->hasVariable() ? myXSpin->text().toStdString() : "",
+ // myYSpin->hasVariable() ? myYSpin->text().toStdString() : "");
+ //aPoint->setValue(!myXSpin->hasVariable() ? myXSpin->value() : aPoint->x(),
+ // !myYSpin->hasVariable() ? myYSpin->value() : aPoint->y());
+ aPoint->setValue(myXSpin->value(), myYSpin->value());
// after movement the solver will call the update event: optimization
moveObject(myFeature);
std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
std::shared_ptr<GeomDataAPI_Point2D> aPoint = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
aData->attribute(attributeID()));
- QString aTextX = QString::fromStdString(aPoint->isInitialized() ? aPoint->textX() : "0");
- QString aTextY = QString::fromStdString(aPoint->isInitialized() ? aPoint->textY() : "0");
-
- bool isDouble = false;
- double aVal = 0;
- if (aTextX.isEmpty()) {
- ModuleBase_Tools::setSpinValue(myXSpin, aPoint->x());
- } else {
- aVal = aTextX.toDouble(&isDouble);
- if (isDouble)
- ModuleBase_Tools::setSpinValue(myXSpin, aVal);
- else
- ModuleBase_Tools::setSpinText(myXSpin, aTextX);
- }
- if (aTextY.isEmpty()) {
- ModuleBase_Tools::setSpinValue(myYSpin, aPoint->y());
- } else {
- aVal = aTextY.toDouble(&isDouble);
- if (isDouble)
- ModuleBase_Tools::setSpinValue(myYSpin, aVal);
- else
- ModuleBase_Tools::setSpinText(myYSpin, aTextY);
- }
- //if (aTextX.empty() || aTextY.empty()) {
- // ModuleBase_Tools::setSpinValue(myXSpin, aPoint->x());
- // ModuleBase_Tools::setSpinValue(myYSpin, aPoint->y());
- //} else {
- // ModuleBase_Tools::setSpinText(myXSpin, QString::fromStdString(aTextX));
- // ModuleBase_Tools::setSpinText(myYSpin, QString::fromStdString(aTextY));
- //}
+ double aValueX = aPoint->isInitialized() ? aPoint->x() : 0.;
+ double aValueY = aPoint->isInitialized() ? aPoint->y() : 0.;
+ myXSpin->setValue(aValueX);
+ myYSpin->setValue(aValueY);
+
return true;
}
void PartSet_WidgetPoint2D::storeCurentValue()
{
// do not use cash if a variable is used
- if (myXSpin->hasVariable() || myYSpin->hasVariable())
- return;
+ //if (myXSpin->hasVariable() || myYSpin->hasVariable())
+ // return;
myValueIsCashed = true;
myIsFeatureVisibleInCash = XGUI_Displayer::isVisible(
myValueIsCashed = false;
myIsFeatureVisibleInCash = true;
- ModuleBase_Tools::setSpinValue(myXSpin, myXValueInCash);
- ModuleBase_Tools::setSpinValue(myYSpin, myYValueInCash);
+ myXSpin->setValue(myXValueInCash);
+ myYSpin->setValue(myYValueInCash);
+ //ModuleBase_Tools::setSpinValue(myXSpin, myXValueInCash);
+ //ModuleBase_Tools::setSpinValue(myYSpin, myYValueInCash);
// store value to the model
storeValueCustom();
}
}
+void PartSet_WidgetPoint2D::setHighlighted(bool isHighlighted)
+{
+}
+
void PartSet_WidgetPoint2D::deactivate()
{
// the value of the control should be stored to model if it was not
myWorkshop->deactivateSubShapesSelection();
}
-bool PartSet_WidgetPoint2D::getPoint2d(const Handle(V3d_View)& theView,
- const TopoDS_Shape& theShape,
+bool PartSet_WidgetPoint2D::getPoint2d(const Handle(V3d_View)& theView,
+ const TopoDS_Shape& theShape,
double& theX, double& theY) const
{
if (!theShape.IsNull()) {
Handle(V3d_View) aView = theWindow->v3dView();
QList<ModuleBase_ViewerPrsPtr> aList = aSelection->getSelected(ModuleBase_ISelection::Viewer);
- ModuleBase_ViewerPrsPtr aFirstValue = aList.size() > 0 ? aList.first() : ModuleBase_ViewerPrsPtr();
+ ModuleBase_ViewerPrsPtr aFirstValue =
+ aList.size() > 0 ? aList.first() : ModuleBase_ViewerPrsPtr();
+ if (!aFirstValue.get() && myPreSelected.get()) {
+ aFirstValue = myPreSelected;
+ }
// if we have selection and use it
- if (aFirstValue.get() && isValidSelectionCustom(aFirstValue)) {
+ if (aFirstValue.get() && isValidSelectionCustom(aFirstValue) &&
+ aFirstValue->shape().get()) { /// Trihedron Axis may be selected, but shape is empty
GeomShapePtr aGeomShape = aFirstValue->shape();
TopoDS_Shape aShape = aGeomShape->impl<TopoDS_Shape>();
ObjectPtr aObject = aFirstValue->object();
bool anOrphanPoint = aShape.ShapeType() == TopAbs_VERTEX ||
isOrphanPoint(aSelectedFeature, mySketch, aX, aY);
if (anExternal) {
- anOrphanPoint = true; // we should not stop reentrant operation on external objects because
+ // we should not stop reentrant operation on external objects because
+ anOrphanPoint = true;
// they are not participate in the contour creation excepting external vertices
if (aShape.ShapeType() == TopAbs_VERTEX) {
FeaturePtr aFixedFeature = ModelAPI_Feature::feature(aFixedObject);
}
}
else {
- // point is taken from mouse event and set in attribute. It should be done before setting
- // coinident constraint to the external line. If a point is created, it should be in the mouse
- // clicked point
- gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWindow->v3dView());
+ // point is taken from mouse event and set in attribute.
+ // It should be done before setting
+ // coinident constraint to the external line. If a point is created, it should be
+ // in the mouse clicked point
+ gp_Pnt aPoint =
+ PartSet_Tools::convertClickToPoint(theEvent->pos(), theWindow->v3dView());
double aX, anY;
PartSet_Tools::convertTo2D(aPoint, mySketch, aView, aX, anY);
setPoint(aX, anY);
}
if (aFixedObject.get())
setConstraintWith(aFixedObject);
- // fignal updated should be flushed in order to visualize possible created external objects
- // e.g. selection of trihedron axis when input end arc point
+ // fignal updated should be flushed in order to visualize possible created
+ // external objects e.g. selection of trihedron axis when input end arc point
updateObject(feature());
if (!anOrphanPoint)
}
else if (aShape.ShapeType() == TopAbs_EDGE) {
// point is taken from mouse event and set in attribute. It should be done before setting
- // coinident constraint to the external line. If a point is created, it should be in the mouse
- // clicked point
+ // coinident constraint to the external line. If a point is created, it should be in
+ // the mouse clicked point
gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWindow->v3dView());
PartSet_Tools::convertTo2D(aPoint, mySketch, aView, aX, aY);
setPoint(aX, aY);
setValueState(Stored); // in case of edge selection, Apply state should also be updated
isAuxiliaryFeature = PartSet_Tools::isAuxiliarySketchEntity(aObject);
}
- // it is important to perform updateObject() in order to the current value is
+ // it is important to perform updateObject() in order to the current value is
// processed by Sketch Solver. Test case: line is created from a previous point
// to some distance, but in the area of the highlighting of the point. Constraint
// coincidence is created, after the solver is performed, the distance between the
//aIgnore.append(feature());
//double aTolerance = aView->Convert(7);
- //std::shared_ptr<GeomDataAPI_Point2D> aAttrPnt =
+ //std::shared_ptr<GeomDataAPI_Point2D> aAttrPnt =
// PartSet_Tools::findAttributePoint(mySketch, aX, anY, aTolerance, aIgnore);
//if (aAttrPnt.get() != NULL) {
// aFeaturePoint->setValue(aAttrPnt->pnt());
}
}
+void PartSet_WidgetPoint2D::setPreSelection(
+ const std::shared_ptr<ModuleBase_ViewerPrs>& thePreSelected)
+{
+ myPreSelected = thePreSelected;
+}
void PartSet_WidgetPoint2D::mouseMoved(ModuleBase_IViewWindow* theWindow, QMouseEvent* theEvent)
{
PartSet_Tools::convertTo2D(aPoint, mySketch, theWindow->v3dView(), aX, anY);
if (myState != ModifiedInViewer)
storeCurentValue();
- // we need to block the value state change
+ // we need to block the value state change
bool isBlocked = blockValueState(true);
setPoint(aX, anY);
blockValueState(isBlocked);
AttributePtr aWidgetAttribute = myFeature->attribute(attributeID());
- std::shared_ptr<GeomAPI_Pnt2d> aPnt2d =
+ std::shared_ptr<GeomAPI_Pnt2d> aPnt2d =
std::shared_ptr<GeomAPI_Pnt2d>(new GeomAPI_Pnt2d(theX, theY));
std::list<AttributePtr> anAttributes =
myFeature->data()->attributes(GeomDataAPI_Point2D::typeId());
bool PartSet_WidgetPoint2D::processEnter()
{
- bool isModified = getValueState() == ModifiedInPP;
+ return false;
+ /*bool isModified = getValueState() == ModifiedInPP;
if (isModified) {
bool isXModified = myXSpin->hasFocus();
emit valuesChanged();
else
myYSpin->selectAll();
}
- return isModified;
+ return isModified;*/
}
bool PartSet_WidgetPoint2D::useSelectedShapes() const