PartSet_SketcherMgr::~PartSet_SketcherMgr()
{
+ delete mySketchPlane;
}
void PartSet_SketcherMgr::onEnterViewPort()
QList<ModuleBase_ModelWidget*> aWidgets = aPanel->modelWidgets();
// Find corresponded widget to activate value editing
foreach (ModuleBase_ModelWidget* aWgt, aWidgets) {
- if (aWgt->attributeID() == SketchPlugin_Constraint::VALUE() ||
- aWgt->attributeID() == SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID()) {
+ std::string anId = aWgt->attributeID();
+ if (anId == SketchPlugin_Constraint::VALUE() ||
+ anId == SketchPlugin_ConstraintAngle::ANGLE_VALUE_ID() ||
+ anId == SketchPlugin_ConstraintDistanceAlongDir::DISTANCE_VALUE_ID()) {
PartSet_WidgetEditor* anEditor = dynamic_cast<PartSet_WidgetEditor*>(aWgt);
if (anEditor)
anEditor->showPopupEditor();
if (!aSPFeature->isExternal())
myModule->editFeature(aSPFeature);
else {
- FeaturePtr aProjectionFeature = PartSet_Tools::findRefsToMeFeature(aFeature,
+ // need to edit a feature (Projection/IntersectionPoint),
+ // which produces current External feature
+ FeaturePtr aProducerFeature = PartSet_Tools::findRefsToMeFeature(aFeature,
SketchPlugin_Projection::ID());
- if (aProjectionFeature.get())
- myModule->editFeature(aProjectionFeature);
+ if (!aProducerFeature.get())
+ aProducerFeature = PartSet_Tools::findRefsToMeFeature(aFeature,
+ SketchPlugin_IntersectionPoint::ID());
+ if (aProducerFeature.get())
+ myModule->editFeature(aProducerFeature);
}
}
}
// Remove invalid sketch entities
std::set<FeaturePtr> anInvalidFeatures;
ModelAPI_ValidatorsFactory* aFactory = ModelAPI_Session::get()->validators();
- for (int i = 0; i < myCurrentSketch->numberOfSubs(); i++) {
+ int aNumberOfSubs = myCurrentSketch->numberOfSubs();
+ for (int i = 0; i < aNumberOfSubs; i++) {
FeaturePtr aFeature = myCurrentSketch->subFeature(i);
if (aFeature.get()) {
if (!aFactory->validate(aFeature))
QStringList anInfo;
Events_ID EVENT_DISP = Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY);
const ModelAPI_EventCreator* aECreator = ModelAPI_EventCreator::get();
- for (int i = 0; i < myCurrentSketch->numberOfSubs(); i++) {
+ aNumberOfSubs = myCurrentSketch->numberOfSubs();
+ for (int i = 0; i < aNumberOfSubs; i++) {
FeaturePtr aFeature = myCurrentSketch->subFeature(i);
#ifdef DEBUG_SKETCHER_ENTITIES
anInfo.append(ModuleBase_Tools::objectInfo(aFeature));
}
else {
// Hide all sketcher sub-Objects
- for (int i = 0; i < myCurrentSketch->numberOfSubs(); i++) {
+ int aNumberOfSubs = myCurrentSketch->numberOfSubs();
+ for (int i = 0; i < aNumberOfSubs; i++) {
FeaturePtr aFeature = myCurrentSketch->subFeature(i);
std::list<ResultPtr> aResults = aFeature->results();
std::list<ResultPtr>::const_iterator aIt;
FeaturePtr anObjectFeature = ModelAPI_Feature::feature(theObject);
if (anObjectFeature.get()) {
int aSize = myCurrentSketch->numberOfSubs();
- for (int i = 0; i < myCurrentSketch->numberOfSubs() && !isFoundObject; i++) {
+ for (int i = 0; i < aSize && !isFoundObject; i++) {
FeaturePtr aCurrentFeature = myCurrentSketch->subFeature(i);
isFoundObject = myCurrentSketch->subFeature(i) == anObjectFeature;
}
if (aPrevState != theState) {
ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(aWorkshop);
- for (int i = 0; i < myCurrentSketch->numberOfSubs(); i++) {
+ int aNumberOfSubs = myCurrentSketch->numberOfSubs();
+ for (int i = 0; i < aNumberOfSubs; i++) {
FeaturePtr aSubFeature = myCurrentSketch->subFeature(i);
bool aProcessed = false;
bool aConstraintDisplayed = canDisplayConstraint(aSubFeature, theType, aProcessed);