-// Copyright (C) 2014-2020 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <Events_InfoMessage.h>
+#include <Locale_Convert.h>
+
#include <ModelAPI_Data.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_AttributeDouble.h>
if (aRefAttr->isObject()) {
if (aRefAttr->object() == aRAttr->object()) {
ObjectPtr anObject = aRefAttr->object();
- std::string aName = anObject.get() ? anObject->data()->name() : "";
+ std::wstring aName = anObject.get() ? anObject->data()->name() : L"";
theError = "The object %1 has been already fixed.";
theError.arg(aName);
return false;
}
else if (aRefAttr->attr() == aRAttr->attr()) {
AttributePtr anAttribute = aRefAttr->attr();
- std::string aName = anAttribute.get() ? anAttribute->id() : "";
+ std::wstring aName =
+ anAttribute.get() ? Locale::Convert::toWString(anAttribute->id()) : L"";
theError = "The attribute %1 has been already fixed.";
theError.arg(aName);
return false;
return false;
}
- std::string aName = aSelObject.get() ? aSelObject->data()->name() : "";
+ std::wstring aName = aSelObject.get() ? aSelObject->data()->name() : L"";
std::list<ObjectPtr>::iterator aMirIter = aMirroredObjects.begin();
for (; aMirIter != aMirroredObjects.end(); aMirIter++)
if (aSelObject == *aMirIter) {
bool isFound = aSelObject == *anObjIter;
if (!isFound) {
// check in the results of the feature
- FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*anObjIter);
- if (aFeature) {
- const std::list<ResultPtr>& aResults = aFeature->results();
+ FeaturePtr aCurFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*anObjIter);
+ if (aCurFeature) {
+ const std::list<ResultPtr>& aResults = aCurFeature->results();
for (std::list<ResultPtr>::const_iterator aResIt = aResults.begin();
aResIt != aResults.end() && !isFound; ++aResIt) {
isFound = aSelObject == *aResIt;
}
}
if (isFound) {
- std::string aName = aSelObject.get() ? aSelObject->data()->name() : "";
+ std::string aName =
+ aSelObject.get() ? Locale::Convert::toString(aSelObject->data()->name()) : "";
theError = "The object %1 is a result of copy";
theError.arg(aName);
return false;
bool SketchPlugin_FilletVertexValidator::isValid(const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
+{
+ FeaturePtr anEdge1, anEdge2;
+ return isValidVertex(theAttribute, theError, anEdge1, anEdge2);
+}
+
+bool SketchPlugin_FilletVertexValidator::isValidVertex(const AttributePtr& theAttribute,
+ Events_InfoMessage& theError,
+ FeaturePtr& theEdge1,
+ FeaturePtr& theEdge2)
{
AttributeRefAttrPtr aPointRefAttr =
std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
// Get coincides from constraint.
std::set<FeaturePtr> aCoinsides;
SketchPlugin_Tools::findCoincidences(aConstraintCoincidence,
- SketchPlugin_ConstraintCoincidence::ENTITY_A(),
- aCoinsides,
- true);
+ SketchPlugin_ConstraintCoincidence::ENTITY_A(),
+ aCoinsides,
+ true);
SketchPlugin_Tools::findCoincidences(aConstraintCoincidence,
- SketchPlugin_ConstraintCoincidence::ENTITY_B(),
- aCoinsides,
- true);
+ SketchPlugin_ConstraintCoincidence::ENTITY_B(),
+ aCoinsides,
+ true);
// Remove points and external lines from set of coincides.
std::set<FeaturePtr> aNewSetOfCoincides;
return false;
}
+ // output edges
+ std::set<FeaturePtr>::iterator aFIt = aCoinsides.begin();
+ theEdge1 = *aFIt;
+ theEdge2 = *(++aFIt);
+
// Check that selected edges don't have tangent constraint.
std::set<FeaturePtr>::iterator anIt = aCoinsides.begin();
FeaturePtr aFirstFeature = *anIt++;
if (aBSplinePlane) {
std::shared_ptr<GeomAPI_Dir> aBSplineNormal = aBSplinePlane->direction();
double aDot = fabs(aNormal->dot(aBSplineNormal));
- aValid = fabs(aDot - 1.0) <= tolerance * tolerance;
+ aValid = aDot > tolerance * tolerance;
if (!aValid) {
// B-spline's plane is orthogonal to the sketch plane,
// thus, need to check whether B-spline is planar.