X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchAPI%2FSketchAPI_Sketch.cpp;h=823897f5a6e2213e98c2a0e07d3fa8fd79e7f0ec;hb=fc72d43b677baa05ae7fd317346fd8b723b799ed;hp=cd9851de2390c562ee94e75e33d831751bed8bbd;hpb=6726ae5c149ed83924cb6bf6a61348784d650ce8;p=modules%2Fshaper.git diff --git a/src/SketchAPI/SketchAPI_Sketch.cpp b/src/SketchAPI/SketchAPI_Sketch.cpp index cd9851de2..823897f5a 100644 --- a/src/SketchAPI/SketchAPI_Sketch.cpp +++ b/src/SketchAPI/SketchAPI_Sketch.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2020 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -425,36 +425,47 @@ std::shared_ptr SketchAPI_Sketch::addRectangle( return RectanglePtr(new SketchAPI_Rectangle(aFeature, theStartPoint, theEndPoint)); } -std::shared_ptr SketchAPI_Sketch::addRectangle( - double theX1, double theY1, double theX2, double theY2, bool isFirstPointCenter) +static std::shared_ptr pointCoordinates( + const std::pair, ModelHighAPI_RefAttr> & thePoint) { - std::shared_ptr aFeature = - compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); - return RectanglePtr(new SketchAPI_Rectangle(aFeature, theX1, theY1, theX2, theY2, isFirstPointCenter)); -} -std::shared_ptr SketchAPI_Sketch::addRectangle( - const std::shared_ptr & theFirstPoint, - const std::shared_ptr & theEndPoint, bool isFirstPointCenter) -{ - std::shared_ptr aFeature = - compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); - return RectanglePtr(new SketchAPI_Rectangle(aFeature, theFirstPoint, theEndPoint, isFirstPointCenter)); -} + if (thePoint.first) + return thePoint.first; -std::shared_ptr SketchAPI_Sketch::addRectangleCentered( - double theX1, double theY1, double theX2, double theY2) -{ - std::shared_ptr aFeature = - compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); - return RectanglePtr(new SketchAPI_Rectangle(aFeature, theX1, theY1, theX2, theY2, true)); + AttributePtr anAttr = thePoint.second.attr(); + if (thePoint.second.object()) { + FeaturePtr aFeature = ModelAPI_Feature::feature(thePoint.second.object()); + if (aFeature) + anAttr = aFeature->attribute(SketchPlugin_Point::COORD_ID()); + } + + std::shared_ptr aPntAttr = + std::dynamic_pointer_cast(anAttr); + if (aPntAttr) + return aPntAttr->pnt(); + return std::shared_ptr(); } + std::shared_ptr SketchAPI_Sketch::addRectangleCentered( - const std::shared_ptr & theFirstPoint, - const std::shared_ptr & theEndPoint) + const std::pair, ModelHighAPI_RefAttr> & theCenter, + const std::pair, ModelHighAPI_RefAttr> & theCorner) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchAPI_Rectangle::ID()); - return RectanglePtr(new SketchAPI_Rectangle(aFeature, theFirstPoint, theEndPoint, true)); + RectanglePtr aRect(new SketchAPI_Rectangle(aFeature)); + fillAttribute("RectangleTypeCentered", aRect->type()); + if (!theCenter.second.isEmpty()) + fillAttribute(theCenter.second, aRect->centerPointRef()); + fillAttribute(pointCoordinates(theCenter), aRect->centerPoint()); + fillAttribute(pointCoordinates(theCorner), aRect->cornerPoint()); + aRect->execute(); + + if (!theCorner.second.isEmpty() && aRect->linesList()->size() > 1) { + // get start point of the last line in rectangle and apply coindidence constraint + FeaturePtr aLine = ModelAPI_Feature::feature(aRect->linesList()->object(3)); + AttributePtr aEndPnt = aLine->attribute(SketchPlugin_Line::START_ID()); + setCoincident(ModelHighAPI_RefAttr(aEndPnt), theCorner.second); + } + return aRect; } //-------------------------------------------------------------------------------------- @@ -919,11 +930,12 @@ std::shared_ptr SketchAPI_Sketch::addMirror( std::shared_ptr SketchAPI_Sketch::addOffset( const std::list > & theObjects, const ModelHighAPI_Double & theValue, - const bool theReversed) + const bool theReversed, + const std::string & theJointType) { std::shared_ptr aFeature = compositeFeature()->addFeature(SketchPlugin_Offset::ID()); - return OffsetPtr(new SketchAPI_Offset(aFeature, theObjects, theValue, theReversed)); + return OffsetPtr(new SketchAPI_Offset(aFeature, theObjects, theValue, theReversed, theJointType)); } //-------------------------------------------------------------------------------------- @@ -1620,34 +1632,6 @@ void SketchAPI_Sketch::dump(ModelHighAPI_Dumper& theDumper) const std::list > aFaces; edgesOfSketchFaces(aCompFeat, aFaces); - /// remove faces that must not be dumped - std::vector< std::list>::iterator> aFacesToRemove; - for(auto itFaces = aFaces.begin(); itFaces != aFaces.end(); ++itFaces) - { - auto & facesGroup = *itFaces; - std::vector::iterator> subFacestoRemove; - for(auto itGroup = facesGroup.begin(); itGroup != facesGroup.end(); ++itGroup) - { - FeaturePtr aFeature = ModelAPI_Feature::feature(*itGroup); - if(theDumper.isDumped(aFeature)){ - subFacestoRemove.push_back(itGroup); - } - } - for(auto itGroup :subFacestoRemove){ - facesGroup.erase(itGroup); - } - - if(!facesGroup.size()){ - aFacesToRemove.push_back(itFaces); - } - } - for(auto itFaces :aFacesToRemove){ - aFaces.erase(itFaces); - } - - if(!aFaces.size()) - return; - const std::string& aSketchName = theDumper.name(aBase); std::string aMethodName(".changeFacesOrder"); std::string aSpaceShift(aSketchName.size() + aMethodName.size(), ' ');