initialize();
}
-SketchAPI_Rectangle::SketchAPI_Rectangle(
- const std::shared_ptr<ModelAPI_Feature> & theFeature,
- double theX1, double theY1, double theX2, double theY2)
+SketchAPI_Rectangle::SketchAPI_Rectangle(const std::shared_ptr<ModelAPI_Feature> & theFeature,
+ double theX1, double theY1, double theX2, double theY2, bool isFirstPointCenter)
: SketchAPI_SketchEntity(theFeature)
{
if (initialize()) {
- setByCoordinates(theX1, theY1, theX2, theY2);
+ setByCoordinates(theX1, theY1, theX2, theY2, isFirstPointCenter);
}
}
-SketchAPI_Rectangle::SketchAPI_Rectangle(
- const std::shared_ptr<ModelAPI_Feature> & theFeature,
- const std::shared_ptr<GeomAPI_Pnt2d> & theStartPoint,
- const std::shared_ptr<GeomAPI_Pnt2d> & theEndPoint)
+SketchAPI_Rectangle::SketchAPI_Rectangle(const std::shared_ptr<ModelAPI_Feature> & theFeature,
+ const std::shared_ptr<GeomAPI_Pnt2d> & theFirstPoint,
+ const std::shared_ptr<GeomAPI_Pnt2d> & theEndPoint, bool isFirstPointCenter)
: SketchAPI_SketchEntity(theFeature)
{
if (initialize()) {
- setByPoints(theStartPoint, theEndPoint);
+ setByPoints(theFirstPoint, theEndPoint, isFirstPointCenter);
}
}
//--------------------------------------------------------------------------------------
void SketchAPI_Rectangle::setByCoordinates(
- double theX1, double theY1, double theX2, double theY2)
-{
- fillAttribute(startPoint(), theX1, theY1);
- fillAttribute(endPoint(), theX2, theY2);
+ double theX1, double theY1, double theX2, double theY2, bool isFirstPointCenter)
+{
+ if(isFirstPointCenter){
+ fillAttribute(centerPoint(), theX1, theY1);
+ double xStart = 2.0*theX1 - theX2;
+ double yStart = 2.0*theY1 - theY2;
+ fillAttribute(startPoint(), xStart, yStart);
+ }
+ else
+ fillAttribute(startPoint(), theX1, theY1);
- execute();
+ fillAttribute(endPoint(), theX2, theY2);
+ execute(true);
}
-void SketchAPI_Rectangle::setByPoints(
- const std::shared_ptr<GeomAPI_Pnt2d> & theStartPoint,
- const std::shared_ptr<GeomAPI_Pnt2d> & theEndPoint)
-{
- fillAttribute(theStartPoint, startPoint());
- fillAttribute(theEndPoint, endPoint());
+void SketchAPI_Rectangle::setByPoints(const std::shared_ptr<GeomAPI_Pnt2d> & theFirstPoint,
+ const std::shared_ptr<GeomAPI_Pnt2d> & theSecondPoint, bool isFirstPointCenter)
+{
+ if(isFirstPointCenter){
+ fillAttribute(theFirstPoint, centerPoint());
+ double xStart = 2.0*theFirstPoint->x() - theSecondPoint->x();
+ double yStart = 2.0*theFirstPoint->y() - theSecondPoint->y();
- execute();
+ std::shared_ptr<GeomAPI_Pnt2d> theStartPoint = std::make_shared<GeomAPI_Pnt2d>(xStart, yStart);
+ fillAttribute(theStartPoint, startPoint());
+ }
+ else
+ fillAttribute(theFirstPoint, startPoint());
+
+ fillAttribute(theSecondPoint, endPoint());
+ execute(true);
}
//--------------------------------------------------------------------------------------
void SketchAPI_Rectangle::dump(ModelHighAPI_Dumper& theDumper) const
{
- FeaturePtr aBase = feature();
+ FeaturePtr aBase = feature();
/// do not dump sub-features eg: lines and lines constraints
AttributeRefListPtr noToDumpList = aBase->reflist(SketchPlugin_Rectangle::NOT_TO_DUMP_LIST_ID());
const std::string& aSketchName = theDumper.parentName(aBase);
- AttributeSelectionPtr anExternal = aBase->selection(SketchPlugin_SketchEntity::EXTERNAL_ID());
- if (anExternal->context()) {
- // rectangle is external
- theDumper << aBase << " = " << aSketchName << ".addRectangle(" << anExternal << ")" << std::endl;
- } else {
+ FeaturePtr aCenterPointFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aBase->refattr(SketchPlugin_Rectangle::CENTER_REF_ID())->object());
+ if(aCenterPointFeature){
+ // rectangle has center
+ theDumper << aBase << " = " << aSketchName << ".addRectangle("
+ << startPoint() << ", " << centerPoint() << ", 1)" << std::endl;
+ }
+ else
// rectangle given by start and end points
theDumper << aBase << " = " << aSketchName << ".addRectangle("
<< startPoint() << ", " << endPoint() << ")" << std::endl;
- }
+
// dump "auxiliary" flag if necessary
SketchAPI_SketchEntity::dump(theDumper);