diff --git a/src/Mod/Path/App/Area.cpp b/src/Mod/Path/App/Area.cpp index b9972f1ff9..d5d1e0a2dc 100644 --- a/src/Mod/Path/App/Area.cpp +++ b/src/Mod/Path/App/Area.cpp @@ -1773,12 +1773,14 @@ TopoDS_Shape Area::getShape(int index) { return myShape; } -TopoDS_Shape Area::makeOffset(int index,PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET),int reorient) { +TopoDS_Shape Area::makeOffset(int index,PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET), + int reorient, bool from_center) +{ build(); - AREA_SECTION(makeOffset,index,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET),reorient); + AREA_SECTION(makeOffset,index,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET),reorient,from_center); std::list > areas; - makeOffset(areas,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET)); + makeOffset(areas,PARAM_FIELDS(PARAM_FARG,AREA_PARAMS_OFFSET),from_center); if(areas.empty()) { if(myParams.Thicken && myParams.ToolRadius>Precision::Confusion()) { CArea area(*myArea); @@ -1819,7 +1821,7 @@ TopoDS_Shape Area::makeOffset(int index,PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET } void Area::makeOffset(list > &areas, - PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET)) + PARAM_ARGS(PARAM_FARG,AREA_PARAMS_OFFSET), bool from_center) { if(fabs(offset) > &areas, #endif for(int i=0;count<0||i()); - CArea &area = *areas.back(); + if(from_center) + areas.push_front(make_shared()); + else + areas.push_back(make_shared()); + CArea &area = from_center?(*areas.front()):(*areas.back()); CArea areaOpen; #ifdef AREA_OFFSET_ALGO if(myParams.Algo == Area::Algolibarea) { @@ -1948,7 +1953,7 @@ TopoDS_Shape Area::makePocket(int index, PARAM_ARGS(PARAM_FARG,AREA_PARAMS_POCKE ExtraPass = -1; Stepover = -stepover; // make offset and make sure the loop is CW (i.e. inner wires) - return makeOffset(index,PARAM_FIELDS(PARAM_FNAME,AREA_PARAMS_OFFSET),-1); + return makeOffset(index,PARAM_FIELDS(PARAM_FNAME,AREA_PARAMS_OFFSET),-1,from_center); }case Area::PocketModeZigZagOffset: pm = ZigZagThenSingleOffsetPocketMode; break; @@ -2012,7 +2017,7 @@ TopoDS_Shape Area::makePocket(int index, PARAM_ARGS(PARAM_FARG,AREA_PARAMS_POCKE CAreaPocketParams params( tool_radius,extra_offset,stepover,from_center,pm,angle); CArea in(*myArea); - // MakePcoketToolPath internally uses libarea Offset which somehow demands + // MakePocketToolPath internally uses libarea Offset which somehow demands // reorder before input, otherwise nothing is shown. in.Reorder(); in.MakePocketToolpath(out.m_curves,params); diff --git a/src/Mod/Path/App/Area.h b/src/Mod/Path/App/Area.h index 9d4d10eb01..1cf18f9a58 100644 --- a/src/Mod/Path/App/Area.h +++ b/src/Mod/Path/App/Area.h @@ -153,7 +153,7 @@ protected: * See #AREA_PARAMS_OFFSET for description of the arguments. */ void makeOffset(std::list > &areas, - PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET)); + PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET), bool from_center=false); /** Make a pocket of the combined shape * @@ -218,7 +218,8 @@ public: * If more than one offset is requested, a compound shape is return * containing all offset shapes as wires regardless of \c Fill setting. */ - TopoDS_Shape makeOffset(int index=-1, PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET), int reoirent=0); + TopoDS_Shape makeOffset(int index=-1, PARAM_ARGS_DEF(PARAM_FARG,AREA_PARAMS_OFFSET), + int reoirent=0, bool from_center=false); /** Make a pocket of the combined shape * diff --git a/src/Mod/Path/App/AreaParams.h b/src/Mod/Path/App/AreaParams.h index 3604016089..f212ef58c7 100644 --- a/src/Mod/Path/App/AreaParams.h +++ b/src/Mod/Path/App/AreaParams.h @@ -105,7 +105,7 @@ ((double,extra_offset,PocketExtraOffset,0.0,"Extra offset for pocketing",App::PropertyDistance))\ ((double,stepover,PocketStepover,0.0,\ "Cutter diameter to step over on each pass. If =0, use ToolRadius.",App::PropertyLength))\ - ((bool,from_center,FromCenter,true,"Start pocketing from center"))\ + ((bool,from_center,FromCenter,false,"Start pocketing from center"))\ ((double,angle,Angle,45,"Pattern angle in degree",App::PropertyAngle))\ ((double,angle_shift,AngleShift,0.0,"Pattern angle shift for each section", App::PropertyAngle))\ ((double,shift,Shift,0.0,"Pattern shift distance for each section.\n"\